From 3f3a9c7fafaaffd070b0e07ece7c4ee8bda505bd Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 12 Oct 2019 09:44:19 +0200 Subject: [PATCH] focus text input on popup dialogs --- src/node_dialog_layer_rename.cpp | 7 + src/node_dialog_layer_rename.h | 3 +- src/node_dialog_open.cpp | 14 ++ src/node_dialog_open.h | 2 + src/node_text_input.cpp | 11 + src/node_text_input.h | 1 + webgl/src/index.html | 363 ------------------------------- 7 files changed, 37 insertions(+), 364 deletions(-) delete mode 100644 webgl/src/index.html diff --git a/src/node_dialog_layer_rename.cpp b/src/node_dialog_layer_rename.cpp index 604ae27..6f3a033 100644 --- a/src/node_dialog_layer_rename.cpp +++ b/src/node_dialog_layer_rename.cpp @@ -42,3 +42,10 @@ std::string NodeDialogLayerRename::get_name() { return input ? input->m_text : ""; } + +void NodeDialogLayerRename::added(Node* parent) +{ + Node::added(parent); + if (added_to_root()) + input->key_capture(); +} diff --git a/src/node_dialog_layer_rename.h b/src/node_dialog_layer_rename.h index 955e2b3..932cedb 100644 --- a/src/node_dialog_layer_rename.h +++ b/src/node_dialog_layer_rename.h @@ -12,7 +12,8 @@ public: virtual Node* clone_instantiate() const override; virtual void clone_finalize(Node* dest) const override; virtual void init() override; - void init_controls(); virtual void loaded() override; + virtual void added(Node* parent) override; + void init_controls(); std::string get_name(); }; diff --git a/src/node_dialog_open.cpp b/src/node_dialog_open.cpp index 55cb432..bbd2335 100644 --- a/src/node_dialog_open.cpp +++ b/src/node_dialog_open.cpp @@ -217,6 +217,13 @@ void NodeDialogSave::loaded() } +void NodeDialogSave::added(Node* parent) +{ + Node::added(parent); + if (added_to_root()) + input->key_capture(); +} + ////////////////////////////////////////////////////////////////// Node* NodeDialogNewDoc::clone_instantiate() const @@ -274,3 +281,10 @@ void NodeDialogNewDoc::loaded() { } + +void NodeDialogNewDoc::added(Node* parent) +{ + Node::added(parent); + if (added_to_root()) + input->key_capture(); +} diff --git a/src/node_dialog_open.h b/src/node_dialog_open.h index ccd8f47..03d831f 100644 --- a/src/node_dialog_open.h +++ b/src/node_dialog_open.h @@ -59,6 +59,7 @@ public: virtual void init() override; void init_controls(); virtual void loaded() override; + virtual void added(Node* parent) override; }; class NodeDialogNewDoc : public NodeBorder @@ -75,4 +76,5 @@ public: virtual void init() override; void init_controls(); virtual void loaded() override; + virtual void added(Node* parent) override; }; diff --git a/src/node_text_input.cpp b/src/node_text_input.cpp index d3d576f..5765351 100644 --- a/src/node_text_input.cpp +++ b/src/node_text_input.cpp @@ -63,6 +63,8 @@ kEventResult NodeTextInput::handle_event(Event* e) m_cursor_visible = true; break; case kEventType::KeyDown: + if (!has_focus()) + return kEventResult::Available; //switch (ke->m_key) //{ //case VK_BACK: @@ -74,6 +76,8 @@ kEventResult NodeTextInput::handle_event(Event* e) //} break; case kEventType::KeyUp: + if (!has_focus()) + return kEventResult::Available; if (ke->m_key == kKey::KeyEnter && on_return) on_return(this); if (ke->m_key == kKey::KeyBackspace) @@ -86,6 +90,8 @@ kEventResult NodeTextInput::handle_event(Event* e) } break; case kEventType::KeyChar: + if (!has_focus()) + return kEventResult::Available; timer = 0; m_cursor_visible = true; if (ke->m_char == '\b' // backspace @@ -163,6 +169,11 @@ void NodeTextInput::update_layout() m_off.x = (w - m_text_mesh.bb.x) + pad[3]; } +bool NodeTextInput::has_focus() noexcept +{ + return root()->current_key_capture.get() == this; +} + void NodeTextInput::handle_resize(glm::vec2 old_size, glm::vec2 new_size, float zoom) { auto pad = GetPadding(); diff --git a/src/node_text_input.h b/src/node_text_input.h index 1395a5c..3a41af5 100644 --- a/src/node_text_input.h +++ b/src/node_text_input.h @@ -41,4 +41,5 @@ public: void set_text(const std::string& s); void set_text_format(const char* fmt, ...); void update_layout(); + bool has_focus() noexcept; }; diff --git a/webgl/src/index.html b/webgl/src/index.html deleted file mode 100644 index 5062b9a..0000000 --- a/webgl/src/index.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - - - - - PanoPainter - WebGL - - - - - - -
-
-
-
Downloading...
-
-
- -
- - - - - - - -