From b5af2c2829dcbeeeee1905f68ddf2f4426910112 Mon Sep 17 00:00:00 2001 From: SeanOMik Date: Sun, 22 Sep 2019 15:49:19 -0500 Subject: [PATCH] New SDL helper load image method, doesn't crash. Also moved images around and added button images. --- Makefile | 2 +- include/helpers/SDL_helper.h | 3 +- include/textures.h | 4 +- .../images/{ => battery}/battery_20.png | Bin .../{ => battery}/battery_20_charging.png | Bin .../images/{ => battery}/battery_30.png | Bin .../{ => battery}/battery_30_charging.png | Bin .../images/{ => battery}/battery_50.png | Bin .../{ => battery}/battery_50_charging.png | Bin .../images/{ => battery}/battery_60.png | Bin .../{ => battery}/battery_60_charging.png | Bin .../images/{ => battery}/battery_80.png | Bin .../{ => battery}/battery_80_charging.png | Bin .../images/{ => battery}/battery_90.png | Bin .../{ => battery}/battery_90_charging.png | Bin .../images/{ => battery}/battery_full.png | Bin .../{ => battery}/battery_full_charging.png | Bin .../images/{ => battery}/battery_low.png | Bin .../images/{ => battery}/battery_unknown.png | Bin romfs/resources/images/control/Switch_A.png | Bin 0 -> 3780 bytes romfs/resources/images/control/Switch_B.png | Bin 0 -> 3788 bytes .../images/control/Switch_Controller_Left.png | Bin 0 -> 1496 bytes .../control/Switch_Controller_Right.png | Bin 0 -> 1190 bytes .../images/control/Switch_Controllers.png | Bin 0 -> 1836 bytes .../control/Switch_Controllers_Separate.png | Bin 0 -> 2069 bytes .../resources/images/control/Switch_Down.png | Bin 0 -> 3578 bytes .../resources/images/control/Switch_Dpad.png | Bin 0 -> 2082 bytes .../images/control/Switch_Dpad_Down.png | Bin 0 -> 2379 bytes .../images/control/Switch_Dpad_Left.png | Bin 0 -> 2408 bytes .../images/control/Switch_Dpad_Right.png | Bin 0 -> 2397 bytes .../images/control/Switch_Dpad_Up.png | Bin 0 -> 2418 bytes .../resources/images/control/Switch_Home.png | Bin 0 -> 4631 bytes romfs/resources/images/control/Switch_LB.png | Bin 0 -> 2799 bytes romfs/resources/images/control/Switch_LT.png | Bin 0 -> 2808 bytes .../resources/images/control/Switch_Left.png | Bin 0 -> 3586 bytes .../images/control/Switch_Left_Stick.png | Bin 0 -> 4299 bytes .../resources/images/control/Switch_Minus.png | Bin 0 -> 356 bytes .../resources/images/control/Switch_Plus.png | Bin 0 -> 764 bytes romfs/resources/images/control/Switch_RB.png | Bin 0 -> 3306 bytes romfs/resources/images/control/Switch_RT.png | Bin 0 -> 3066 bytes .../resources/images/control/Switch_Right.png | Bin 0 -> 3495 bytes .../images/control/Switch_Right_Stick.png | Bin 0 -> 4578 bytes .../images/control/Switch_Square.png | Bin 0 -> 1891 bytes romfs/resources/images/control/Switch_Up.png | Bin 0 -> 3422 bytes romfs/resources/images/control/Switch_X.png | Bin 0 -> 4011 bytes romfs/resources/images/control/Switch_Y.png | Bin 0 -> 3736 bytes romfs/resources/images/{ => info}/error.png | Bin romfs/resources/images/{ => info}/warning.png | Bin source/helpers/SDL_helper.c | 29 +++--- source/main.cpp | 1 - source/menus/book-chooser/MenuChooser.cpp | 10 +-- source/status_bar.c | 19 ++-- source/textures.c | 84 +++++------------- 53 files changed, 61 insertions(+), 91 deletions(-) rename romfs/resources/images/{ => battery}/battery_20.png (100%) rename romfs/resources/images/{ => battery}/battery_20_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_30.png (100%) rename romfs/resources/images/{ => battery}/battery_30_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_50.png (100%) rename romfs/resources/images/{ => battery}/battery_50_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_60.png (100%) rename romfs/resources/images/{ => battery}/battery_60_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_80.png (100%) rename romfs/resources/images/{ => battery}/battery_80_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_90.png (100%) rename romfs/resources/images/{ => battery}/battery_90_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_full.png (100%) rename romfs/resources/images/{ => battery}/battery_full_charging.png (100%) rename romfs/resources/images/{ => battery}/battery_low.png (100%) rename romfs/resources/images/{ => battery}/battery_unknown.png (100%) create mode 100644 romfs/resources/images/control/Switch_A.png create mode 100644 romfs/resources/images/control/Switch_B.png create mode 100644 romfs/resources/images/control/Switch_Controller_Left.png create mode 100644 romfs/resources/images/control/Switch_Controller_Right.png create mode 100644 romfs/resources/images/control/Switch_Controllers.png create mode 100644 romfs/resources/images/control/Switch_Controllers_Separate.png create mode 100644 romfs/resources/images/control/Switch_Down.png create mode 100644 romfs/resources/images/control/Switch_Dpad.png create mode 100644 romfs/resources/images/control/Switch_Dpad_Down.png create mode 100644 romfs/resources/images/control/Switch_Dpad_Left.png create mode 100644 romfs/resources/images/control/Switch_Dpad_Right.png create mode 100644 romfs/resources/images/control/Switch_Dpad_Up.png create mode 100644 romfs/resources/images/control/Switch_Home.png create mode 100644 romfs/resources/images/control/Switch_LB.png create mode 100644 romfs/resources/images/control/Switch_LT.png create mode 100644 romfs/resources/images/control/Switch_Left.png create mode 100644 romfs/resources/images/control/Switch_Left_Stick.png create mode 100644 romfs/resources/images/control/Switch_Minus.png create mode 100644 romfs/resources/images/control/Switch_Plus.png create mode 100644 romfs/resources/images/control/Switch_RB.png create mode 100644 romfs/resources/images/control/Switch_RT.png create mode 100644 romfs/resources/images/control/Switch_Right.png create mode 100644 romfs/resources/images/control/Switch_Right_Stick.png create mode 100644 romfs/resources/images/control/Switch_Square.png create mode 100644 romfs/resources/images/control/Switch_Up.png create mode 100644 romfs/resources/images/control/Switch_X.png create mode 100644 romfs/resources/images/control/Switch_Y.png rename romfs/resources/images/{ => info}/error.png (100%) rename romfs/resources/images/{ => info}/warning.png (100%) diff --git a/Makefile b/Makefile index 575a284..30a0762 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,7 @@ CFLAGS := -g -std=c++17 -Wall -O2 -ffunction-sections \ CFLAGS += -D__SWITCH__ $(INCLUDE) `sdl2-config --cflags` -CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -DDEBUG=1 #-DEXPERIMENTAL=1 +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -DDEBUG=1 -DEXPERIMENTAL=1 ASFLAGS := -g $(ARCH) LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) diff --git a/include/helpers/SDL_helper.h b/include/helpers/SDL_helper.h index b63de6e..5844200 100644 --- a/include/helpers/SDL_helper.h +++ b/include/helpers/SDL_helper.h @@ -36,7 +36,8 @@ void SDL_DrawCircle(SDL_Renderer *renderer, int x, int y, int r, SDL_Color colou void SDL_DrawText(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Color colour, const char *text); void SDL_DrawRotatedText(SDL_Renderer *renderer, TTF_Font *font, double rotation, int x, int y, SDL_Color colour, const char *text); void SDL_DrawTextf(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Color colour, const char* text, ...); -void SDL_LoadImage(SDL_Renderer *renderer, SDL_Texture **texture, char *path); +//void SDL_LoadImage(SDL_Renderer *renderer, SDL_Texture **texture, char *path); +void SDL_LoadImage(SDL_Texture **texture, char *path); void SDL_LoadImageBuf(SDL_Renderer *renderer, SDL_Texture **texture, void *mem, int size); void SDL_DrawImage(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y); void SDL_DrawImageScale(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y, int w, int h); diff --git a/include/textures.h b/include/textures.h index bb40f4e..a4debe2 100644 --- a/include/textures.h +++ b/include/textures.h @@ -5,7 +5,9 @@ extern SDL_Texture *battery_20, *battery_20_charging, *battery_30, *battery_30_charging, *battery_50, *battery_50_charging, \ *battery_60, *battery_60_charging, *battery_80, *battery_80_charging, *battery_90, *battery_90_charging, \ - *battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning; + *battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning, *button_a, *button_b, \ + *button_x, *button_y, *button_down, *button_up, *button_left, *button_right, *button_lb, *button_rb, *button_lt, \ + *button_rt, *button_minus, *button_plus, *button_capture, *button_home; void Textures_Load(void); void Textures_Free(void); diff --git a/romfs/resources/images/battery_20.png b/romfs/resources/images/battery/battery_20.png similarity index 100% rename from romfs/resources/images/battery_20.png rename to romfs/resources/images/battery/battery_20.png diff --git a/romfs/resources/images/battery_20_charging.png b/romfs/resources/images/battery/battery_20_charging.png similarity index 100% rename from romfs/resources/images/battery_20_charging.png rename to romfs/resources/images/battery/battery_20_charging.png diff --git a/romfs/resources/images/battery_30.png b/romfs/resources/images/battery/battery_30.png similarity index 100% rename from romfs/resources/images/battery_30.png rename to romfs/resources/images/battery/battery_30.png diff --git a/romfs/resources/images/battery_30_charging.png b/romfs/resources/images/battery/battery_30_charging.png similarity index 100% rename from romfs/resources/images/battery_30_charging.png rename to romfs/resources/images/battery/battery_30_charging.png diff --git a/romfs/resources/images/battery_50.png b/romfs/resources/images/battery/battery_50.png similarity index 100% rename from romfs/resources/images/battery_50.png rename to romfs/resources/images/battery/battery_50.png diff --git a/romfs/resources/images/battery_50_charging.png b/romfs/resources/images/battery/battery_50_charging.png similarity index 100% rename from romfs/resources/images/battery_50_charging.png rename to romfs/resources/images/battery/battery_50_charging.png diff --git a/romfs/resources/images/battery_60.png b/romfs/resources/images/battery/battery_60.png similarity index 100% rename from romfs/resources/images/battery_60.png rename to romfs/resources/images/battery/battery_60.png diff --git a/romfs/resources/images/battery_60_charging.png b/romfs/resources/images/battery/battery_60_charging.png similarity index 100% rename from romfs/resources/images/battery_60_charging.png rename to romfs/resources/images/battery/battery_60_charging.png diff --git a/romfs/resources/images/battery_80.png b/romfs/resources/images/battery/battery_80.png similarity index 100% rename from romfs/resources/images/battery_80.png rename to romfs/resources/images/battery/battery_80.png diff --git a/romfs/resources/images/battery_80_charging.png b/romfs/resources/images/battery/battery_80_charging.png similarity index 100% rename from romfs/resources/images/battery_80_charging.png rename to romfs/resources/images/battery/battery_80_charging.png diff --git a/romfs/resources/images/battery_90.png b/romfs/resources/images/battery/battery_90.png similarity index 100% rename from romfs/resources/images/battery_90.png rename to romfs/resources/images/battery/battery_90.png diff --git a/romfs/resources/images/battery_90_charging.png b/romfs/resources/images/battery/battery_90_charging.png similarity index 100% rename from romfs/resources/images/battery_90_charging.png rename to romfs/resources/images/battery/battery_90_charging.png diff --git a/romfs/resources/images/battery_full.png b/romfs/resources/images/battery/battery_full.png similarity index 100% rename from romfs/resources/images/battery_full.png rename to romfs/resources/images/battery/battery_full.png diff --git a/romfs/resources/images/battery_full_charging.png b/romfs/resources/images/battery/battery_full_charging.png similarity index 100% rename from romfs/resources/images/battery_full_charging.png rename to romfs/resources/images/battery/battery_full_charging.png diff --git a/romfs/resources/images/battery_low.png b/romfs/resources/images/battery/battery_low.png similarity index 100% rename from romfs/resources/images/battery_low.png rename to romfs/resources/images/battery/battery_low.png diff --git a/romfs/resources/images/battery_unknown.png b/romfs/resources/images/battery/battery_unknown.png similarity index 100% rename from romfs/resources/images/battery_unknown.png rename to romfs/resources/images/battery/battery_unknown.png diff --git a/romfs/resources/images/control/Switch_A.png b/romfs/resources/images/control/Switch_A.png new file mode 100644 index 0000000000000000000000000000000000000000..df756ef0fe0b1a6a1c277b6106aaaa1b6db36201 GIT binary patch literal 3780 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 literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Controller_Left.png b/romfs/resources/images/control/Switch_Controller_Left.png new file mode 100644 index 0000000000000000000000000000000000000000..f90a2441298fb8cabefe5166b3f8e948a2244002 GIT binary patch literal 1496 zcmV;}1t5kd;qgMn$<|7(d-CN6h%=KMNt$*Q4~c{6h%=KMNt$*Q4~c{6h%=KMNt%`7Lp5+ zcO*9?-}ug+;j!37VG2J&SyD8Gb;dU5FaG3Ff>4p`-#y3Xkj{k?55TL{uFBG zb3^i)8fozJdmnxBE|cAoDh z_4pEtx^+LU0hU6d4;Xg-Ul}@G*!#zVkOdd^SzVTsesI?S zDOwB-AnpI9=-@F30t>sSK}P8Z-%hoZ1BRWS<^Qc)ye+v`fEF18vC1H$^ur3W{=bDa zLXH0?xdCwR{0#uVHBIxqO2c%zoQtyzQki~^(U1P#03!aM<&Q@w&d{m^&*seJg<48A0J2Qz{XGls>> zoQu5%v7_t0P=OA^{Ljhbe~WKZHs+=O#jY(afLq}iyYzh5g)R=wkeukqO+V~DO8gJg z5iRmu?b_b+tDqjfzU)F5dpCxWOeK(>eh%UU2S>7NT^h+7n2}!-aIBMUi11r$VJI>di2?PWS0$Unu4#Rjw+C|;PkBUk!_TMHhgSzpE01zb>NxGj7?Jn z<|DV0wiTT-`3`#2*1n=G+WY669Yr3-73v$=4;lAgS9TDYF~w=ts1lxNiV~!Z5z?cs zoRof_oIIuJUx#u@o+UJaLy3D7S;ValA3EWlDv)-cFqx*IxlEO=rfJmNU6K6 z?<_>u%RMD#AH&v8ntGZ29;0dmb9x;s4(FXV77P!-Wc`1M{nKuayrnFe`ktGY$o~!i z{-_a76X@*V-;6$r=I`iVN0Oq2(&^wKdr#ugWm7wPJu>^vZU~VOdfaHJ!AYM;|875* z?7dG!pDUW(^OOA)8QL1+j`6kWEv1i28eaq&oLmU$4+?Uri`@mW2HkKvSeeHdjv`x6 zqm#Q%hK-rSS&o9y%z}P4`JO*SS*|KmIbV{DB%c%ReXcNuNI04T^Ny#5NZvF{C>&Dq zCgI*~!NbWfi0}GbaCkhScE9w>Q_p0E(;$;cK-&R1nb<7_eX!O2!OGnib-AAn1$X%+ z54H&?mXw*LaSJiS>?z=;Xk2W+Qy0k=Sl+BmvAoxqtT$Iyi5C9Xk_VVg(C-Oy`ocAr zUDGt#$GvDq=%tmnhWy!(Qx|9CVMlpv)IHBNdYtxq_an)k#sl0?U?X}`5{yFoa8-uk zF!GUfJ)|+{(b>RrQ(XOSM^TG-F~I>QkMxpKG{AW)<2#s~)j3O(CaF4(V2$#Ew6dW- ziPw$3UyeQ!bhfP)K=+XiFh=Bj2+amDR<=1O9h}2CC4s@0geKPC2>bb%|9{|TTYS#} zP5x>t*!lk*%s=^@L!u%al6 yq9}@@D2k#eilQirq9}@@D2k#eilQh=3I77RpJ)OF?-LLJ0000^n&N=6tbIv*EoO8}OXGw=T5pX3Uw<0pj z|D3Z?)vrUe>9+*j0iS_A?PS0TxJliIivY~?fv|9wx<8Wzyw2}#YkR^IbCtS}lK@-+ zk39^;DQn<$>OPMa;i=dTG#F(W@FsQtMd!4U4mDcAw;Q(v!M5poPmTaNB#LPBZzZrT%OftQzPVw-2|IP)?lOc?r*aVg=9 z_@`r=UyzJE*{eC9RknYwE$^A~?2PX3j?c#(2X3edA%y8{--;^0w8B|_0lVtdS%w*q zvNcl)XGA<55$DW|E_7Qv5)?K6X!=1yxOv<0Jm0$f5Fx?4?s(2vGZFd7OBG;T;f%P@ z@fdmTIqAzYFqYXFAuEr$AbTQbGKAUCSZwL3sM$1Ry_LAoaV;Vn;s)g@;%BYhipUco zoS6L``7o z8ag*>WLfL?2;COJTIUehRj}7>&t0esS@&HJTwx(1U(Wp}kVyzH&!vA}O1qHq&?R)J z>N{YTw=u>&a8T6`k;nNJ;ZeTBHf-%G&NnwW{x-7DHwJAe^q1)qE>>pL&^4zEjTS4A z(H8-`_sO2VGkn5@TN9r-@AKoVuw4p{E~V3L0&z}eaow9V`ihV}?+hCsD=J)-`gUX7 zu3^h9z#Gz4Wy{R&##HTUTorEdsgZw&m z9m34wAoR1Od*8z`+atUnGvg3YC3;qa?MuCIcDkPgA=_T}(9vVjr3?DIfyTF^k}x}4 z(cgko)Y=REl#2?LJ8Y68goZx0qju^z{cn%$ytiObgu8NW-1*iEM?JLRm`R>A7(zm} z!Y-VxXkLELjLuo9t}TOo3%3nkcDOu9{8aWJAvgLaB2UHQ7%$%nUP$|Da%ZYqdCf;T zAZ3KI!&16$K^m3G4@iNKUo0ggSgH1EMZ1^*DHw;dp&eB9&#DiYmQIGCsy|fqldAqD zVPH0io76__4$jF9NZE;^<{@c=>RtAL6iP+SnS}SubJ7N#x2gNUg>BZP4FNVjm-c^AB^LAQ z|8?6o5XZmh>;F+F2sem2ftd-SP7r2-suNh9Ao2uJCa^kznF*{;V0HpC6I}l|Fj8cY z;sFPUmhgE`FEM`rAdfiU4hI0pWHOmdCX>nNV^U^DL~j8U07`qPu)ndi0CoVj#+ZK< zi#8de3xtT?0jR)2m@6f_GsgUWBHz!R`PKH{#^!Swf+wO6MD#%MxH*x(X5RNi^pS|( zq z#yFkbfE(tW{ktA<&w6CqDOnNG0>Hu;^Pg6t!2%&}w6_?p6%F{MZhZ<*M6Flh;xh-Z zBcg>d=9@->K?1QgV}pKS)Bx7Tn14d@nK&~5H4&8>Lh)`xMyRQ!G3Nb+3*(Tj)fPd7 zH0phNy#X*c#@q#@{Tk_NN>JC>OCUt_5p3)o(}IO@8OD^H8Mr<5Ml2Bf1*{#XS^%Xn z=6gtiE`TzmOYBoa*5EJUnCgma#xYA@<546Kn@Qz3b?H4RDV+f+M%wLNI*zqNnOh;2 zc-b{>0n`($RW0@^xduP;!XurEh*p|L;|r`W=NPBHB%*gC{Yj7H=a-7%%X%h9FNxSu z>U#E5{3(0G0&Jlq4thI{*N!0mz@$9N-mDILeQ$Gs~1P#bAM0BnX{ zNCF1OKJ2+&-}xTqBy8Lz0&y9Eu0Hn`?q1j_g8T4+jPaNG_|!yBQAwj-I*!$ce-O7P zg`@yS6hw4ujQKkt4GBBQK7uXw&%DIA4{r`Yw+Bi@Zyoya*>T;Ihn_v=$&v1Z?eIn`v8Ve3W_))cfcy-X4`g_IIYG+>RWTfu$X9CE_NEO za%*Eq8~Q<1hj3pJ=j=QTqA3u~FQrjT%SAEKwDbgGb*jctYa7+wz$`S{DPm)`2rtea zZIz{=3TlNkPBBB^2%igR$xb*k73y18f%F`7obpg2aGZAhiEZll-547wq)FHrAgSu5K|C~ITPU)tpnP$*p!M3io?eX*6` zmg>yH0N5ZM@;IwE;4Y%sA;y@m;HteDxNHj^hyNO@96~lOp%4dkY*G|JyHWoM>$3ht zL`%HXyG?@bt(30!wZpy(Um#(ua#VqISQ{mEV;#cT;)t)+buwA9Kqf{O$i&D3nHX6h z6C(>`Vq}3#j4Y6ek;E_regx2!;L*VL3|`$=L6RCm9Iv&5o%ji!X%rNO6M-7+5G~9R zV3*1QQyGgVUJSr1u8DXBgg(BEOyj|EuU2gD^N^R)3Fjy_2#8)Z#@rFF zby%)8*m|OAsfLn%gYwsMjc9j!wW1C;O6l}bOf;=10tu}pRf1kt zK?)O0Z5l;*arUTodu=!JH{$u(U3_na;X-e)pMJ1TXooBTd{RgwJrw54I_38n^hwz? z9;Em6+;dDw^!wO(>yz_ko#LDwfh~EgZ)NX^VlSl-$Y$W&xfd!fz*7=V*3u4Jt9FRg zHBaU3tsTc3MD&^pD8S=0x2I|gaoboUqMa0d#LyV?o!ALif!!)IurQVrTkLEFUgv6y zmvbCv;PQt|L>fiP*xoz)n=;*tKO0kM)H4TUflQ1nkclx?ATC>>P%OtK(?~8JC6FFl zp^#*B#Wa$OB`WJh!V-h(iV=;MNCe_axRhjer9=}*?KoCRGP^={(xC*2KwQqWBCD-I z#16>O0w^TL2T?5;kBEPNFX+rsd1cI`;04GI9{WPK9;&G zqXLPRo_Hm!ed7Ye0fu z&f_JJgEebibbB#fV?)0T9g_C;_S%fAp3~i`I-jqkv2VfgWWfR4LGE{3fCc&^N0zYL zlwPo4y1lnl*8B<{53!AWfqtJ&xBX9RW2J71F-Adk7;m@ z-J%bPvN^HpLdwRNKfr40lB3{jaIJ{4rACZZN$lz a6!;&L(y=T#MT&a>0000 z?|Ixd493AOV0Qwi6T}-_IzikC>`dTnaNWSk1m{d(cLKQ+Trz>23C^A1*ALW1>V=f} z2bAdRz0cz>aYTXy`2qw$TI7TiPVmE&XcRaTk#{0;Ir870MdYh7=35CF{`UYbfHlw% zj}36K^cao;z!`9xpad5lfNSgyJ0TX`Jv9Xs;X;e0!V{&r z0KBElt_Z==Q(Balg{6=u5jig+O*mde0F6;hEh4)H8ju209{LdPg% zE92*i8t_#_?u{{@mlh-yK?(uxMC7AVpO0cE?n&%!yAqKbrM8E-7m+7p%$EXfF9%?y zXq269EY^!Eg|=&dHTT>V0ebFjGtp10)X%64RPI8LQWkbae@$rjMMVA_eEUX3&d0bN z*hm@b^5I^rz4?2_KJ!2tm9!}<5PQa00$XfUpnggtjYif9{hTRIa1L5*T&})@C+WsK zWp}&ZIh-#*U1`SYrQoSiAQVWzuIewQSTTf0n~1W2GcC*pN$X z|7XNa+?K!{*|n|ZUeBWxMS&r~eZ;QxQ0x->Xq3iRRw?M82Sz8014<)4H=jz0vAb{# z*C{fD3aVACFexlOHSVx0Hg#j{JucO0@-Cf3kvL5;e83NCg7 zz3P56@F*gm4*u;%@&k$I#+ZL{8bCMc_O584vRgs7%o7%mhSC@tMUhl?$uGWN7-PO0 zV?G;WeiOTj?!|`HYrxae0yuDkLQvAHkRgmQ-;6OIj4{88rJBdwjx$kfZvQ5?f#hOq ztY>j0HrM_pSC9l`*^q8EYw!3cW6bZ$ZN>u|KHo5J`22mQ%-Syg9(CnXuz|@rvVU#P z;3?;<)R}o?9xpA)vmq`#6N~wy!Lgt$r9~-)ywpMn>Q~4Rl%ceS397)xuhz=_y6})Q zKSi#zg@7_%+P(C(zI$AD{angCb;((t)?x}70-MkHD0bp%E9Q>Hy)ouP>c>F`!_uhm z;F*KxoR6ze$PmVuFUFWZ#M0PD$sFJU$U1DQQWo}Ha48}$ns+r`8Ksqt`i27Q+O`94 zqs5*>RFgN%ckoPt=2)}9_yJJ;ZXk802eMpVH4t9hw!iMI8eU+TSegr2@ijG&UM0Wg zcqnbBIgTulPa6%dpVFdh(24+m82gs^LWVu1scwDdp|m<~W#OLm&EWSJSZZn`2iRhx zvaf;Cwwf{~1Ak$ibA@ATu{Ol7)Gc*WTDfAm7~l?Nw*lXsb>B7#gWpgerPYxo#J%;S zj2rosrg~?CcuK40?BS!UoEucBD|L(V-9W-Ats1&oyCz1l{cF;U?*sEuT2*Hc*D6+D zEuT`20tJSqH+-3j*x|NPP=m_plFi4Ca_ z!|5;5Jxntd!p73ljl>s)@88)vo=0hL+mF$=Oa|Yc5q9PJA!J3 zr|F{tsgzb{Y3LBROEISuk{fBw=6bAWbVpiLU`?%*hI_SpLkQ^HeOJvlU@2{rAV))O zl!iN~=%p2ON;reOxP-CfQrhxqTl@z@-;LXKnhyShA__T>^MZ{?v0muq-<35l!Osr}u%iW9#>MQ;6y~dM^+=l{uXOdu- zn#yuFE&*MF`F6=Bau7pghq))(zfEYbn%vD$C||{i_AUvYFziG%2j907?dQ_rHR(|S zT}Qw(Smyvqvn9bf2Q1&aE#P5MP4Ka2lZ9Ly>v0FJhhD4fsy?-9646nF+x+Ssx{{AOx zrIP=mX|b~oZhJdfGL_TeYGj}f%y3X*d|`y5$hiT9lBtwVuSW*D!%|97#gM;C)Hxl$ zhgrUaXhJD_#oSRayg+||t3@I6(v?Gi6=Bp-EU!&^xTb{1)jIl_x4@40cidHja-_wc zbk77bYFn4dr*xCtMoh}y4b6>RZKful-q5xslrbX5@&$IJCxPxrJCm$N+MOkokNOt*Z7oC$F=Fwpf3%Ljqs{od&Am1pA2oOMNl{dPX*S5tznEZVv@lH75gcD9UVG{oWd8ne*npt6?00000NkvXXu0mjf^YrPK literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Down.png b/romfs/resources/images/control/Switch_Down.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7b2b297c22ac0f49fc7c3696e194f397f9747f GIT binary patch literal 3578 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 literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Dpad_Left.png b/romfs/resources/images/control/Switch_Dpad_Left.png new file mode 100644 index 0000000000000000000000000000000000000000..8efd7a403545b86e491ef32ebef806f36d2dc5b2 GIT binary patch literal 2408 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 ag8UEvgmg}>CL)CZ0000 z%}*2E9>>3D`T{Ku_C*7<5X*ulU?L4^Ua&L?f=e8xvjW6E{9Pch8d$*ZM5o zC@$O)>D9!b(FD2x0~olbG&N#dI?$HB%()9Fm$uVV+A}>fIG+u}nVIwZb-r_6=A7Tm z0SpWb3=9nFgYb5s8cwJ4cuPym5X(Hbx3_0wvDgO7JXxYSK{`7-FAIV&P6)XUz@d_v zIHhz_mgVP>NaQ~%*{BOm3F7s7{{nEY$!7mvTU)!|WSbQ+@phnq$K!cM2>CY$)5D@D z`Xotu&B1mVnh?a}@mwQ>JmF=Z5HfV^*s=KL=H^FUKJ59z+W`RZcswhF5TDXMK@eav zvAJ*Z`8;GU`VrP**7?1v8@{#%O!2ZjN4c6MGinM{uXjMV!p z4~xU$fYoXR0JOBUFdN1F@#6=!x3>WRnM?-pc)aYG(hI)-uTomAe*pvtA&=j`e_u70 zxN4Q<@pzt@Or`*uD8^BR5HcbNLSSTM0VvvTl>K>GEEcr4w=>K8kc^LvjNDS%q1dQXO7AJ%L4qK_ZnvvCyj_~N zD2mMT7DW+~Bmn^W`}=YK{(XG=_D%8F{lCAkt&~=6|M&0TF*P-XSS+Sw;vRs1%IuaV zbai!|5(HtjG~H^o!r^Fc9GNJJa5~w>KgVJ*NRos*ckbZw<;zU-uEf))Pcb()x7WxQ z5Cp;Z_U+rE-d9j`y}$z(t&-TU8ex1*=02g}RL2cBD3 zW6;*t2B*_mcdRXM&YnFBtJR8=Cr_$oBauibKIa@nU01ZNtxdOLoH%i!DS;66mT-Mu z)do0q>J)Dms`A?jqV+H#)dew|%{X)BjM`>uroX?xuJax|cz{GA!PuK}R1?H(Hlwev z4_B^SK~GPQT4tKYt5>fuIy#Dpi3wGOQALpM?rvPVbP0aHztX#W+-M}+RFWi2OibX~ zwQG3!@+CvB{tr_@TrL+bUc89G!NI1yC&-JnwKY6^_z+jGUd6|cY+r3>B8bgq!|?Dh zE?l^P8#fRNg_z{YL=d;z&2!|GI|~a7`1I)$lf0M=+lE3R zL?RLN_V!kcxjl-AqKNVFaooCfi`fmyY#cq8%VBA0387F3eSLjLqGwf&v9U4Sy?Ynk z-Q7&{Wj?WyN~I7C2C=%jih+RvCa*NJWPX0Wp`O;cbLa5r(WAPbXAVNOnWjV{fti^Z zxLhs_4i2hirfGP+UOaj71n1A6SJjT{!Pe1e6w}kwYMZHN=UPQ!*4g1_4DUX z-Y!(-w-aQ3exA1rRjEr5rEg8?h4uCIrj(LgE?3uiWo?Kc2nR+o#N%;nZEZ1~q!I)H zR;v|+5VW?osyc=H`SWLtj*b>ZF|wY@t?{NUyVf-|>e*}-vMd(~kj-XmcCJ=Zsnp)K z8WAT2-n@B()2C0XlD87cWD<*ui#6TAWk;k^sesafo12@Bdv*vUNm9k;=H@15XJ?z* zmb`fJLNR?eOt*-#5)zBWHf%QA*_n46nZ3SFI?nwl#6!gi%!`W(RZ(!@+A zqk4nh+S*z)E+k13v#P5QwFvA85)1~hxVTt!jEd3krFNbx`KVZ_g~Q?3lv2eL)Fz!y z7qw3;Z-D)IWwY5bF`CHp>FH_3ub)HrUjS4&u1Om4!?X24D?~3vm zz~Ljl3`&VpN*`Af1E`_f8xDv6bUK}X+wJ!2l+uw(U!ZP)A*iLpyJ1&4xmuQJxO` zc4Jvu#}Gtg7=maFLlBK&2%<4``Ms>+;o$>=Cw~3T}~-pEs|DZUsrDQdn78DNA2jSt*)%)El}L1lVaO z_7Bx_9#Ut5t_8{Eaz&+NWo4!AXb-KRYe4{DX=w?`WD?0_5=%=zY*E~d_l+LD7sq5)-7%i^Lf=oi9{k*S1B+sFfcGM&>Q~)%q#wXn*ey( P00000NkvXXu0mjfbmokO literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Dpad_Up.png b/romfs/resources/images/control/Switch_Dpad_Up.png new file mode 100644 index 0000000000000000000000000000000000000000..700a8ba7577f641049d71c37275e3b9e104cc1cf GIT binary patch literal 2418 zcmV-&361uNP) zO-LKv8pr=XB0G1jFfcY!UQU`T}V^x{uT<|zI}HWH@A0pm%f{VtGD2$ch$Hp zl-qY#uwX83tXNPN!fh6b)T9B;hlwUJlbLfDHIhswnvZiblXiX}IA>&5c&GIKEiU~Fs*%gf8~dc9EFrIa%5Vz-0tf+&jOQ4|H$ ze@jbC-0dzcEkSKpmgN9D#5W%)WyQIwAJWsUBFD2f8Lhg1t>v9K$m z#bUV@MC(E@Jp{LV2v1B8(SU^*pFe*F0NlTSzw5SHqq`uoEZ^8#Nt4q)2a#&wqzx8}An?~pc>n=z;9&&tqtmz#U*4EZ=e0+Rs zKBk9g(2jT9Bt|R87%_(QNrGqLCmR>T67oWw#h|an3IbQFg>Ie zLkRLK+HQpIg0PreY=@o?>XVa`GlUR7AtV5R$zp&jA^dt(goa)J)YQ}_!}9D=N<);= zz3<<@A2oBrt%6KUOgs`raRor2!@|{}_Z6vOe;90kXMhm$k`My7+Z~c+c_ooZ+_;wb z#(|;B<$5cMVu*1ee^mmaD27}v*V~&8YAA@y<$6m9dBMC`zc_@D7dMHbDTv$c{!K42 z?%cTppU-!_ZM9mN0D>UEZnraC38F@p zWxRRw2G5>7!}$0(Y&ILSylplca=9E%PEPRt{d=69ond&G*CQxExm-p*pVu7kP)c6{ zsGF9qtM$pr$r(WqqUv<3)ylQ-S}ZIqU~zE~_wL<;$K&ZJuV^%iFJHc3YikR;ySr=( z*d&=u2BlJ|E?rR+kGl6&C&*Q=DpYe2A#ggKZLb_`hvDI23=R%nZ;y?QVPRnbI>OP>5l&7{u)Dj9)6>)I{n>05nM{WJZ>XRs3X;iWU9V1- z<$$`^)l}PKu~_QFAcQb&->Yp63=GueeR_I|j~_oWu`xI}i2nY5c&Hzq=OifL}>-E+>3DxWL_4VQI-Mg5YnnE}nZfdDft1uO0baWJRb8{FP z8e*BP;jr87@cDf3csw{fJVYv$VwN`(L2Nb~d_Eu7e!USH8XCgGhYyiVCb7T2k3yl) zah^LNfPrQ&n$+N%jN4p=kyZ&C?@0ISssLJ0c%`?=g6uBKEfp;#<}Qi@Wk#C#=uGZ(E^ zT{jifB}sy!C^Z5!bAPy1s{8Z<0|OWt8DVY%0MhBS<^!X=P!y%<`l`Fc3xz^R>%jB# z^Ug}uBDq|Si_P=%^R9|fv8jbtUDtU?I-NeV*=!#OAy2E*i^U=oMd3E3P6(-+a!I99 z=BuV17@H?N+Yc^k$(huo$y6z3zjecnmKi(`|L#b5a9?<*x`f8f0 zTrS6~=~8<}qXleTBB+(98I|Ml_+OM#%@cSdNm5OF%d*0%^O7V z-K2Ot{<~hHbn6K!J-8C%_eT3~?6+QtvVtEkuQ%z845f7CCNY2}y1nsu{Ev~5k=J&+ z{VAn1KnU@$D&ZA=@cRlvt7HIZzG1mtD5X(CNGPArYX)&OO?6+=>GWATonD8=^7&42 zyWN{G&J$XDu~_V}o&_-HvJ8ePh`}%gF&L&G2E!D@VCep8jdpnO;K8knCz8n|wzs#t zR3ditq=$U{`jyEsMx-YNNu^RqBoYnxClU$nt3!CvlY#)i;o)Ih`;1P{3Q{N(5Q#+U z(j$=w^VNjiq-O;Ie#D9Dsd`D0dNy`c=xIU9<#LUe@O-kVTlBOb01ys`ki zhxIN_$MoblM9t42M1`M15FXF^=|#^sSw9=5AO^$mP1fb*CGz=v$IDg~MZx9eC8JXD zLw7+ar5W|x>(rkfs(#lMD~#}YBQ11qvM8k?by~4lbr2Hi1)hX8=f<@%3$#eKK9ZFy%m(LIJ#C=?1WD5YHwszwq6 z0N6Ir9Z)P5FLSxvzXt{eKnU>z=;vwgYKiB|cs%|GPdlw*m?lfj#KgoSUU`e6n2E(= k`@HfuF)=YQG0}tn1NSQWFE(xm*Z=?k07*qoM6N<$f&ny(4*&oF literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Home.png b/romfs/resources/images/control/Switch_Home.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6733c0b8908e6e84bd4a32d82331af019e0a16 GIT binary patch literal 4631 zcmW+)c|26_7e=-aLu04Rgk(>J%962;o$UJ-V_#CTmu2kB3}ZL4n-Q|_6knl95@WIq zCaLVgkV<~H-yiqApL_4;J@=gVobx=-`=*#0>t0|HV4mmJC9p zt;>zBjip~d%Zx+0t&0TF?J#7m^sFGn3r6f3IU=N7)|;p$4c%#XCy`K|Z- z-{-gU^Ydq+As}IhM?k>)rRnL`ck=HvX)=w|H5mFt;T#MaHtPxczETh>$hCEDCG^hZ z*#ldi$GwiEgUqZfNGkN>`puB;#goB1Q=D$|I%B85kJYai8cNY9w{P0yB`$0u32SlF z>sr><*7rxvqT1B3J3VY}E#KgFgvD7Q4h&BKG< z-QE5B`nva;=}ibTT}MYpTa~z-B!;IC>w;UYXXy zTYD!_1*N4#ncH$seXsuhRa-ZyH^Hi$BzdOeTwya~1z7BxPoE0DssdpvDk_3l5(R{f z9rq&ofk_Ob!9^q;C?^o;$Fd@~`vT%$UdJ=3$K87qx!YgsE%yYgD*}=i<&2JwerY59 z(yjqdN~uV8kY&;UnMz_p$qU~OUhf_cQ%u94K-ws^WijS$O72HQ5TtEx=F1mRl}lMZ z%cLe}_eYN`r_~Or)Yp`t=S@vbJMF0=%wrx3-_CHH9_@C`U0umI+%;k(a@f_+-~ZaY z82ne1zyG%SrhtTi$iG51VH=Ku1d>|#Pogf>*Vp4W#{CqB*F%TaLcH~1s(RJtdbQJl zy&2y=CpjKoUds#W6E(Sn2eJK)c|FXypVf5xk7X2|U`JO+vw)&ZiB&3|;1d=eSy^#W z9acy;6pw$RVl4J%EyUH^8*Z6srblU=leV6GNAPPK{@1BK?P`psH*T%(?v9q;4RcY< z2`tnT-TOXuMd)(QsIrO*8&F?Xys1PVz@mtsqM)&{u?XCJVi~ZasHAlL`t@f^OHQ9v z7Xy^g<5dpS$M({BbEXm=${lV6*@cCLu}xak_pe)|)&Bl;#|tKW3s;FaOh(87hEy(b zFfuZxvsZh+ob&4nUS&)jsTfjqmc;DsuNl01_s*0^+S`*~>I;t#>5ghHJc#Izk^ujj z9kXHMG&i$66AL`s8|J_{o2r$K<~zs0bJ=RA!@d95iszgMvXV67Mmu?MD^?1lpR7|^ zP*_MyXh|LLY~@!9SiC3AQ}6A?=NS_f74^W^*PwGlfnVq_wa-5!gv+=#=SehR@$Fld zDbMuG%niHBHo^G#c%ag(>XtkdQZN{9AN5{x=J+^VJJQ;kxBnt-kJuO3)^DNH)6*ws zr^mSHfnOU^ec_ewgjbZ=H8nLEk#M94Gq95XjgOC?10EcdXmPUOEtS5{u3@!HJS`9LIUTR4wqXwf;xp0-zz*FzOw)M%OgH#^G%AR@I$@-}kUwa+}l7;T}bk} zQOFka_r#0H;HXN%y9NcBx?W*Tq_eWN#zh0oGxXD%>+a3+YY^^*=Fny%nWO%Jfy~m< z()pxHjzS@uv5Cp#Ld%>q4M-Rb zq;<}Z=jzp~yv4$ovb=5xvDZhK-V*ySIdo4YD{#=#xc92K_=dP9h`uj^%EH9N^oYvz zG(P^^zo$5nnP`s8Rq&0bjEoCk4#GcEtHL}K3iH~rmHK1k-mpN8uj9h}{N(~6Xg-b$ z7l{5Y_iFu1%{Hf2az*m?w!c=T8M*PHYMty}M`tJXi~BWsW#zh`T~2*Z z%H@AqX3y{wTJYY8zR8i~xwq^Sv-gM5(<5-2dDT zP+GG%dhq`3x&#ZYwBAoTtdG7PgllI5kRs^xXJj>)KK`}9>YQW=77OKL18PTbgG3_L zW}_!2j5esU`36g0%8H9C-^Sr0Cfbl}w<+ zB~UO~u|(K2eHQr0f}f)L_L2pR4`~)!0cTDD75U_>e*ez=+T|sM3cCWp7c*o0xB4g< zi{UX|jR>Y!h4auC@IP&l^>f)p#y&g2;fIryAcTIBL~8Pg+o!oXZ#<=ux7z&t-Me>z z7d>nPDu`+xT1;#Sm1_t`Ze#hFUyczqy|tL}LdGr;NTnm=*)Qs5s-oR5@7UPEzLXwa zwBG+|9Mw6cQkS9yo2u#90cmrVo7Tx7d!7Ep4`#vXv#cu#h|nMJkgvSyNr^~wvbRaF%LsGh5=)G9hlGf7OgaV_p5|H{^t{w{=AbO}u|tuoRz z*(c$Mpd5bA=)pLN)y@{$R?sT|=pA`AHK)$s+F@D=+22JiIgVsX zDBMRVY8?-#ha;>AMlic=A6EpT4l*iAXhD*+fF>%MlM89kAkZ1S2#uvdtz{kw_%)kEOjEa9BX=LcnQ44#o-Y!YUdX)TEmsPf*@zs2oHew)Jhx8f$AA)Jq^V6wa8;N+0|sOU<}O7*^gp`XLAeuUvttA^K;|ESe%x?kl!RdJbeJ_1pY!rD z7*IbwJhZTOd#DN_TWOg1iDUGyd0MNLW#Jo{FE{&O{E3O>qVQXWR#K5@)23WRHCy|| z2semMRlJ3)DY}Zg{dYYVG_|54l(AZcQ#tcK-|_VHeIxT1R`om5qgHMRgx*6u)=-@L zWANsz%*K`^SBk_uy@rihBvKM0+K$l^txMAyTy8?7jjk54j!aEW)oi_O;04I2EBv5l z;}+1hKZ7SGCoeYsJrf>Mc;SOt_`oJ)fIiH2Ex>G?rBx*BiNanS4F?NFsg*%5#zaO6 z?hgExjRs-(dI@Vjk#wb4bCXwdf!UKUqSP)wx~_)@Tgc{f3+S>N!2mblqEN+T^YiiGF+0;j(}^4t$--wjuQ5_{4qL{L35RSlQ!V5oYImUxU)M zpcYBXGc(|3!)ZW_kR$)xd1fK0ZMga4Bx=ToJ(ojn?{IzkY6KSN%lQ(Joq#|j^G<&! ztSJCurf#9~cINQW(b35fMG_x?Avkp^@uX2m&aswly$-TbM{`~?F@l1Eski_@=g->P zX@)(;L&c`j`~ewnK_rsN8P(NdpVQQpm7gE=vL$OlwQfD=Txjm=Gu-B7Pl8VopQ1KG zdd}NAJFCm)6H*j6hKsirO&tyeybk%`^Ua9_S`snJX`FSXk%|VtoFF)VXQDr&$Sa`g*zq_Nu zvn#X774|qRj5Q}Ghc;*YaFTbS-kE3O!cdDe2D~Com#<&#(rhEp7*@@ztE&s3xW$x8nUn?~2&F3xnPh_$TAS=~6Y@`Fm z^lsn2ts$E~t-?M;30jHgPF2f|D+{q38W|BEZEbhdoN!S|7|%$h;*bp{^Q4w6I7JXdQ%3rq>|VFZb?@N+a`;J{zY0Z zZVu(l_~~`OIa?@k`}`Clw@537wwN1-AWQ}OtDE#gWjM+!vHH}pooCNz508&YGODAa zqsq5$zot;iQCIrH;pj^pnv${=SC|&hy&4)C8niODUr9e~1-QQdb+_u;mNCtQ>|~viX-tvCon|JaxH0ynWcg8c z*|TKLT7!m$Nuwc46OEKYzq$Y4^E~Igf1LB2bKdj3@8@$8(N1S&Bo!rvgoI@5Y^^YY z^U}X6E-J7Q96DA=NV3t+3Wbfz`^r8@ z7G>g2jV9Z%EoVl<^E4oV#`TKP0$r3b@V@`_qih-WGV5gM$uPzF{htb`mWL#aEQR*z z)@@X(d**2GnU?+9G?}xs`415uY(14~#J#qy#U$~Qim(#UXrYuB9#hR%B%q3vRN8l< zLRU73^YPm%^Y^*R9&=v1Y6)gJ@jKU*z~?Sy?q&lCa;(Ovbn8%xneYIZMoHZ zKU!ox3xsh$@7f9^D3)wS=iFx>MmbFEfGtPsDJ32#ETb{wKKSGO{5%mDM8vNsYWwK` z3Hq$Yr=baTwdAbQZCAind-)g5&k~1Q49!oqaQs;2aJOD^$>wMs+|$$3A<-Za#7V~d{H9h|iy)^DbH7kQ z11?_YYu$SH_HKXty<_k=os7|Zp+P}DPTxyy`21W7qe(CLU&YO269T!SLQh(x&;KA5 z@H-wW^<*mS@tcr+b5(}9qdsX3ZAK_b>Pt3{$3w&)?J1ZrkSPuIkBf^lRJn&rg#ih) zE3A~XWQ{OIm3!yPu{VoC-&sgN-&4%K&v%R5+U909iSSDiyv(>74a!Gii)SHX%VXBa zH5@7?CKiX0=ekep3n~jz#>B+n<}M~E=z9Aim7Tog00UUbSpw@~wyHN}7k*h24-wU* z+gAXvBw-xxpJ8sz^XL14!CAYm5QCQ?2IK`~gqK1d|Mk+T`~%)EZW##jB_ zU)h&x6hKJ8V8BeQ<3vPcWcpAfX@`o>5p|q+1RI*Yfn17EUb-O8Bn89B`npCsY&QaPo5!ND2~e$}c!Qkk7p1ET^caG~w*MZFA7+ZN9~ zNlTT7s?Io^@{uDtr(+l-6&8zyp4#TijhWDTprUvFP#&<`$<7GuCVA=g>p`T$S?TEe ztS!dA6Y`QV;s+N#^xTyiEr|3=+1V4^%2!YPCu5PZ9O=t4f)4{tEXPS3Y=+w4v?EH5 zR<#=SW8KeR;n0*CatR_W`sw>GqFA6sG9uDcMXz5t(=MYAvu`8ly#5~XAVM5E&0^(h zQC3@<-hy!A1B5QfnYKBnDPamInDE}tEA?8-j>4>ZN~xPwvZv17nD0Dl5~5L@)d-~| zOol(564dshDXmCCR~oM{IUQMH%ACq`Q@cz<$DSu=Q)Cls+uEeOm}d%Wubip_RbE(q zs|YTBkgFV%N%R(rZ${iro`nDVXEyGdSFA+YQ~#7jHr+-qprTLm5#K zw0$=uH}QW@=35H%0b7+W_xhO~=QSI(hdHWj;KN9>OF7nmy!86@>yK7%`l1I+&Q>#X zl`I-AYNPGb5?&ty@??RPjKF-ICt1)0tmoVA?(U_eB7+^~y*{-E4~le`KtN4fo08(J z%-u7$eyl?$HFb1!{5|ftekHE7@G)|PeB^1Fl_VBG$3+wB8*OVxr+0HnN*Vd!; zNwpp;*W3QdG^c=Mgf#N_KTWN(F8QJCOBiytYK(F7U+}NZk1I5J?>movDtg(UR10zu z3w5TLF6~@8Z}o5FC6Q?J!jyJ2(ph@AuDCmU0r@DMv$CSeSQ3Xii9<>Dp+yet3OCzS zO!=l2SjdKi^Yf1wBgDpPlPoGPNM&Yb61^s-6)B*BVfb%{H0nMV`M|$+FT%mcxcV=9 zBb3FMOr}18x`2%Owt@>Wd2m*tOQK}6tVLx;PgaU^sMhS8kFg_>*OpY&3%-M(@%eo8 zQ^=o;#w!*cT&$rZxHk1LqR34Qx{v19D;wZM6^oEFKHWA9B-_CgTmw#7r_b7;H&xX8 z`}+FY4`cI*-fda|y{Ba*FfjS89bTBH@uB{$Eh7WR+?I}bNaAXt5q(=CSb}{${>0bq z^&w|#m*R78Dt4@p0JhKl{Stt^=2<17oN~s^b z6tsDO=z0=G>-jMGY>1H8)s+Im{KEDM$x5%(#p{g(zUuv|@c>qWs#?jyv^GR8|Mf8P zost9&7hKw!$1l&OFCZBws+!E!mIAk~%DKCx)-dv5ZwVyQ@#hD|qCeRbq|nvLSdBOd zE#K7rSTwhr~NatCr{X-vmbysY0nR+9?v{Ps_rXRt-OF=>}b-}o$B%A zDc0`aU=*LX(w-@lcLLMp0H=kmrGR6JRD&G_a{s}&c0^G7>R`%hYqqKcJ9~x?!tUqz z962n9<+Rw{X=zfq%I) z8D*M3_NBF|aN9NZRQ}k=Vf8ff$WyEa1%89?EyO-})R}M$AaO1PsO;M1AWlt&jP zfILnq8_yLnt+C{C1oUxR-?9FK?vY37V{18I%kY8jR#2(ivP z^P@CqPH)1Sg5fVM9t~%#NkHj1aCNlSfpO&0A^T-!wNK|>;GDmZlqBP_Q5;>nL_pe< z4u$kH|KO}j9bCl;oYrtU=H{fp`K}>np6Z;gFZ~21zP<3#aDWirWGLq6{x(@l-C9ZH z)m6NE-oxPJSgeOMC-tIJKIUir<-cp@!q26-WCYqR$U&{lD$VDtG1}Kaz-j6@=?`PW zwzML*3~HvX&k&>2i`8hcEFWI6v~{y;wR6v1A)?-@xBblKuGXme zoFT@-HXE_U$PK!%`@O2VdgDWn*z!=dYxxhace^ckIQJ61fBGuT4@-7ZqYGdj8}oww z?iiO;-vF4{FaOB~ykOqNg(3Ie4Gdz&ZwDvunvGy6pt8m*aYPb{p7^15v**X*fbkay zE+SrKwz;hHAP|<$@cFrWyRP0t|Kxv5(MH@dw&TmU8*mxHA}eHP?POI2_>%t*eFatT literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_LT.png b/romfs/resources/images/control/Switch_LT.png new file mode 100644 index 0000000000000000000000000000000000000000..6942e1f9b1f22dd09130ed8d939de93c56a3f63e GIT binary patch literal 2808 zcmZ8jdpr}|8y~rhTt;}wrO{|HDuhrjxlWi>b4kf8DG@JX^}65hm*m=V3)yTgW9BlK zu%#uj@S@43uok7;D!1SI{rR5HbI$pk&*yxe=Q+>wJ>Ta^N4VHaiXRjQ005GX4mL>s zj`=fzBK$RE>A?j6K)lb<#_B@U!*$#!a>@H3WA8{@_}a?c%`?^Pt^iysp{OW+6pnKho6_oYP$L{yDtAoEuCKiqa4~Mb7&SH;KQ0%<}Cv-a7<* zB;R6;@$1=ve#U>tDi&1269!o772i7~o*WVz`?i$V{z6%waKN#k?d;JV!G!~Hu1R?( zm#;%>Qvn%ebq`1+(ykdH@Djva9#S#3mk&Z#7RLCB9hZdP$VYm~3RQ)NhHkQVbiB>Y zW&T_czdD@*^hdy%0C-YfLEVj7CX>0>Imy#lECY{V^z|~9+^Mi6rNW7`)(+`NFFcB{ z_v80Jq z(v*rKB;V=I=1Xd-XnpbPiD7K;#%K$;(|dyk23{lcii?W!Mlg8}5Rg=A=kJfyR6=GZ+B@`$B8JWB#(mNv@0iU!-2nkw5_ktbwu$t za4b^i+8>*zB5p@zSqx)qr>$H~CB3*tiV_+sQinmn%DHvxix)Ti1{aS%T|8b?Tr2>{ zsFoOR;mpe>5tXoFo!5z9{#IwNh`n$bSzke9g?wrkYrKecN#lA#>l3FMTDCQFA@OVIYiO1Te zeTQ24X1yiwDB!1-BQg`|Rb5yFkYk73&hblwIPM7`qGlD6ft5dDcdXa>=T ze6h!&NmT4*?`3XjH@L~Ck4|uJvYXx5*m%Wx5uJto=KeU!NEEp-?CUVG_*L zzu8_E7%iG;1-b9Y7XXFD6^bi>IKHVik%bg9X_0@M_e*_1!635fSEHjeZ3{$gDK)|Q7f~uij9}?fULTf2aN6SYw%0~sG zwkN`w`PXLJUq~vtHkFTRc@Y&bo@!e#b&PYtV+$W|@9i+Jz8oPLA@vheRl`j=pnWS+cb1u zKGTbAs6;k^6*AQyz}0as(!@ktQ=A%BHFLNUnn5Tc_w;1(p?rZbng3$|5T>0Yq@I-J znZ}9>US)RDXv6F4>z|8D;k9|A{`v4)P%gtccW!ppny;dZ0x5O5 zQtp$f5R7^iBA{_J+b6JQynkdwjJF!m;onw?U2p)Q5FKc~@?0k(wbAibP*AofI#$6zuHC9IaG7qwOc)c>9lw#2B+5s2$76%~j7> zLR8+Esv&oEW$-}@&CvJ$(cbzkQ1+D*YFCt*(A+o}yd7fDt&jFUZQd8NOiwQ_SAKo7 zy@8a|KI5yG;Gq<2F8^+Kcm4w>Xz)4Z5gj~*E_E?ivo}|(fTs24W?JP>2BhE=m%O%1 z7#lZ=VOvp|bnyCv_ zA=ZXH88b6VOj9pB-i3J6SEK{n_;d3fC5K;w_!QJ~hi~S-S;Td%XHKm-`~p>B5u4L~ z9?rz$XT?`cy%QvsQi+$fl0YzBT^f}81V!*Czut2B3*DY$ciKFigDQa z%0dOgDMgaN7OEw}l{zGTrF}K*|bQtGi5#8)M72tbM;r?d`QAq72wki|vYl z3a}qD?>yYm+)V45n<*KzZvi$2aYPi}*)6O39hXxLUE^&b|j?!9dMyp(V6)7WLuq$pSM#>cS3P|Q_L+(@xQ z4)78Eqv*U~$denh^VOI3WtN&V5PZsZW{D@|J*~8Z5BL`AZc`@r5Ue)++HcJ)j*8wF zR#;TYOroZzLqXf1_E!u91oY?%o%nAL$v>|~GWG;grFijKjbTpwjuzl(>taK)zMAkq D3j=lN literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Left.png b/romfs/resources/images/control/Switch_Left.png new file mode 100644 index 0000000000000000000000000000000000000000..fd58439ef6489094a2031991d1ac307bba61c58f GIT binary patch literal 3586 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 tGF2O;w7+bl{|aSW-L^Y+%p+(Ql`4G(u) z2$eKm$~(lNDWRdf!O@6mb;{%=Ul=Yt;yAh1nCa8gMK%w9|N5TubNbym!AwA75a7Z6 zr;`?bt@^tqMlZhj-0nG_m%Y=C-K)6ti>2@7e-$=$XJqxbE|uPmKKFBP%C|nA#};{h z%P)VQv#@=V_R~4#s>S7LTO)Mhp7DvYdTOradcI?U2}k{tjn@{vEsM^+8v5$D-Q4rf zsb(bvqLcfJ@2R$xeo4=;OtC=VC{UbM1U*q4FQ`v5+ z2I}3E=WAcT)7jPj)Y2(Ix3`_YY?ABsJU{ZXiL)mU!fQa*gSx*AcR~y|x+X3w21$6j L`njxgN@xNAN;Z(U literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Plus.png b/romfs/resources/images/control/Switch_Plus.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b0dc48740bd29c729e36b04ec0b4cc176ca570 GIT binary patch literal 764 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 literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_RT.png b/romfs/resources/images/control/Switch_RT.png new file mode 100644 index 0000000000000000000000000000000000000000..6aef3cb37574ecc2440454fc3881018c353ad933 GIT binary patch literal 3066 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 IM6N<$f|`2id;kCd literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Right.png b/romfs/resources/images/control/Switch_Right.png new file mode 100644 index 0000000000000000000000000000000000000000..f524c6c9cc970afcfc15259e3c141bf766bc1162 GIT binary patch literal 3495 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 VAzf^Fh^YVo002ovPDHLkV1fWRpz8nt literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Right_Stick.png b/romfs/resources/images/control/Switch_Right_Stick.png new file mode 100644 index 0000000000000000000000000000000000000000..f2c605b76afeec719c2515e0716ce350f99986dc GIT binary patch literal 4578 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 literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Square.png b/romfs/resources/images/control/Switch_Square.png new file mode 100644 index 0000000000000000000000000000000000000000..d0fd4324e3657613602e0dfa548bdbe9aa496c0a GIT binary patch literal 1891 zcmV-p2b}ncP) zO>)~d7=~Yv6h(9NL)#gRG|o)C$fCRY2F($2gZc>V4YKSp+8cP=osW?0wQw_|*ptK( zB~cXr(M3WhmOxpML=ckk%xK|{Ch&nT@c|$K5Kt%-3WY+UP$(1%g+ifF6hL;7$no)U z+qUhu04~1&axMTkyU0T#TmbL$KPaU)l+yPAu5NE{|Jye4tpw@ydano}?+786+d6U} zTm$%HFc^H;G=Yr;IXgT19l+n4o`2w64hDmNHaT%4L6jIz;sSWHNloDvq}%QOrtA7O z?|IJ+O6kpfKED`^Mq{4y4Bm`%U4K_}%yAqzj)Qu=4gfehI)Y(vXCXC7l3+fcKm0wN zPB9vd9@zkZ5OQwY_Pfz&^e0dHTs7qE?Ce+k)WgUzO%tzQzlLqwJjopt{eB;=>n@sI z-}ldXYKg{~@8zOF*Y#&F1^}F&pR>%)_u;_W@CtIVXgEDRefDAifMFOoJw08rQ%Xw} z_HbcE$hh+w5Cj3*?Y0!{OXY$jNrLfsys}m#NdnLFHVS2V zXlgVXh2bepQ;bF?sqI=-q*kSxnEnM{~sWLXB!^WeHJvMk$Ko_Q^E90!d?V<|*YN->#CDh*$i1e;b;FAE`p2_96e37buS$kcwMbDzE~>{RL=aYkEu$DY zEZ;?V&Gc3 zAgqDlz6v7ZO=cw_YhML9h>*oXrm;s6Rry%`OJv0(lpvC!1d)u=1tDa4)m+sxJJx~a zBdaXCrgTAA1>09aMEI?0NCD5PhFF$WcD7r?^6?;Q2y2$PVHi@^k|O^^%$OI_%VHIz z(P)UsdLvlAiCVrOL=e+7mu&kc2&)WbP?;cxVMr-T(WLBy5=7T^W`PRUbyo_@C(|^A zO~4j5QfDoSF$_a0QHo~9i(JqnOptuxM_)OB5owd$2Wa?RuQs*M9o(|p*u zE(n5$-zqH2diXtsEMfo>2m*W)<@op*K@dDS=Xc$Uye^GKL#p>PQV5b`Sr!b#D0TCh z9JTq(niz(GR;z_D3=ssu&SwkOYBgAv^|0BqY)B_aPQ6}7yjb{^Tnuc1f zwii2X%k3S$)tG#@&m>76e(P-Um%oaYU4)<6A5S6wyZBvDeLqj}2qnl4*~Nk$E2!*Izt1}4`o6z(%~rwne$w;2akJUHAcXw#vpom` z+~40r)3k>{*mJ=5ecayO;^W7U%m$rO`q!5)U;gDulY2UMuh)B}Y1$3%dC!eaKMKa( z?fw2W%S+z#o*6D7Oac|*bF%;d002ovPDHLkV1mDufeZiu literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Up.png b/romfs/resources/images/control/Switch_Up.png new file mode 100644 index 0000000000000000000000000000000000000000..352f890b17692c8504ad22270ee6f19c11968b6d GIT binary patch literal 3422 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/romfs/resources/images/control/Switch_Y.png b/romfs/resources/images/control/Switch_Y.png new file mode 100644 index 0000000000000000000000000000000000000000..46ac2160d8df6dfe7a3283935cf3daca3a8cbed8 GIT binary patch literal 3736 zcmYjUXH=8R77aZ_N&;MkfIxhq2dNj4dI>}ULlu-FU9QNbNfQu}5{dz&i6BVt37soQ z69j37Ud7M@p#-IaNPC~_{du$2lpk}>%$(V?XP=kGhPT-va0mzlV%O8vF$MaEzblv- zXuXzF%|IXyJ3SpOvw(NsZB%_Iy|5pAYP#D7rT^Z+H&~Tz7_ORn)7)fKj;}qky`U#e zJ2#xO(E9V<+5CMhRIZ>}E0A^7Qonw~*H7eoWp7d8H4FsV&Jy~h8V3>RU%({h51tZu zK?0zN<6-sR1te8o-2wT(=G2a1_9;_-{)6jR?v{<$$vS5aP}`_BIfXUjxN+C_GH&EK zZLqpF*qyH3w%__H3_Zw-=;5Ul1hs}FTZnLXkHTteYIgWR0d$~e++18Nh-CrLD>t&n z10@M72%0dlaW`(~4(KaO=xDgmJOU>GMRRBd|J?TfG<3LN%UX7iXaqyEfb*`HRB~fr z(A_E(1S57V&Z>xkT+jI~=rt8^@A9n<( zMUA*HQg)QL;pkrCNpgB5w`s+_wl3Z_dZCHeh9!tpeJ#nXCvRFl#5GzN2XL>g&e<`ZYM_S!+vut!7Q6fLr;cz!FQk|y{VxC$kB z{QQs^f`f|It+;n0W}F-b4L2=gOhz8tN|EGC2@nEdaN>(=0~xSo5P75~s9iGVkhDt} zaXFP+ZxS&C6NjJ}7{2QoIJ~{p5Xx9;Cb_*fQcy@-jwKSMT$D2HEiX63Ia>~Y_qSvi z_c(_^pZgc#(Z&R{i4Si!){88zkX#{ zch|eG`KtJciO8Wvi@z_955VZn%^Q;uBzZSa&l4-Fh)=@%U@~W!8AQhf=c_UxT|iTL zmzDKoA{|)Pqd|RxR9oI!h+WbFmzhc0v4(po`cXnPw9U;+CtR^*)u>C%5p)17vXA-r z!Fj4iAey$E0r$p%%D-fH>cKmWA}8`;9g;agfm>eAb0`eHpGtDR&X<{)SzTXGz3E9- zT5ICyT=bfBWuiwg;`9HKOm!rT-6Jw>&9yq&stP77QmKD$2q2a}03q|94BB}%ooHcg zeWD6F?Rb7YXUInyDacna0`~Cqqy)G)bv{wnPhLidr1XWNNI=lkr&z;5ycCIvC@6sk z5}925_#(Z?PyzNE;27|8ibfiM?=+GeiAaD_8WnpUn!UPr>|`(&5@Vh775AF7l8+))(JfS_@nB$(NP3@2w7Ge}ul@D$ z#!%P}deOr3UzS`m$>U^sc)ZKSl#jvKxj=(p4XcUyfhum;=cv)KrgyXO4@_7^g>-_| znt$`h!;5@}4AHOk1IWlfIiB>pHt-7}%)YGd{!c&6vucR=jBL@hG&%wb#nNP^xBnb4~pMP+0FgT~Jwe{*+XkkrV9pz5< z^fX@@TWEr*!I4;kpt_^Jo@DCozDTP63Q_zZo={u7R1)A3{o6;BPdI@5pr8%nC{izc zc6N3+)!aOl3}XmB)ipFSV%X~Zl`ffzFA?bex)pj1ppqNEDwtQ~B+HBQ z=E^8$6%#vmXfVoF3q$8Y17tv8s@-;CEx^$dtk);~iV35yD7bW`eT2R;qUQpm$ z{eZyAF7OB!&rXg$I(O*yO-{bKebl^je)i1H90Rz;>ah|%>C$c7BSjgVT2?iv>&{Kd zPp~sLJm-FLz^5iB7j`H;GZz5Bva+uJxS;It&b0(`ml@)qLu#xEUQO-+H7+QeC?n!u zz_v^Zu)RfbFq``E<9b8H{Os((_ufu|B;0}3p|qm4dI)R)Mm!`v@87c=*^sP!w!FK` zl`$ZCbb%G^+^iPT4C&wWx~iCI@S&w8&b(wNVAI4Jm69`}dd2}{1h_>J#NhO2#Pc}4XRCk8w#v15iA#W9v$*Gpcg8`5Z2 z<;ciMAQEPBHKDfcg0r_AR1ZH4VyJ-`iO7~lEds4CMJ$&f$pc}Ue-(V$e1-YUP_4vu z_}3qTXc*d>RgE?8c9kBJIAd95R#sLcQIbXNNR_=QzQfAOf%UET^sZyMi(k_C^4-J@ zD{E_~!7)``wE4~4`IjZv)|K+fiP2rC&$=KjLTq%Q*+l-fJ(vzGC_5UX0BZ466GyXk zf>+pl0dTWzN6X3afsR))OB}B{gmux> z$m*@nF^QU-J~pV-E`GaVyOkE?vW8Y0w-ML65*K40H}yOZoHwPhP3>O)!X*7VFa|iq zZ7>ip1t=ydQ6kFHHLUX8JXd`*Kx4UI7v(~tu^gi#;lq!+xOW%KyXwT%g z4bCG+d8lgQL~%d9vLdkWG11@a98(3at???3DZa%i)36WLbS$CpzD*Hai@(rb`25;7 z{Fd*}2zsfeoGWOZ2G-fXwPN7nSMbnp2Cw7}ZCw7GVx0H%P!Tu*C0Qj0~2<2yEKbFI&Mu=-Axmx)_3S&mBe z(|5&rUeVc0#zp|#zc*=ObQ~PA(L&+3db2Xp^6;IIM(~0m|NPwCsE}iiY@A(>B^SFa z10ti?hProL*6Ts41tC7~+Z_a{Cpu4$3dp@l$^Bi9ZE68h>!vOgSjR11GDR)9%aYTk&83GHj3g9DH&pecxcZ ze&AX`0qxh`2f~+6{WzBle@k(m!7wYR3OxQpwyl`ElmVo@C#0*Uor;M|sflr3e_PC| zdA83zl|n20<)pj2ML?Ci8Pa*j%G#L4y620yKE zCo8acsGciEgWs4bQ`qKsC4{$@uz|G#$c^y$Ou_nl#4rNkqZVwCg9RW>6bZ8Vk8HOv zm|i#8x1lb4zBMA*es{DB-SIM&TjaA$m^W0S7NuQr&xueIm_OmFRX4pqFi%TqzOjS* z^3uo@t9!FJ?Mb9TVYxWOOft2Rn>z{&vXi&H0mw&Do2tlSILptk3;UoXCb3Sx8VfAS zp{@8aAYbxkJ)*6e^B==~f)+m&!CAJ&L|o-Vw4lOiq}fL64(Nss4p7dmwwyt&wrfl} zA!RJ9dd%(b8i?tM-o5%VJ5XSBgAa7++pu%(zz7{p(}V|+IWX6J^i){@-8R1(|NL_O z*+|DVPRZ0S_jxJWa~bY>$--HNGBXTryv%IO43!ZnP;V?au%=Wx;j&WSEbU+ppC2Hu zX9@>pk6oxT^euXU>)q!?q_SC1q$Zm6TA}=PUohf@JR2pGMx#Yao3^BVeP>m1$b?vy zbt$W+%zM`lW-=L~Uv$cLD9a{*7FM3SjRaMFGEH&6$JtSw?e*Zmq4RFm4ASAbBQDX2 zTyHnG>R)~b)~d8_cSu3TW9e~;ozBx&o=Sk97++6|UH1(VLhO6n@^h=EZwfvKQVtGJ z507h@sDAD{m>B+)&FN>jM0H*JRhLK6F1X<&ck*pgHB9c(ojYLmM^4YQp!I7rHfqAS tL1~hT5Jz+m3CZ+-nce>qz4opPkVU*#f2rWAJCJdL^e~1xm1z6${{lKLBC!Af literal 0 HcmV?d00001 diff --git a/romfs/resources/images/error.png b/romfs/resources/images/info/error.png similarity index 100% rename from romfs/resources/images/error.png rename to romfs/resources/images/info/error.png diff --git a/romfs/resources/images/warning.png b/romfs/resources/images/info/warning.png similarity index 100% rename from romfs/resources/images/warning.png rename to romfs/resources/images/info/warning.png diff --git a/source/helpers/SDL_helper.c b/source/helpers/SDL_helper.c index 4b83d45..b7cec5d 100644 --- a/source/helpers/SDL_helper.c +++ b/source/helpers/SDL_helper.c @@ -1,5 +1,6 @@ #include "common.h" #include "SDL_helper.h" +#include void SDL_ClearScreen(SDL_Renderer *renderer, SDL_Color colour) { SDL_SetRenderDrawColor(renderer, colour.r, colour.g, colour.b, colour.a); @@ -41,14 +42,11 @@ void SDL_DrawRotatedText(SDL_Renderer *renderer, TTF_Font *font, double rotation position.x = x; position.y = y; SDL_QueryTexture(texture, NULL, NULL, &position.w, &position.h); SDL_Point center = {position.w / 2, position.h / 2}; - SDL_Rect crop = {0, 0, &position.w, &position.h}; // the crop is what part of the image we want to display. + SDL_Rect crop = {0, 0, &position.w, &position.h}; SDL_SetRenderTarget(renderer, texture); - //SDL_RenderCopyEx(RENDERER, texture, &crop, &position, rotation, ¢er, SDL_FLIP_NONE); SDL_RenderCopyEx(RENDERER, texture, NULL, &position, rotation, NULL, SDL_FLIP_NONE); SDL_SetRenderTarget(renderer, NULL); - /*SDL_QueryTexture(texture, NULL, NULL, &position.w, &position.h); - SDL_RenderCopy(renderer, texture, NULL, &position);*/ SDL_DestroyTexture(texture); } @@ -61,18 +59,21 @@ void SDL_DrawTextf(SDL_Renderer *renderer, TTF_Font *font, int x, int y, SDL_Col va_end(args); } -void SDL_LoadImage(SDL_Renderer *renderer, SDL_Texture **texture, char *path) { - SDL_Surface *imageSurface = IMG_Load(path); +void SDL_LoadImage(SDL_Texture **texture, char *path) { + SDL_Surface *image = NULL; - if (imageSurface) { - Uint32 colorkey = SDL_MapRGB(imageSurface->format, 0, 0, 0); - SDL_SetColorKey(imageSurface, SDL_TRUE, colorkey); - *texture = SDL_CreateTextureFromSurface(renderer, imageSurface); - } else { - printf("Failed to load image: %s", path); + image = IMG_Load(path); + if (!image) { + //DEBUG_LOG("IMG_Load failed: %s\n", IMG_GetError()); + printf("IMG_Load failed: %s\n", IMG_GetError()); + + return; } - - SDL_FreeSurface(imageSurface); + + SDL_ConvertSurfaceFormat(image, SDL_PIXELFORMAT_RGBA8888, 0); + *texture = SDL_CreateTextureFromSurface(RENDERER, image); + SDL_FreeSurface(image); + image = NULL; } void SDL_DrawImage(SDL_Renderer *renderer, SDL_Texture *texture, int x, int y) { diff --git a/source/main.cpp b/source/main.cpp index a2c791d..36096de 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -22,7 +22,6 @@ extern "C" { SDL_Renderer* RENDERER; SDL_Window* WINDOW; -//SDL_Surface* WINDOW_SURFACE; SDL_Event EVENT; TTF_Font *ARIAL, *ARIAL_35, *ARIAL_30, *ARIAL_27, *ARIAL_25, *ARIAL_20, *ARIAL_15; bool configDarkMode; diff --git a/source/menus/book-chooser/MenuChooser.cpp b/source/menus/book-chooser/MenuChooser.cpp index aecd3b9..a702b88 100644 --- a/source/menus/book-chooser/MenuChooser.cpp +++ b/source/menus/book-chooser/MenuChooser.cpp @@ -17,8 +17,8 @@ extern "C" { using namespace std; namespace fs = filesystem; -template bool contains(std::list & listOfElements, const T & element) { - auto it = std::find(listOfElements.begin(), listOfElements.end(), element); +template bool contains(list & listOfElements, const T & element) { + auto it = find(listOfElements.begin(), listOfElements.end(), element); return it != listOfElements.end(); } @@ -130,7 +130,7 @@ void Menu_StartChoosing() { } SDL_DrawText(RENDERER, ARIAL_25, windowX - 123, windowY - 45, textColor, "\"B\" - Exit"); - SDL_DrawText(RENDERER, ARIAL_25, windowX - 200, windowY - 35 * 2, textColor, "\"-\" - Switch theme"); + SDL_DrawText(RENDERER, ARIAL_25, windowX - 200, windowY - 80, textColor, "\"-\" - Switch theme"); int choosingIndex = 0; for (const auto & entry : fs::directory_iterator(path)) { @@ -144,11 +144,11 @@ void Menu_StartChoosing() { #ifdef EXPERIMENTAL if (contains(warnedExtentions, extention)) { - //SDL_DrawImage(RENDERER, warning, 5, 10 + (40 * choosingIndex)); + SDL_DrawImage(RENDERER, warning, 25, 18 + (40 * choosingIndex)); } #endif - SDL_DrawText(RENDERER, ARIAL_25, 50, 20 + (40 * choosingIndex), textColor, entry.path().filename().c_str()); + SDL_DrawText(RENDERER, ARIAL_25, 70, 20 + (40 * choosingIndex), textColor, entry.path().filename().c_str()); if (isWarningOnScreen) { if (!configDarkMode) { // Display a dimmed background if on light mode diff --git a/source/status_bar.c b/source/status_bar.c index 6d07133..e5fa8fc 100644 --- a/source/status_bar.c +++ b/source/status_bar.c @@ -88,12 +88,12 @@ static void StatusBar_GetBatteryStatus(int x, int y) { } snprintf(buf, 5, "%d%%", percent); - TTF_SizeText(ARIAL_15, buf, &width, NULL); - SDL_DrawText(RENDERER, ARIAL_15, (x - width - 10), y, WHITE, buf); + TTF_SizeText(ARIAL_20, buf, &width, NULL); + SDL_DrawText(RENDERER, ARIAL_20, (x + width + 5), y, WHITE, buf); } else { snprintf(buf, 5, "%d%%", percent); - TTF_SizeText(ARIAL_15, buf, &width, NULL); - SDL_DrawText(RENDERER, ARIAL_15, (x - width - 10), y, WHITE, buf); + TTF_SizeText(ARIAL_20, buf, &width, NULL); + SDL_DrawText(RENDERER, ARIAL_20, (x + width + 5), y, WHITE, buf); SDL_DrawImage(RENDERER, battery_unknown, x, 1); } } @@ -104,9 +104,6 @@ void StatusBar_DisplayTime(bool portriat) { int helpWidth, helpHeight; TTF_SizeText(ARIAL_20, "\"+\" - Help", &helpWidth, &helpHeight); - #ifdef EXPERIMENTAL - //StatusBar_GetBatteryStatus(1260 - width - 44, (40 - height) / 2); - #endif if (portriat) { int timeX = (1280 - timeWidth) + timeHeight; int timeY = (720 - timeWidth) + 15; @@ -121,5 +118,11 @@ void StatusBar_DisplayTime(bool portriat) { SDL_DrawText(RENDERER, ARIAL_25, 1260 - timeWidth, (40 - timeHeight) / 2, WHITE, Clock_GetCurrentTime()); SDL_DrawText(RENDERER, ARIAL_20, 1260 - helpWidth - timeWidth - 25, (40 - helpHeight) / 2, WHITE, "\"+\" - Help"); - } + + StatusBar_GetBatteryStatus(1260 - (timeWidth + helpWidth) - 110, (40 - timeHeight) / 2 + 15); // 34 is height of battery img + } + + #ifdef EXPERIMENTAL + + #endif } \ No newline at end of file diff --git a/source/textures.c b/source/textures.c index d5392c1..7a3a402 100644 --- a/source/textures.c +++ b/source/textures.c @@ -4,71 +4,35 @@ SDL_Texture *battery_20, *battery_20_charging, *battery_30, *battery_30_charging, *battery_50, *battery_50_charging, \ *battery_60, *battery_60_charging, *battery_80, *battery_80_charging, *battery_90, *battery_90_charging, \ - *battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning; + *battery_full, *battery_full_charging, *battery_low, *battery_unknown, *error, *warning, *button_a, *button_b, \ + *button_x, *button_y, *button_down, *button_up, *button_left, *button_right, *button_lb, *button_rb, *button_lt, \ + *button_rt, *button_minus, *button_plus, *button_capture, *button_home; void Textures_Load(void) { - /*SDL_LoadImage(RENDERER, &battery_20, "romfs:/resources/images/battery_20.png"); - SDL_LoadImage(RENDERER, &battery_20_charging, "romfs:/resources/images/battery_20_charging.png"); - SDL_LoadImage(RENDERER, &battery_30, "romfs:/resources/images/battery_30.png"); - SDL_LoadImage(RENDERER, &battery_30_charging, "romfs:/resources/images/battery_30_charging.png"); - SDL_LoadImage(RENDERER, &battery_50, "romfs:/resources/images/battery_50.png"); - SDL_LoadImage(RENDERER, &battery_50_charging, "romfs:/resources/images/battery_50_charging.png"); - SDL_LoadImage(RENDERER, &battery_60, "romfs:/resources/images/battery_60.png"); - SDL_LoadImage(RENDERER, &battery_60_charging, "romfs:/resources/images/battery_60_charging.png"); - SDL_LoadImage(RENDERER, &battery_80, "romfs:/resources/images/battery_80.png"); - SDL_LoadImage(RENDERER, &battery_80_charging, "romfs:/resources/images/battery_80_charging.png"); - SDL_LoadImage(RENDERER, &battery_90, "romfs:/resources/images/battery_90.png"); - SDL_LoadImage(RENDERER, &battery_90_charging, "romfs:/resources/images/battery_90_charging.png"); - SDL_LoadImage(RENDERER, &battery_full, "romfs:/resources/images/battery_full.png"); - SDL_LoadImage(RENDERER, &battery_full_charging, "romfs:/resources/images/battery_full_charging.png"); - SDL_LoadImage(RENDERER, &battery_low, "romfs:/resources/images/battery_low.png"); - SDL_LoadImage(RENDERER, &battery_unknown, "romfs:/resources/images/battery_unknown.png");*/ - //SDL_LoadImage(RENDERER, &error, "romfs:/resources/images/error.png"); - - fprintf(stderr, "LOADING WARNING\n"); - SDL_Surface *imageSurface = IMG_Load("romfs:/resources/images/warning.png"); - fprintf(stderr, "LOADED WARNING\n"); - - if (RENDERER) { - if (imageSurface) { - fprintf(stderr, "CREATING TEXTURE\n"); - warning = SDL_CreateTextureFromSurface(RENDERER, imageSurface); - fprintf(stderr, "CREATED TEXTURE\n"); - - if (warning == NULL) { - fprintf(stderr, "CreateTextureFromSurface failed: %s\n", SDL_GetError()); - exit(1); - } else { - fprintf(stderr, "Loaded \"romfs:/resources/images/warning.png\"\n"); - } - } else { - fprintf(stderr, "Failed to load image: \"romfs:/resources/images/warning.png\"\n"); - exit(1); - } - } else { - fprintf(stderr, "Something wrong with RENDERER"); - exit(1); - } - - SDL_FreeSurface(imageSurface); - - - /*if (imageSurface) { - Uint32 colorkey = SDL_MapRGB(imageSurface->format, 0, 0, 0); - SDL_SetColorKey(imageSurface, SDL_TRUE, colorkey); - warning = SDL_CreateTextureFromSurface(RENDERER, imageSurface); - } else { - printf("Failed to load image: %c", "romfs:/resources/images/warning.png"); - } - - SDL_FreeSurface(imageSurface);*/ - //SDL_LoadImage(RENDERER, &warning, "romfs:/resources/images/warning.png"); + SDL_LoadImage(&battery_20, "romfs:/resources/images/battery/battery_20.png"); + SDL_LoadImage(&battery_20_charging, "romfs:/resources/images/battery/battery_20_charging.png"); + SDL_LoadImage(&battery_30, "romfs:/resources/images/battery/battery_30.png"); + SDL_LoadImage(&battery_30_charging, "romfs:/resources/images/battery/battery/battery_30_charging.png"); + SDL_LoadImage(&battery_50, "romfs:/resources/images/battery/battery_50.png"); + SDL_LoadImage(&battery_50_charging, "romfs:/resources/images/battery/battery_50_charging.png"); + SDL_LoadImage(&battery_60, "romfs:/resources/images/battery/battery_60.png"); + SDL_LoadImage(&battery_60_charging, "romfs:/resources/images/battery/battery_60_charging.png"); + SDL_LoadImage(&battery_80, "romfs:/resources/images/battery/battery_80.png"); + SDL_LoadImage(&battery_80_charging, "romfs:/resources/images/battery/battery_80_charging.png"); + SDL_LoadImage(&battery_90, "romfs:/resources/images/battery/battery_90.png"); + SDL_LoadImage(&battery_90_charging, "romfs:/resources/images/battery/battery_90_charging.png"); + SDL_LoadImage(&battery_full, "romfs:/resources/images/battery/battery_full.png"); + SDL_LoadImage(&battery_full_charging, "romfs:/resources/images/battery/battery_full_charging.png"); + SDL_LoadImage(&battery_low, "romfs:/resources/images/battery/battery_low.png"); + SDL_LoadImage(&battery_unknown, "romfs:/resources/images/battery/battery_unknown.png"); + SDL_LoadImage(&error, "romfs:/resources/images/info/error.png"); + SDL_LoadImage(&warning, "romfs:/resources/images/info/warning.png"); } void Textures_Free(void) { SDL_DestroyTexture(warning); - //SDL_DestroyTexture(error); - /*SDL_DestroyTexture(battery_unknown); + SDL_DestroyTexture(error); + SDL_DestroyTexture(battery_unknown); SDL_DestroyTexture(battery_low); SDL_DestroyTexture(battery_full_charging); SDL_DestroyTexture(battery_full); @@ -82,5 +46,5 @@ void Textures_Free(void) { SDL_DestroyTexture(battery_30_charging); SDL_DestroyTexture(battery_30); SDL_DestroyTexture(battery_20_charging); - SDL_DestroyTexture(battery_20);*/ + SDL_DestroyTexture(battery_20); } \ No newline at end of file