From e71e99eba1d500a7de79563fdc17eba4ceb946ec Mon Sep 17 00:00:00 2001 From: stujones11 Date: Fri, 17 Aug 2018 20:25:20 +0100 Subject: [PATCH] Add visual feedback to touchscreen D-pad buttons --- src/touchscreengui.cpp | 110 ++++++++++++++++------------- src/touchscreengui.h | 13 ++-- textures/base/down_one_press.png | Bin 0 -> 649 bytes textures/base/down_three_press.png | Bin 0 -> 644 bytes textures/base/down_two_press.png | Bin 0 -> 595 bytes textures/base/left_press.png | Bin 0 -> 504 bytes textures/base/right_press.png | Bin 0 -> 574 bytes textures/base/up_one_press.png | Bin 0 -> 635 bytes textures/base/up_three_press.png | Bin 0 -> 589 bytes textures/base/up_two_press.png | Bin 0 -> 602 bytes 10 files changed, 67 insertions(+), 56 deletions(-) create mode 100644 textures/base/down_one_press.png create mode 100644 textures/base/down_three_press.png create mode 100644 textures/base/down_two_press.png create mode 100644 textures/base/left_press.png create mode 100644 textures/base/right_press.png create mode 100644 textures/base/up_one_press.png create mode 100644 textures/base/up_three_press.png create mode 100644 textures/base/up_two_press.png diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index 3818a605d..685a9ac81 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -39,31 +39,33 @@ using namespace irr::core; extern Settings *g_settings; -const char* touchgui_button_imagenames[] = { - "up_one.png", - "up_two.png", - "up_three.png", - "down_one.png", - "down_two.png", - "down_three.png", - "left.png", - "right.png", - "inventory.png", - "drop.png", - "jump.png", - "down.png", +const char *touchgui_button_imagenames[][2] = { + {"up_one.png", "up_one_press.png"}, + {"up_two.png", "up_two_press.png"}, + {"up_three.png", "up_three_press.png"}, + {"down_one.png", "down_one_press.png"}, + {"down_two.png", "down_two_press.png"}, + {"down_three.png", "down_three_press.png"}, + {"left.png", "left_press_press.png"}, + {"right.png", "right_press_press.png"}, + {"inventory.png", "inventory.png"}, + {"drop.png", "drop.png"}, + {"jump.png", "jump.png"}, + {"down.png", "down.png"}, /*#ifdef ENABLE_ANDROID_NOCLIP - "fly_btn.png", - "noclip_btn.png", + {"noclip_btn.png", "noclip_btn.png"}, + {"fast_btn.png", "fast_btn.png"}, #endif*/ - "minimap_btn.png", -// "debug_btn.png", - "chat.png", -// "camera.png", - "rangeview.png", - "rangeview_ios.png", - "empty.png", - "escape.png", + {"minimap_btn.png", "minimap_btn.png"}, + {"chat.png", "chat.png"}, +// {"camera.png", "camera.png"}, +#ifdef __IOS__ + {"rangeview_ios.png", "rangeview_ios.png"}, +#else + {"rangeview.png", "rangeview.png"}, +#endif + {"empty.png", "empty.png"}, + {"escape.png", "escape.png"} }; static irr::EKEY_CODE id2keycode(touch_gui_button_id id) @@ -107,19 +109,13 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) key = "sneak"; break; /*#ifdef ENABLE_ANDROID_NOCLIP - case fly_id: - key = "freemove"; - break; case noclip_id: key = "noclip"; break; case fast_id: key = "fast"; break; -#endif - case debug_id: - key = "toggle_debug"; - break;*/ +#endif*/ case minimap_id: key = "minimap"; break; @@ -132,9 +128,6 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) case range_id: key = "rangeselect"; break; - case range_ios_id: - key = "rangeselect"; - break; case empty_id: key = "forward"; break; @@ -165,22 +158,34 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver* receiver) m_screensize = device->getVideoDriver()->getScreenSize(); } -void TouchScreenGUI::loadButtonTexture(button_info* btn, const char* path, rect button_rect) +void TouchScreenGUI::loadButtonTexture(button_info* btn, + touch_gui_button_id id, rect button_rect) { + const char *path = touchgui_button_imagenames[id][0]; + const char *path_pressed = touchgui_button_imagenames[id][1]; + unsigned int tid; video::ITexture *texture = guiScalingImageButton(m_device->getVideoDriver(), m_texturesource->getTexture(path, &tid), button_rect.getWidth(), button_rect.getHeight()); + + video::ITexture *texture_pressed = texture; + if (strcmp(path, path_pressed) != 0) { + texture_pressed = guiScalingImageButton(m_device->getVideoDriver(), + m_texturesource->getTexture(path_pressed, &tid), + button_rect.getWidth(), button_rect.getHeight()); + texture_pressed = (texture_pressed) ? texture_pressed : texture; + } if (texture) { btn->guibutton->setUseAlphaChannel(true); if (g_settings->getBool("gui_scaling_filter")) { rect txr_rect = rect(0, 0, button_rect.getWidth(), button_rect.getHeight()); btn->guibutton->setImage(texture, txr_rect); - btn->guibutton->setPressedImage(texture, txr_rect); + btn->guibutton->setPressedImage(texture_pressed, txr_rect); btn->guibutton->setScaleImage(false); } else { btn->guibutton->setImage(texture); - btn->guibutton->setPressedImage(texture); + btn->guibutton->setPressedImage(texture_pressed); btn->guibutton->setScaleImage(true); } btn->guibutton->setDrawBorder(false); @@ -201,7 +206,7 @@ void TouchScreenGUI::initButton(touch_gui_button_id id, rect button_rect, btn->immediate_release = immediate_release; btn->ids.clear(); - loadButtonTexture(btn,touchgui_button_imagenames[id],button_rect); + loadButtonTexture(btn, id, button_rect); } static int getMaxControlPadSize(float density) { @@ -322,14 +327,6 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) L"x", false, SLOW_BUTTON_REPEAT); /*#ifdef ENABLE_ANDROID_NOCLIP - // init fly button - initButton(fly_id, - rect(m_screensize.X - (0.75*button_size), - m_screensize.Y - (3.25*button_size), - m_screensize.X, - m_screensize.Y - (button_size*2.5)), - L"fly", false, SLOW_BUTTON_REPEAT); - // init noclip button initButton(noclip_id, rect(m_screensize.X - (0.75*button_size), @@ -346,9 +343,6 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) L"fast", false, SLOW_BUTTON_REPEAT); #endif*/ - - - #ifdef __IOS__ // iOS bar /* init pause button */ @@ -359,7 +353,7 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) L"Exit", false, SLOW_BUTTON_REPEAT); /* init rangeselect button */ - initButton(range_ios_id, + initButton(range_id, rect(m_screensize.X / 2, 0, m_screensize.X / 2 + (button_size * 0.75), (button_size * 0.75)), @@ -395,7 +389,7 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc) L"Chat", false, SLOW_BUTTON_REPEAT); #endif - /* init camera button */ + /* init camera button */ /*initButton(camera_id, rect(0, 0, 0.75*button_size, 0.75*button_size), @@ -483,6 +477,19 @@ bool TouchScreenGUI::isReleaseHUDButton(size_t eventID) return false; } +void TouchScreenGUI::setButtonState(touch_gui_button_id id, bool is_pressed) +{ + /*if (id == forward_one || id == forward_three) { + m_buttons[forward_two].guibutton->setPressed(is_pressed); + } + else if (id == backward_one || id == backward_three) { + m_buttons[backward_two].guibutton->setPressed(is_pressed); + }*/ + //else { + m_buttons[id].guibutton->setPressed(is_pressed); + //} +} + void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button, size_t eventID, bool action) { @@ -504,6 +511,8 @@ void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button, if (btn->ids.size() > 1) return; btn->repeatcounter = 0; + setButtonState(button, true); + translated->KeyInput.PressedDown = true; translated->KeyInput.Key = btn->keycode; m_receiver->OnEvent(*translated); @@ -519,6 +528,7 @@ void TouchScreenGUI::handleButtonEvent(touch_gui_button_id button, if (btn->ids.size() > 0) { return; } + setButtonState(button, false); translated->KeyInput.PressedDown = false; btn->repeatcounter = -1; m_receiver->OnEvent(*translated); diff --git a/src/touchscreengui.h b/src/touchscreengui.h index b712cccf8..937be3416 100644 --- a/src/touchscreengui.h +++ b/src/touchscreengui.h @@ -48,17 +48,14 @@ typedef enum { drop_id, jump_id, crunch_id, -#ifdef ENABLE_ANDROID_NOCLIP - fly_id, +/*#ifdef ENABLE_ANDROID_NOCLIP noclip_id, fast_id, -#endif +#endif*/ minimap_id, -// debug_id, chat_id, // camera_id, range_id, - range_ios_id, empty_id, escape_id, after_last_element_id @@ -155,6 +152,9 @@ private: /* gui button by eventID */ touch_gui_button_id getButtonID(size_t eventID); + /* set button pressed state */ + void setButtonState(touch_gui_button_id id, bool is_pressed); + /* check if a button has changed */ void handleChangedButton(const SEvent &event); @@ -164,7 +164,8 @@ private: float repeat_delay = BUTTON_REPEAT_DELAY); /* load texture */ - void loadButtonTexture(button_info *btn, const char *path, rect button_rect); + void loadButtonTexture(button_info *btn, touch_gui_button_id id, + rect button_rect); struct id_status { diff --git a/textures/base/down_one_press.png b/textures/base/down_one_press.png new file mode 100644 index 0000000000000000000000000000000000000000..10f80ffc22a1353e46a6f8ab2d53650f6652928a GIT binary patch literal 649 zcmV;40(Sk0P)pFa&~ZHVq$A+YkPlrgNA`~b8}QwR7FKaJUl#UX=#;}m64H= za&mH}rly*jnms)|tgNiX#l`!BP}cwe04j7+PE!EPv$M0hy3wPitFyPc%)P$V(Wt<> z|I^0V+sVw`z`eT0zP-uDz?sS0-LZlz0004yNklDQ$IJ(~exuoJ4zt-}w2Z7)YpAMv)HE%0oyg5iwt)8?@NuXkKcI)r zru8}y8RjCH0#H@k?HX!myxoQUXtN391Bi58zQFN#I`!TT+Jy47HimNs+BRDNHk-ZI zUg*x0vYs&<^AF?>FrieJ5MaQ$+gr|uK+|LlfY!=O$K(i!@CWKTcOXtkLSN(Vy1dU2p>>Uy~>9bn?uBSxt>@cv#t z5I2$pSolaFX jn_VwJGnhW`UjaV>9Aui&*_-MC00000NkvXXu0mjfes(SI literal 0 HcmV?d00001 diff --git a/textures/base/down_three_press.png b/textures/base/down_three_press.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9bd7bc6911a54036e5feb158450bf6de5bd96d GIT binary patch literal 644 zcmV-~0(Zk10000dbW%=Jxwo^cz^0?oy1KKonX}9Q)4sjEy1Kx=sK&;| zz}v~y-OSm{%)Q-u>|f9T00ERqL_t(|0qxhpa)K}vg<%09XoaFmqfG#zRp0*&drvZ# zOtWnWoBoUL&NoFeh?~tONzydSw%a@}=7cEA-EO~sqYhq`sjlBme+Fm{0tgse(;Sbd z)A@Y46kcu~4oK4^X(@+%P+LmM>s)REQJRFnI1G?w04#xSw@*qbturq`($r8P0ecaQ zbX`v=Dy0y{oHh*urlEj52f)Prjyb|d>Zg>QhXsm)F9P$?gt^TJ&@^Ef9_TtdM|?}U z-}40kYMOBSc#aY;j1lJHfniXpr+ALOC?2Dp!aO`6MAK*u0JU@96cd=EuERVuP?k~x z0KrF^1JSlT2Y^X<;PKED4wKC%#*ydC0aDU&rhEWBpZ19JJUmcUMRC14z$eBL1ma0( z;Bat&PhgH-FU;cum?Hl77X~N?Aa5QGV4|noe0d`8TbKsSokr0_6E2B0000v%0zf@Tkgg0004Y zNkl>U=)q2ZfB*gWGkQf|30Rhm zEbFTP$FXe}*|y_+B;a}H=DzQ`0dig6XF?tbLl4c(qbLX#C!xYjvh2_bb*My5Q`c2x&IJGi8Rlp`v_bm277<~NWdM%m3~a_2AcChdz;?^u?{*2& zZy^IfDN4|8CkyP6IVXTxj!hpaCgcDvjuUhffZ|vlIR607KZq?70x-W5K-=vB$pCSz zffQW@kOq!N+R6YtzXf1I1_(o?Fh@K;10V*7P$~>1fawr9`v7Jh#B{hw07^~3)Ovjm z&UINgSW8Kgk&<&MidL;#z h>C3uV*Y!psz#DaiqCGseEj<7L002ovPDHLkV1im|{$v0E literal 0 HcmV?d00001 diff --git a/textures/base/left_press.png b/textures/base/left_press.png new file mode 100644 index 0000000000000000000000000000000000000000..762a5f43ecb0d0806a591da4647f21a44091c533 GIT binary patch literal 504 zcmVnv&_}Lz^J3y#;dd2$-TFx-KV9@x~{RVsG_8^7)`Fy0003aNkleZOPp-?{N9F6mV*S{;j{*&p2pU#X0gT3M~mMr#~_xeqhziji@edd7!;{*Id7yH=9 uICv6qy$-|mKLMa{_`YVP<98o>Fz^R>il!|+TIUM@0000S->P)vdg($m%1+1uUNtF(^*00B-(L_t(|Ugek3Zh}A%MXjhJDp=7LrKqri|Nn=*nF+b3 zYkbjJ9(rEQIUy{<%;@6*X}STK;QyL|Jg@7KU=h#+B7&dD^F3&QU4RkIP>!M)6oP%= zbjm;qdOa4BqyS~9|tO2L6}0TG2yK@;Hu`#tqw0Vbdq1?A9z%LO{1%0N}M zt#u%d>slY%dwB~gU>%5}*(^z#rWAUSNB~#`rqlUc56(H0)+jEP)se*Ei)=kPEJToMq*-OUSnKVTU2s(a6LUeT3T9bYin?DaA;^~qN1XEe|dz2 zgkoZ1b8~a3sHlU6fpT(kjg5`0tgLBiX_SuUz`n+rquZ;f|H-qa-P_E`x5>u3 z#=yY7y1u==y3EYEBlDnm0004sNkl0mc%9gO4XaqNjR)ty@ql|X{`e=>yFQdOfSi4%5Scvs=c_X7WuUtA=6j|RyHFJl)a zh0_HYL;*lPRge(@Fgi|ri8oNF@Sxy0slg`&Nit)?hHT~(!He1C-6mlI9B_)@1y`#H zgV73blHjFoY_fpKJ77COQ1@L7IH-m*8q|GUP{1LY@b*wa`~3jG-4mX@_7Q}S>=(d- z{{+F$2MKPtq7_i8VDm+=KSXdt0+(i=0(iCKyYQfQkN|`BqJkNN-7ky&f(#&|AU1|O zvKh0d?tdX8%E$nXVa1BO-PNvtgNV5i)Dl*}hAVV#kP*QI#>Tb+b_t8EcY|i11*+rj z0(KdN?hP)87);t5&44I_f<@>oh}!lEz`KkM{{xCa>?jzJtKa|tECx_~1~>5L(oqm= z0W#RseFrGMDJTXvyjr>m0wTzQ_P%1nE`Z(Lh-ZKL3F>}(%zhw&-ymC&jGq5p@E2l; VUSLK`(@+2a002ovPDHLkV1lM#9MAv& literal 0 HcmV?d00001 diff --git a/textures/base/up_three_press.png b/textures/base/up_three_press.png new file mode 100644 index 0000000000000000000000000000000000000000..e74a51b05fc19cb7ce54893c7e8b3113f10e8e8f GIT binary patch literal 589 zcmV-T0mPF7n~USnKhVq!f#J#uz%T3T9YXlQV7aBFL8Vq#*1goJy4 zd2@4fjg5_ihJlonlu%Vpa&mHMX=!?TdaSIh#l^+J!NI1crm?ZHkdTl(JUqrEI*|YX z03vi!PE!EPv(eMK)xN;lnZ~22tJ|it$=$ciy1mK9%*or?#>~08TC9020004WNklw! zmK8WNP?l9y6g7?yG>rz(wzW7ofUeVksBvtdL*EZWdozk71Jg7I3|d$*;>f@NBP5^+ z=gtUtSP_E5F@e610zv|CI5yyKf^s+}V1!q9h!cATlH@l55heBu$P10YV!lZ16v*@Y z`}u`tu$UvL5&H!y%#ZORpb0BR>=Bqh?aX1Zm_r|L>=T%8qoR;GLijRP*FatG5g1U{ z&zC zzA-UPY#o>;W8z1M%c)FE0~HEv8JI7j&f)zCZW$OgL@Kd$;5zrhn7VFJVfaOlQe@aJ za6JGSV?a?Aka$>9J1 z03vi!PE!Ee-Py^^)yC7ny1uu%v$LqHnWNIov!=7BrLM8AsG_9IJr!iM0004jNkl3aUWcSb7_5SbCuGtv)oXSiFyV!j$An!>dF_t7_A&h0;Spq142FhRv z^|V+g3a(MHfC`L)lk`BrK0&Z*ibk*cxS-I>s{H+eB`cbIGOQmFZ1gg�^j0#-ov zu~r4>mSuu~aFNiU7ZSa2?heAvlxMJLr@f+rvEpo6rwE{^Le_j)S)hn%f&jkIkO9Fg z!MOcpj;R8Q)+I$nNaI-`gCeF2qAvm)XMwu_LNHxG*4(0@8rzVOU6?O$bVb&b!BF~s zae!r_;5h9xP(ea~upleCdD5A9ICtZfP(4t)fP%NejpP02nsuDt^l-7!IsT~PIKSZx{tkgaw-R1}v9g59;Ct8Jl??jBQp4q`v=i1#Ip^-~agnUV4BR{4zmb|KWlKhc9csU_o}{ o`7aY>>~?;cU literal 0 HcmV?d00001