summaryrefslogtreecommitdiff
path: root/src/gui/modalMenu.h
diff options
context:
space:
mode:
authorZughy <63455151+Zughy@users.noreply.github.com>2020-07-14 22:37:28 +0200
committerGitHub <noreply@github.com>2020-07-14 22:37:28 +0200
commitcfaef5b1cfc8ec7463a2e8aec420bfc3a434f9c1 (patch)
treec855483f15c175f30a5ac2d44497a87f824f7d84 /src/gui/modalMenu.h
parent4b4513a67d9fc426d0f33798d0810a3a0594baaf (diff)
downloadminetest-cfaef5b1cfc8ec7463a2e8aec420bfc3a434f9c1.tar.gz
minetest-cfaef5b1cfc8ec7463a2e8aec420bfc3a434f9c1.tar.bz2
minetest-cfaef5b1cfc8ec7463a2e8aec420bfc3a434f9c1.zip
Formspecs: volume and key settings windows can now be closed by doubleclicking/tapping (#10128)
Co-authored-by: Xx_Crazyminer_xX <carlo.digioia@hotmail.it> Co-authored-by: Marco <4279489-marco_a@users.noreply.gitlab.com>
Diffstat (limited to 'src/gui/modalMenu.h')
-rw-r--r--src/gui/modalMenu.h28
1 files changed, 25 insertions, 3 deletions
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;