summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Window_Driver.H3
-rw-r--r--FL/mac.H1
-rw-r--r--FL/win32.H1
-rw-r--r--FL/x.H1
-rw-r--r--src/Fl.cxx2
-rw-r--r--src/Fl_Window_Driver.cxx8
-rw-r--r--src/Fl_cocoa.mm6
-rw-r--r--src/Fl_win32.cxx6
-rw-r--r--src/Fl_x.cxx4
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx2
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx4
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx2
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H1
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx9
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.H1
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.cxx8
16 files changed, 23 insertions, 36 deletions
diff --git a/FL/Fl_Window_Driver.H b/FL/Fl_Window_Driver.H
index 8f167d3a1..61f5abc8f 100644
--- a/FL/Fl_Window_Driver.H
+++ b/FL/Fl_Window_Driver.H
@@ -52,6 +52,7 @@ public:
Fl_Window_Driver(Fl_Window *);
virtual ~Fl_Window_Driver();
static Fl_Window_Driver *newWindowDriver(Fl_Window *);
+ int wait_for_expose_value;
// --- frequently used accessors to public window data
/** returns the x coordinate of the window. */
@@ -119,7 +120,7 @@ public:
virtual void label(const char *name, const char *mininame);
virtual Fl_X *makeWindow() { /* FIXME: move Fl_X::make(Fl_Window*) here for OSX, MSWin, and X11 */ return 0; }
- virtual void wait_for_expose() {}
+ virtual void wait_for_expose();
virtual void destroy_double_buffer();
virtual void show();
virtual void show_menu();
diff --git a/FL/mac.H b/FL/mac.H
index 4eeecb3b6..b1a40ee11 100644
--- a/FL/mac.H
+++ b/FL/mac.H
@@ -128,7 +128,6 @@ public:
Fl_Window *w; // FLTK window for
Fl_Region region;
Fl_X *next; // chain of mapped windows
- int wait_for_expose;
static Fl_X* first;
static Fl_X* i(const Fl_Window* w) {return (Fl_X*)w->i;}
static int fake_X_wm(const Fl_Window*,int&,int&,int&,int&,int&);
diff --git a/FL/win32.H b/FL/win32.H
index 518d2ef78..4b28dd245 100644
--- a/FL/win32.H
+++ b/FL/win32.H
@@ -54,7 +54,6 @@ public:
Fl_Window* w;
Fl_Region region;
Fl_X *next;
- int wait_for_expose;
HDC private_dc; // used for OpenGL
HDC saved_hdc; // saves the handle of the DC currently loaded
// static variables, static functions and member functions
diff --git a/FL/x.H b/FL/x.H
index eb5fc8770..b90964108 100644
--- a/FL/x.H
+++ b/FL/x.H
@@ -117,7 +117,6 @@ public:
Fl_Window *w;
Fl_Region region;
Fl_X *next;
- char wait_for_expose;
static Fl_X* first;
static Fl_X* i(const Fl_Window* wi) {return wi->i;}
static void make_xid(Fl_Window*,XVisualInfo* =fl_visual, Colormap=fl_colormap);
diff --git a/src/Fl.cxx b/src/Fl.cxx
index 082f818b6..e66ded291 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -681,8 +681,8 @@ void Fl::flush() {
if (damage()) {
damage_ = 0;
for (Fl_X* i = Fl_X::first; i; i = i->next) {
- if (i->wait_for_expose) {damage_ = 1; continue;}
Fl_Window* wi = i->w;
+ if (wi->driver()->wait_for_expose_value) {damage_ = 1; continue;}
if (!wi->visible_r()) continue;
if (wi->damage()) {
wi->driver()->flush();
diff --git a/src/Fl_Window_Driver.cxx b/src/Fl_Window_Driver.cxx
index b5ba4c556..13a90f8f0 100644
--- a/src/Fl_Window_Driver.cxx
+++ b/src/Fl_Window_Driver.cxx
@@ -240,6 +240,14 @@ int Fl_Window_Driver::set_cursor(const Fl_RGB_Image*, int, int) {
return 0;
}
+void Fl_Window_Driver::wait_for_expose() {
+ if (!shown()) return;
+ Fl_X *i = Fl_X::i(pWindow);
+ while (!i || wait_for_expose_value) {
+ Fl::wait();
+ }
+}
+
//
// End of "$Id$".
//
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm
index 0e1b44e98..c345c9f85 100644
--- a/src/Fl_cocoa.mm
+++ b/src/Fl_cocoa.mm
@@ -1931,9 +1931,9 @@ static void handleUpdateEvent( Fl_Window *window )
static convertSizeIMP addr = (convertSizeIMP)[NSView instanceMethodForSelector:@selector(convertSizeToBacking:)];
NSSize s = addr([i->xid contentView], @selector(convertSizeToBacking:), NSMakeSize(10, 10));
i->mapped_to_retina( int(s.width + 0.5) > 10 );
- if (i->wait_for_expose == 0 && previous != i->mapped_to_retina()) i->changed_resolution(true);
+ if (window->driver()->wait_for_expose_value == 0 && previous != i->mapped_to_retina()) i->changed_resolution(true);
}
- i->wait_for_expose = 0;
+ window->driver()->wait_for_expose_value = 0;
if ( i->region ) {
Fl_Graphics_Driver::default_driver().XDestroyRegion(i->region);
@@ -3001,7 +3001,7 @@ void Fl_X::make(Fl_Window* w)
}
x->xid = cw;
x->w = w; w->i = x;
- x->wait_for_expose = 1;
+ w->driver()->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 a96ad3773..fd79cc437 100644
--- a/src/Fl_win32.cxx
+++ b/src/Fl_win32.cxx
@@ -1083,7 +1083,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
case WM_PAINT: {
Fl_Region R;
Fl_X *i = Fl_X::i(window);
- i->wait_for_expose = 0;
+ window->driver()->wait_for_expose_value = 0;
char redraw_whole_window = false;
if (!i->region && window->damage()) {
// Redraw the whole window...
@@ -1585,7 +1585,7 @@ void Fl_WinAPI_Window_Driver::resize(int X,int Y,int W,int H) {
// with no width or height will never get an exposure event
Fl_X *i = Fl_X::i(pWindow);
if (i && W>0 && H>0)
- i->wait_for_expose = 1;
+ wait_for_expose_value = 1;
}
} else {
x(X); y(Y);
@@ -1850,7 +1850,7 @@ Fl_X* Fl_X::make(Fl_Window* w) {
if (!fl_clipboard_notify_empty() && clipboard_wnd == NULL)
fl_clipboard_notify_target(x->xid);
- x->wait_for_expose = 1;
+ w->driver()->wait_for_expose_value = 1;
if (Fl_Window::show_iconic_) {showit = 0; Fl_Window::show_iconic_ = 0;}
if (showit) {
w->set_visible();
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index 020a41ad8..334e44158 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -1633,7 +1633,7 @@ fprintf(stderr,"\n");*/
break;
case Expose:
- Fl_X::i(window)->wait_for_expose = 0;
+ window->driver()->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.
@@ -2220,7 +2220,7 @@ Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) {
xp->w = win; win->i = xp;
xp->next = Fl_X::first;
xp->region = 0;
- xp->wait_for_expose = 1;
+ win->driver()->wait_for_expose_value = 1;
#ifdef USE_XDBE
((Fl_X11_Window_Driver*)win->pWindowDriver)->backbuffer_bad = 1;
#endif
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx b/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx
index 82c5d0927..ef0501ad5 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Window_Driver.cxx
@@ -80,7 +80,7 @@ Fl_X *Fl_PicoAndroid_Window_Driver::makeWindow()
pNativeWindow = scr->pApp->window;
// x->xid = SDL_CreateRenderer(pNativeWindow, -1, SDL_RENDERER_ACCELERATED);
x->next = Fl_X::first;
- x->wait_for_expose = 0;
+ wait_for_expose_value = 0;
pWindow->i = x;
Fl_X::first = x;
diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx b/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx
index e12fc1ae5..3f1a7bfe1 100644
--- a/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx
+++ b/src/drivers/PicoSDL/Fl_PicoSDL_Screen_Driver.cxx
@@ -61,7 +61,7 @@ double Fl_PicoSDL_Screen_Driver::wait(double time_to_wait)
//event->window.windowID
if ( !window ) break;;
Fl_X *i = Fl_X::i(Fl::first_window());
- i->wait_for_expose = 0;
+ i->w->driver()->wait_for_expose_value = 0;
if ( i->region ) {
XDestroyRegion(i->region);
@@ -70,7 +70,7 @@ double Fl_PicoSDL_Screen_Driver::wait(double time_to_wait)
window->clear_damage(FL_DAMAGE_ALL);
i->flush();
window->clear_damage();
- Fl_X::first->wait_for_expose = 0;
+ Fl_X::first->w->driver()->wait_for_expose_value = 0;
}
break;
}
diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx
index 1c56b42b5..bba11e520 100644
--- a/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx
+++ b/src/drivers/PicoSDL/Fl_PicoSDL_Window_Driver.cxx
@@ -77,7 +77,7 @@ Fl_X *Fl_PicoSDL_Window_Driver::makeWindow()
}
x->xid = SDL_CreateRenderer(pNativeWindow, -1, SDL_RENDERER_ACCELERATED);
x->next = Fl_X::first;
- x->wait_for_expose = 0;
+ wait_for_expose_value = 0;
pWindow->i = x;
Fl_X::first = x;
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H
index a5f7f0ed8..7a1edad76 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H
+++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H
@@ -103,7 +103,6 @@ public:
void set_icons(); // driver-internal support function
// this one is implemented in Fl_win32.cxx
virtual void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left, Fl_Shared_Image*& bottom, Fl_Shared_Image*& right);
- virtual void wait_for_expose();
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);
};
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
index a7b068e69..366a4c6ef 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
@@ -360,15 +360,6 @@ void Fl_WinAPI_Window_Driver::free_icons() {
}
-void Fl_WinAPI_Window_Driver::wait_for_expose() {
- if (!shown()) return;
- Fl_X *i = Fl_X::i(pWindow);
- while (!i || i->wait_for_expose) {
- Fl::wait();
- }
-}
-
-
void Fl_WinAPI_Window_Driver::make_current() {
fl_GetDC(fl_xid(pWindow));
diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H
index c79aacc11..25c1fddba 100644
--- a/src/drivers/X11/Fl_X11_Window_Driver.H
+++ b/src/drivers/X11/Fl_X11_Window_Driver.H
@@ -118,7 +118,6 @@ public:
virtual void free_icons();
void set_icons(); // driver-internal support function
virtual void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left, Fl_Shared_Image*& bottom, Fl_Shared_Image*& right);
- virtual void wait_for_expose();
virtual int can_do_overlay();
virtual void redraw_overlay();
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);
diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx
index 7fb22bf3b..b468cd60d 100644
--- a/src/drivers/X11/Fl_X11_Window_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx
@@ -428,14 +428,6 @@ void Fl_X11_Window_Driver::capture_titlebar_and_borders(Fl_Shared_Image*& top, F
previous->Fl_Surface_Device::set_current();
}
-void Fl_X11_Window_Driver::wait_for_expose() {
- if (!shown()) return;
- Fl_X *i = Fl_X::i(pWindow);
- while (!i || i->wait_for_expose) {
- Fl::wait();
- }
-}
-
// make X drawing go into this window (called by subclass flush() impl.)
void Fl_X11_Window_Driver::make_current() {