summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Image.H8
-rw-r--r--src/Fl_Shared_Image.cxx2
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx4
3 files changed, 11 insertions, 3 deletions
diff --git a/FL/Fl_Image.H b/FL/Fl_Image.H
index 203a91d3b..09d84a6de 100644
--- a/FL/Fl_Image.H
+++ b/FL/Fl_Image.H
@@ -30,6 +30,7 @@ class Fl_Widget;
class Fl_Pixmap;
struct Fl_Menu_Item;
struct Fl_Label;
+class Fl_RGB_Image;
/** \enum Fl_RGB_Scaling
@@ -186,6 +187,12 @@ public:
// get RGB image scaling method
static Fl_RGB_Scaling RGB_scaling();
+ /** Use this method if you have an Fl_Image object and want to know whether it is derived
+ from class Fl_RGB_Image.
+ If the method returns non-NULL, then the image in question is
+ derived from Fl_RGB_Image, and the returned value is a pointer to this image.
+ */
+ virtual Fl_RGB_Image *as_rgb_image() {return NULL;}
};
@@ -249,6 +256,7 @@ public:
\sa void Fl_RGB_Image::max_size(size_t)
*/
static size_t max_size() {return max_size_;}
+ virtual Fl_RGB_Image *as_rgb_image() {return this;}
};
#endif // !Fl_Image_H
diff --git a/src/Fl_Shared_Image.cxx b/src/Fl_Shared_Image.cxx
index 216387aa7..f94d28f11 100644
--- a/src/Fl_Shared_Image.cxx
+++ b/src/Fl_Shared_Image.cxx
@@ -378,7 +378,7 @@ void Fl_Graphics_Driver::draw(Fl_Shared_Image *shared, int X, int Y) {
return;
}
// don't call Fl_Graphics_Driver::draw_scaled(Fl_Image*,...) for an enlarged Fl_Bitmap or Fl_Pixmap
- if ((shared->d() != 0 && shared->count() < 2) || (shared->w() <= shared->image_->w() && shared->h() <= shared->image_->h())) {
+ if (shared->as_rgb_image() || (shared->w() <= shared->image_->w() && shared->h() <= shared->image_->h())) {
int done = fl_graphics_driver->draw_scaled(shared->image_, X, Y, shared->w(), shared->h());
if (done) return;
}
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
index a9ecae8e0..cbd6f591a 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver_image.cxx
@@ -542,9 +542,9 @@ int Fl_GDI_Printer_Graphics_Driver::draw_scaled(Fl_Image *img, int XP, int YP, i
}
int Fl_GDI_Graphics_Driver::draw_scaled(Fl_Image *img, int XP, int YP, int WP, int HP) {
- if (img->d() == 0 || img->count() >= 2) return 0; // for bitmaps and pixmaps
+ Fl_RGB_Image *rgb = img->as_rgb_image();
+ if (!rgb || !rgb->array) return 0; // for bitmaps and pixmaps
- Fl_RGB_Image *rgb = (Fl_RGB_Image*)img;
if (!rgb->id_) rgb->id_ = (fl_uintptr_t)build_id(rgb, (void**)&(rgb->mask_));
HDC new_gc = CreateCompatibleDC(gc_);
int save = SaveDC(new_gc);