From cfaef5b1cfc8ec7463a2e8aec420bfc3a434f9c1 Mon Sep 17 00:00:00 2001 From: Zughy <63455151+Zughy@users.noreply.github.com> Date: Tue, 14 Jul 2020 22:37:28 +0200 Subject: Formspecs: volume and key settings windows can now be closed by doubleclicking/tapping (#10128) Co-authored-by: Xx_Crazyminer_xX Co-authored-by: Marco <4279489-marco_a@users.noreply.gitlab.com> --- src/gui/modalMenu.h | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'src/gui/modalMenu.h') diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h index 5bd70bb84..1cb687f82 100644 --- a/src/gui/modalMenu.h +++ b/src/gui/modalMenu.h @@ -39,7 +39,7 @@ class GUIModalMenu : public gui::IGUIElement { public: GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, - IMenuManager *menumgr); + IMenuManager *menumgr, bool remap_dbl_click = true); virtual ~GUIModalMenu(); void allowFocusRemoval(bool allow); @@ -50,8 +50,8 @@ public: virtual void regenerateGui(v2u32 screensize) = 0; virtual void drawMenu() = 0; - virtual bool preprocessEvent(const SEvent& event); - virtual bool OnEvent(const SEvent& event) { return false; }; + virtual bool preprocessEvent(const SEvent &event); + virtual bool OnEvent(const SEvent &event) { return false; }; virtual bool pausesGame() { return false; } // Used for pause menu #ifdef __ANDROID__ virtual bool getAndroidUIInput() { return false; } @@ -62,6 +62,13 @@ protected: virtual std::wstring getLabelByID(s32 id) = 0; virtual std::string getNameByID(s32 id) = 0; + /** + * check if event is part of a double click + * @param event event to evaluate + * @return true/false if a doubleclick was detected + */ + bool DoubleClickDetection(const SEvent &event); + v2s32 m_pointer; v2s32 m_old_pointer; // Mouse position after previous mouse event v2u32 m_screensize_old; @@ -73,8 +80,23 @@ protected: #ifdef HAVE_TOUCHSCREENGUI bool m_touchscreen_visible = true; #endif + private: + struct clickpos + { + v2s32 pos; + s64 time; + }; + clickpos m_doubleclickdetect[2]; + IMenuManager *m_menumgr; + /* If true, remap a double-click (or double-tap) action to ESC. This is so + * that, for example, Android users can double-tap to close a formspec. + * + * This value can (currently) only be set by the class constructor + * and the default value for the setting is true. + */ + bool m_remap_dbl_click; // This might be necessary to expose to the implementation if it // wants to launch other menus bool m_allow_focus_removal = false; -- cgit v1.2.3