From 9ba3889ae5a7054b4d75c0ccb0f54e16b9b99159 Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Mon, 21 Mar 2016 17:06:03 +0000 Subject: Implement Fl_Window::make_current() under the driver model. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11393 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H | 1 + src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H | 1 + src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx | 20 ++++++++++++++++++++ src/drivers/X11/Fl_X11_Window_Driver.H | 1 + src/drivers/X11/Fl_X11_Window_Driver.cxx | 21 +++++++++++++++++++++ 5 files changed, 44 insertions(+) (limited to 'src/drivers') diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H index 025d1701a..5414401d0 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H @@ -73,6 +73,7 @@ public: virtual void flush_overlay(); virtual void draw_begin(); virtual void draw_end(); + virtual void make_current(); virtual void shape(const Fl_Image* img); // that one is implemented in Fl_Cocoa.mm because it uses Objective-c diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H index 31f3b1db2..c7726d170 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.H @@ -76,6 +76,7 @@ public: virtual void flush_double(); virtual void flush_overlay(); virtual void draw_begin(); + virtual void make_current(); virtual void shape(const Fl_Image* img); virtual void icons(const Fl_RGB_Image *icons[], int count); diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx index 1de3046f3..f259b62ac 100644 --- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx +++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx @@ -29,6 +29,11 @@ #include "Fl_WinAPI_Window_Driver.H" #include +#if USE_COLORMAP +extern HPALETTE fl_select_palette(void); // in fl_color_win32.cxx +#endif + + Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w) { return new Fl_WinAPI_Window_Driver(w); @@ -374,6 +379,21 @@ void Fl_WinAPI_Window_Driver::wait_for_expose() { } } + +void Fl_WinAPI_Window_Driver::make_current() { + fl_GetDC(fl_xid(pWindow)); + +#if USE_COLORMAP + // Windows maintains a hardware and software color palette; the + // SelectPalette() call updates the current soft->hard mapping + // for all drawing calls, so we must select it here before any + // code does any drawing... + fl_select_palette(); +#endif // USE_COLORMAP + + fl_graphics_driver->clip_region(0); +} + // // End of "$Id$". // diff --git a/src/drivers/X11/Fl_X11_Window_Driver.H b/src/drivers/X11/Fl_X11_Window_Driver.H index 642d6b72a..61d3d4073 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.H +++ b/src/drivers/X11/Fl_X11_Window_Driver.H @@ -81,6 +81,7 @@ public: virtual void flush_double(); virtual void flush_overlay(); virtual void draw_begin(); + virtual void make_current(); virtual void shape(const Fl_Image* img); virtual void icons(const Fl_RGB_Image *icons[], int count); diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx index 0b35c8969..2fa295560 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #if HAVE_DLFCN_H @@ -31,6 +32,9 @@ #define ShapeBounding 0 #define ShapeSet 0 +Window fl_window; + + #if USE_XDBE #include @@ -422,6 +426,23 @@ void Fl_X11_Window_Driver::wait_for_expose() { } } + +// make X drawing go into this window (called by subclass flush() impl.) +void Fl_X11_Window_Driver::make_current() { + if (!pWindow->shown()) { + fl_alert("Fl_Window::make_current(), but window is not shown()."); + Fl::fatal("Fl_Window::make_current(), but window is not shown()."); + } + fl_window = fl_xid(pWindow); + fl_graphics_driver->clip_region(0); + +#ifdef FLTK_USE_CAIRO + // update the cairo_t context + if (Fl::cairo_autolink_context()) Fl::cairo_make_current(pWindow); +#endif +} + + // // End of "$Id$". // -- cgit v1.2.3