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