mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Move touchscreen input handling to base GUIModalMenu class
This commit is contained in:
parent
0d54399be2
commit
323c860045
14 changed files with 425 additions and 272 deletions
|
@ -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<s32>(0,0,100,100))
|
||||
{
|
||||
m_menumgr = menumgr;
|
||||
IMenuManager *menumgr);
|
||||
virtual ~GUIModalMenu();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
/*
|
||||
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<gui::IGUIElement*> &children = getChildren();
|
||||
core::list<gui::IGUIElement*> 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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue