diff options
| author | Manolo Gouy <Manolo> | 2018-04-13 13:22:15 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2018-04-13 13:22:15 +0000 |
| commit | 2abe8bd413f97da1beb5c144e1a1f6cb3db25290 (patch) | |
| tree | 6ec8ad0471f4fde2a475a555a5823be6c592a0bc | |
| parent | e440b8859f84b65517e016b5b623d09f99289ab9 (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
| -rw-r--r-- | FL/Fl_Graphics_Driver.H | 6 | ||||
| -rw-r--r-- | src/Fl_Bitmap.cxx | 2 | ||||
| -rw-r--r-- | src/Fl_Graphics_Driver.cxx | 12 | ||||
| -rw-r--r-- | src/Fl_Pixmap.cxx | 2 | ||||
| -rw-r--r-- | src/drivers/Android/Fl_Android_Graphics_Driver.H | 6 | ||||
| -rw-r--r-- | src/drivers/Android/Fl_Android_Graphics_Driver.cxx | 14 | ||||
| -rw-r--r-- | src/drivers/GDI/Fl_GDI_Graphics_Driver.H | 6 | ||||
| -rw-r--r-- | src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx | 27 | ||||
| -rw-r--r-- | src/drivers/Pico/Fl_Pico_Graphics_Driver.H | 4 | ||||
| -rw-r--r-- | src/drivers/PicoAndroid/Fl_PicoAndroid_Graphics_Driver.H | 5 | ||||
| -rw-r--r-- | src/drivers/PicoSDL/Fl_PicoSDL_Graphics_Driver.H | 5 | ||||
| -rw-r--r-- | src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H | 6 | ||||
| -rw-r--r-- | src/drivers/Quartz/Fl_Quartz_Graphics_Driver_image.cxx | 14 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | 6 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_image.cxx | 16 |
15 files changed, 64 insertions, 67 deletions
diff --git a/FL/Fl_Graphics_Driver.H b/FL/Fl_Graphics_Driver.H index f5f9b60a6..05398c4c3 100644 --- a/FL/Fl_Graphics_Driver.H +++ b/FL/Fl_Graphics_Driver.H @@ -169,11 +169,11 @@ protected: matrix *fl_matrix; /**< Points to the current coordinate transformation matrix */ virtual void global_gc(); /** Support function for Fl_Pixmap drawing */ - virtual fl_uintptr_t cache(Fl_Pixmap *img) { return 0; } + virtual void cache(Fl_Pixmap *img) { } /** Support function for Fl_Bitmap drawing */ - virtual fl_uintptr_t cache(Fl_Bitmap *img) { return 0; } + virtual void cache(Fl_Bitmap *img) { } /** Support function for Fl_RGB_Image drawing */ - virtual fl_uintptr_t cache(Fl_RGB_Image *img) { return 0; } + virtual void cache(Fl_RGB_Image *img) { } /** Support function for Fl_RGB_Image drawing */ virtual void uncache(Fl_RGB_Image *img, fl_uintptr_t &id_, fl_uintptr_t &mask_) { } // --- implementation is in src/drivers/xxx/Fl_xxx_Graphics_Driver_image.cxx 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) { |
