Touchscreengui: minor cleanup

This commit is contained in:
MoNTE48 2019-11-02 21:06:13 +01:00
parent ba11ca2df3
commit f3a11f90b9

View File

@ -18,21 +18,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/ */
#include "touchscreengui.h" #include "touchscreengui.h"
#include "irrlichttypes.h"
#include "irr_v2d.h"
#include "log.h" #include "log.h"
#include "keycode.h" #include "keycode.h"
#include "settings.h" #include "settings.h"
#include "gettime.h"
#include "util/numeric.h"
#include "porting.h" #include "porting.h"
#include "guiscalingfilter.h" #include "guiscalingfilter.h"
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
#include <ISceneCollisionManager.h>
using namespace irr::core; using namespace irr::core;
const char *touchgui_button_imagenames[][2] = { const char *touchgui_button_imagenames[][2] = {
@ -210,15 +204,15 @@ void TouchScreenGUI::initButton(touch_gui_button_id id, rect<s32> button_rect,
void TouchScreenGUI::init(ISimpleTextureSource *tsrc) { void TouchScreenGUI::init(ISimpleTextureSource *tsrc) {
assert(tsrc != nullptr); assert(tsrc != nullptr);
float control_pad_size = double control_pad_size =
MYMIN(m_screensize.Y / 1.5, MYMIN(m_screensize.Y / 1.5,
porting::getDisplayDensity() * g_settings->getFloat("hud_scaling") * 260); porting::getDisplayDensity() * g_settings->getFloat("hud_scaling") * 260);
u32 button_size = control_pad_size / 3; s32 button_size = static_cast<s32>(control_pad_size / 3);
m_visible = true; m_visible = true;
m_texturesource = tsrc; m_texturesource = tsrc;
m_control_pad_rect = rect<s32>(0, m_screensize.Y - control_pad_size, m_control_pad_rect = rect<s32>(0, static_cast<s32>(m_screensize.Y - control_pad_size),
control_pad_size, m_screensize.Y); static_cast<s32>(control_pad_size), m_screensize.Y);
/* /*
draw control pad draw control pad
@ -273,6 +267,8 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc) {
id = right_id; id = right_id;
caption = L">"; caption = L">";
break; break;
default:
break;
} }
if (id != after_last_element_id) { if (id != after_last_element_id) {
initButton(id, button_rect, caption, false); initButton(id, button_rect, caption, false);
@ -281,87 +277,93 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc) {
// init inventory button // init inventory button
initButton(inventory_id, initButton(inventory_id,
rect<s32>(m_screensize.X - (button_size), rect<s32>(m_screensize.X - button_size,
m_screensize.Y - (button_size), m_screensize.Y - button_size,
m_screensize.X, m_screensize.X,
m_screensize.Y), m_screensize.Y),
L"inv", false, SLOW_BUTTON_REPEAT); L"inv", false, SLOW_BUTTON_REPEAT);
// init drop button // init drop button
initButton(drop_id, initButton(drop_id,
rect<s32>(m_screensize.X - (button_size * 0.75), rect<s32>(m_screensize.X - button_size * 0.75,
m_screensize.Y / 2 - (button_size * 1.5), m_screensize.Y / 2 - button_size * 1.5,
m_screensize.X, m_screensize.X,
m_screensize.Y / 2 - (0.75 * button_size)), m_screensize.Y / 2 - button_size * 0.75),
L"drop", false, SLOW_BUTTON_REPEAT); L"drop", false, SLOW_BUTTON_REPEAT);
// init crunch button // init crunch button
initButton(crunch_id, initButton(crunch_id,
rect<s32>(m_screensize.X - (button_size * 2), rect<s32>(m_screensize.X - button_size * 2,
m_screensize.Y - (button_size * 0.5), m_screensize.Y - button_size / 2,
m_screensize.X - (button_size), m_screensize.X - button_size,
m_screensize.Y), m_screensize.Y),
L"H", false, SLOW_BUTTON_REPEAT); L"H", false, SLOW_BUTTON_REPEAT);
// init jump button // init jump button
initButton(jump_id, initButton(jump_id,
rect<s32>(m_screensize.X - (button_size * 2), rect<s32>(m_screensize.X - button_size * 2,
m_screensize.Y - (button_size * 2), m_screensize.Y - button_size * 2,
m_screensize.X - (button_size), m_screensize.X - button_size,
m_screensize.Y - (button_size)), m_screensize.Y - button_size),
L"x", false, SLOW_BUTTON_REPEAT); L"x", false, SLOW_BUTTON_REPEAT);
// iOS does not have a physical pause button and have memory leak with minimap // iOS does not have a physical pause button and have memory leak with minimap
#ifdef __IOS__ #ifdef __IOS__
// init pause button // init pause button
initButton(escape_id, initButton(escape_id,
rect<s32>(m_screensize.X / 2 - (button_size * 1.125), 0, rect<s32>(m_screensize.X / 2 - button_size * 1.125,
m_screensize.X / 2 - (button_size * 0.375), 0,
(button_size * 0.75)), m_screensize.X / 2 - button_size * 0.375,
button_size * 0.75),
L"Exit", false, SLOW_BUTTON_REPEAT); L"Exit", false, SLOW_BUTTON_REPEAT);
#else #else
// init minimap button // init minimap button
initButton(minimap_id, initButton(minimap_id,
rect<s32>(m_screensize.X / 2 - (button_size * 1.125), 0, rect<s32>(m_screensize.X / 2 - button_size * 1.125,
m_screensize.X / 2 - (button_size * 0.375), 0,
(button_size * 0.75)), m_screensize.X / 2 - button_size * 0.375,
button_size * 0.75),
L"minimap", false, SLOW_BUTTON_REPEAT); L"minimap", false, SLOW_BUTTON_REPEAT);
#endif #endif
// init rangeselect button // init rangeselect button
initButton(range_id, initButton(range_id,
rect<s32>(m_screensize.X / 2 - (button_size * 0.375), 0, rect<s32>(m_screensize.X / 2 - (button_size * 0.375),
m_screensize.X / 2 + (button_size * 0.375), 0,
(button_size * 0.75)), m_screensize.X / 2 + (button_size * 0.375),
button_size * 0.75),
L"far", false, SLOW_BUTTON_REPEAT); L"far", false, SLOW_BUTTON_REPEAT);
// init chat button // init chat button
initButton(chat_id, initButton(chat_id,
rect<s32>(m_screensize.X / 2 + (button_size * 0.375), 0, rect<s32>(m_screensize.X / 2 + (button_size * 0.375),
0,
m_screensize.X / 2 + (button_size * 1.125), m_screensize.X / 2 + (button_size * 1.125),
(button_size * 0.75)), button_size * 0.75),
L"Chat", false, SLOW_BUTTON_REPEAT); L"Chat", false, SLOW_BUTTON_REPEAT);
// init noclip button // init noclip button
/* initButton(noclip_id, /* initButton(noclip_id,
rect<s32>(m_screensize.X - (button_size * 0.75), rect<s32>(m_screensize.X - button_size * 0.75,
m_screensize.Y - (button_size * 4.75), m_screensize.Y - button_size * 4.75,
m_screensize.X, m_screensize.X,
m_screensize.Y - (button_size * 4)), m_screensize.Y - button_size * 4),
L"clip", false, SLOW_BUTTON_REPEAT); L"clip", false, SLOW_BUTTON_REPEAT);
// init fast button // init fast button
initButton(fast_id, initButton(fast_id,
rect<s32>(m_screensize.X - (button_size * 0.75), rect<s32>(m_screensize.X - button_size * 0.75,
m_screensize.Y - (button_size * 4), m_screensize.Y - button_size * 4,
m_screensize.X, m_screensize.X,
m_screensize.Y - (button_size * 3.25)), m_screensize.Y - button_size * 3.25),
L"fast", false, SLOW_BUTTON_REPEAT); L"fast", false, SLOW_BUTTON_REPEAT);
// init camera button // init camera button
initButton(camera_id, initButton(camera_id,
rect<s32>(0, 0, rect<s32>(0,
button_size * 0.75, button_size * 0.75), 0,
L"cam", false, SLOW_BUTTON_REPEAT); */ button_size * 0.75,
button_size * 0.75),
L"cam", false, SLOW_BUTTON_REPEAT); */
} }
touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) { touch_gui_button_id TouchScreenGUI::getButtonID(s32 x, s32 y) {
@ -405,7 +407,7 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event) {
event.TouchInput.Y) event.TouchInput.Y)
)) { )) {
if (iter->first < 9) { if (iter->first < 9) {
SEvent* translated = new SEvent(); SEvent *translated = new SEvent();
memset(translated, 0, sizeof(SEvent)); memset(translated, 0, sizeof(SEvent));
translated->EventType = irr::EET_KEY_INPUT_EVENT; translated->EventType = irr::EET_KEY_INPUT_EVENT;
translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + iter->first); translated->KeyInput.Key = (irr::EKEY_CODE) (KEY_KEY_1 + iter->first);
@ -425,7 +427,7 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event) {
void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button, void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button,
size_t eventID, bool action) { size_t eventID, bool action) {
button_info *btn = &m_buttons[button]; button_info *btn = &m_buttons[button];
SEvent* translated = new SEvent(); SEvent *translated = new SEvent();
memset(translated, 0, sizeof(SEvent)); memset(translated, 0, sizeof(SEvent));
translated->EventType = irr::EET_KEY_INPUT_EVENT; translated->EventType = irr::EET_KEY_INPUT_EVENT;
translated->KeyInput.Key = btn->keycode; translated->KeyInput.Key = btn->keycode;
@ -481,7 +483,7 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id) {
// if this pointer issued a mouse event issue symmetric release here // if this pointer issued a mouse event issue symmetric release here
if (m_move_sent_as_mouse_event) { if (m_move_sent_as_mouse_event) {
SEvent* translated = new SEvent; SEvent *translated = new SEvent;
memset(translated, 0, sizeof(SEvent)); memset(translated, 0, sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT; translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_move_downlocation.X; translated->MouseInput.X = m_move_downlocation.X;
@ -493,7 +495,7 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id) {
m_receiver->OnEvent(*translated); m_receiver->OnEvent(*translated);
delete translated; delete translated;
} else if (!m_move_has_really_moved) { } else if (!m_move_has_really_moved) {
SEvent* translated = new SEvent; SEvent *translated = new SEvent;
memset(translated, 0, sizeof(SEvent)); memset(translated, 0, sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT; translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_move_downlocation.X; translated->MouseInput.X = m_move_downlocation.X;
@ -598,7 +600,6 @@ void TouchScreenGUI::translateEvent(const SEvent &event) {
handleReleaseEvent(event.TouchInput.ID); handleReleaseEvent(event.TouchInput.ID);
} else { } else {
assert(event.TouchInput.Event == ETIE_MOVED); assert(event.TouchInput.Event == ETIE_MOVED);
size_t move_idx = event.TouchInput.ID;
if (m_pointerpos[event.TouchInput.ID] == if (m_pointerpos[event.TouchInput.ID] ==
v2s32(event.TouchInput.X, event.TouchInput.Y)) { v2s32(event.TouchInput.X, event.TouchInput.Y)) {
@ -626,9 +627,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) {
s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y; s32 dy = Y - m_pointerpos[event.TouchInput.ID].Y;
// adapt to similar behaviour as pc screen // adapt to similar behaviour as pc screen
double d = g_settings->getFloat("mouse_sensitivity"); double d = g_settings->getFloat("mouse_sensitivity");
double old_yaw = m_camera_yaw_change;
double old_pitch = m_camera_pitch;
m_camera_yaw_change -= dx * d; m_camera_yaw_change -= dx * d;
m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180); m_camera_pitch = MYMIN(MYMAX(m_camera_pitch + (dy * d), -180), 180);
@ -702,28 +701,13 @@ bool TouchScreenGUI::quickTapDetection() {
m_key_events[0].down_time = m_key_events[1].down_time; m_key_events[0].down_time = m_key_events[1].down_time;
m_key_events[0].x = m_key_events[1].x; m_key_events[0].x = m_key_events[1].x;
m_key_events[0].y = m_key_events[1].y; m_key_events[0].y = m_key_events[1].y;
/* m_key_events[1].down_time = m_move_downtime;
m_key_events[1].x = m_move_downlocation.X;
m_key_events[1].y = m_move_downlocation.Y;
u64 delta = porting::getDeltaMs(m_key_events[0].down_time, porting::getTimeMs());
if (delta > 400)
return false; */
// ignore the occasional touch // ignore the occasional touch
u64 delta = porting::getDeltaMs(m_move_downtime, porting::getTimeMs()); u64 delta = porting::getDeltaMs(m_move_downtime, porting::getTimeMs());
if (delta < 50) if (delta < 50)
return false; return false;
/* double distance = sqrt( SEvent *translated = new SEvent();
(m_key_events[0].x - m_key_events[1].x) * (m_key_events[0].x - m_key_events[1].x) +
(m_key_events[0].y - m_key_events[1].y) * (m_key_events[0].y - m_key_events[1].y));
if (distance > (20 + g_settings->getU16("touchscreen_threshold")))
return false; */
SEvent* translated = new SEvent();
memset(translated, 0, sizeof(SEvent)); memset(translated, 0, sizeof(SEvent));
translated->EventType = EET_MOUSE_INPUT_EVENT; translated->EventType = EET_MOUSE_INPUT_EVENT;
translated->MouseInput.X = m_key_events[0].x; translated->MouseInput.X = m_key_events[0].x;