cleanup functioning

This commit is contained in:
Cary Sandvig 2001-02-21 07:16:39 +00:00
parent be7c5c62d8
commit 79c7602cbc
3 changed files with 45 additions and 9 deletions

View File

@ -48,6 +48,9 @@ INLINE void GuiButton::up(void) {
case INACTIVE_ROLLOVER: case INACTIVE_ROLLOVER:
switch_state(UP_ROLLOVER); switch_state(UP_ROLLOVER);
break; break;
case UP:
case UP_ROLLOVER:
break;
default: default:
gui_cat->warning() << "got up from invalid state (" << (int)_state << ")," gui_cat->warning() << "got up from invalid state (" << (int)_state << "),"
<< " button '" << this->get_name() << "'" << endl; << " button '" << this->get_name() << "'" << endl;
@ -64,6 +67,9 @@ INLINE void GuiButton::down(void) {
case INACTIVE_ROLLOVER: case INACTIVE_ROLLOVER:
switch_state(DOWN_ROLLOVER); switch_state(DOWN_ROLLOVER);
break; break;
case DOWN:
case DOWN_ROLLOVER:
break;
default: default:
gui_cat->warning() << "got down from invalid state (" << (int)_state gui_cat->warning() << "got down from invalid state (" << (int)_state
<< "), button '" << this->get_name() << "'" << endl; << "), button '" << this->get_name() << "'" << endl;

View File

@ -112,6 +112,7 @@ static void click_button_up(CPT_Event e) {
void GuiButton::switch_state(GuiButton::States nstate) { void GuiButton::switch_state(GuiButton::States nstate) {
test_ref_count_integrity(); test_ref_count_integrity();
States ostate = _state;
// cleanup old state // cleanup old state
switch (_state) { switch (_state) {
case NONE: case NONE:
@ -154,6 +155,8 @@ void GuiButton::switch_state(GuiButton::States nstate) {
} else } else
gui_cat->debug() << "_up_event is empty!" << endl; gui_cat->debug() << "_up_event is empty!" << endl;
_rgn->trap_clicks(true); _rgn->trap_clicks(true);
if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER))
_mgr->add_region(_rgn);
break; break;
case UP_ROLLOVER: case UP_ROLLOVER:
if (_up_rollover != (GuiLabel*)0L) { if (_up_rollover != (GuiLabel*)0L) {
@ -174,6 +177,8 @@ void GuiButton::switch_state(GuiButton::States nstate) {
_state = UP; _state = UP;
} }
_rgn->trap_clicks(true); _rgn->trap_clicks(true);
if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER))
_mgr->add_region(_rgn);
break; break;
case DOWN: case DOWN:
_mgr->add_label(_down); _mgr->add_label(_down);
@ -182,6 +187,8 @@ void GuiButton::switch_state(GuiButton::States nstate) {
else else
gui_cat->debug() << "_down_event is empty!" << endl; gui_cat->debug() << "_down_event is empty!" << endl;
_rgn->trap_clicks(true); _rgn->trap_clicks(true);
if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER))
_mgr->add_region(_rgn);
break; break;
case DOWN_ROLLOVER: case DOWN_ROLLOVER:
if (_down_rollover != (GuiLabel*)0L) { if (_down_rollover != (GuiLabel*)0L) {
@ -199,6 +206,8 @@ void GuiButton::switch_state(GuiButton::States nstate) {
_state = DOWN; _state = DOWN;
} }
_rgn->trap_clicks(true); _rgn->trap_clicks(true);
if ((ostate == INACTIVE) || (ostate == INACTIVE_ROLLOVER))
_mgr->add_region(_rgn);
break; break;
case INACTIVE: case INACTIVE:
if (_inactive != (GuiLabel*)0L) { if (_inactive != (GuiLabel*)0L) {
@ -207,6 +216,8 @@ void GuiButton::switch_state(GuiButton::States nstate) {
throw_event(_inactive_event); throw_event(_inactive_event);
} }
_rgn->trap_clicks(false); _rgn->trap_clicks(false);
if ((ostate != INACTIVE) && (ostate != INACTIVE_ROLLOVER))
_mgr->remove_region(_rgn);
break; break;
case INACTIVE_ROLLOVER: case INACTIVE_ROLLOVER:
if (_inactive != (GuiLabel*)0L) { if (_inactive != (GuiLabel*)0L) {
@ -215,11 +226,14 @@ void GuiButton::switch_state(GuiButton::States nstate) {
throw_event(_inactive_event); throw_event(_inactive_event);
} }
_rgn->trap_clicks(false); _rgn->trap_clicks(false);
if ((ostate != INACTIVE) && (ostate != INACTIVE_ROLLOVER))
_mgr->remove_region(_rgn);
break; break;
default: default:
gui_cat->warning() << "switched to invalid state (" << (int)_state << ")" gui_cat->warning() << "switched to invalid state (" << (int)_state << ")"
<< endl; << endl;
} }
_mgr->recompute_priorities();
} }
void GuiButton::recompute_frame(void) { void GuiButton::recompute_frame(void) {

View File

@ -650,25 +650,27 @@ static void test11(GuiManager* mgr, Node* font) {
cout << *lb1; cout << *lb1;
} }
PT(GuiButton) gb1;
static void test12(GuiManager* mgr, Node* font) { static void test12(GuiManager* mgr, Node* font) {
GuiLabel* l1 = GuiLabel::make_simple_text_label("up", font); GuiLabel* l1 = GuiLabel::make_simple_text_label("up", font);
GuiLabel* l2 = GuiLabel::make_simple_text_label("upr", font); GuiLabel* l2 = GuiLabel::make_simple_text_label("upr", font);
GuiLabel* l3 = GuiLabel::make_simple_text_label("down", font); GuiLabel* l3 = GuiLabel::make_simple_text_label("down", font);
GuiLabel* l4 = GuiLabel::make_simple_text_label("downr", font); GuiLabel* l4 = GuiLabel::make_simple_text_label("downr", font);
GuiLabel* l5 = GuiLabel::make_simple_text_label("none", font); GuiLabel* l5 = GuiLabel::make_simple_text_label("none", font);
GuiButton* b1 = new GuiButton("test12", l1, l2, l3, l4, l5); gb1 = new GuiButton("test12", l1, l2, l3, l4, l5);
b1->set_scale(0.1); gb1->set_scale(0.1);
b1->set_pos(LVector3f::rfu(-0.25, 0., 0.25)); gb1->set_pos(LVector3f::rfu(-0.25, 0., 0.25));
l2->set_foreground_color(1., 1., 0., 1.); l2->set_foreground_color(1., 1., 0., 1.);
l4->set_foreground_color(1., 1., 0., 1.); l4->set_foreground_color(1., 1., 0., 1.);
l1->set_background_color(0., 0., 0., 1.); l1->set_background_color(0., 0., 0., 1.);
l2->set_background_color(0., 0., 0., 1.); l2->set_background_color(0., 0., 0., 1.);
l3->set_background_color(1., 1., 1., 0.5); l3->set_background_color(1., 1., 1., 0.5);
l4->set_background_color(1., 1., 1., 0.5); l4->set_background_color(1., 1., 1., 0.5);
b1->thaw(); gb1->thaw();
b1->manage(mgr, event_handler); gb1->manage(mgr, event_handler);
b1->set_behavior_event("demo-event-thing"); gb1->set_behavior_event("demo-event-thing");
b1->start_behavior(); gb1->start_behavior();
} }
static void test13(GuiManager* mgr, Node* font) { 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 // for test 14-16
static void event_3(CPT_Event) { static void event_3(CPT_Event) {
ch1->move_prev(); 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 // for test 14-16
static void event_4(CPT_Event) { static void event_4(CPT_Event) {
ch1->move_next(); ch1->move_next();
@ -1109,9 +1125,9 @@ void gui_keys(EventHandler&) {
have_dlight = true; have_dlight = true;
event_handler.add_hook("2", event_2); event_handler.add_hook("2", event_2);
// for tests 7-11, 13-16 // for tests 7-16
event_handler.add_hook("3", event_3); 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("4", event_4);
event_handler.add_hook("demo-event-thing", event_demo); event_handler.add_hook("demo-event-thing", event_demo);
} }