Author: matt
Date: 2012-04-29 16:59:59 -0700 (Sun, 29 Apr 2012)
New Revision: 9409
Log:
Added basic event handling for group-relative mode. Not finished yet!

Modified:
   branches/branch-3.0/include/fltk3/Widget.h
   branches/branch-3.0/src/fltk3/Button.cxx
   branches/branch-3.0/src/fltk3/Group.cxx
   branches/branch-3.0/src/fltk3/run.cxx

Modified: branches/branch-3.0/include/fltk3/Widget.h
===================================================================
--- branches/branch-3.0/include/fltk3/Widget.h  2012-04-29 19:10:11 UTC (rev 
9408)
+++ branches/branch-3.0/include/fltk3/Widget.h  2012-04-29 23:59:59 UTC (rev 
9409)
@@ -787,13 +787,13 @@
      \see group_relative()
      */
     void set_window_relative() { flags_ &= ~GROUP_RELATIVE; }
-    int is_window_relative() const { return ((flags_|GROUP_RELATIVE)==0); }
+    int is_window_relative() const { return ((flags_&GROUP_RELATIVE)==0); }
     
     /** Use a local coordinte system for this group.
      \see window_relative()
      */
     void set_group_relative() { flags_ |= GROUP_RELATIVE; }
-    int is_group_relative() const { return 
((flags_|GROUP_RELATIVE)==GROUP_RELATIVE); }
+    int is_group_relative() const { return 
((flags_&GROUP_RELATIVE)==GROUP_RELATIVE); }
     
     /** Returns if the widget is able to take events.
      This is the same as (active() && !output() && visible())

Modified: branches/branch-3.0/src/fltk3/Button.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Button.cxx    2012-04-29 19:10:11 UTC (rev 
9408)
+++ branches/branch-3.0/src/fltk3/Button.cxx    2012-04-29 23:59:59 UTC (rev 
9409)
@@ -73,6 +73,7 @@
 }
 
 void fltk3::Button::draw() {
+  printf("Drawing button %s\n", label());
   if (type() == fltk3::HIDDEN_BUTTON) return;
   fltk3::Color col;
   if (value()) {
@@ -105,10 +106,12 @@
     if (fltk3::visible_focus() && handle(fltk3::FOCUS)) fltk3::focus(this);
   case fltk3::DRAG:
     if (fltk3::event_inside(this)) {
-      if (type() == fltk3::RADIO_BUTTON) newval = 1;
-      else newval = !oldval;
-    } else
-    {
+      if (type() == fltk3::RADIO_BUTTON) {
+        newval = 1;
+      } else {
+        newval = !oldval;
+      }
+    } else {
       clear_changed();
       newval = oldval;
     }

Modified: branches/branch-3.0/src/fltk3/Group.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Group.cxx     2012-04-29 19:10:11 UTC (rev 
9408)
+++ branches/branch-3.0/src/fltk3/Group.cxx     2012-04-29 23:59:59 UTC (rev 
9409)
@@ -100,7 +100,7 @@
 // windows so they are relative to that window.
 
 static int send(fltk3::Widget* o, int event) {
-  if ( o->type()<fltk3::WINDOW) {
+  if ( (o->type()<fltk3::WINDOW) && (o->is_window_relative()) ) {
     return o->handle(event);
   }
   switch ( event )
@@ -759,10 +759,21 @@
   \sa fltk3::Group::draw_child(fltk3::Widget& widget) const
 */
 void fltk3::Group::update_child(fltk3::Widget& widget) const {
-  if (widget.damage() && widget.visible() && widget.type() < fltk3::WINDOW &&
-      fltk3::not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
-    widget.draw();     
-    widget.clear_damage();
+  if (widget.is_group_relative()) {
+    push_origin();
+    translate_origin(widget.x(), widget.y());
+    if (widget.damage() && widget.visible() && widget.type() < fltk3::WINDOW &&
+        fltk3::not_clipped(0, 0, widget.w(), widget.h())) {
+      widget.draw();   
+      widget.clear_damage();
+    }
+    pop_origin();
+  } else {
+    if (widget.damage() && widget.visible() && widget.type() < fltk3::WINDOW &&
+        fltk3::not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
+      widget.draw();   
+      widget.clear_damage();
+    }
   }
 }
 
@@ -776,7 +787,7 @@
   if (widget.visible() && widget.type() < fltk3::WINDOW &&
       fltk3::not_clipped(widget.x(), widget.y(), widget.w(), widget.h())) {
     widget.clear_damage(fltk3::DAMAGE_ALL);
-    if (widget.flags()&fltk3::Widget::GROUP_RELATIVE) {
+    if (widget.is_group_relative()) {
       push_origin();
       translate_origin(widget.x(), widget.y());
       widget.draw();

Modified: branches/branch-3.0/src/fltk3/run.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/run.cxx       2012-04-29 19:10:11 UTC (rev 
9408)
+++ branches/branch-3.0/src/fltk3/run.cxx       2012-04-29 23:59:59 UTC (rev 
9409)
@@ -1033,23 +1033,6 @@
 // values to account for nested windows. 'window' is the outermost
 // window the event was posted to by the system:
 static int send(int event, fltk3::Widget* to, fltk3::Window* window) {
-  /*
-   
-   int dx = x(); int dy = y();
-   
-   for (Widget* p = parent(); p; p = p->parent()) {
-     // we may want to ignore hiearchy parents in a browser. Not figured
-     // out how to do this yet.
-     dx += p->x();
-     dy += p->y();
-   }
-   int save_x = e_x;
-   int save_y = e_y;
-   e_x = e_x_root-dx;
-   e_y = e_y_root-dy;
-   
-   */
-  
   int dx, dy;
   int old_event = fltk3::e_number;
   if (window) {
@@ -1059,7 +1042,7 @@
     dx = dy = 0;
   }
   for (const fltk3::Widget* w = to; w; w = w->parent()) {
-    if (w->type()>=fltk3::WINDOW || w->is_group_relative()) {
+    if ( (w->type()>=fltk3::WINDOW) || (w->is_group_relative())) {
       dx -= w->x(); dy -= w->y();
     }
   }
@@ -1672,6 +1655,10 @@
   // mark all parent widgets between this and window with fltk3::DAMAGE_CHILD:
   while (wi->type() < fltk3::WINDOW) {
     wi->damage_ |= fl;
+    if (wi->is_group_relative()) {
+      X += wi->x();
+      Y += wi->y();
+    }
     wi = wi->parent();
     if (!wi) return;
     fl = fltk3::DAMAGE_CHILD;
@@ -1685,6 +1672,8 @@
   if (W > wi->w()-X) W = wi->w()-X;
   if (H > wi->h()-Y) H = wi->h()-Y;
   if (W <= 0 || H <= 0) return;
+  
+  printf("DAMAGE %d %d %d %d\n", X, Y, W, H);
 
   if (!X && !Y && W==wi->w() && H==wi->h()) {
     // if damage covers entire window delete region:

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

Reply via email to