Author: manolo
Date: 2012-05-18 06:18:58 -0700 (Fri, 18 May 2012)
New Revision: 9528
Log:
Fixed fltk3::ColorChooser under WIN2 & X11 for group-relative coordinates.

Modified:
   branches/branch-3.0/src/fltk3/Image.cxx
   branches/branch-3.0/src/fltk3/draw_image.cxx
   branches/branch-3.0/src/fltk3/win32_draw_image.cxx

Modified: branches/branch-3.0/src/fltk3/Image.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Image.cxx     2012-05-18 09:58:22 UTC (rev 
9527)
+++ branches/branch-3.0/src/fltk3/Image.cxx     2012-05-18 13:18:58 UTC (rev 
9528)
@@ -520,6 +520,7 @@
   }
   if (!img->id_) {
     img->id_ = fl_create_offscreen(img->w(), img->h());
+    fltk3::push_origin(); fltk3::origin(0,0);
     if ((img->d() == 2 || img->d() == 4) && can_do_alpha_blending()) {
       fl_begin_offscreen((fltk3::Offscreen)img->id_);
       fltk3::draw_image(img->array, 0, 0, img->w(), img->h(), 
img->d()|fltk3::IMAGE_WITH_ALPHA, img->ld());
@@ -532,6 +533,7 @@
         img->mask_ = fl_create_alphamask(img->w(), img->h(), img->d(), 
img->ld(), img->array);
       }
     }
+    fltk3::pop_origin();
   }
   if (img->mask_) {
     HDC new_gc = CreateCompatibleDC(fl_gc);
@@ -564,7 +566,9 @@
     if (img->d() == 1 || img->d() == 3) {
       img->id_ = fl_create_offscreen(img->w(), img->h());
       fl_begin_offscreen((fltk3::Offscreen)img->id_);
+      fltk3::push_origin(); fltk3::origin(0,0);
       fltk3::draw_image(img->array, 0, 0, img->w(), img->h(), img->d(), 
img->ld());
+      fltk3::pop_origin();
       fl_end_offscreen();
     }
   }

Modified: branches/branch-3.0/src/fltk3/draw_image.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/draw_image.cxx        2012-05-18 09:58:22 UTC 
(rev 9527)
+++ branches/branch-3.0/src/fltk3/draw_image.cxx        2012-05-18 13:18:58 UTC 
(rev 9528)
@@ -462,13 +462,14 @@
                    int delta, int linedelta, int mono,
                    fltk3::DrawImageCb cb, void* userdata)
 {
+  // here, X,Y are window-relative coordinates
   if (!linedelta) linedelta = W*delta;
 
   int dx, dy, w, h;
-  
fltk3::clip_box(X-fltk3::graphics_driver->origin_x(),Y-fltk3::graphics_driver->origin_y(),W,H,dx,dy,w,h);
+  fltk3::push_origin(); fltk3::origin(0,0);
+  fltk3::clip_box(X,Y,W,H,dx,dy,w,h);
+  fltk3::pop_origin();
   if (w<=0 || h<=0) return;
-  dx += fltk3::graphics_driver->origin_x();
-  dy += fltk3::graphics_driver->origin_y();
   dx -= X;
   dy -= Y;
 
@@ -548,18 +549,18 @@
 }
 
 void fltk3::XlibGraphicsDriver::draw_image(const uchar* buf, int x, int y, int 
w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,(d<3&&d>-3),0,0);
+  innards(buf,x+origin_x(),y+origin_y(),w,h,d,l,(d<3&&d>-3),0,0);
 }
 void fltk3::XlibGraphicsDriver::draw_image(fltk3::DrawImageCb cb, void* data,
                   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
+  innards(0,x+origin_x(),y+origin_y(),w,h,d,0,(d<3&&d>-3),cb,data);
 }
 void fltk3::XlibGraphicsDriver::draw_image_mono(const uchar* buf, int x, int 
y, int w, int h, int d, int l){
-  innards(buf,x,y,w,h,d,l,1,0,0);
+  innards(buf,x+origin_x(),y+origin_y(),w,h,d,l,1,0,0);
 }
 void fltk3::XlibGraphicsDriver::draw_image_mono(fltk3::DrawImageCb cb, void* 
data,
                   int x, int y, int w, int h,int d) {
-  innards(0,x,y,w,h,d,0,1,cb,data);
+  innards(0,x+origin_x(),y+origin_y(),w,h,d,0,1,cb,data);
 }
 
 void fltk3::rectf(int x, int y, int w, int h, uchar r, uchar g, uchar b) {
@@ -569,7 +570,7 @@
   } else {
     uchar c[3];
     c[0] = r; c[1] = g; c[2] = b;
-    innards(c,x,y,w,h,0,0,0,0,0);
+    innards(c,x+origin_x(),y+origin_y(),w,h,0,0,0,0,0);
   }
 }
 

