summaryrefslogtreecommitdiff
path: root/src/touchscreengui.h
diff options
context:
space:
mode:
authorSapier <sapier@does.not.have.an.email>2015-12-13 23:00:05 +0100
committerSapier <sapier AT gmx dot net>2015-12-18 20:35:54 +0100
commit06632205d8765b5417c36df798617721bab0d02f (patch)
treee412e4bf92d7dec5f7f7a91f0427f6f4c8da3236 /src/touchscreengui.h
parentbde6194638e8856c4df28d80ae6e15d2e9e31e91 (diff)
downloadminetest-06632205d8765b5417c36df798617721bab0d02f.tar.gz
minetest-06632205d8765b5417c36df798617721bab0d02f.tar.bz2
minetest-06632205d8765b5417c36df798617721bab0d02f.zip
Android: Implement Autohiding button bars to cleanup screen
Diffstat (limited to 'src/touchscreengui.h')
-rw-r--r--src/touchscreengui.h113
1 files changed, 96 insertions, 17 deletions
diff --git a/src/touchscreengui.h b/src/touchscreengui.h
index 1e69a41e9..d8106a260 100644
--- a/src/touchscreengui.h
+++ b/src/touchscreengui.h
@@ -38,26 +38,105 @@ typedef enum {
backward_id,
left_id,
right_id,
- inventory_id,
- drop_id,
jump_id,
crunch_id,
+ after_last_element_id,
+ settings_starter_id,
+ rare_controls_starter_id,
fly_id,
noclip_id,
fast_id,
debug_id,
- chat_id,
camera_id,
range_id,
- after_last_element_id
+ chat_id,
+ inventory_id,
+ drop_id
} touch_gui_button_id;
+typedef enum {
+ AHBB_Dir_Top_Bottom,
+ AHBB_Dir_Bottom_Top,
+ AHBB_Dir_Left_Right,
+ AHBB_Dir_Right_Left
+} 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 6.5
+#define RARE_CONTROLS_BAR_Y_OFFSET 4
+
extern const char** touchgui_button_imagenames;
+struct button_info {
+ float repeatcounter;
+ float repeatdelay;
+ irr::EKEY_CODE keycode;
+ std::vector<int> ids;
+ IGUIButton* guibutton;
+ bool immediate_release;
+};
+
+class AutoHideButtonBar
+{
+public:
+
+ 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);
+
+ ~AutoHideButtonBar();
+
+ /* add button to be shown */
+ void addButton(touch_gui_button_id id, const wchar_t* caption,
+ const char* btn_image);
+
+ /* detect settings bar button events */
+ bool isButton(const SEvent &event);
+
+ /* handle released hud buttons */
+ bool isReleaseButton(int eventID);
+
+ /* step handler */
+ void step(float dtime);
+
+ /* deactivate button bar */
+ void deactivate();
+
+ /* hide the whole buttonbar */
+ void hide();
+
+ /* unhide the buttonbar */
+ void show();
+
+private:
+ ISimpleTextureSource* m_texturesource;
+ irr::video::IVideoDriver* m_driver;
+ IGUIEnvironment* m_guienv;
+ IEventReceiver* m_receiver;
+ v2u32 m_screensize;
+ button_info m_starter;
+ std::vector<button_info*> m_buttons;
+
+ v2s32 m_upper_left;
+ v2s32 m_lower_right;
+
+ /* show settings bar */
+ bool m_active;
+
+ bool m_visible;
+
+ /* settings bar timeout */
+ float m_timeout;
+ float m_timeout_value;
+ bool m_initialized;
+ autohide_button_bar_dir m_dir;
+};
+
class TouchScreenGUI
{
public:
@@ -66,7 +145,7 @@ public:
void translateEvent(const SEvent &event);
- void init(ISimpleTextureSource* tsrc,float density);
+ void init(ISimpleTextureSource* tsrc);
double getYaw() { return m_camera_yaw; }
double getPitch() { return m_camera_pitch; }
@@ -77,8 +156,8 @@ public:
void registerHudItem(int index, const rect<s32> &rect);
void Toggle(bool visible);
- void Hide();
- void Show();
+ void hide();
+ void show();
private:
IrrlichtDevice* m_device;
@@ -104,15 +183,6 @@ private:
bool m_move_sent_as_mouse_event;
v2s32 m_move_downlocation;
- struct button_info {
- float repeatcounter;
- float repeatdelay;
- irr::EKEY_CODE keycode;
- std::vector<int> ids;
- IGUIButton* guibutton;
- bool immediate_release;
- };
-
button_info m_buttons[after_last_element_id];
/* gui button detection */
@@ -142,7 +212,7 @@ private:
std::vector<id_status> m_known_ids;
/* handle a button event */
- void ButtonEvent(touch_gui_button_id bID, int eventID, bool action);
+ void handleButtonEvent(touch_gui_button_id bID, int eventID, bool action);
/* handle pressed hud buttons */
bool isHUDButton(const SEvent &event);
@@ -156,6 +226,9 @@ private:
/* handle release event */
void handleReleaseEvent(int evt_id);
+ /* get size of regular gui control button */
+ int getGuiButtonSize();
+
/* doubleclick detection variables */
struct key_event {
unsigned int down_time;
@@ -168,6 +241,12 @@ private:
/* array for doubletap detection */
key_event m_key_events[2];
+
+ /* settings bar */
+ AutoHideButtonBar m_settingsbar;
+
+ /* rare controls bar */
+ AutoHideButtonBar m_rarecontrolsbar;
};
extern TouchScreenGUI *g_touchscreengui;
#endif