Author: matt
Date: 2011-01-10 06:02:38 -0800 (Mon, 10 Jan 2011)
New Revision: 8241
Log:
Wrapper now uses multiple flags. Problems with virtual function distribution!

Modified:
   branches/branch-3.0-2011/fltk3/Wrapper.h
   branches/branch-3.0-2011/src/Fl_Widget.cxx

Modified: branches/branch-3.0-2011/fltk3/Wrapper.h
===================================================================
--- branches/branch-3.0-2011/fltk3/Wrapper.h    2011-01-10 12:42:17 UTC (rev 
8240)
+++ branches/branch-3.0-2011/fltk3/Wrapper.h    2011-01-10 14:02:38 UTC (rev 
8241)
@@ -47,6 +47,12 @@
     virtual ~Wrapper() { }
     
     unsigned int pVCalls;
+    static const unsigned int pVCallWidgetDraw   = 1<<0;
+    static const unsigned int pVCallWidgetHandle = 1<<1;
+    static const unsigned int pVCallWidgetResize = 1<<2;
+    static const unsigned int pVCallWidgetShow   = 1<<3;
+    static const unsigned int pVCallWidgetHide   = 1<<4;
+    
     virtual void draw() { /* call _p->draw() with a flag set */ }
   };
   
@@ -55,30 +61,30 @@
   public:
     virtual ~WidgetWrapper() {}
     virtual void draw() {
-      pVCalls |= 1;
+      pVCalls |= pVCallWidgetDraw;
       ((fltk3::Widget*)_p)->draw();
-      pVCalls &= ~1;
+      pVCalls &= ~pVCallWidgetDraw;
     }
     virtual int handle(int event) { 
-      pVCalls |= 1;
+      pVCalls |= pVCallWidgetHandle;
       int ret = ((fltk3::Widget*)_p)->handle(event);
-      pVCalls &= ~1;
+      pVCalls &= ~pVCallWidgetHandle;
       return ret;
     }
     virtual void resize(int x, int y, int w, int h) {
-      pVCalls |= 1;
+      pVCalls |= pVCallWidgetResize;
       ((fltk3::Widget*)_p)->resize(x, y, w, h);
-      pVCalls &= ~1;
+      pVCalls &= ~pVCallWidgetResize;
     }
     virtual void show() {
-      pVCalls |= 1;
+      pVCalls |= pVCallWidgetShow;
       ((fltk3::Widget*)_p)->show();
-      pVCalls &= ~1;
+      pVCalls &= ~pVCallWidgetShow;
     }
     virtual void hide() {
-      pVCalls |= 1;
+      pVCalls |= pVCallWidgetHide;
       ((fltk3::Widget*)_p)->hide();
-      pVCalls &= ~1;
+      pVCalls &= ~pVCallWidgetHide;
     }
   };
   

Modified: branches/branch-3.0-2011/src/Fl_Widget.cxx
===================================================================
--- branches/branch-3.0-2011/src/Fl_Widget.cxx  2011-01-10 12:42:17 UTC (rev 
8240)
+++ branches/branch-3.0-2011/src/Fl_Widget.cxx  2011-01-10 14:02:38 UTC (rev 
8241)
@@ -104,7 +104,15 @@
 }
 ////////////////////////////////////////////////////////////////
 
-int fltk3::Widget::handle(int) {
+int fltk3::Widget::handle(int event) {
+  if (pWrapper) {
+    int ret = 0;
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetHandle) )
+      ret = ((WidgetWrapper*)pWrapper)->handle(event);
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetHandle) )
+      return ret;
+    pWrapper->pVCalls &= ~Wrapper::pVCallWidgetHandle;
+  }
   return 0;
 }
 
@@ -139,6 +147,15 @@
 }
 
 void fltk3::Widget::resize(int X, int Y, int W, int H) {
+  /*
+  if (pWrapper) {
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetResize) )
+      ((WidgetWrapper*)pWrapper)->resize(X, Y, W, H);
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetResize) )
+      return;
+    pWrapper->pVCalls &= ~Wrapper::pVCallWidgetResize;
+  }
+  */
   x_ = X; y_ = Y; w_ = W; h_ = H;
 }
 
@@ -260,6 +277,13 @@
 }
 
 void fltk3::Widget::show() {
+  if (pWrapper) {
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetShow) )
+      ((WidgetWrapper*)pWrapper)->show();
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetShow) )
+      return;
+    pWrapper->pVCalls &= ~Wrapper::pVCallWidgetShow;
+  }
   if (!visible()) {
     clear_flag(INVISIBLE);
     if (visible_r()) {
@@ -272,6 +296,13 @@
 }
 
 void fltk3::Widget::hide() {
+  if (pWrapper) {
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetHide) )
+      ((WidgetWrapper*)pWrapper)->hide();
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetHide) )
+      return;
+    pWrapper->pVCalls &= ~Wrapper::pVCallWidgetHide;
+  }
   if (visible_r()) {
     set_flag(INVISIBLE);
     for (fltk3::Widget *p = parent(); p; p = p->parent())
@@ -343,11 +374,11 @@
 
 void fltk3::Widget::draw() {
   if (pWrapper) {
-    if ( !(pWrapper->pVCalls & 1) )
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetDraw) )
       pWrapper->draw();
-    if ( !(pWrapper->pVCalls & 1) )
+    if ( !(pWrapper->pVCalls & Wrapper::pVCallWidgetDraw) )
       return;
-    pWrapper->pVCalls &= ~1;
+    pWrapper->pVCalls &= ~Wrapper::pVCallWidgetDraw;
   }
   draw_box();
   draw_label();

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

Reply via email to