X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgui%2Ftouchscreengui.h;h=761d33207c023b5a9fc6f8ccb0b3c3aadc0247ad;hb=6652d7ac2a463581aa53c1599b7b93762422ff0f;hp=2a3f24a3f0ea4fedc8ed853db2a00f4f7e8e9248;hpb=2907c0f3a2953601aa1a81ff8226ff60086fb41b;p=dragonfireclient.git diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h index 2a3f24a3f..761d33207 100644 --- a/src/gui/touchscreengui.h +++ b/src/gui/touchscreengui.h @@ -80,21 +80,22 @@ typedef enum } autohide_button_bar_dir; #define MIN_DIG_TIME_MS 500 -#define MAX_TOUCH_COUNT 64 #define BUTTON_REPEAT_DELAY 0.2f - #define SETTINGS_BAR_Y_OFFSET 5 #define RARE_CONTROLS_BAR_Y_OFFSET 5 -extern const char **touchgui_button_imagenames; -extern const char **touchgui_joystick_imagenames; +// Very slow button repeat frequency +#define SLOW_BUTTON_REPEAT 1.0f + +extern const char **button_imagenames; +extern const char **joystick_imagenames; struct button_info { float repeatcounter; float repeatdelay; irr::EKEY_CODE keycode; - std::vector ids; + std::vector ids; IGUIButton *guibutton = nullptr; bool immediate_release; @@ -109,8 +110,8 @@ class AutoHideButtonBar AutoHideButtonBar(IrrlichtDevice *device, IEventReceiver *receiver); void init(ISimpleTextureSource *tsrc, const char *starter_img, int button_id, - v2s32 UpperLeft, v2s32 LowerRight, autohide_button_bar_dir dir, - float timeout); + const v2s32 &UpperLeft, const v2s32 &LowerRight, + autohide_button_bar_dir dir, float timeout); ~AutoHideButtonBar(); @@ -125,9 +126,6 @@ class AutoHideButtonBar // detect settings bar button events bool isButton(const SEvent &event); - // handle released hud buttons - bool isReleaseButton(int eventID); - // step handler void step(float dtime); @@ -182,7 +180,7 @@ class TouchScreenGUI double getPitch() { return m_camera_pitch; } - /*! + /* * Returns a line which describes what the player is pointing at. * The starting point and looking direction are significant, * the line should be scaled to match its length to the actual distance @@ -206,9 +204,10 @@ class TouchScreenGUI IEventReceiver *m_receiver; ISimpleTextureSource *m_texturesource; v2u32 m_screensize; + s32 button_size; double m_touchscreen_threshold; std::map> m_hud_rects; - std::map m_hud_ids; + std::map m_hud_ids; bool m_visible; // is the gui visible // value in degree @@ -220,7 +219,7 @@ class TouchScreenGUI forward_id, backward_id, left_id, right_id, special1_id}; bool m_joystick_status[5] = {false, false, false, false, false}; - /*! + /* * A line starting at the camera and pointing towards the * selected object. * The line ends on the camera's far plane. @@ -248,23 +247,24 @@ class TouchScreenGUI touch_gui_button_id getButtonID(s32 x, s32 y); // gui button by eventID - touch_gui_button_id getButtonID(int eventID); + touch_gui_button_id getButtonID(size_t eventID); // check if a button has changed void handleChangedButton(const SEvent &event); // initialize a button - void initButton(touch_gui_button_id id, rect button_rect, - std::wstring caption, bool immediate_release, + void initButton(touch_gui_button_id id, const rect &button_rect, + const std::wstring &caption, bool immediate_release, float repeat_delay = BUTTON_REPEAT_DELAY); // initialize a joystick button - button_info *initJoystickButton(touch_gui_button_id id, rect button_rect, - int texture_id, bool visible = true); + button_info *initJoystickButton(touch_gui_button_id id, + const rect &button_rect, int texture_id, + bool visible = true); struct id_status { - int id; + size_t id; int X; int Y; }; @@ -273,27 +273,21 @@ class TouchScreenGUI std::vector m_known_ids; // handle a button event - void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action); + void handleButtonEvent(touch_gui_button_id bID, size_t eventID, bool action); // handle pressed hud buttons bool isHUDButton(const SEvent &event); - // handle released hud buttons - bool isReleaseHUDButton(int eventID); - // handle double taps bool doubleTapDetection(); // handle release event - void handleReleaseEvent(int evt_id); + void handleReleaseEvent(size_t evt_id); // apply joystick status void applyJoystickStatus(); - // get size of regular gui control button - int getGuiButtonSize(); - - // doubleclick detection variables + // double-click detection variables struct key_event { u64 down_time; @@ -302,9 +296,9 @@ class TouchScreenGUI }; // array for saving last known position of a pointer - v2s32 m_pointerpos[MAX_TOUCH_COUNT]; + std::map m_pointerpos; - // array for doubletap detection + // array for double tap detection key_event m_key_events[2]; // settings bar @@ -313,4 +307,5 @@ class TouchScreenGUI // rare controls bar AutoHideButtonBar m_rarecontrolsbar; }; + extern TouchScreenGUI *g_touchscreengui;