From 8b7f7c78b2595b22aac6e3269bb1fd4b1a213420 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Sat, 12 May 2018 09:36:36 +0000 Subject: Remove public member function Fl_Window_Driver *Fl_Window::driver() so class Fl_Window_Driver is not in FLTK public API. This function is replaced by static Fl_Window_Driver* Fl_Window_Driver::(const Fl_Window *win). The purpose is to have class Fl_Window_Driver outside from FLTK ABI. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12915 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- FL/Fl_Window.H | 4 +--- FL/Fl_Window_Driver.H | 1 + documentation/src/drawing.dox | 2 +- src/Fl.cxx | 6 ++--- src/Fl_Double_Window.cxx | 10 ++++----- src/Fl_Gl_Window.cxx | 4 ++-- src/Fl_Menu_Window.cxx | 6 ++--- src/Fl_Overlay_Window.cxx | 6 ++--- src/Fl_Screen_Driver.cxx | 12 +++++----- src/Fl_Widget_Surface.cxx | 4 ++-- src/Fl_Window.cxx | 5 +++++ src/Fl_Window_Driver.cxx | 2 +- src/Fl_cocoa.mm | 6 ++--- src/Fl_win32.cxx | 26 +++++++++++----------- src/Fl_x.cxx | 18 +++++++-------- src/drivers/Android/Fl_Android_Window_Driver.H | 4 ++-- src/drivers/Android/Fl_Android_Window_Driver.cxx | 2 +- src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm | 4 ++-- src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H | 2 +- src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx | 2 +- .../Quartz/Fl_Quartz_Image_Surface_Driver.cxx | 2 +- src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H | 2 +- src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx | 4 ++-- src/drivers/X11/Fl_X11_Screen_Driver.cxx | 2 +- src/drivers/X11/Fl_X11_Window_Driver.H | 2 +- src/drivers/X11/Fl_X11_Window_Driver.cxx | 4 ++-- src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 2 +- src/fl_dnd_win32.cxx | 6 ++--- src/fl_scroll_area.cxx | 2 +- 29 files changed, 78 insertions(+), 74 deletions(-) diff --git a/FL/Fl_Window.H b/FL/Fl_Window.H index f05281671..4153199bf 100644 --- a/FL/Fl_Window.H +++ b/FL/Fl_Window.H @@ -527,8 +527,6 @@ public: */ int decorated_h() const; - Fl_Window_Driver *driver() const { return pWindowDriver; } - // Note: Doxygen docs in Fl_Widget.H to avoid redundancy. virtual Fl_Window* as_window() { return this; } @@ -545,7 +543,7 @@ public: void shape(const Fl_Image* img); void shape(const Fl_Image& b) ; int is_shaped(); - + inline int screen_num(); }; #endif diff --git a/FL/Fl_Window_Driver.H b/FL/Fl_Window_Driver.H index 45546158d..41c2e75a9 100644 --- a/FL/Fl_Window_Driver.H +++ b/FL/Fl_Window_Driver.H @@ -181,6 +181,7 @@ public: #endif virtual int scroll(int src_x, int src_y, int src_w, int src_h, int dest_x, int dest_y, void (*draw_area)(void*, int,int,int,int), void* data) { return 0; } + static Fl_Window_Driver* driver(const Fl_Window *win) {return win->pWindowDriver;} }; #endif // FL_WINDOW_DRIVER_H diff --git a/documentation/src/drawing.dox b/documentation/src/drawing.dox index f8b2fd903..666fe541d 100644 --- a/documentation/src/drawing.dox +++ b/documentation/src/drawing.dox @@ -61,7 +61,7 @@ expressed in FLTK units by the current value of the scale factor for the screen in use and obtains quantities in drawing units. The current scale factor value, for an Fl_Window named \e window, is given by \code -int nscreen = window->driver()->screen_num(); // the screen where window is mapped +int nscreen = window->screen_num(); // the screen where window is mapped float s = Fl::screen_driver()->scale(nscreen); // this screen's scale factor \endcode One drawing unit generally corresponds to one screen pixel... diff --git a/src/Fl.cxx b/src/Fl.cxx index 8695add93..6e60e524c 100644 --- a/src/Fl.cxx +++ b/src/Fl.cxx @@ -695,10 +695,10 @@ void Fl::flush() { damage_ = 0; for (Fl_X* i = Fl_X::first; i; i = i->next) { Fl_Window* wi = i->w; - if (wi->driver()->wait_for_expose_value) {damage_ = 1; continue;} + if (Fl_Window_Driver::driver(wi)->wait_for_expose_value) {damage_ = 1; continue;} if (!wi->visible_r()) continue; if (wi->damage()) { - wi->driver()->flush(); + Fl_Window_Driver::driver(wi)->flush(); wi->clear_damage(); } // destroy damage regions for windows that don't use them: @@ -912,7 +912,7 @@ void Fl::focus(Fl_Widget *o) while (w1) { win=w1; w1=win->window(); } if (win) { if (fl_xfocus != win) { - win->driver()->take_focus(); + Fl_Window_Driver::driver(win)->take_focus(); fl_xfocus = win; } } diff --git a/src/Fl_Double_Window.cxx b/src/Fl_Double_Window.cxx index b6456dab2..54421c191 100644 --- a/src/Fl_Double_Window.cxx +++ b/src/Fl_Double_Window.cxx @@ -54,15 +54,15 @@ void Fl_Double_Window::resize(int X,int Y,int W,int H) { int oh = h(); Fl_Window::resize(X,Y,W,H); Fl_X *myi = Fl_X::i(this); - if (myi && driver()->other_xid && (ow < w() || oh < h() || Fl_Window_Driver::is_a_rescale())) - driver()->destroy_double_buffer(); + if (myi && Fl_Window_Driver::driver(this)->other_xid && (ow < w() || oh < h() || Fl_Window_Driver::is_a_rescale())) + Fl_Window_Driver::driver(this)->destroy_double_buffer(); } void Fl_Double_Window::hide() { Fl_X *myi = Fl_X::i(this); - if (myi && driver()->other_xid) { - driver()->destroy_double_buffer(); + if (myi && Fl_Window_Driver::driver(this)->other_xid) { + Fl_Window_Driver::driver(this)->destroy_double_buffer(); } Fl_Window::hide(); } @@ -70,7 +70,7 @@ void Fl_Double_Window::hide() { void Fl_Double_Window::flush() { - driver()->flush_double(); + Fl_Window_Driver::driver(this)->flush_double(); } diff --git a/src/Fl_Gl_Window.cxx b/src/Fl_Gl_Window.cxx index 9687fd1ec..b01313165 100644 --- a/src/Fl_Gl_Window.cxx +++ b/src/Fl_Gl_Window.cxx @@ -617,7 +617,7 @@ Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w) float Fl_WinAPI_Gl_Window_Driver::pixels_per_unit() { - int ns = pWindow->driver()->screen_num(); + int ns = Fl_Window_Driver::driver(pWindow)->screen_num(); return Fl::screen_driver()->scale(ns); } @@ -715,7 +715,7 @@ void Fl_X11_Gl_Window_Driver::before_show(int& need_redraw) { float Fl_X11_Gl_Window_Driver::pixels_per_unit() { - int ns = pWindow->driver()->screen_num(); + int ns = Fl_Window_Driver::driver(pWindow)->screen_num(); return Fl::screen_driver()->scale(ns); } diff --git a/src/Fl_Menu_Window.cxx b/src/Fl_Menu_Window.cxx index fd0ec6ed0..2010295fd 100644 --- a/src/Fl_Menu_Window.cxx +++ b/src/Fl_Menu_Window.cxx @@ -27,17 +27,17 @@ #include void Fl_Menu_Window::show() { - driver()->show_menu(); + Fl_Window_Driver::driver(this)->show_menu(); } void Fl_Menu_Window::flush() { if (!shown()) return; - driver()->flush_menu(); + Fl_Window_Driver::driver(this)->flush_menu(); } /** Erases the window, does nothing if HAVE_OVERLAY is not defined in config.h */ void Fl_Menu_Window::erase() { - driver()->erase_menu(); + Fl_Window_Driver::driver(this)->erase_menu(); } // Fix the colormap flashing on Maximum Impact Graphics by erasing the diff --git a/src/Fl_Overlay_Window.cxx b/src/Fl_Overlay_Window.cxx index 5e127ec53..b5e755bdf 100644 --- a/src/Fl_Overlay_Window.cxx +++ b/src/Fl_Overlay_Window.cxx @@ -51,7 +51,7 @@ void Fl_Overlay_Window::hide() { void Fl_Overlay_Window::flush() { - driver()->flush_overlay(); + Fl_Window_Driver::driver(this)->flush_overlay(); } void Fl_Overlay_Window::resize(int X, int Y, int W, int H) { @@ -68,7 +68,7 @@ Fl_Overlay_Window::~Fl_Overlay_Window() { } int Fl_Overlay_Window::can_do_overlay() { - return driver()->can_do_overlay(); + return Fl_Window_Driver::driver(this)->can_do_overlay(); } /** @@ -78,7 +78,7 @@ int Fl_Overlay_Window::can_do_overlay() { calling show(). */ void Fl_Overlay_Window::redraw_overlay() { - driver()->redraw_overlay(); + Fl_Window_Driver::driver(this)->redraw_overlay(); } // diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx index d926c02ff..6006dcaf8 100644 --- a/src/Fl_Screen_Driver.cxx +++ b/src/Fl_Screen_Driver.cxx @@ -302,7 +302,7 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f) int i = 0, count = 0; // count top-level windows, except transient scale-displaying window Fl_Window *win = Fl::first_window(); while (win) { - if (!win->parent() && (win->driver()->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) && + if (!win->parent() && (Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) && win->user_data() != &Fl_Screen_Driver::transient_scale_display) count++; win = Fl::next_window(win); } @@ -310,14 +310,14 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f) win = Fl::first_window(); // memorize all top-level windows while (win) { if (!win->parent() && win->user_data() != &Fl_Screen_Driver::transient_scale_display && - (win->driver()->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) ) { + (Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) ) { win_array[i++] = win; } win = Fl::next_window(win); } for (i = count - 1; i >= 0; i--) { // rescale all top-level windows, finishing with front one win = win_array[i]; - win->driver()->resize_after_scale_change(screen, old_f, f); + Fl_Window_Driver::driver(win)->resize_after_scale_change(screen, old_f, f); win->wait_for_expose(); } delete[] win_array; @@ -366,8 +366,8 @@ void Fl_Screen_Driver::transient_scale_display(float f, int nscreen) win->user_data((void*)&transient_scale_display); // prevent this window from being rescaled later win->set_output(); win->set_non_modal(); - win->driver()->screen_num(nscreen); - win->driver()->force_position(1); + Fl_Window_Driver::driver(win)->screen_num(nscreen); + Fl_Window_Driver::driver(win)->force_position(1); win->show(); Fl::add_timeout(1, del_transient_window, win); // delete after 1 sec } @@ -382,7 +382,7 @@ int Fl_Screen_Driver::scale_handler(int event) if (Fl::grab()) return 0; // don't rescale when menu windows are on Fl_Widget *wid = Fl::focus(); if (!wid) return 0; - int screen = wid->top_window()->driver()->screen_num(); + int screen = Fl_Window_Driver::driver(wid->top_window())->screen_num(); Fl_Screen_Driver *screen_dr = Fl::screen_driver(); static float initial_scale = screen_dr->scale(screen); #if defined(TEST_SCALING) diff --git a/src/Fl_Widget_Surface.cxx b/src/Fl_Widget_Surface.cxx index 68e785478..5812911ff 100644 --- a/src/Fl_Widget_Surface.cxx +++ b/src/Fl_Widget_Surface.cxx @@ -155,7 +155,7 @@ void Fl_Widget_Surface::print_window_part(Fl_Window *win, int x, int y, int w, i Fl_Window *save_front = Fl::first_window(); win->show(); Fl::check(); - win->driver()->flush(); // makes the window current + Fl_Window_Driver::driver(win)->flush(); // makes the window current Fl_RGB_Image *img = Fl_Screen_Driver::traverse_to_gl_subwindows(win, x, y, w, h, NULL); if (img) img->scale(w, h, 1, 1); if (save_front != win) save_front->show(); @@ -186,7 +186,7 @@ void Fl_Widget_Surface::draw_decorated_window(Fl_Window *win, int x_offset, int { Fl_RGB_Image *top=0, *left=0, *bottom=0, *right=0; if (win->border() && !win->parent()) { - win->driver()->capture_titlebar_and_borders(top, left, bottom, right); + Fl_Window_Driver::driver(win)->capture_titlebar_and_borders(top, left, bottom, right); } int wsides = left ? left->w() : 0; int toph = top ? top->h() : 0; diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx index dedbf525d..c34988cf3 100644 --- a/src/Fl_Window.cxx +++ b/src/Fl_Window.cxx @@ -631,6 +631,11 @@ void Fl_Window::size_range(int minw, int minh, int maxw, int maxh, int dw, int d pWindowDriver->size_range(); } +/** The number of the screen containing the mapped window */ +inline int Fl_Window::screen_num() { + return pWindowDriver->screen_num(); +} + // // End of "$Id$". // diff --git a/src/Fl_Window_Driver.cxx b/src/Fl_Window_Driver.cxx index f59235971..45e9c4b03 100644 --- a/src/Fl_Window_Driver.cxx +++ b/src/Fl_Window_Driver.cxx @@ -250,7 +250,7 @@ void Fl_Window_Driver::wait_for_expose() { } int Fl_Window_Driver::screen_num() { - if (pWindow->parent()) return pWindow->top_window()->driver()->screen_num(); + if (pWindow->parent()) return Fl_Window_Driver::driver(pWindow->top_window())->screen_num(); return Fl::screen_num(x(), y(), w(), h()); } diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 6309d1d27..cc5d8f016 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -1353,7 +1353,7 @@ static FLWindowDelegate *flwindowdelegate_instance = nil; r = [[nsw contentView] frame]; pt2 = [nsw convertBaseToScreen:NSMakePoint(0, r.size.height)]; pt2.y = main_screen_height - pt2.y; - float s = Fl::screen_driver()->scale(window->driver()->screen_num()); + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(window)->screen_num()); pt2.x = int(pt2.x/s + 0.5); pt2.y = int(pt2.y/s + 0.5); Fl_Window *parent = window->window(); while (parent) { @@ -1976,7 +1976,7 @@ static int fake_X_wm(Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) { int W, H, xoff, yoff, dx, dy; int ret = bx = by = bt = 0; if (w->border() && !w->parent()) { - if (w->driver()->maxw() != w->driver()->minw() || w->driver()->maxh() != w->driver()->minh()) { + if (Fl_Window_Driver::driver(w)->maxw() != Fl_Window_Driver::driver(w)->minw() || Fl_Window_Driver::driver(w)->maxh() != Fl_Window_Driver::driver(w)->minh()) { ret = 2; } else { ret = 1; @@ -3088,7 +3088,7 @@ Fl_X* Fl_Cocoa_Window_Driver::makeWindow() x->xid = cw; x->w = w; i(x); - w->driver()->wait_for_expose_value = 1; + Fl_Window_Driver::driver(w)->wait_for_expose_value = 1; if (!w->parent()) { x->next = Fl_X::first; Fl_X::first = x; diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 8f5259fef..74028e61f 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -848,7 +848,7 @@ void Fl_WinAPI_System_Driver::paste(Fl_Widget &receiver, int clipboard, const ch int hdots = GetDeviceCaps(hdc, HORZRES); ReleaseDC(NULL, hdc); float factor = (100.f * hmm) / hdots; - float scaling = Fl::screen_driver()->scale(receiver.top_window()->driver()->screen_num()); + float scaling = Fl::screen_driver()->scale(Fl_Window_Driver::driver(receiver.top_window())->screen_num()); if (!Fl_Window::current()) { Fl_GDI_Graphics_Driver *d = (Fl_GDI_Graphics_Driver*)&Fl_Graphics_Driver::default_driver(); d->scale(scaling);// may run early at app startup before Fl_Window::make_current() scales d @@ -1168,7 +1168,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar // fl_msg.lPrivate = ??? Fl_Window *window = fl_find(hWnd); - float scale = (window ? Fl::screen_driver()->scale(window->driver()->screen_num()) : 1); + float scale = (window ? Fl::screen_driver()->scale(Fl_Window_Driver::driver(window)->screen_num()) : 1); if (window) { switch (uMsg) { @@ -1179,9 +1179,9 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar float f = HIWORD(wParam) / 96.; GetClientRect(hWnd, &r); float old_f = float(r.right) / window->w(); - int ns = window->driver()->screen_num(); + int ns = Fl_Window_Driver::driver(window)->screen_num(); Fl::screen_driver()->scale(ns, f); - window->driver()->resize_after_scale_change(ns, old_f, f); + Fl_Window_Driver::driver(window)->resize_after_scale_change(ns, old_f, f); } return 0; } @@ -1204,7 +1204,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar case WM_PAINT: { Fl_Region R, R2; Fl_X *i = Fl_X::i(window); - window->driver()->wait_for_expose_value = 0; + Fl_Window_Driver::driver(window)->wait_for_expose_value = 0; char redraw_whole_window = false; if (!i->region && window->damage()) { // Redraw the whole window... @@ -1246,7 +1246,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar // Very annoying! fl_GetDC(hWnd); // Make sure we have a DC for this window... fl_save_pen(); - window->driver()->flush(); + Fl_Window_Driver::driver(window)->flush(); fl_restore_pen(); window->clear_damage(); return 0; @@ -1652,10 +1652,10 @@ static int fake_X_wm_style(const Fl_Window *w, int &X, int &Y, int &bt, int &bx, int ret = bx = by = bt = 0; int fallback = 1; - float s = Fl::screen_driver()->scale(w->driver()->screen_num()); + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(w)->screen_num()); if (!w->parent()) { if (fl_xid(w)) { - Fl_WinAPI_Window_Driver *dr = (Fl_WinAPI_Window_Driver *)w->driver(); + Fl_WinAPI_Window_Driver *dr = Fl_WinAPI_Window_Driver::driver(w); dr->border_width_title_bar_height(bx, by, bt); xoff = bx; yoff = by + bt; @@ -1952,19 +1952,19 @@ Fl_X *Fl_WinAPI_Window_Driver::makeWindow() { // compute adequate screen where to put the window int nscreen = 0; if (w->parent()) { - nscreen = w->top_window()->driver()->screen_num(); - } else if (w->driver()->force_position() && Fl_WinAPI_Window_Driver::driver(w)->screen_num_ >= 0) { - nscreen = w->driver()->screen_num(); + nscreen = Fl_Window_Driver::driver(w->top_window())->screen_num(); + } else if (Fl_Window_Driver::driver(w)->force_position() && Fl_WinAPI_Window_Driver::driver(w)->screen_num_ >= 0) { + nscreen = Fl_Window_Driver::driver(w)->screen_num(); } else { Fl_Window *hint = Fl::first_window(); if (hint) { - nscreen = hint->top_window()->driver()->screen_num(); + nscreen = Fl_Window_Driver::driver(hint->top_window())->screen_num(); } else { int mx, my; nscreen = Fl::screen_driver()->get_mouse(mx, my); } } - w->driver()->screen_num(nscreen); + Fl_Window_Driver::driver(w)->screen_num(nscreen); float s = Fl::screen_driver()->scale(nscreen); int xp = w->x() * s; // these are in graphical units int yp = w->y() * s; diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index 6b9c2fad8..752924593 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -1098,7 +1098,7 @@ static void set_event_xy(Fl_Window *win) { # endif float s = 1; #if USE_XFT - s = Fl::screen_driver()->scale(win->driver()->screen_num()); + s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(win)->screen_num()); #endif Fl::e_x_root = fl_xevent->xbutton.x_root/s; Fl::e_x = fl_xevent->xbutton.x/s; @@ -1654,7 +1654,7 @@ int fl_handle(const XEvent& thisevent) break; case Expose: - window->driver()->wait_for_expose_value = 0; + Fl_Window_Driver::driver(window)->wait_for_expose_value = 0; # if 0 // try to keep windows on top even if WM_TRANSIENT_FOR does not work: // opaque move/resize window managers do not like this, so I disabled it. @@ -1665,7 +1665,7 @@ int fl_handle(const XEvent& thisevent) case GraphicsExpose: { #if USE_XFT - int ns = window->driver()->screen_num(); + int ns = Fl_Window_Driver::driver(window)->screen_num(); float s = Fl::screen_driver()->scale(ns); window->damage(FL_DAMAGE_EXPOSE, xevent.xexpose.x/s, xevent.xexpose.y/s, xevent.xexpose.width/s + 2, xevent.xexpose.height/s + 2); @@ -2072,7 +2072,7 @@ int fl_handle(const XEvent& thisevent) if ( !wasXExceptionRaised() ) { resize_bug_fix = window; #if USE_XFT - int ns = window->driver()->screen_num(); + int ns = Fl_Window_Driver::driver(window)->screen_num(); float s = Fl::screen_driver()->scale(ns); #else float s = 1; @@ -2282,11 +2282,11 @@ void fl_fix_focus(); // in Fl.cxx Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) { Fl_X *xp = new Fl_X; xp->xid = winxid; - win->driver()->other_xid = 0; + Fl_Window_Driver::driver(win)->other_xid = 0; xp->w = win; win->i = xp; xp->next = Fl_X::first; xp->region = 0; - win->driver()->wait_for_expose_value = 1; + Fl_Window_Driver::driver(win)->wait_for_expose_value = 1; #ifdef USE_XDBE Fl_X11_Window_Driver::driver(win)->backbuffer_bad = 1; #endif @@ -2427,13 +2427,13 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap) //compute adequate screen where to put the window int nscreen = 0; if (win->parent()) { - nscreen = win->top_window()->driver()->screen_num(); + nscreen = Fl_Window_Driver::driver(win->top_window())->screen_num(); } else if (win->force_position() && Fl_X11_Window_Driver::driver(win)->screen_num_ >= 0) { - nscreen = win->driver()->screen_num(); + nscreen = Fl_Window_Driver::driver(win)->screen_num(); } else { Fl_Window *hint = Fl::first_window(); if (hint) { - nscreen = hint->top_window()->driver()->screen_num(); + nscreen = Fl_Window_Driver::driver(hint->top_window())->screen_num(); } } Fl_X11_Window_Driver::driver(win)->screen_num(nscreen); diff --git a/src/drivers/Android/Fl_Android_Window_Driver.H b/src/drivers/Android/Fl_Android_Window_Driver.H index 1df475a3d..6ade10cf4 100644 --- a/src/drivers/Android/Fl_Android_Window_Driver.H +++ b/src/drivers/Android/Fl_Android_Window_Driver.H @@ -71,8 +71,8 @@ private: #endif public: - static inline Fl_Android_Window_Driver* driver(Fl_Window *w) { - return (Fl_Android_Window_Driver*)w->driver(); + static inline Fl_Android_Window_Driver* driver(const Fl_Window *w) { + return (Fl_Android_Window_Driver*)Fl_Window_Driver::driver(w); } Fl_Android_Window_Driver(Fl_Window *w) : Fl_Window_Driver(w) {} diff --git a/src/drivers/Android/Fl_Android_Window_Driver.cxx b/src/drivers/Android/Fl_Android_Window_Driver.cxx index 4e10d6d7d..05fd80020 100644 --- a/src/drivers/Android/Fl_Android_Window_Driver.cxx +++ b/src/drivers/Android/Fl_Android_Window_Driver.cxx @@ -99,7 +99,7 @@ void Fl_Android_Window_Driver::expose_all() { for (Fl_X *x = Fl_X::first; x; x = x->next) { Fl_Window *win = x->w; - win->driver()->wait_for_expose_value = 0; + Fl_Android_Window_Driver::driver(win)->wait_for_expose_value = 0; win->damage(FL_DAMAGE_EXPOSE); win->redraw(); } diff --git a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm index d9a43b1f2..fabfcaa8f 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm +++ b/src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm @@ -383,7 +383,7 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset CGContextRef gc = (CGContextRef)driver()->gc(); CGContextSaveGState(gc); CGContextTranslateCTM(gc, x_offset - 0.5, y_offset + bt - 0.5); - float s = Fl::screen_driver()->scale(win->driver()->screen_num()); + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(win)->screen_num()); CGContextScaleCTM(gc, 1/s, -1/s); Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, gc, win->w() * s, bt); CGContextRestoreGState(gc); @@ -428,7 +428,7 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset Fl::check(); // capture the window title bar with no title Fl_RGB_Image *top, *left, *bottom, *right; - win->driver()->capture_titlebar_and_borders(top, left, bottom, right); + Fl_Window_Driver::driver(win)->capture_titlebar_and_borders(top, left, bottom, right); [(NSWindow*)fl_xid(win) setTitle:title]; // put back the window title this->set_current(); // back to the Fl_Paged_Device top->draw(x_offset, y_offset); // print the title bar diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H index 43538c175..d7162eff9 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H @@ -73,7 +73,7 @@ private: public: Fl_Cocoa_Window_Driver(Fl_Window*); ~Fl_Cocoa_Window_Driver(); - static inline Fl_Cocoa_Window_Driver* driver(Fl_Window *w) {return (Fl_Cocoa_Window_Driver*)w->driver();} + static inline Fl_Cocoa_Window_Driver* driver(const Fl_Window *w) {return (Fl_Cocoa_Window_Driver*)Fl_Window_Driver::driver(w);} CGContextRef gc; // graphics context NSCursor *cursor; static void q_release_context(Fl_Cocoa_Window_Driver *x = 0); // free all resources associated with gc diff --git a/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx b/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx index 5b1f8b1f8..09d02cbc3 100644 --- a/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx +++ b/src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx @@ -109,7 +109,7 @@ Fl_RGB_Image* Fl_OpenGL_Display_Device::capture_gl_rectangle(Fl_Gl_Window *glw, glPixelStorei(GL_PACK_SKIP_ROWS, 0); glPixelStorei(GL_PACK_SKIP_PIXELS, 0); // - int ns = glw->driver()->screen_num(); + int ns = Fl_Window_Driver::driver(glw)->screen_num(); float s = Fl::screen_driver()->scale(ns); if (s != 1) { x *= s; y *= s; w *= s; h *= s; diff --git a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx index 2c61e6089..2a3448409 100644 --- a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx @@ -52,7 +52,7 @@ Fl_Quartz_Image_Surface_Driver::Fl_Quartz_Image_Surface_Driver(int w, int h, int if (high_res) { s = Fl_Graphics_Driver::default_driver().scale(); Fl_Window *cw = Fl_Window::current(); - if (cw && ((Fl_Cocoa_Window_Driver*)cw->driver())->mapped_to_retina()) s *= 2; + if (cw && Fl_Cocoa_Window_Driver::driver(cw)->mapped_to_retina()) s *= 2; W *= s; H *= s; } CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB(); diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H index 72996db60..44cc06ccc 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H @@ -68,7 +68,7 @@ private: public: Fl_WinAPI_Window_Driver(Fl_Window*); ~Fl_WinAPI_Window_Driver(); - static inline Fl_WinAPI_Window_Driver* driver(Fl_Window *w) {return (Fl_WinAPI_Window_Driver*)w->driver();} + static inline Fl_WinAPI_Window_Driver* driver(const Fl_Window *w) {return (Fl_WinAPI_Window_Driver*)Fl_Window_Driver::driver(w);} HDC private_dc; // used for OpenGL RECT border_width_title_bar_height(int &bx, int &by, int &bt); virtual void screen_num(int n); diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx index dd45ad2ad..3b6974330 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx @@ -64,7 +64,7 @@ Fl_WinAPI_Window_Driver::~Fl_WinAPI_Window_Driver() int Fl_WinAPI_Window_Driver::screen_num() { if (pWindow->parent()) { - screen_num_ = pWindow->top_window()->driver()->screen_num(); + screen_num_ = Fl_Window_Driver::driver(pWindow->top_window())->screen_num(); } return screen_num_ >= 0 ? screen_num_ : 0; } @@ -694,7 +694,7 @@ void Fl_WinAPI_Window_Driver::resize_after_screen_change(void *data) { GetClientRect(fl_xid(win), &r); float old_f = float(r.right)/win->w(); int ns = data_for_resize_window_between_screens_.screen; - win->driver()->resize_after_scale_change(ns, old_f, Fl::screen_driver()->scale(ns)); + Fl_Window_Driver::driver(win)->resize_after_scale_change(ns, old_f, Fl::screen_driver()->scale(ns)); data_for_resize_window_between_screens_.busy = false; } diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx index d79d31307..cb6da5d1e 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx @@ -801,7 +801,7 @@ Fl_RGB_Image *Fl_X11_Screen_Driver::read_win_rectangle(int X, int Y, int w, int RootWindow(fl_display, fl_screen), X*s, Y*s, &dxs, &dys, &child_win); dx = dxs/s; dy = dys/s; // screen dimensions - Fl::screen_xywh(sx, sy, sw, sh, win->driver()->screen_num()); + Fl::screen_xywh(sx, sy, sw, sh, Fl_Window_Driver::driver(win)->screen_num()); } if (win && !allow_outside && int(s) != s) { ws = (w+1)*s-1; diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H index a3eb304ea..e1ff50105 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.H +++ b/src/drivers/X11/Fl_X11_Window_Driver.H @@ -92,7 +92,7 @@ private: public: Fl_X11_Window_Driver(Fl_Window*); virtual ~Fl_X11_Window_Driver(); - static inline Fl_X11_Window_Driver* driver(Fl_Window *w) {return (Fl_X11_Window_Driver*)w->driver();} + static inline Fl_X11_Window_Driver* driver(const Fl_Window *w) {return (Fl_X11_Window_Driver*)Fl_Window_Driver::driver(w);} #if USE_XFT virtual int screen_num(); static void resize_after_screen_change(void *data); diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx index 46aa52878..fc64ee645 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx @@ -691,14 +691,14 @@ Fl_X11_Window_Driver::type_for_resize_window_between_screens Fl_X11_Window_Drive void Fl_X11_Window_Driver::resize_after_screen_change(void *data) { Fl_Window *win = (Fl_Window*)data; float f = Fl::screen_driver()->scale(data_for_resize_window_between_screens_.screen); - win->driver()->resize_after_scale_change(data_for_resize_window_between_screens_.screen, f, f); + Fl_Window_Driver::driver(win)->resize_after_scale_change(data_for_resize_window_between_screens_.screen, f, f); data_for_resize_window_between_screens_.busy = false; } int Fl_X11_Window_Driver::screen_num() { if (pWindow->parent()) { - screen_num_ = pWindow->top_window()->driver()->screen_num(); + screen_num_ = Fl_Window_Driver::driver(pWindow->top_window())->screen_num(); } return screen_num_ >= 0 ? screen_num_ : 0; } diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx index dad106a02..65284514a 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx @@ -736,7 +736,7 @@ void Fl_Xlib_Graphics_Driver::draw_fixed(Fl_RGB_Image *img, int X, int Y, int W, int ox = offset_x_, oy = offset_y_; offset_x_ = offset_y_ = 0; Fl_X11_Screen_Driver *d = (Fl_X11_Screen_Driver*)Fl::screen_driver(); - int nscreen = Fl_Window::current()->driver()->screen_num(); + int nscreen = Fl_Window_Driver::driver(Fl_Window::current())->screen_num(); float keep = d->scale(nscreen); d->scale(nscreen, 1); push_no_clip(); diff --git a/src/fl_dnd_win32.cxx b/src/fl_dnd_win32.cxx index cdc6529bc..78452b7b1 100644 --- a/src/fl_dnd_win32.cxx +++ b/src/fl_dnd_win32.cxx @@ -90,7 +90,7 @@ public: HWND hWnd = WindowFromPoint( ppt ); Fl_Window *target = fl_find( hWnd ); if (target) { - float s = Fl::screen_driver()->scale(target->driver()->screen_num()); + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(target)->screen_num()); Fl::e_x_root /= s; Fl::e_y_root /= s; Fl::e_x = Fl::e_x_root-target->x(); @@ -125,7 +125,7 @@ public: Fl::e_x_root = pt.x; Fl::e_y_root = pt.y; if (fl_dnd_target_window) { - float s = Fl::screen_driver()->scale(fl_dnd_target_window->driver()->screen_num()); + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(fl_dnd_target_window)->screen_num()); Fl::e_x_root /= s; Fl::e_y_root /= s; Fl::e_x = Fl::e_x_root-fl_dnd_target_window->x(); @@ -162,7 +162,7 @@ public: fl_dnd_target_window = 0; Fl::e_x_root = pt.x; Fl::e_y_root = pt.y; - float s = Fl::screen_driver()->scale(target->driver()->screen_num()); + float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(target)->screen_num()); Fl::e_x_root /= s; Fl::e_y_root /= s; if (target) { diff --git a/src/fl_scroll_area.cxx b/src/fl_scroll_area.cxx index 0eacd7820..36f27b75d 100644 --- a/src/fl_scroll_area.cxx +++ b/src/fl_scroll_area.cxx @@ -72,7 +72,7 @@ void fl_scroll(int X, int Y, int W, int H, int dx, int dy, clip_h = H-src_h; } - int retval = Fl_Window::current()->driver()->scroll(src_x, src_y, src_w, src_h, + int retval = Fl_Window_Driver::driver(Fl_Window::current())->scroll(src_x, src_y, src_w, src_h, dest_x, dest_y, draw_area, data); if (retval) { draw_area(data,X,Y,W,H); -- cgit v1.2.3