summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx2
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx2
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx9
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx2
4 files changed, 8 insertions, 7 deletions
diff --git a/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx b/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx
index 9308936d3..43fe15dcb 100644
--- a/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx
+++ b/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx
@@ -61,7 +61,6 @@ Fl_GDI_Image_Surface_Driver::Fl_GDI_Image_Surface_Driver(int w, int h, int high_
Fl_GDI_Image_Surface_Driver::~Fl_GDI_Image_Surface_Driver() {
if (offscreen && !external_offscreen) DeleteObject(offscreen);
- if (is_current()) end_current();
delete driver();
}
@@ -101,6 +100,7 @@ void Fl_GDI_Image_Surface_Driver::end_current()
RestoreDC(gc, _savedc);
DeleteDC(gc);
fl_window = pre_window;
+ Fl_Surface_Device::end_current();
}
diff --git a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx
index f7eca97a7..b25bda07c 100644
--- a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx
+++ b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx
@@ -89,7 +89,6 @@ Fl_Quartz_Image_Surface_Driver::~Fl_Quartz_Image_Surface_Driver() {
CGContextRelease((CGContextRef)offscreen);
}
delete driver();
- if (is_current()) end_current();
}
void Fl_Quartz_Image_Surface_Driver::set_current() {
@@ -128,6 +127,7 @@ Fl_RGB_Image* Fl_Quartz_Image_Surface_Driver::image()
void Fl_Quartz_Image_Surface_Driver::end_current()
{
fl_window = pre_window;
+ Fl_Surface_Device::end_current();
}
#endif // FL_CFG_GFX_QUARTZ
diff --git a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
index 4e9466952..18176a0a6 100644
--- a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
@@ -62,15 +62,15 @@ Fl_Xlib_Copy_Surface_Driver::Fl_Xlib_Copy_Surface_Driver(int w, int h) : Fl_Copy
Fl_Xlib_Copy_Surface_Driver::~Fl_Xlib_Copy_Surface_Driver() {
driver()->pop_clip();
- bool need_push = !is_current();
- if (need_push) Fl_Surface_Device::push_current(this);
+ Window old_win = fl_window;
+ fl_window = xid;
Fl_RGB_Image *rgb = Fl::screen_driver()->read_win_rectangle(0, 0, width, height, 0);
- if (need_push) Fl_Surface_Device::pop_current();
+ fl_window = old_win;
+ if (is_current()) end_current();
Fl_X11_Screen_Driver::copy_image(rgb->array, rgb->w(), rgb->h(), 1);
delete rgb;
fl_delete_offscreen(xid);
delete driver();
- if (!need_push) end_current();
}
@@ -82,6 +82,7 @@ void Fl_Xlib_Copy_Surface_Driver::set_current() {
void Fl_Xlib_Copy_Surface_Driver::end_current() {
fl_window = oldwindow;
+ Fl_Surface_Device::end_current();
}
void Fl_Xlib_Copy_Surface_Driver::translate(int x, int y) {
diff --git a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
index 54b246955..1f6aa0c1c 100644
--- a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
@@ -55,7 +55,6 @@ Fl_Xlib_Image_Surface_Driver::Fl_Xlib_Image_Surface_Driver(int w, int h, int hig
Fl_Xlib_Image_Surface_Driver::~Fl_Xlib_Image_Surface_Driver() {
if (offscreen && !external_offscreen) XFreePixmap(fl_display, offscreen);
delete driver();
- if (is_current()) end_current();
}
void Fl_Xlib_Image_Surface_Driver::set_current() {
@@ -81,6 +80,7 @@ Fl_RGB_Image* Fl_Xlib_Image_Surface_Driver::image()
void Fl_Xlib_Image_Surface_Driver::end_current()
{
fl_window = pre_window;
+ Fl_Surface_Device::end_current();
}
//