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