From 79c7602cbc55417bed375f9f4e60a42456914d28 Mon Sep 17 00:00:00 2001 From: Cary Sandvig Date: Wed, 21 Feb 2001 07:16:39 +0000 Subject: [PATCH] cleanup functioning --- panda/src/gui/guiButton.I | 6 ++++++ panda/src/gui/guiButton.cxx | 14 ++++++++++++++ panda/src/testbed/gui_demo.cxx | 34 +++++++++++++++++++++++++--------- 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/panda/src/gui/guiButton.I b/panda/src/gui/guiButton.I index 07c8973297..14194cc3a7 100644 --- a/panda/src/gui/guiButton.I +++ b/panda/src/gui/guiButton.I @@ -48,6 +48,9 @@ INLINE void GuiButton::up(void) { case INACTIVE_ROLLOVER: switch_state(UP_ROLLOVER); break; + case UP: + case UP_ROLLOVER: + break; default: gui_cat->warning() << "got up from invalid state (" << (int)_state << ")," << " button '" << this->get_name() << "'" << endl; @@ -64,6 +67,9 @@ INLINE void GuiButton::down(void) { case INACTIVE_ROLLOVER: switch_state(DOWN_ROLLOVER); break; + case DOWN: + case DOWN_ROLLOVER: + break; default: gui_cat->warning() << "got down from invalid state (" << (int)_state << "), button '" << this->get_name() << "'" << endl; diff --git a/panda/src/gui/guiButton.cxx b/panda/src/gui/guiButton.cxx index 9f7eeb1e29..92ae611a8b 100644 --- a/panda/src/gui/guiButton.cxx +++ b/panda/src/gui/guiButton.cxx @@ -112,6 +112,7 @@ static void click_button_up(CPT_Event e) { void GuiButton::switch_state(GuiButton::States nstate) { test_ref_count_integrity(); + States ostate = _state; // cleanup old state switch (_state) { case NONE: @@ -154,6 +155,8 @@ void GuiButton::switch_state(GuiButton::States nstate) { } else gui_cat->debug() << "_up_event is empty!" << endl; _rgn->trap_clicks(true); + if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER)) + _mgr->add_region(_rgn); break; case UP_ROLLOVER: if (_up_rollover != (GuiLabel*)0L) { @@ -174,6 +177,8 @@ void GuiButton::switch_state(GuiButton::States nstate) { _state = UP; } _rgn->trap_clicks(true); + if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER)) + _mgr->add_region(_rgn); break; case DOWN: _mgr->add_label(_down); @@ -182,6 +187,8 @@ void GuiButton::switch_state(GuiButton::States nstate) { else gui_cat->debug() << "_down_event is empty!" << endl; _rgn->trap_clicks(true); + if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER)) + _mgr->add_region(_rgn); break; case DOWN_ROLLOVER: if (_down_rollover != (GuiLabel*)0L) { @@ -199,6 +206,8 @@ void GuiButton::switch_state(GuiButton::States nstate) { _state = DOWN; } _rgn->trap_clicks(true); + if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER)) + _mgr->add_region(_rgn); break; case INACTIVE: if (_inactive != (GuiLabel*)0L) { @@ -207,6 +216,8 @@ void GuiButton::switch_state(GuiButton::States nstate) { throw_event(_inactive_event); } _rgn->trap_clicks(false); + if ((ostate != INACTIVE) && (ostate != INACTIVE_ROLLOVER)) + _mgr->remove_region(_rgn); break; case INACTIVE_ROLLOVER: if (_inactive != (GuiLabel*)0L) { @@ -215,11 +226,14 @@ void GuiButton::switch_state(GuiButton::States nstate) { throw_event(_inactive_event); } _rgn->trap_clicks(false); + if ((ostate != INACTIVE) && (ostate != INACTIVE_ROLLOVER)) + _mgr->remove_region(_rgn); break; default: gui_cat->warning() << "switched to invalid state (" << (int)_state << ")" << endl; } + _mgr->recompute_priorities(); } void GuiButton::recompute_frame(void) { diff --git a/panda/src/testbed/gui_demo.cxx b/panda/src/testbed/gui_demo.cxx index e5e68fa702..f0ee01d8d4 100644 --- a/panda/src/testbed/gui_demo.cxx +++ b/panda/src/testbed/gui_demo.cxx @@ -650,25 +650,27 @@ static void test11(GuiManager* mgr, Node* font) { cout << *lb1; } +PT(GuiButton) gb1; + static void test12(GuiManager* mgr, Node* font) { GuiLabel* l1 = GuiLabel::make_simple_text_label("up", font); GuiLabel* l2 = GuiLabel::make_simple_text_label("upr", font); GuiLabel* l3 = GuiLabel::make_simple_text_label("down", font); GuiLabel* l4 = GuiLabel::make_simple_text_label("downr", font); GuiLabel* l5 = GuiLabel::make_simple_text_label("none", font); - GuiButton* b1 = new GuiButton("test12", l1, l2, l3, l4, l5); - b1->set_scale(0.1); - b1->set_pos(LVector3f::rfu(-0.25, 0., 0.25)); + gb1 = new GuiButton("test12", l1, l2, l3, l4, l5); + gb1->set_scale(0.1); + gb1->set_pos(LVector3f::rfu(-0.25, 0., 0.25)); l2->set_foreground_color(1., 1., 0., 1.); l4->set_foreground_color(1., 1., 0., 1.); l1->set_background_color(0., 0., 0., 1.); l2->set_background_color(0., 0., 0., 1.); l3->set_background_color(1., 1., 1., 0.5); l4->set_background_color(1., 1., 1., 0.5); - b1->thaw(); - b1->manage(mgr, event_handler); - b1->set_behavior_event("demo-event-thing"); - b1->start_behavior(); + gb1->thaw(); + gb1->manage(mgr, event_handler); + gb1->set_behavior_event("demo-event-thing"); + gb1->start_behavior(); } static void test13(GuiManager* mgr, Node* font) { @@ -1082,6 +1084,13 @@ static void event_3(CPT_Event) { } */ +/* +// for test 12 +static void event_3(CPT_Event) { + gb1->inactive(); +} +*/ + // for test 14-16 static void event_3(CPT_Event) { ch1->move_prev(); @@ -1095,6 +1104,13 @@ static void event_4(CPT_Event) { } */ +/* +// for test 12 +static void event_4(CPT_Event) { + gb1->up(); +} +*/ + // for test 14-16 static void event_4(CPT_Event) { ch1->move_next(); @@ -1109,9 +1125,9 @@ void gui_keys(EventHandler&) { have_dlight = true; event_handler.add_hook("2", event_2); - // for tests 7-11, 13-16 + // for tests 7-16 event_handler.add_hook("3", event_3); - // for test 11, 13-16 + // for test 11-16 event_handler.add_hook("4", event_4); event_handler.add_hook("demo-event-thing", event_demo); }