From be9127c61aa32f95eb47bc7b1d586623914ee036 Mon Sep 17 00:00:00 2001
From: Manolo Gouy <Manolo>
Date: Wed, 14 Apr 2010 13:07:34 +0000
Subject: [PATCH] More logical use of Fl_Device::draw(<image class> *,...)
 functions

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7501 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
---
 FL/Fl_Bitmap.H    |  2 ++
 FL/Fl_Image.H     |  2 ++
 FL/Fl_Pixmap.H    |  2 ++
 src/Fl_Bitmap.cxx |  8 ++++----
 src/Fl_Device.cxx | 16 ++++++----------
 src/Fl_Image.cxx  |  8 ++++----
 src/Fl_Pixmap.cxx |  8 ++++----
 7 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/FL/Fl_Bitmap.H b/FL/Fl_Bitmap.H
index 84ce3281b..d47a82acf 100644
--- a/FL/Fl_Bitmap.H
+++ b/FL/Fl_Bitmap.H
@@ -40,6 +40,7 @@ struct Fl_Menu_Item;
   (bitmap) images. Images are drawn using the current color.
 */
 class FL_EXPORT Fl_Bitmap : public Fl_Image {
+  friend class Fl_Device;
   public:
 
   /** pointer to raw bitmap data */
@@ -57,6 +58,7 @@ class FL_EXPORT Fl_Bitmap : public Fl_Image {
   unsigned id_;
 #endif // __APPLE__ || WIN32
 
+  void generic_device_draw(int XP, int YP, int WP, int HP, int cx, int cy);
   public:
 
   /** The constructors create a new bitmap from the specified bitmap data */
diff --git a/FL/Fl_Image.H b/FL/Fl_Image.H
index 72ee4477c..ff10b1ef6 100644
--- a/FL/Fl_Image.H
+++ b/FL/Fl_Image.H
@@ -188,6 +188,8 @@ class FL_EXPORT Fl_Image {
   &lt;FL/Fl_RGB_Image.H&gt; should be included.
 */
 class FL_EXPORT Fl_RGB_Image : public Fl_Image {
+  friend class Fl_Device;
+  void generic_device_draw(int X, int Y, int W, int H, int cx=0, int cy=0);
   public:
 
   const uchar *array;
diff --git a/FL/Fl_Pixmap.H b/FL/Fl_Pixmap.H
index 616add0f4..8cab445a5 100644
--- a/FL/Fl_Pixmap.H
+++ b/FL/Fl_Pixmap.H
@@ -45,6 +45,7 @@ struct Fl_Menu_Item;
   (pixmap) images, including transparency.
 */
 class FL_EXPORT Fl_Pixmap : public Fl_Image {
+  friend class Fl_Device;
   void copy_data();
   void delete_data();
   void set_data(const char * const *p);
@@ -66,6 +67,7 @@ class FL_EXPORT Fl_Pixmap : public Fl_Image {
   unsigned id_; // for internal use
   unsigned mask_; // for internal use (mask bitmap)
 #endif // __APPLE__ || WIN32
+  void generic_device_draw(int XP, int YP, int WP, int HP, int cx, int cy);
   
   public:
 
diff --git a/src/Fl_Bitmap.cxx b/src/Fl_Bitmap.cxx
index 3995c0773..13d5bcaee 100644
--- a/src/Fl_Bitmap.cxx
+++ b/src/Fl_Bitmap.cxx
@@ -248,10 +248,10 @@ Fl_Bitmask fl_create_alphamask(int w, int h, int d, int ld, const uchar *array)
 }
 
 void Fl_Bitmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  if(fl_device->type() == Fl_Device::postscript_device) {
-    fl_device->draw(this, XP, YP, WP, HP, cx, cy);
-    return;
-  }
+  fl_device->draw(this, XP, YP, WP, HP, cx, cy);
+}
+
+void Fl_Bitmap::generic_device_draw(int XP, int YP, int WP, int HP, int cx, int cy) {
   if (!array) {
     draw_empty(XP, YP);
     return;
diff --git a/src/Fl_Device.cxx b/src/Fl_Device.cxx
index 98a5ad8fa..9c76d3f6f 100644
--- a/src/Fl_Device.cxx
+++ b/src/Fl_Device.cxx
@@ -27,7 +27,6 @@
 
 #include <FL/Fl.H>
 #include <FL/Fl_Device.H>
-//#include <FL/fl_draw.H>
 #include <FL/Fl_Image.H>
 
 /** \brief Draws an Fl_Pixmap object to the device. 
@@ -35,9 +34,8 @@
  Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
  the image offset by the cx and cy arguments.
  */
-void Fl_Device::draw(Fl_Pixmap *pxm,int XP, int YP, int WP, int HP, int cx, int cy)
-{
-  pxm->draw(XP, YP, WP, HP, cx, cy);
+void Fl_Device::draw(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
+  pxm->generic_device_draw(XP, YP, WP, HP, cx, cy);
 }
 
 /** \brief Draws an Fl_Bitmap object to the device. 
@@ -45,9 +43,8 @@ void Fl_Device::draw(Fl_Pixmap *pxm,int XP, int YP, int WP, int HP, int cx, int
  Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
  the image offset by the cx and cy arguments.
  */
-void Fl_Device::draw(Fl_Bitmap *bm,int XP, int YP, int WP, int HP, int cx, int cy)
-{
-  bm->draw(XP, YP, WP, HP, cx, cy);
+void Fl_Device::draw(Fl_Bitmap *bm, int XP, int YP, int WP, int HP, int cx, int cy) {
+  bm->generic_device_draw(XP, YP, WP, HP, cx, cy);
 }
 
 /** \brief Draws an Fl_RGB_Image object to the device. 
@@ -55,9 +52,8 @@ void Fl_Device::draw(Fl_Bitmap *bm,int XP, int YP, int WP, int HP, int cx, int c
  Specifies a bounding box for the image, with the origin (upper left-hand corner) of 
  the image offset by the cx and cy arguments.
  */
-void Fl_Device::draw(Fl_RGB_Image *rgb,int XP, int YP, int WP, int HP, int cx, int cy)
-{
-  rgb->draw(XP, YP, WP, HP, cx, cy);
+void Fl_Device::draw(Fl_RGB_Image *rgb, int XP, int YP, int WP, int HP, int cx, int cy) {
+  rgb->generic_device_draw(XP, YP, WP, HP, cx, cy);
 }
 
 /**
diff --git a/src/Fl_Image.cxx b/src/Fl_Image.cxx
index c7a79bfd1..bf39f6b09 100644
--- a/src/Fl_Image.cxx
+++ b/src/Fl_Image.cxx
@@ -434,10 +434,10 @@ static void alpha_blend(Fl_RGB_Image *img, int X, int Y, int W, int H, int cx, i
 #endif // !WIN32 && !__APPLE_QUARTZ__
 
 void Fl_RGB_Image::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  if(fl_device->type() == Fl_Device::postscript_device) {
-    fl_device->draw(this, XP, YP, WP, HP, cx, cy);
-    return;
-  }
+  fl_device->draw(this, XP, YP, WP, HP, cx, cy);
+}
+
+void Fl_RGB_Image::generic_device_draw(int XP, int YP, int WP, int HP, int cx, int cy) {
   // Don't draw an empty image...
   if (!d() || !array) {
     draw_empty(XP, YP);
diff --git a/src/Fl_Pixmap.cxx b/src/Fl_Pixmap.cxx
index eb030c615..0bb602e8e 100644
--- a/src/Fl_Pixmap.cxx
+++ b/src/Fl_Pixmap.cxx
@@ -74,10 +74,10 @@ void Fl_Pixmap::measure() {
 }
 
 void Fl_Pixmap::draw(int XP, int YP, int WP, int HP, int cx, int cy) {
-  if(fl_device->type() == Fl_Device::postscript_device) {
-    fl_device->draw(this, XP, YP, WP, HP, cx, cy);
-    return;
-    }
+  fl_device->draw(this, XP, YP, WP, HP, cx, cy);
+}
+
+void Fl_Pixmap::generic_device_draw(int XP, int YP, int WP, int HP, int cx, int cy) {
   // ignore empty or bad pixmap data:
   if (!data()) {
     draw_empty(XP, YP);
-- 
GitLab