diff options
| -rw-r--r-- | FL/Fl_Double_Window.H | 5 | ||||
| -rw-r--r-- | FL/Fl_Overlay_Window.H | 2 | ||||
| -rw-r--r-- | FL/Fl_Window.H | 6 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx | 24 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h | 1 |
5 files changed, 22 insertions, 16 deletions
diff --git a/FL/Fl_Double_Window.H b/FL/Fl_Double_Window.H index 46dd106f2..4ffcb65d1 100644 --- a/FL/Fl_Double_Window.H +++ b/FL/Fl_Double_Window.H @@ -23,6 +23,7 @@ #define Fl_Double_Window_H #include "Fl_Window.H" +class Fl_Overlay_Window; /** The Fl_Double_Window provides a double-buffered window. @@ -44,8 +45,8 @@ public: /** Return non-null if this is an Fl_Overlay_Window object. */ - virtual Fl_Double_Window *as_overlay_window() {return NULL; } -public: + virtual Fl_Overlay_Window *as_overlay_window() {return NULL; } + virtual Fl_Double_Window *as_double_window() {return this; } void show(); void show(int a, char **b) {Fl_Window::show(a,b);} void flush(); diff --git a/FL/Fl_Overlay_Window.H b/FL/Fl_Overlay_Window.H index 5114d3029..32ce7cfa4 100644 --- a/FL/Fl_Overlay_Window.H +++ b/FL/Fl_Overlay_Window.H @@ -72,7 +72,7 @@ protected: Fl_Overlay_Window(int X, int Y, int W, int H, const char *l=0); public: void show(int a, char **b) {Fl_Double_Window::show(a,b);} - virtual Fl_Double_Window *as_overlay_window() {return this; } + virtual Fl_Overlay_Window *as_overlay_window() {return this; } }; #endif diff --git a/FL/Fl_Window.H b/FL/Fl_Window.H index 88b3a0737..9dd443e8e 100644 --- a/FL/Fl_Window.H +++ b/FL/Fl_Window.H @@ -37,7 +37,7 @@ class Fl_X; class Fl_Window_Driver; class Fl_RGB_Image; class Fl_Shared_Image; - +class Fl_Double_Window; /** This widget produces an actual window. This can either be a main @@ -637,6 +637,10 @@ public: void capture_titlebar_and_borders(Fl_Shared_Image*& top, Fl_Shared_Image*& left, Fl_Shared_Image*& bottom, Fl_Shared_Image*& right); Fl_Window_Driver *driver() { return i; } + /** + Return non-null if this is an Fl_Overlay_Window object. + */ + virtual Fl_Double_Window *as_double_window() {return NULL; } }; #endif diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx index 08a3184b9..685aebbd3 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx @@ -22,10 +22,22 @@ #include <FL/Fl_Double_Window.H> #include <FL/fl_draw.H> +// class used for Fl_Double_Window but not for Fl_Overlay_Window +class Fl_Cocoa_Double_Window_Driver : public Fl_Cocoa_Window_Driver { +public: + Fl_Cocoa_Double_Window_Driver(Fl_Window *w) : Fl_Cocoa_Window_Driver(w) {} + int double_flush(int eraseoverlay) { + draw(); + return 0; + } +}; Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w) { - return new Fl_Cocoa_Window_Driver(w); + if (w->as_double_window() && !w->as_double_window()->as_overlay_window()) + return new Fl_Cocoa_Double_Window_Driver(w); + else + return new Fl_Cocoa_Window_Driver(w); } @@ -43,16 +55,6 @@ void Fl_Cocoa_Window_Driver::take_focus() set_key_window(); } -int Fl_Cocoa_Window_Driver::double_flush(int eraseoverlay) { - if ( ((Fl_Double_Window*)w)->as_overlay_window() ) { - Fl_Window_Driver::double_flush(eraseoverlay); - } else { - draw(); - } - return 0; -} - - // // End of "$Id$". // diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h index e7f683689..b0c756aa1 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.h @@ -47,7 +47,6 @@ class FL_EXPORT Fl_Cocoa_Window_Driver : public Fl_Window_Driver public: Fl_Cocoa_Window_Driver(Fl_Window*); virtual void take_focus(); - int double_flush(int eraseoverlay); }; |
