From 323c8600450a5ae3893de9ba1d04095589c5b06c Mon Sep 17 00:00:00 2001 From: stujones11 Date: Sun, 24 Jun 2018 20:50:57 +0100 Subject: Move touchscreen input handling to base GUIModalMenu class --- src/gui/modalMenu.h | 113 +++++++++++++--------------------------------------- 1 file changed, 28 insertions(+), 85 deletions(-) (limited to 'src/gui/modalMenu.h') diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h index f41591c3f..8d32ad159 100644 --- a/src/gui/modalMenu.h +++ b/src/gui/modalMenu.h @@ -20,9 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #pragma once #include "irrlichttypes_extrabloated.h" -#ifdef HAVE_TOUCHSCREENGUI -#include "touchscreengui.h" -#endif +#include "util/string.h" class GUIModalMenu; @@ -34,101 +32,46 @@ public: virtual void deletingMenu(gui::IGUIElement *menu) = 0; }; -/* - Remember to drop() the menu after creating, so that it can - remove itself when it wants to. -*/ +// Remember to drop() the menu after creating, so that it can +// remove itself when it wants to. class GUIModalMenu : public gui::IGUIElement { public: GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent, s32 id, - IMenuManager *menumgr): - IGUIElement(gui::EGUIET_ELEMENT, env, parent, id, - core::rect(0,0,100,100)) - { - m_menumgr = menumgr; - - setVisible(true); - Environment->setFocus(this); - m_menumgr->createdMenu(this); - } - - virtual ~GUIModalMenu() - { - m_menumgr->deletingMenu(this); - } - - void allowFocusRemoval(bool allow) - { - m_allow_focus_removal = allow; - } - - bool canTakeFocus(gui::IGUIElement *e) - { - return (e && (e == this || isMyChild(e))) || m_allow_focus_removal; - } - - void draw() - { - if(!IsVisible) - return; - - video::IVideoDriver* driver = Environment->getVideoDriver(); - v2u32 screensize = driver->getScreenSize(); - if(screensize != m_screensize_old /*|| m_force_regenerate_gui*/) - { - m_screensize_old = screensize; - regenerateGui(screensize); - //m_force_regenerate_gui = false; - } - - drawMenu(); - } + IMenuManager *menumgr); + virtual ~GUIModalMenu(); - /* - This should be called when the menu wants to quit. - - WARNING: THIS DEALLOCATES THE MENU FROM MEMORY. Return - immediately if you call this from the menu itself. - - (More precisely, this decrements the reference count.) - */ - void quitMenu() - { - allowFocusRemoval(true); - // This removes Environment's grab on us - Environment->removeFocus(this); - m_menumgr->deletingMenu(this); - this->remove(); -#ifdef HAVE_TOUCHSCREENGUI - if (g_touchscreengui) - g_touchscreengui->show(); -#endif - } - - void removeChildren() - { - const core::list &children = getChildren(); - core::list children_copy; - for (gui::IGUIElement *i : children) { - children_copy.push_back(i); - } - - for (gui::IGUIElement *i : children_copy) { - i->remove(); - } - } + void allowFocusRemoval(bool allow); + bool canTakeFocus(gui::IGUIElement *e); + void draw(); + void quitMenu(); + void removeChildren(); virtual void regenerateGui(v2u32 screensize) = 0; virtual void drawMenu() = 0; - virtual bool preprocessEvent(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 + virtual bool pausesGame() { return false; } // Used for pause menu +#ifdef __ANDROID__ + virtual bool getAndroidUIInput() { return false; } + bool hasAndroidUIInput(); +#endif protected: - //bool m_force_regenerate_gui; + virtual std::wstring getLabelByID(s32 id) = 0; + virtual std::string getNameByID(s32 id) = 0; + + v2s32 m_pointer; + v2s32 m_old_pointer; // Mouse position after previous mouse event v2u32 m_screensize_old; +#ifdef __ANDROID__ + v2s32 m_down_pos; + std::string m_jni_field_name; +#endif +#ifdef HAVE_TOUCHSCREENGUI + bool m_touchscreen_visible = true; +#endif private: IMenuManager *m_menumgr; // This might be necessary to expose to the implementation if it -- cgit v1.2.3