summaryrefslogtreecommitdiff
path: root/src/drivers/Quartz
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2016-03-04 22:30:18 +0000
committerManolo Gouy <Manolo>2016-03-04 22:30:18 +0000
commita46e324405a535fcfb5ad7b4097a6a16e8bf58fc (patch)
treeee03135087777a5b1558f258192f93ac97803937 /src/drivers/Quartz
parent7c5c803ca99ca352343051c0ad0441ed895f27d7 (diff)
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
Diffstat (limited to 'src/drivers/Quartz')
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx19
1 files changed, 16 insertions, 3 deletions
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 <FL/fl_draw.H>
#include <FL/Fl_Printer.H>
#include <FL/x.H>
+#include <FL/Fl_Image_Surface.H>
#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);