From 00383dd409fde133c6738231abfcee662c03087c Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 12 Dec 2016 21:50:41 +0100 Subject: [PATCH] improved virtual buttons for touch devices (Android) --- .../gfx_classic/overlay/VirtualButtons.ilbm | Bin 29624 -> 27376 bytes src/events.c | 31 +++++++++++++----- src/libgame/sdl.c | 22 ++++++++++++- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/graphics/gfx_classic/overlay/VirtualButtons.ilbm b/graphics/gfx_classic/overlay/VirtualButtons.ilbm index 75892ef2b234710cec9c9582927c493fb32fa2e8..5a394301be6fe53778213f760ec0f6744cf63295 100644 GIT binary patch literal 27376 zcmeHQKWq|F9R98(;zkDt2a|SmaA0(3f~CbjiP+kN!ATt$bkT*OLsRl%SaEV-P$$!} z=;XklB#tDdnn`@SEK-<8{I8(HA_ zk9+si*>v{qDu64oSJn-A#wA$t*RpK9l3iXGP?uj|2O9bqN<#|JThMw4Hldp~`0n5> zG%A@lOIM#ttt0hKD`h{vD6NO!gVIfS!wFLDLDi5`ZW!oeVF{vTA4wbc! z*jUbHetv#&aWR=pW-^&vE|<^e3xz_dRH{@e)oQg?t2G*pR;$%+x3$(Q8xQVCo6Gjg zz+5tA;#+GbUVm)jCofF=a@)kkvWZ{6Gx7V6CjRu*#Pz0$_gf}DXs6d!9|6y9mJ$84 zi>^lJ5W7I?NTWU|ZAtL*C_D;9B5X;979wF!BNUfP6qcARmwk$%JG=G9j6eOgI}8&ayx0we?El zuZL65-LE}kZ`Jb_s6WZxZ}g6`S>rPh@9JMb;z-Y(0D>*qUG9q|CYIj7A|;%NB`%i! zz!Gc|g%h%?T>K3zbmfzUkUoRQC&l6yb@89-YO82>5ar-hgDDKbKBjQNCgx@1cyK&? ztC-V)(}B~$)ikaKt_H3Ku7*K?OEMrCkPJu$B!j`O0?B}6Kr$d1kPL!5p$rtM4b%o| z1GRzLKy5HSB&0M_8YzvGMoJ^4k<$2YNaKYh-2^)c;wb`$po?I}RPgwuIOy-MXK|T% zW6{XXcAF%74e^e)>ZzZSZq^*##0*P}NQkkw=iKp(n3#$SV(RBPJPbC_z!D2i_O=o`x0hx$F?G=As3f6 zj*BGlb8c`9?0>VtdB8E?JdpQZTniin#+}}q0LF>bMsgxKk(@|Q^luJP7pM!=1?mEI zfx19lFh4kKxE&Q}xpGG|BU7UJ);DLSvXj6X}7 Be|`V} literal 29624 zcmeI*u}>ON0LSs)*`#q~=-|+S(V@fr0Vb^=)h4}yBn+Ke2j(_y7#vKS7sIMk2L^R& z8Wx=yEJ;TOx^=;v|G}|2FucCULF1b{6v{V2;CE<(FL$5&oxB&HSL=!N@#@9PQc_Cx zb|gJ|a2!2xk9w%c-A9qnyD-216z0z-VLm+%^TlPDufB)5KMeEFG|abIsk-x8`k;~3c;xP*@xObj{*4rm z++J~`D4sqL84Y#@js;{uLL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D) zLL@{&B>b-=oX$^~PZL?Np#IoRamvD(D{Pui>0u-o3675G>^2Ss4h0Sc4uxQjD=2^h zD1ZVea3M9n!et~F3I3)qTN6Yy)N z2r?Rs25XmCyTsZhBt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|aL_#D)LL@{&Bt$|a MTtW#K;eRjw1_n8o8vptype == EVENT_FINGERRELEASE ? KEY_RELEASED : KEY_PRESSED); - Key key = (event->x < 1.0 / 3.0 ? - (event->y < 1.0 / 2.0 ? setup.input[0].key.snap : - setup.input[0].key.drop) : - event->x > 2.0 / 3.0 ? - (event->y < 1.0 / 3.0 ? setup.input[0].key.up : - event->y > 2.0 / 3.0 ? setup.input[0].key.down : - event->x < 5.0 / 6.0 ? setup.input[0].key.left : - setup.input[0].key.right) : + float ypos = 1.0 - 1.0 / 3.0 * video.display_width / video.display_height; + + event_y = (event_y - ypos) / (1 - ypos); + + Key key = (event_x > 0 && event_x < 1.0 / 6.0 && + event_y > 2.0 / 3.0 && event_y < 1 ? + setup.input[0].key.snap : + event_x > 1.0 / 6.0 && event_x < 1.0 / 3.0 && + event_y > 2.0 / 3.0 && event_y < 1 ? + setup.input[0].key.drop : + event_x > 7.0 / 9.0 && event_x < 8.0 / 9.0 && + event_y > 0 && event_y < 1.0 / 3.0 ? + setup.input[0].key.up : + event_x > 6.0 / 9.0 && event_x < 7.0 / 9.0 && + event_y > 1.0 / 3.0 && event_y < 2.0 / 3.0 ? + setup.input[0].key.left : + event_x > 8.0 / 9.0 && event_x < 1 && + event_y > 1.0 / 3.0 && event_y < 2.0 / 3.0 ? + setup.input[0].key.right : + event_x > 7.0 / 9.0 && event_x < 8.0 / 9.0 && + event_y > 2.0 / 3.0 && event_y < 1 ? + setup.input[0].key.down : KSYM_UNDEFINED); + char *key_status_name = (key_status == KEY_RELEASED ? "KEY_RELEASED" : "KEY_PRESSED"); int i; diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 9ed0e49d..7221c7af 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -2753,8 +2753,28 @@ static void DrawTouchInputOverlay() alpha_last = alpha; + float ratio_overlay = (float) width / height; + float ratio_screen = (float) video.screen_width / video.screen_height; + int width_scaled, height_scaled; + int xpos, ypos; + + if (ratio_overlay > ratio_screen) + { + width_scaled = video.screen_width; + height_scaled = video.screen_height * ratio_screen / ratio_overlay; + xpos = 0; + ypos = video.screen_height - height_scaled; + } + else + { + width_scaled = video.screen_width * ratio_overlay / ratio_screen; + height_scaled = video.screen_height; + xpos = (video.screen_width - width_scaled) / 2; + ypos = 0; + } + SDL_Rect src_rect = { 0, 0, width, height }; - SDL_Rect dst_rect = { 0, 0, video.screen_width, video.screen_height }; + SDL_Rect dst_rect = { xpos, ypos, width_scaled, height_scaled }; SDL_RenderCopy(sdl_renderer, texture, &src_rect, &dst_rect); #endif -- 2.34.1