Author: manolo
Date: 2012-05-15 02:31:29 -0700 (Tue, 15 May 2012)
New Revision: 9496
Log:
Completed compatibility with FLTK1 in relation to group-relative FLTK3 
coordinates.

Modified:
   branches/branch-3.0/include/FL/Fl_Widget.H
   branches/branch-3.0/include/fltk3/Wrapper.h

Modified: branches/branch-3.0/include/FL/Fl_Widget.H
===================================================================
--- branches/branch-3.0/include/FL/Fl_Widget.H  2012-05-14 21:39:08 UTC (rev 
9495)
+++ branches/branch-3.0/include/FL/Fl_Widget.H  2012-05-15 09:31:29 UTC (rev 
9496)
@@ -106,11 +106,11 @@
   }
   
   void x(int v) {
-    ((fltk3::Widget_I*)_p)->x(v);
+    ((fltk3::Widget_I*)_p)->x(_ctor_dx(v));
   }
   
   void y(int v) {
-    ((fltk3::Widget_I*)_p)->y(v);
+    ((fltk3::Widget_I*)_p)->y(_ctor_dy(v));
   }
   
   void w(int v) {
@@ -134,11 +134,15 @@
   }
   
   void draw_box() const {
+    fltk3::push_origin(); fltk3::origin(x(), y());
     ((fltk3::Widget_I*)_p)->draw_box();
+    fltk3::pop_origin();
   }
   
   void draw_box(Fl_Boxtype t, Fl_Color c) const {
+    fltk3::push_origin(); fltk3::origin(x(), y());
     ((fltk3::Widget_I*)_p)->draw_box(fltk3::_1to3_boxtype(t), 
fltk3::_1to3_color(c));
+    fltk3::pop_origin();
   }
   
   void draw_box(Fl_Boxtype t, int x,int y,int w,int h, Fl_Color c) const {
@@ -146,7 +150,9 @@
   }
   
   void draw_backdrop() const {
+    fltk3::push_origin(); fltk3::origin(x(), y());
     ((fltk3::Widget_I*)_p)->draw_backdrop();
+    fltk3::pop_origin();
   }
   
   void draw_focus() {
@@ -158,7 +164,9 @@
   }
   
   void draw_label() const {
+    fltk3::push_origin(); fltk3::origin(x(), y());
     ((fltk3::Widget_I*)_p)->draw_label();
+    fltk3::pop_origin();
   }
   
   void draw_label(int x, int y, int w, int h) const {
@@ -201,6 +209,7 @@
     _p->wrapper(this);
   }
 
+  
   virtual Fl_Group* as_group() {return 0;}
   
   virtual Fl_Window* as_window() {return 0;}
