From a46e324405a535fcfb5ad7b4097a6a16e8bf58fc Mon Sep 17 00:00:00 2001 From: Manolo Gouy Date: Fri, 4 Mar 2016 22:30:18 +0000 Subject: Fix a problem seen in fluid on the Mac OS platform. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11285 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/Fl_Pixmap.cxx | 4 ++++ .../Quartz/Fl_Quartz_Graphics_Driver_image.cxx | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Fl_Pixmap.cxx b/src/Fl_Pixmap.cxx index b6d501fb9..b67a48ad9 100644 --- a/src/Fl_Pixmap.cxx +++ b/src/Fl_Pixmap.cxx @@ -101,7 +101,11 @@ Fl_Pixmap::~Fl_Pixmap() { void Fl_Pixmap::uncache() { if (id_) { +#ifdef __APPLE__ + fl_graphics_driver->uncache(this); +#else fl_delete_offscreen((Fl_Offscreen)id_); +#endif id_ = 0; } diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx index 0e1f777f1..668bb434f 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx @@ -25,6 +25,7 @@ #include #include #include +#include #define MAXBUFFER 0x40000 // 256k @@ -272,13 +273,25 @@ fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_Bitmap*, int w, int h, const uc } fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_Pixmap *img, int w, int h, const char *const*data) { - Fl_Offscreen id = fl_create_offscreen(w, h); - fl_begin_offscreen(id); + Fl_Image_Surface *surface = new Fl_Image_Surface(w,h); + surface->set_current(); fl_draw_pixmap(data, 0, 0, FL_BLACK); - fl_end_offscreen(); + surface->end_current(); + Fl_Offscreen id = surface->get_offscreen_before_delete(); + delete surface; return (fl_uintptr_t)id; } +void Fl_Quartz_Graphics_Driver::uncache(Fl_Pixmap *img) +{ + if (img->id_) { + void *data = CGBitmapContextGetData((CGContextRef)img->id_); + free(data); + CGContextRelease((CGContextRef)img->id_); + img->id_ = NULL; + } +} + void Fl_Quartz_Graphics_Driver::draw_CGImage(CGImageRef cgimg, int x, int y, int w, int h, int srcx, int srcy, int sw, int sh) { CGRect rect = CGRectMake(x, y, w, h); -- cgit v1.2.3