diff options
Diffstat (limited to 'scene/gui/base_button.cpp')
-rw-r--r-- | scene/gui/base_button.cpp | 66 |
1 files changed, 55 insertions, 11 deletions
diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index ac2417d539..0167687621 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -30,7 +30,7 @@ #include "os/keyboard.h" #include "print_string.h" #include "button_group.h" - +#include "scene/scene_string_names.h" void BaseButton::_input_event(InputEvent p_event) { @@ -56,13 +56,25 @@ void BaseButton::_input_event(InputEvent p_event) { if (!toggle_mode) { //mouse press attempt + status.press_attempt=true; + status.pressing_inside=true; + pressed(); + if (get_script_instance()) { + Variant::CallError ce; + get_script_instance()->call(SceneStringNames::get_singleton()->_pressed,NULL,0,ce); + } + emit_signal("pressed"); } else { status.pressed=!status.pressed; pressed(); + if (get_script_instance()) { + Variant::CallError ce; + get_script_instance()->call(SceneStringNames::get_singleton()->_pressed,NULL,0,ce); + } emit_signal("pressed"); toggled(status.pressed); @@ -71,8 +83,15 @@ void BaseButton::_input_event(InputEvent p_event) { } - } + } else { + if (status.press_attempt && status.pressing_inside) { +// released(); + emit_signal("released"); + } + status.press_attempt=false; + } + update(); break; } @@ -85,14 +104,19 @@ void BaseButton::_input_event(InputEvent p_event) { if (status.press_attempt &&status.pressing_inside) { - + if (!toggle_mode) { //mouse press attempt - + pressed(); - emit_signal("pressed"); + if (get_script_instance()) { + Variant::CallError ce; + get_script_instance()->call(SceneStringNames::get_singleton()->_pressed,NULL,0,ce); + } + + emit_signal("pressed"); } else { - + status.pressed=!status.pressed; pressed(); @@ -100,11 +124,15 @@ void BaseButton::_input_event(InputEvent p_event) { toggled(status.pressed); emit_signal("toggled",status.pressed); - + if (get_script_instance()) { + get_script_instance()->call(SceneStringNames::get_singleton()->_toggled,status.pressed); + } + + } - + } - + status.press_attempt=false; } @@ -167,6 +195,9 @@ void BaseButton::_input_event(InputEvent p_event) { emit_signal("pressed"); toggled(status.pressed); + if (get_script_instance()) { + get_script_instance()->call(SceneStringNames::get_singleton()->_toggled,status.pressed); + } emit_signal("toggled",status.pressed); } } @@ -201,7 +232,7 @@ void BaseButton::_notification(int p_what) { } } - if (p_what==NOTIFICATION_ENTER_SCENE) { + if (p_what==NOTIFICATION_ENTER_TREE) { CanvasItem *ci=this; while(ci) { @@ -217,7 +248,7 @@ void BaseButton::_notification(int p_what) { } } - if (p_what==NOTIFICATION_EXIT_SCENE) { + if (p_what==NOTIFICATION_EXIT_TREE) { if (group) group->_remove_button(this); @@ -336,6 +367,8 @@ bool BaseButton::get_click_on_press() const { } + + void BaseButton::_bind_methods() { ObjectTypeDB::bind_method(_MD("_input_event"),&BaseButton::_input_event); @@ -348,13 +381,24 @@ void BaseButton::_bind_methods() { ObjectTypeDB::bind_method(_MD("is_disabled"),&BaseButton::is_disabled); ObjectTypeDB::bind_method(_MD("set_click_on_press","enable"),&BaseButton::set_click_on_press); ObjectTypeDB::bind_method(_MD("get_click_on_press"),&BaseButton::get_click_on_press); + ObjectTypeDB::bind_method(_MD("get_draw_mode"),&BaseButton::get_draw_mode); + + BIND_VMETHOD(MethodInfo("_pressed")); + BIND_VMETHOD(MethodInfo("_toggled",PropertyInfo(Variant::BOOL,"pressed"))); ADD_SIGNAL( MethodInfo("pressed" ) ); + ADD_SIGNAL( MethodInfo("released" ) ); ADD_SIGNAL( MethodInfo("toggled", PropertyInfo( Variant::BOOL,"pressed") ) ); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "disabled"), _SCS("set_disabled"), _SCS("is_disabled")); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "toggle_mode"), _SCS("set_toggle_mode"), _SCS("is_toggle_mode")); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "click_on_press"), _SCS("set_click_on_press"), _SCS("get_click_on_press")); + + BIND_CONSTANT( DRAW_NORMAL ); + BIND_CONSTANT( DRAW_PRESSED ); + BIND_CONSTANT( DRAW_HOVER ); + BIND_CONSTANT( DRAW_DISABLED ); + } BaseButton::BaseButton() { |