diff options
| author | Rémi Verschelde | 2017-02-12 23:12:18 +0100 |
|---|---|---|
| committer | GitHub | 2017-02-12 23:12:18 +0100 |
| commit | 53b7bbfccefe98060633a31ee8f3be3297fc3f15 (patch) | |
| tree | d6cfda19debbf806b3c037199f1612180ae1518f /scene/2d/screen_button.cpp | |
| parent | d791f5f06ede101ac1990e1f5da05af589c681a2 (diff) | |
| parent | 49e7e2cd2ac832c333a151ab31ef543fc4a31b28 (diff) | |
| download | godot-53b7bbfccefe98060633a31ee8f3be3297fc3f15.tar.gz godot-53b7bbfccefe98060633a31ee8f3be3297fc3f15.tar.zst godot-53b7bbfccefe98060633a31ee8f3be3297fc3f15.zip | |
Diffstat (limited to 'scene/2d/screen_button.cpp')
| -rw-r--r-- | scene/2d/screen_button.cpp | 137 |
1 files changed, 52 insertions, 85 deletions
diff --git a/scene/2d/screen_button.cpp b/scene/2d/screen_button.cpp index fa80a5928..94678e5e9 100644 --- a/scene/2d/screen_button.cpp +++ b/scene/2d/screen_button.cpp @@ -145,8 +145,12 @@ void TouchScreenButton::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { if (is_pressed()) - Input::get_singleton()->action_release(action); + _release(true); } break; + case NOTIFICATION_PAUSED: { + // So the button can be pressed again even though the release gets unhandled because of coming during pause + allow_repress=true; + } } } @@ -184,22 +188,7 @@ void TouchScreenButton::_input(const InputEvent& p_event) { if (p_event.type==InputEvent::SCREEN_TOUCH && !p_event.screen_touch.pressed && finger_pressed==p_event.screen_touch.index) { - emit_signal("released"); - - if (action_id!=-1) { - - Input::get_singleton()->action_release(action); - InputEvent ie; - ie.type=InputEvent::ACTION; - ie.ID=0; - ie.action.action=action_id; - ie.action.pressed=false; - get_tree()->input_event(ie); - } - finger_pressed=-1; - - update(); - + _release(); } if ((p_event.type==InputEvent::SCREEN_TOUCH && p_event.screen_touch.pressed)|| p_event.type==InputEvent::SCREEN_DRAG) { @@ -225,44 +214,12 @@ void TouchScreenButton::_input(const InputEvent& p_event) { if (touched) { - if (finger_pressed==-1) { - finger_pressed=p_event.screen_touch.index; - //emit change stuff - emit_signal("pressed"); - if (action_id!=-1) { - - Input::get_singleton()->action_press(action); - InputEvent ie; - ie.type=InputEvent::ACTION; - ie.ID=0; - ie.action.action=action_id; - ie.action.pressed=true; - get_tree()->input_event(ie); - } - - update(); + _press(p_event.screen_touch.index); } - } else { - if (finger_pressed!=-1) { - - emit_signal("released"); - - if (action_id!=-1) { - - Input::get_singleton()->action_release(action); - InputEvent ie; - ie.type=InputEvent::ACTION; - ie.ID=0; - ie.action.action=action_id; - ie.action.pressed=false; - get_tree()->input_event(ie); - } - finger_pressed=-1; - - update(); + _release(); } } @@ -280,7 +237,8 @@ void TouchScreenButton::_input(const InputEvent& p_event) { if (!is_visible_in_tree()) return; - if (finger_pressed!=-1) + const bool can_press=finger_pressed==-1 || allow_repress; + if (!can_press) return; //already fingering Point2 coord = (get_global_transform_with_canvas()).affine_inverse().xform(Point2(p_event.screen_touch.x,p_event.screen_touch.y)); @@ -311,48 +269,56 @@ void TouchScreenButton::_input(const InputEvent& p_event) { } - if (touched) { + _press(p_event.screen_touch.index); + } + } else { + if (p_event.screen_touch.index==finger_pressed) { + _release(); + } + } + } + } +} - finger_pressed=p_event.screen_touch.index; - //emit change stuff - emit_signal("pressed"); - if (action_id!=-1) { +void TouchScreenButton::_press(int p_finger_pressed) { - Input::get_singleton()->action_press(action); - InputEvent ie; - ie.type=InputEvent::ACTION; - ie.ID=0; - ie.action.action=action_id; - ie.action.pressed=true; - get_tree()->input_event(ie); - } - update(); + finger_pressed=p_finger_pressed; + allow_repress=false; - } - } else { + if (action_id!=-1) { + Input::get_singleton()->action_press(action); + InputEvent ie; + ie.type=InputEvent::ACTION; + ie.ID=0; + ie.action.action=action_id; + ie.action.pressed=true; + get_tree()->input_event(ie); + } - if (p_event.screen_touch.index==finger_pressed) { - //untouch + emit_signal("pressed"); + update(); +} - emit_signal("released"); +void TouchScreenButton::_release(bool p_exiting_tree) { - if (action_id!=-1) { + finger_pressed=-1; - Input::get_singleton()->action_release(action); - InputEvent ie; - ie.type=InputEvent::ACTION; - ie.ID=0; - ie.action.action=action_id; - ie.action.pressed=false; - get_tree()->input_event(ie); - } - finger_pressed=-1; - update(); - } - } - } + if (action_id!=-1) { + + Input::get_singleton()->action_release(action); + InputEvent ie; + ie.type=InputEvent::ACTION; + ie.ID=0; + ie.action.action=action_id; + ie.action.pressed=false; + get_tree()->input_event(ie); + } + + if (!p_exiting_tree) { + emit_signal("released"); + update(); } } @@ -440,6 +406,7 @@ void TouchScreenButton::_bind_methods() { TouchScreenButton::TouchScreenButton() { finger_pressed=-1; + allow_repress=false; action_id=-1; passby_press=false; visibility=VISIBILITY_ALWAYS; |