@@ -228,11 +237,11 @@
   }
   
   int x() const {
-    return ((fltk3::Widget_I*)_p)->x();
+    return ((fltk3::Widget_I*)_p)->dx_window();
   }
   
   int y() const {
-    return ((fltk3::Widget_I*)_p)->y();
+    return ((fltk3::Widget_I*)_p)->dy_window();
   }
   
   int w() const {
@@ -246,11 +255,15 @@
   int damage_resize(int,int,int,int);
   
   void position(int x, int y) {
-    ((fltk3::Widget_I*)_p)->position(x, y);;
+    if (!as_window() || !window()) { // except for top windows
+      x = _ctor_dx(x); // transform to group-relative coords
+      y = _ctor_dy(y);
+    }
+    ((fltk3::Widget_I*)_p)->position(x, y);
   }
   
   void size(int w, int h) {
-    ((fltk3::Widget_I*)_p)->size(w, h);;
+    ((fltk3::Widget_I*)_p)->size(w, h);
   }
   
   Fl_Align align() const {

Modified: branches/branch-3.0/include/fltk3/Wrapper.h
===================================================================
--- branches/branch-3.0/include/fltk3/Wrapper.h 2012-05-14 21:39:08 UTC (rev 
9495)
+++ branches/branch-3.0/include/fltk3/Wrapper.h 2012-05-15 09:31:29 UTC (rev 
9496)
@@ -151,21 +151,6 @@
 }
 */
 
-#define FLTK3_WRAPPER_VCALLS_OBJECT_DRAW(type, klass, proto, call, flag) \
-  virtual void proto { \
-    if ( pVCalls & pVCall##type##flag ) { \
-      fltk3::translate_origin(x(), y()); \
-      ((fltk3::klass*)_p)->call; \
-      fltk3::translate_origin(-x(), -y()); \
-    } else { \
-      pVCalls |= pVCall##type##flag; \
-      fltk3::translate_origin(x(), y()); \
-      ((fltk3::klass*)_p)->call; \
-      fltk3::translate_origin(-x(), -y()); \
-      pVCalls &= ~pVCall##type##flag; \
-    } \
-  }
-
 #define FLTK3_WRAPPER_VCALLS_OBJECT(type, klass, proto, call, flag) \
 virtual void proto { \
   if ( pVCalls & pVCall##type##flag ) { \
@@ -205,16 +190,6 @@
     return; \
   }
 
-#define FLTK3_OBJECT_VCALLS_WRAPPER_DRAW(type, call, flag) \
-  if (pWrapper && !(pWrapper->pVCalls & Wrapper::pVCall##type##flag) ) { \
-    pWrapper->pVCalls |= Wrapper::pVCall##type##flag; \
-    fltk3::translate_origin(-x(), -y()); \
-    ((type##Wrapper*)pWrapper)->call; \
-    fltk3::translate_origin(x(), y()); \
-    pWrapper->pVCalls &= ~Wrapper::pVCall##type##flag; \
-    return; \
-  }
-
 #define FLTK3_OBJECT_VCALLS_WRAPPER(type, call, flag) \
   if (pWrapper && !(pWrapper->pVCalls & Wrapper::pVCall##type##flag) ) { \
     pWrapper->pVCalls |= Wrapper::pVCall##type##flag; \
@@ -261,12 +236,27 @@
         type3::hide(); \
       } \
       void resize(int X, int Y, int W, int H) { \
-        FLTK3_WIDGET_VCALLS_WRAPPER(resize(X, Y, W, H), Resize) \
-        type3::resize(X, Y, W, H); \
+       if (pWrapper && !(pWrapper->pVCalls & Wrapper::pVCallWidgetResize) ) { \
+         pWrapper->pVCalls |= Wrapper::pVCallWidgetResize; \
+         ((WidgetWrapper*)pWrapper)->resize(X + origin_x(), Y + origin_y(), W, 
H); \
+         pWrapper->pVCalls &= ~Wrapper::pVCallWidgetResize; \
+         return; \
+       } \
+       type3::resize(X - origin_x(), Y - origin_y(), W, H); \
       } \
       void draw() { \
-        FLTK3_OBJECT_VCALLS_WRAPPER_DRAW(Widget, draw(), Draw) \
-        type3::draw(); \
+       if (pWrapper && !(pWrapper->pVCalls & Wrapper::pVCallWidgetDraw) ) { \
+         pWrapper->pVCalls |= Wrapper::pVCallWidgetDraw; \
+         push_origin(); origin(0, 0); \
+         ((WidgetWrapper*)pWrapper)->draw(); \
+         pop_origin(); \
+         pWrapper->pVCalls &= ~Wrapper::pVCallWidgetDraw; \
+         return; \
+       } \
+       push_origin(); \
+       origin( as_window()?0:dx_window(), as_window()?0:dy_window() ); \
+       type3::draw(); \
+       pop_origin(); \
       } \
       int handle(int event) { \
         FLTK3_WIDGET_VCALLS_WRAPPER_RET(int, handle(event), Handle) \
@@ -349,7 +339,7 @@
   FLTK3_WRAPPER_VCALLS_OBJECT_DTOR(type1, type3##_I) \
   FLTK3_WRAPPER_VCALLS_WIDGET(type3##_I, show(), show(), Show) \
   FLTK3_WRAPPER_VCALLS_WIDGET(type3##_I, hide(), hide(), Hide) \
-  FLTK3_WRAPPER_VCALLS_OBJECT_DRAW(Widget, type3##_I, draw(), draw(), Draw) \
+  FLTK3_WRAPPER_VCALLS_WIDGET(type3##_I, draw(), draw(), Draw) \
   FLTK3_WRAPPER_VCALLS_WIDGET(type3##_I, resize(int x, int y, int w, int h), 
resize(x, y, w, h), Resize) \
   FLTK3_WRAPPER_VCALLS_WIDGET_RET(int, type3##_I, handle(int event), 
handle(event), Handle)
 
@@ -358,18 +348,7 @@
   FLTK3_WIDGET_VCALLS(type1, type3) \
   FLTK3_WRAPPER_VCALLS_WIDGET(type3##_I, draw_overlay(), draw_overlay(), 
DrawOverlay)
 
-/*
 #define FLTK3_IMAGE_VCALLS(type1, type3) \
-  FLTK3_WRAPPER_VCALLS_OBJECT_DTOR(type1, type3##_I) \
-  FLTK3_WRAPPER_VCALLS_IMAGE_RET(fltk3::Image *, type3##_I, copy(int w, int 
h), copy(w, h), CopyWH) \
-  FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, color_average(Fl_Color c, float i), 
color_average(fltk3::_1to3_color(c), i), ColorAverage) \
-  FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, desaturate(), desaturate(), 
Desaturate) \
-  FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, label(Fl_Widget *w), 
label(fltk3::_1to3_widget(w)), LabelW) \
-  FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, label(Fl_Menu_Item *w), 
label((fltk3::MenuItem*)w), LabelM) \
-  FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, draw(int X, int Y, int W, int H, int 
cx=0, int cy=0), draw(X, Y, W, H, cx, cy), Draw) \
-  FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, uncache(), uncache(), Uncache)
-*/
-#define FLTK3_IMAGE_VCALLS(type1, type3) \
 FLTK3_WRAPPER_VCALLS_OBJECT_DTOR(type1, type3##_I) \
 FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, color_average(Fl_Color c, float i), 
color_average(fltk3::_1to3_color(c), i), ColorAverage) \
 FLTK3_WRAPPER_VCALLS_IMAGE(type3##_I, desaturate(), desaturate(), Desaturate) \

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

Reply via email to