Modified: branches/branch-3.0/src/fltk3/win32_draw_image.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/win32_draw_image.cxx  2012-05-18 09:58:22 UTC 
(rev 9527)
+++ branches/branch-3.0/src/fltk3/win32_draw_image.cxx  2012-05-18 13:18:58 UTC 
(rev 9528)
@@ -129,7 +129,9 @@
   if (!linedelta) linedelta = W*delta;
 
   int x, y, w, h;
+  fltk3::push_origin(); fltk3::origin(0,0);
   fltk3::clip_box(X,Y,W,H,x,y,w,h);
+  fltk3::pop_origin();
   if (w<=0 || h<=0) return;
   if (buf) buf += (x-X)*delta + (y-Y)*linedelta;
 
@@ -289,6 +291,7 @@
 static int fl_abs(int v) { return v<0 ? -v : v; }
 
 void fltk3::GDIGraphicsDriver::draw_image(const uchar* buf, int x, int y, int 
w, int h, int d, int l){
+  x += origin_x(); y += origin_y();
   if (fl_abs(d)&fltk3::IMAGE_WITH_ALPHA) {
     d ^= fltk3::IMAGE_WITH_ALPHA;
     innards(buf,x,y,w,h,d,l,fl_abs(d),0,0);
@@ -299,6 +302,7 @@
 
 void fltk3::GDIGraphicsDriver::draw_image(fltk3::DrawImageCb cb, void* data,
                   int x, int y, int w, int h,int d) {
+  x += origin_x(); y += origin_y();
   if (fl_abs(d)&fltk3::IMAGE_WITH_ALPHA) {
     d ^= fltk3::IMAGE_WITH_ALPHA;
     innards(0,x,y,w,h,d,0,(d<3&&d>-3),cb,data);
@@ -308,6 +312,7 @@
 }
 
 void fltk3::GDIGraphicsDriver::draw_image_mono(const uchar* buf, int x, int y, 
int w, int h, int d, int l){
+  x += origin_x(); y += origin_y();
   if (fl_abs(d)&fltk3::IMAGE_WITH_ALPHA) {
     d ^= fltk3::IMAGE_WITH_ALPHA;
     innards(buf,x,y,w,h,d,l,1,0,0);
@@ -318,6 +323,7 @@
 
 void fltk3::GDIGraphicsDriver::draw_image_mono(fltk3::DrawImageCb cb, void* 
data,
                   int x, int y, int w, int h,int d) {
+  x += origin_x(); y += origin_y();
   if (fl_abs(d)&fltk3::IMAGE_WITH_ALPHA) {
     d ^= fltk3::IMAGE_WITH_ALPHA;
     innards(0,x,y,w,h,d,0,1,cb,data);
@@ -332,7 +338,7 @@
   if (fl_palette) {
     uchar c[3];
     c[0] = r; c[1] = g; c[2] = b;
-    innards(c,x,y,w,h,0,0,0,0,0);
+    innards(c,x+origin_x(),y+origin_y(),w,h,0,0,0,0,0);
     return;
   }
 #endif

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to