From ccb5570892cae13b32cd7f136761738956d529d4 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Fri, 1 Apr 2022 17:42:42 +0300 Subject: [PATCH] Add ui::text_input event --- libs/app/include/psemek/app/ui_scene.hpp | 2 ++ libs/app/source/ui_scene.cpp | 6 ++++++ libs/ui/include/psemek/ui/controller.hpp | 1 + libs/ui/include/psemek/ui/element.hpp | 1 + libs/ui/include/psemek/ui/event.hpp | 7 ++++++- libs/ui/source/controller.cpp | 5 +++++ 6 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libs/app/include/psemek/app/ui_scene.hpp b/libs/app/include/psemek/app/ui_scene.hpp index de64b7c5..5d29224a 100644 --- a/libs/app/include/psemek/app/ui_scene.hpp +++ b/libs/app/include/psemek/app/ui_scene.hpp @@ -31,6 +31,8 @@ namespace psemek::app void on_key_down(SDL_Keycode key) override; void on_key_up(SDL_Keycode key) override; + void on_text_input(std::string_view text) override; + void update() override; void present() override; diff --git a/libs/app/source/ui_scene.cpp b/libs/app/source/ui_scene.cpp index acb3380a..22fbd7bd 100644 --- a/libs/app/source/ui_scene.cpp +++ b/libs/app/source/ui_scene.cpp @@ -88,6 +88,12 @@ namespace psemek::app controller_.event(ui::key_press{key, false}); } + void ui_scene::on_text_input(std::string_view text) + { + scene_base::on_text_input(text); + controller_.event(ui::text_input{text}); + } + void ui_scene::update() { controller_.update(update_clock_.restart().count()); diff --git a/libs/ui/include/psemek/ui/controller.hpp b/libs/ui/include/psemek/ui/controller.hpp index 90c44cd1..189a5091 100644 --- a/libs/ui/include/psemek/ui/controller.hpp +++ b/libs/ui/include/psemek/ui/controller.hpp @@ -28,6 +28,7 @@ namespace psemek::ui bool event(mouse_click const & e); bool event(mouse_wheel const & e); bool event(key_press const & e); + bool event(text_input const & e); void update(float dt); diff --git a/libs/ui/include/psemek/ui/element.hpp b/libs/ui/include/psemek/ui/element.hpp index 4999730a..eac11050 100644 --- a/libs/ui/include/psemek/ui/element.hpp +++ b/libs/ui/include/psemek/ui/element.hpp @@ -36,6 +36,7 @@ namespace psemek::ui virtual bool on_event(mouse_click const &) { return false; } virtual bool on_event(mouse_wheel const &) { return false; } virtual bool on_event(key_press const &) { return false; } + virtual bool on_event(text_input const &) { return false; } virtual struct shape const & shape() const = 0; virtual void reshape(geom::box const & bbox) = 0; diff --git a/libs/ui/include/psemek/ui/event.hpp b/libs/ui/include/psemek/ui/event.hpp index 3a5cc7eb..49844f22 100644 --- a/libs/ui/include/psemek/ui/event.hpp +++ b/libs/ui/include/psemek/ui/event.hpp @@ -38,6 +38,11 @@ namespace psemek::ui bool down; }; - using event_type_list = std::tuple; + struct text_input + { + std::string_view text; + }; + + using event_type_list = std::tuple; } diff --git a/libs/ui/source/controller.cpp b/libs/ui/source/controller.cpp index df2243e4..a4640f26 100644 --- a/libs/ui/source/controller.cpp +++ b/libs/ui/source/controller.cpp @@ -223,6 +223,11 @@ namespace psemek::ui return impl().event(e); } + bool controller::event(text_input const & e) + { + return impl().event(e); + } + void controller::update(float dt) { impl().update(dt);