summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Window.H4
-rw-r--r--FL/Fl_Window_Driver.H1
-rw-r--r--documentation/src/drawing.dox2
-rw-r--r--src/Fl.cxx6
-rw-r--r--src/Fl_Double_Window.cxx10
-rw-r--r--src/Fl_Gl_Window.cxx4
-rw-r--r--src/Fl_Menu_Window.cxx6
-rw-r--r--src/Fl_Overlay_Window.cxx6
-rw-r--r--src/Fl_Screen_Driver.cxx12
-rw-r--r--src/Fl_Widget_Surface.cxx4
-rw-r--r--src/Fl_Window.cxx5
-rw-r--r--src/Fl_Window_Driver.cxx2
-rw-r--r--src/Fl_cocoa.mm6
-rw-r--r--src/Fl_win32.cxx26
-rw-r--r--src/Fl_x.cxx18
-rw-r--r--src/drivers/Android/Fl_Android_Window_Driver.H4
-rw-r--r--src/drivers/Android/Fl_Android_Window_Driver.cxx2
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm4
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H2
-rw-r--r--src/drivers/OpenGL/Fl_OpenGL_Display_Device.cxx2
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx2
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H2
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx4
-rw-r--r--src/drivers/X11/Fl_X11_Screen_Driver.cxx2
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.H2
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.cxx4
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx2
-rw-r--r--src/fl_dnd_win32.cxx6
-rw-r--r--src/fl_scroll_area.cxx2
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 <b>drawing units</b>.
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 <FL/Fl_Window_Driver.H>
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);