summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2018-04-13 13:22:15 +0000
committerManolo Gouy <Manolo>2018-04-13 13:22:15 +0000
commit2abe8bd413f97da1beb5c144e1a1f6cb3db25290 (patch)
tree6ec8ad0471f4fde2a475a555a5823be6c592a0bc /src
parente440b8859f84b65517e016b5b623d09f99289ab9 (diff)
Homogenise and simplify the API of Fl_Graphics_Driver::cache(image-type *) virtual member functions.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12833 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Bitmap.cxx2
-rw-r--r--src/Fl_Graphics_Driver.cxx12
-rw-r--r--src/Fl_Pixmap.cxx2
-rw-r--r--src/drivers/Android/Fl_Android_Graphics_Driver.H6
-rw-r--r--src/drivers/Android/Fl_Android_Graphics_Driver.cxx14
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver.H6
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx27
-rw-r--r--src/drivers/Pico/Fl_Pico_Graphics_Driver.H4
-rw-r--r--src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.H5
-rw-r--r--src/drivers/PicoSDL/Fl_PicoSDL_Graphics_Driver.H5
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H6
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx14
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H6
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx16
14 files changed, 61 insertions, 64 deletions
diff --git a/src/Fl_Bitmap.cxx b/src/Fl_Bitmap.cxx
index d98d79acc..16da1e8b1 100644
--- a/src/Fl_Bitmap.cxx
+++ b/src/Fl_Bitmap.cxx
@@ -125,7 +125,7 @@ int Fl_Bitmap::prepare(int XP, int YP, int WP, int HP, int &cx, int &cy,
}
if (fl_graphics_driver->start_image(this, XP,YP,WP,HP,cx,cy,X,Y,W,H)) return 1;
if (!id_)
- id_ = fl_graphics_driver->cache(this);
+ fl_graphics_driver->cache(this);
return 0;
}
diff --git a/src/Fl_Graphics_Driver.cxx b/src/Fl_Graphics_Driver.cxx
index e7b9036b9..2b331f327 100644
--- a/src/Fl_Graphics_Driver.cxx
+++ b/src/Fl_Graphics_Driver.cxx
@@ -328,12 +328,14 @@ void Fl_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP, int WP, int
if (!*id(pxm)) {
if (pxm->data_w() != w2 || pxm->data_h() != h2) { // build a scaled id_ & mask_ for pxm
Fl_Pixmap *pxm2 = (Fl_Pixmap*)pxm->copy(w2, h2);
- *id(pxm) = cache(pxm2);
+ cache(pxm2);
+ *id(pxm) = *id(pxm2);
+ *id(pxm2) = 0;
*pw = w2; *ph = h2; // memorize size of cached form of pixmap
*mask(pxm) = *mask(pxm2);
*mask(pxm2) = 0;
delete pxm2;
- } else *id(pxm) = cache(pxm);
+ } else cache(pxm);
}
// draw pxm using its scaled id_ & pixmap_
draw_fixed(pxm, X, Y, W, H, cx, cy);
@@ -355,10 +357,12 @@ void Fl_Graphics_Driver::draw_bitmap(Fl_Bitmap *bm, int XP, int YP, int WP, int
if (!*id(bm)) {
if (bm->data_w() != w2 || bm->data_h() != h2) { // build a scaled id_ for bm
Fl_Bitmap *bm2 = (Fl_Bitmap*)bm->copy(w2, h2);
- *id(bm) = cache(bm2);
+ cache(bm2);
+ *id(bm) = *id(bm2);
+ *id(bm2) = 0;
*pw = w2; *ph = h2; // memorize size of cached form of bitmap
delete bm2;
- } else *id(bm) = cache(bm);
+ } else cache(bm);
}
// draw bm using its scaled id_
draw_fixed(bm, X, Y, W, H, cx, cy);
diff --git a/src/Fl_Pixmap.cxx b/src/Fl_Pixmap.cxx
index 960efa8cc..d7b837915 100644
--- a/src/Fl_Pixmap.cxx
+++ b/src/Fl_Pixmap.cxx
@@ -64,7 +64,7 @@ int Fl_Pixmap::prepare(int XP, int YP, int WP, int HP, int &cx, int &cy,
}
if ( fl_graphics_driver->start_image(this, XP,YP,WP,HP,cx,cy,X,Y,W,H) ) return 1;
if (!id_) {
- id_ = fl_graphics_driver->cache(this);
+ fl_graphics_driver->cache(this);
}
return 0;
}
diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.H b/src/drivers/Android/Fl_Android_Graphics_Driver.H
index 046735c1c..6e0e133ea 100644
--- a/src/drivers/Android/Fl_Android_Graphics_Driver.H
+++ b/src/drivers/Android/Fl_Android_Graphics_Driver.H
@@ -67,10 +67,10 @@ protected:
// set fl_gc, which we do not use in the Android port at this point
// super: virtual void global_gc();
/** Support function for Fl_Pixmap drawing */
- virtual fl_uintptr_t cache(Fl_Pixmap *img) override;
+ virtual void cache(Fl_Pixmap *img) override;
/** Support function for Fl_Bitmap drawing */
- virtual fl_uintptr_t cache(Fl_Bitmap *img) override;
- virtual fl_uintptr_t cache(Fl_RGB_Image *img) override;
+ virtual void cache(Fl_Bitmap *img) override;
+ virtual void cache(Fl_RGB_Image *img) override;
/** Support function for Fl_RGB_Image drawing */
virtual void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_) override;
// --- implementation is in src/drivers/xxx/Fl_xxx_Graphics_Driver_image.cxx
diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.cxx b/src/drivers/Android/Fl_Android_Graphics_Driver.cxx
index 05af4bed6..b80d11744 100644
--- a/src/drivers/Android/Fl_Android_Graphics_Driver.cxx
+++ b/src/drivers/Android/Fl_Android_Graphics_Driver.cxx
@@ -984,7 +984,7 @@ void Fl_Android_Graphics_Driver::draw_fixed(Fl_Bitmap *bm, int X, int Y, int W,
}
-fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_Bitmap *bm)
+void Fl_Android_Graphics_Driver::cache(Fl_Bitmap *bm)
{
int w = bm->w(), h = bm->h();
int rowBytes = (w+7)>>3;
@@ -1002,12 +1002,12 @@ fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_Bitmap *bm)
}
}
- return (fl_uintptr_t)cache;
+ *Fl_Graphics_Driver::id(bm) = (fl_uintptr_t)cache;
}
-fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_Pixmap *img)
+void Fl_Android_Graphics_Driver::cache(Fl_Pixmap *img)
{
int w = img->w(), h = img->h();
int rowBytes = 4*w;
@@ -1015,7 +1015,8 @@ fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_Pixmap *img)
int ret = fl_convert_pixmap(img->data(), rgba, 0);
if (ret==0) {
::free(rgba);
- return 0;
+ *Fl_Graphics_Driver::id(img) = 0;
+ return;
}
Fl_Android_565A_Map *cache = new Fl_Android_565A_Map(w, h);
@@ -1032,7 +1033,7 @@ fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_Pixmap *img)
}
::free(rgba);
- return (fl_uintptr_t)cache;
+ *Fl_Graphics_Driver::id(img) = (fl_uintptr_t)cache;
}
@@ -1042,7 +1043,7 @@ void Fl_Android_Graphics_Driver::uncache_pixmap(fl_uintptr_t p)
delete img;
}
-fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_RGB_Image *img)
+void Fl_Android_Graphics_Driver::cache(Fl_RGB_Image *img)
{
int w = img->data_w(), h = img->data_h(), d = img->d(), stride = w*d + img->ld();
Fl_Android_565A_Map *cgimg = new Fl_Android_565A_Map(w, h);
@@ -1092,7 +1093,6 @@ fl_uintptr_t Fl_Android_Graphics_Driver::cache(Fl_RGB_Image *img)
}
}
}
- return (fl_uintptr_t)cgimg;
}
void Fl_Android_Graphics_Driver::draw_fixed(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, int cy)
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
index eae3b7925..f4910fc47 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
@@ -44,7 +44,7 @@ private:
void draw_fixed(Fl_Bitmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy);
protected:
void draw_fixed(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy);
- fl_uintptr_t cache(Fl_RGB_Image *rgb);
+ void cache(Fl_RGB_Image *rgb);
HDC gc_;
int numcount;
int counts[20];
@@ -73,9 +73,9 @@ public:
virtual void draw_image_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
virtual void draw_image_mono_unscaled(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
virtual void draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
- fl_uintptr_t cache(Fl_Pixmap *img);
+ void cache(Fl_Pixmap *img);
virtual void uncache_pixmap(fl_uintptr_t p);
- fl_uintptr_t cache(Fl_Bitmap *img);
+ void cache(Fl_Bitmap *img);
void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_);
virtual double width_unscaled(const char *str, int n);
virtual double width_unscaled(unsigned int c);
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
index af919cf5e..fc63f727a 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
@@ -442,7 +442,7 @@ void Fl_GDI_Printer_Graphics_Driver::draw_bitmap(Fl_Bitmap *bm, int XP, int YP,
}
if (recache || !*id(bm)) {
bm->uncache();
- *Fl_Graphics_Driver::id(bm) = cache(bm);
+ cache(bm);
}
HDC tempdc;
int save;
@@ -478,7 +478,7 @@ void Fl_GDI_Printer_Graphics_Driver::draw_bitmap(Fl_Bitmap *bm, int XP, int YP,
}
-fl_uintptr_t Fl_GDI_Graphics_Driver::cache(Fl_RGB_Image *img)
+void Fl_GDI_Graphics_Driver::cache(Fl_RGB_Image *img)
{
Fl_Image_Surface *surface = new Fl_Image_Surface(img->data_w(), img->data_h());
Fl_Surface_Device::push_current(surface);
@@ -498,7 +498,6 @@ fl_uintptr_t Fl_GDI_Graphics_Driver::cache(Fl_RGB_Image *img)
*pw = img->data_w();
*ph = img->data_h();
*Fl_Graphics_Driver::id(img) = (fl_uintptr_t)offs;
- return (fl_uintptr_t)offs;
}
@@ -510,11 +509,7 @@ void Fl_GDI_Graphics_Driver::draw_fixed(Fl_RGB_Image *img, int X, int Y, int W,
if (W + cx > img->data_w()) W = img->data_w() - cx;
if (H + cy > img->data_h()) H = img->data_h() - cy;
if (!*Fl_Graphics_Driver::id(img)) {
- *Fl_Graphics_Driver::id(img) = (fl_uintptr_t)cache(img);
- int *pw, *ph;
- cache_w_h(img, pw, ph);
- *pw = img->data_w();
- *ph = img->data_h();
+ cache(img);
}
if (*Fl_Graphics_Driver::mask(img)) {
HDC new_gc = CreateCompatibleDC(gc_);
@@ -542,11 +537,7 @@ void Fl_GDI_Graphics_Driver::draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP,
return;
}
if (!*Fl_Graphics_Driver::id(rgb)) {
- *Fl_Graphics_Driver::id(rgb) = (fl_uintptr_t)cache(rgb);
- int *pw, *ph;
- cache_w_h(rgb, pw, ph);
- *pw = rgb->data_w();
- *ph = rgb->data_h();
+ cache(rgb);
}
float scaleW = float(rgb->data_w())/rgb->w();
float scaleH = float(rgb->data_h())/rgb->h();
@@ -630,12 +621,12 @@ static Fl_Bitmask fl_create_bitmap(int w, int h, const uchar *data) {
return bm;
}
-fl_uintptr_t Fl_GDI_Graphics_Driver::cache(Fl_Bitmap *bm) {
+void Fl_GDI_Graphics_Driver::cache(Fl_Bitmap *bm) {
int *pw, *ph;
cache_w_h(bm, pw, ph);
*pw = bm->data_w();
*ph = bm->data_h();
- return (fl_uintptr_t)fl_create_bitmap(bm->data_w(), bm->data_h(), bm->array);
+ *Fl_Graphics_Driver::id(bm) = (fl_uintptr_t)fl_create_bitmap(bm->data_w(), bm->data_h(), bm->array);
}
void Fl_GDI_Graphics_Driver::draw_fixed(Fl_Pixmap *pxm, int X, int Y, int W, int H, int cx, int cy) {
@@ -673,7 +664,7 @@ void Fl_GDI_Printer_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP,
}
if (recache || !*id(pxm)) {
pxm->uncache();
- *Fl_Graphics_Driver::id(pxm) = cache(pxm);
+ cache(pxm);
}
HDC new_gc = CreateCompatibleDC(gc_);
int save = SaveDC(new_gc);
@@ -693,7 +684,7 @@ void Fl_GDI_Printer_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP,
}
-fl_uintptr_t Fl_GDI_Graphics_Driver::cache(Fl_Pixmap *img) {
+void Fl_GDI_Graphics_Driver::cache(Fl_Pixmap *img) {
Fl_Image_Surface *surf = new Fl_Image_Surface(img->data_w(), img->data_h());
Fl_Surface_Device::push_current(surf);
uchar *bitmap = 0;
@@ -712,7 +703,7 @@ fl_uintptr_t Fl_GDI_Graphics_Driver::cache(Fl_Pixmap *img) {
cache_w_h(img, pw, ph);
*pw = img->data_w();
*ph = img->data_h();
- return (fl_uintptr_t)id;
+ *Fl_Graphics_Driver::id(img) = (fl_uintptr_t)id;
}
void Fl_GDI_Graphics_Driver::uncache_pixmap(fl_uintptr_t offscreen) {
diff --git a/src/drivers/Pico/Fl_Pico_Graphics_Driver.H b/src/drivers/Pico/Fl_Pico_Graphics_Driver.H
index bfc55c630..e19d1fe13 100644
--- a/src/drivers/Pico/Fl_Pico_Graphics_Driver.H
+++ b/src/drivers/Pico/Fl_Pico_Graphics_Driver.H
@@ -169,8 +169,8 @@ class Fl_Pico_Graphics_Driver : public Fl_Graphics_Driver {
// virtual void font_descriptor(Fl_Font_Descriptor *d) { font_descriptor_ = d;}
// // --- implementation is in src/fl_image.cxx which includes src/drivers/xxx/Fl_xxx_Graphics_Driver_font.cxx
virtual Fl_Bitmask create_bitmask(int w, int h, const uchar *array) ;
-// virtual fl_uintptr_t cache(Fl_Pixmap *img, int w, int h, const char *const*array) { return 0; }
-// virtual fl_uintptr_t cache(Fl_Bitmap *img, int w, int h, const uchar *array) { return 0; }
+// virtual void cache(Fl_Pixmap *img) { return 0; }
+// virtual void cache(Fl_Bitmap *img) { return 0; }
// virtual void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_) { }
virtual void delete_bitmask(Fl_Bitmask bm) ;
// virtual void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) {}
diff --git a/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.H b/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.H
index e7708dc11..b72d748c4 100644
--- a/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.H
+++ b/src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.H
@@ -53,8 +53,9 @@ public:
// void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
// void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
// void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
- // fl_uintptr_t cache(Fl_Pixmap *img, int w, int h, const char *const*array);
- // fl_uintptr_t cache(Fl_Bitmap *img, int w, int h, const uchar *array);
+ // void cache(Fl_Pixmap *img);
+ // void cache(Fl_Bitmap *img);
+ // void cache(Fl_RGB_Image *img);
// void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_);
// void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
// void draw_CGImage(CGImageRef cgimg, int x, int y, int w, int h, int srcx, int srcy, int sw, int sh);
diff --git a/src/drivers/PicoSDL/Fl_PicoSDL_Graphics_Driver.H b/src/drivers/PicoSDL/Fl_PicoSDL_Graphics_Driver.H
index fd1a696a5..5bb6f1cc2 100644
--- a/src/drivers/PicoSDL/Fl_PicoSDL_Graphics_Driver.H
+++ b/src/drivers/PicoSDL/Fl_PicoSDL_Graphics_Driver.H
@@ -52,8 +52,9 @@ public:
// void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
// void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
// void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
- // fl_uintptr_t cache(Fl_Pixmap *img, int w, int h, const char *const*array);
- // fl_uintptr_t cache(Fl_Bitmap *img, int w, int h, const uchar *array);
+ // void cache(Fl_Pixmap *img);
+ // void cache(Fl_Bitmap *img);
+ // void cache(Fl_RGB_Image *img);
// void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_);
// void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
// void draw_CGImage(CGImageRef cgimg, int x, int y, int w, int h, int srcx, int srcy, int sw, int sh);
diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H
index 97389d15a..bf53877ff 100644
--- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H
+++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H
@@ -74,9 +74,9 @@ public:
void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0);
void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
- fl_uintptr_t cache(Fl_Pixmap *img);
- fl_uintptr_t cache(Fl_Bitmap *img);
- fl_uintptr_t cache(Fl_RGB_Image *img);
+ void cache(Fl_Pixmap *img);
+ void cache(Fl_Bitmap *img);
+ void cache(Fl_RGB_Image *img);
void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_);
void copy_offscreen(int x, int y, int w, int h, Fl_Offscreen pixmap, int srcx, int srcy);
void draw_CGImage(CGImageRef cgimg, int x, int y, int w, int h, int srcx, int srcy, int sw, int sh);
diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx
index 2d8c1074f..b0cab9733 100644
--- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx
+++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx
@@ -142,7 +142,7 @@ void Fl_Quartz_Graphics_Driver::draw_bitmap(Fl_Bitmap *bm, int XP, int YP, int W
}
}
-fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_RGB_Image *rgb) {
+void Fl_Quartz_Graphics_Driver::cache(Fl_RGB_Image *rgb) {
CGColorSpaceRef lut = rgb->d()<=2 ? CGColorSpaceCreateDeviceGray() : CGColorSpaceCreateDeviceRGB();
int ld = rgb->ld();
if (!ld) ld = rgb->data_w() * rgb->d();
@@ -170,7 +170,6 @@ fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_RGB_Image *rgb) {
*Fl_Graphics_Driver::id(rgb) = (fl_uintptr_t)cgimg;
CGColorSpaceRelease(lut);
CGDataProviderRelease(src);
- return (fl_uintptr_t)cgimg;
}
void Fl_Quartz_Graphics_Driver::draw_rgb(Fl_RGB_Image *img, int XP, int YP, int WP, int HP, int cx, int cy) {
@@ -190,7 +189,8 @@ void Fl_Quartz_Graphics_Driver::draw_rgb(Fl_RGB_Image *img, int XP, int YP, int
cgimg = NULL;
}
if (!cgimg) {
- cgimg = (CGImageRef)cache(img);
+ cache(img);
+ cgimg = (CGImageRef)*Fl_Graphics_Driver::id(img);
}
if (cgimg && gc_) {
draw_CGImage(cgimg, X,Y,W,H, cx,cy, img->w(), img->h());
@@ -233,8 +233,8 @@ void Fl_Quartz_Graphics_Driver::uncache(Fl_RGB_Image*, fl_uintptr_t &id_, fl_uin
}
}
-fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_Bitmap *bm) {
- return (fl_uintptr_t)create_bitmask(bm->data_w(), bm->data_h(), bm->array);
+void Fl_Quartz_Graphics_Driver::cache(Fl_Bitmap *bm) {
+ *Fl_Graphics_Driver::id(bm) = (fl_uintptr_t)create_bitmask(bm->data_w(), bm->data_h(), bm->array);
}
@@ -242,7 +242,7 @@ static void pmProviderRelease (void *ctxt, const void *data, size_t size) {
CFRelease(ctxt);
}
-fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_Pixmap *img) {
+void Fl_Quartz_Graphics_Driver::cache(Fl_Pixmap *img) {
Fl_Image_Surface *surf = new Fl_Image_Surface(img->data_w(), img->data_h());
Fl_Surface_Device::push_current(surf);
fl_draw_pixmap(img->data(), 0, 0, FL_BLACK);
@@ -259,7 +259,7 @@ fl_uintptr_t Fl_Quartz_Graphics_Driver::cache(Fl_Pixmap *img) {
src_bytes, 0L, false, kCGRenderingIntentDefault);
CGColorSpaceRelease(lut);
CGDataProviderRelease(src_bytes);
- return (fl_uintptr_t)cgimg;
+ *Fl_Graphics_Driver::id(img) = (fl_uintptr_t)cgimg;
}
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)
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
index 7d56cad61..1f347c4a8 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
@@ -101,7 +101,7 @@ protected:
static Window draw_window;
static struct _XftDraw* draw_;
#endif
- fl_uintptr_t cache(Fl_RGB_Image *img);
+ void cache(Fl_RGB_Image *img);
public:
Fl_Xlib_Graphics_Driver(void);
virtual ~Fl_Xlib_Graphics_Driver();
@@ -123,9 +123,9 @@ public:
virtual void draw_unscaled(int angle, const char *str, int n, int x, int y);
virtual void rtl_draw_unscaled(const char* str, int n, int x, int y);
virtual void font_unscaled(Fl_Font face, Fl_Fontsize size);
- fl_uintptr_t cache(Fl_Pixmap *img);
+ void cache(Fl_Pixmap *img);
virtual void uncache_pixmap(fl_uintptr_t p);
- fl_uintptr_t cache(Fl_Bitmap *img);
+ void cache(Fl_Bitmap *img);
void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_);
virtual double width_unscaled(const char *str, int n);
virtual double width_unscaled(unsigned int c);
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
index b9271e3b5..6561fcf50 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx
@@ -696,7 +696,7 @@ static void alpha_blend(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, i
delete[] dst;
}
-fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_RGB_Image *img) {
+void Fl_Xlib_Graphics_Driver::cache(Fl_RGB_Image *img) {
Fl_Image_Surface *surface;
int depth = img->d();
if (depth == 1 || depth == 3) {
@@ -706,7 +706,8 @@ fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_RGB_Image *img) {
surface = new Fl_Image_Surface(img->data_w(), img->data_h(), 0, pixmap);
depth |= FL_IMAGE_WITH_ALPHA;
} else {
- return 0;
+ *Fl_Graphics_Driver::id(img) = 0;
+ return;
}
Fl_Surface_Device::push_current(surface);
fl_draw_image(img->array, 0, 0, img->data_w(), img->data_h(), depth, img->ld());
@@ -718,7 +719,6 @@ fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_RGB_Image *img) {
*pw = img->data_w();
*ph = img->data_h();
*Fl_Graphics_Driver::id(img) = (fl_uintptr_t)off;
- return (fl_uintptr_t)off;
}
@@ -758,7 +758,7 @@ void Fl_Xlib_Graphics_Driver::draw_rgb(Fl_RGB_Image *rgb, int XP, int YP, int WP
return;
}
if (!*Fl_Graphics_Driver::id(rgb)) {
- *Fl_Graphics_Driver::id(rgb) = cache(rgb);
+ cache(rgb);
}
cache_size(rgb, W, H);
scale_and_render_pixmap( *Fl_Graphics_Driver::id(rgb), rgb->d(),
@@ -774,12 +774,12 @@ void Fl_Xlib_Graphics_Driver::uncache(Fl_RGB_Image*, fl_uintptr_t &id_, fl_uintp
}
}
-fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_Bitmap *bm) {
+void Fl_Xlib_Graphics_Driver::cache(Fl_Bitmap *bm) {
int *pw, *ph;
cache_w_h(bm, pw, ph);
*pw = bm->data_w();
*ph = bm->data_h();
- return (fl_uintptr_t)create_bitmask(bm->data_w(), bm->data_h(), bm->array);
+ *Fl_Graphics_Driver::id(bm) = (fl_uintptr_t)create_bitmask(bm->data_w(), bm->data_h(), bm->array);
}
void Fl_Xlib_Graphics_Driver::draw_fixed(Fl_Pixmap *pxm, int X, int Y, int W, int H, int cx, int cy) {
@@ -827,7 +827,7 @@ void Fl_Xlib_Graphics_Driver::draw_fixed(Fl_Pixmap *pxm, int X, int Y, int W, in
}
-fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_Pixmap *pxm) {
+void Fl_Xlib_Graphics_Driver::cache(Fl_Pixmap *pxm) {
Fl_Image_Surface *surf = new Fl_Image_Surface(pxm->data_w(), pxm->data_h());
Fl_Surface_Device::push_current(surf);
uchar *bitmap = 0;
@@ -845,7 +845,7 @@ fl_uintptr_t Fl_Xlib_Graphics_Driver::cache(Fl_Pixmap *pxm) {
cache_w_h(pxm, pw, ph);
*pw = pxm->data_w();
*ph = pxm->data_h();
- return (fl_uintptr_t)id;
+ *Fl_Graphics_Driver::id(pxm) = (fl_uintptr_t)id;
}
void Fl_Xlib_Graphics_Driver::uncache_pixmap(fl_uintptr_t offscreen) {