From 13f422fa29dd0523df424c72bce76f25eacb338b Mon Sep 17 00:00:00 2001 From: souldbminersmwc Date: Tue, 26 May 2026 16:10:13 -0400 Subject: [PATCH] hocclk: overlay logo --- .claude/settings.local.json | 10 +++++ Source/hoc-clk/assets/hoc.rgba | Bin 10000 -> 10000 bytes Source/hoc-clk/overlay/Makefile | 9 +++- Source/hoc-clk/overlay/data/logo_rgba.bin | Bin 17160 -> 0 bytes .../hoc-clk/overlay/src/ui/gui/base_gui.cpp | 41 ++++++++++++------ 5 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 .claude/settings.local.json delete mode 100644 Source/hoc-clk/overlay/data/logo_rgba.bin diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..6b3eec05 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,10 @@ +{ + "permissions": { + "allow": [ + "PowerShell(\\(Get-Item \"c:\\\\Users\\\\sould\\\\Documents\\\\GitHub\\\\Horizon-OC\\\\Source\\\\hoc-clk\\\\assets\\\\hoc.rgba\"\\).Length)", + "PowerShell(python --version)", + "PowerShell(magick --version 2>$null)", + "PowerShell(convert --version 2>$null)" + ] + } +} diff --git a/Source/hoc-clk/assets/hoc.rgba b/Source/hoc-clk/assets/hoc.rgba index c39dbae2bff3aa8e8eb45670f32aecb73893ab50..dcb3812dcdffe4c0a21ff6dab6f3c9167723330b 100644 GIT binary patch literal 10000 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 literal 10000 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 Bat#0g diff --git a/Source/hoc-clk/overlay/Makefile b/Source/hoc-clk/overlay/Makefile index cba8b621..dcd9ce5d 100644 --- a/Source/hoc-clk/overlay/Makefile +++ b/Source/hoc-clk/overlay/Makefile @@ -22,12 +22,12 @@ BUILD := build OUTDIR := out RESOURCES := res SOURCES := src src/ui/gui src/ui/elements ../common/src ../common/src/client -DATA := data +DATA := data ../assets INCLUDES := ../common/include EXEFS_SRC := exefs_src IS_MINIMAL := 0 -APP_TITLE := Horizon OC Gaea +APP_TITLE := Horizon OC NO_ICON := 1 @@ -166,6 +166,11 @@ $(OUTPUT).elf: $(OFILES) @echo $(notdir $<) @$(bin2o) +%.rgba.o : %.rgba +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + -include $(DEPENDS) #--------------------------------------------------------------------------------------- diff --git a/Source/hoc-clk/overlay/data/logo_rgba.bin b/Source/hoc-clk/overlay/data/logo_rgba.bin deleted file mode 100644 index d5b9ced7955408287a22583253cbde7de3d89d04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17160 zcmeI2S*TTI6vv%%ykLY4mKIn_SZG>=1xjcn6!l<84^adWCMA}b^;8s65Jg4NLsC!} zSqNS#AIyS6DS{h?B{Uc|k!6+@G!M7mU(Xl+v+mya?0wGh`0_3I^Q~{qcdb32J7Pqp z+=1MI+=1MI+=1MI+<|Hx7#tiNQ^m5XU6okbrhW(L|Eb_5@E$lIz9=KP*d~3lMXqz!X<^c7MbUN*9;aQN{AYrLUSJ8YWBW4C!@etXBhFPJ=PT^X zu3x$?{ABi;)lER}h$F#i;6|_;>;O%1*k1yiHv8X{cnoySNu=w}DARRRLyFVxN-g?3 z-%iCf)=ycl0dv7Za5vDmkOyNPWF60q7^i?AKqB>MYRr}P=*~!njdfSj`HF5dIL>9_ zk&OjEgGBoaY|c)~#`=`oAnT|GkJS!O{-vQl&1Xo@kWB$&V-92;%?*DYH`{^Jh-KG_f{pJv3w)>#d{oLt_pzpW_k5`wcuxGqD_`%zL;oJvPGchM89tLC!Md@bXr5~U8*In zO~0|A)HTX$m;H3Ftrd@b%w74rGQRP6UDhg}>+wGwya@EXR7ScUPIAA*Bj0IG`%FIH zE;@l<|7!A3P$69@lf6QHHZtFw-H`zBm`+2T19v}7YHn0Q4 z;}Fr{#v)(jw@Ya>OLpwnn(S}*DMkJ+!=`o(_{82>+9o#6?U*L*;myfjPb(gmn7hv0 zCgT5js9{B`oWtpfH4QuwV(NT6Df%JPb=v6$*&x_z!Z)H{t3AGzYiJd#OivCyKRPWa zvn`V2*!J8M5C3JJ9A5X86N+-xkr88eh`YGR9~=MH@GSc=z~2$p6!}$=5vNiORboXO zV*9bhcJPj9Gu$5gj^?J=#Mq|9MupckuLIlZp!66+x69&*ZTi-gVj+LX?7o6uV0*DM zl5Jekb)|+Fx5}Q}*Q+?Aeegxs6n$fz7-J%vYrbN)MjP#s_XWHEfA2;<3+P*<(~_b% zjabKGsAo^z%XE$`0gA8ZEcMc7!S>MkQ}%4KSO!K<8vlMTYADMwoSYiR1ATXN`jXA9 zK;MIwgQtPsj~mL83IsIk)`e>i_*mSLi6tnJ14U0fL-mUy5_EL|JM(;ZNn=B4*27+CyxlO`N$BWZl z9wYG>Oa<}!?tY2a3<_hUSX!~!lpMl(p4&N(T~}-H*mZd7xCne5>W*8TmrdWql>^!8 zXvkjAa3`i3;D?=CBaY5(C%r$4|tq=B*OT5(o;k+N4WI>3B%e_jWip6f;K zoTGjR7}7j&Gl=hbx<7RM-e13>>`|oy%;q47r2i3`SH(Zu9Gwm@pLc9%x}WufX-B7; koV98Pn9;pJ?`>;9rT2xZv9n$7K<+^9K<+^9K-~`f2SO)gxBvhE diff --git a/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp index 49a2b955..ea7b7e3f 100644 --- a/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp +++ b/Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp @@ -32,13 +32,25 @@ #include #define LOGO_X 20 -#define LOGO_Y 50 +#define LOGO_Y 60 #define LOGO_LABEL_FONT_SIZE 45 -#define VERSION_X (LOGO_X + 250) +#define TEXT_Y 57 + +#define LOGO_IMG_W 50 +#define LOGO_IMG_H 50 +#define LOGO_IMG_PAD 8 +#define LOGO_TEXT_X (LOGO_X + LOGO_IMG_W + LOGO_IMG_PAD) + +#define VERSION_X (LOGO_TEXT_X + 185) #define VERSION_Y (LOGO_Y - 40) #define VERSION_FONT_SIZE 15 +extern "C" { + extern const u8 hoc_rgba[]; + extern const u32 hoc_rgba_size; +} + std::string getVersionString() { char buf[0x100] = ""; Result rc = hocclkIpcGetVersionString(buf, sizeof(buf)); @@ -48,10 +60,10 @@ std::string getVersionString() { return std::string(buf); } -static constexpr tsl::Color dynamicLogoRGB1 = tsl::Color(0, 15, 3, 15); -static constexpr tsl::Color dynamicLogoRGB2 = tsl::Color(0, 8, 1, 15); -static constexpr tsl::Color STATIC_GREEN = tsl::Color(0, 15, 0, 15); -const std::string name = "Horizon OC Gaea"; +static constexpr tsl::Color dynamicLogoRGB1 = tsl::Color( 7, 15, 15, 15); +static constexpr tsl::Color dynamicLogoRGB2 = tsl::Color( 2, 8, 11, 15); +static constexpr tsl::Color STATIC_TEAL = tsl::Color( 7, 15, 15, 15); +const std::string name = " Horizon OC"; static s32 drawDynamicUltraText( tsl::gfx::Renderer* renderer, @@ -67,7 +79,6 @@ static s32 drawDynamicUltraText( const u64 currentTime_ns = armTicksToNs(armGetSystemTick()); const double timeNow = static_cast(currentTime_ns) / 1e9; - const double timeBase = fmod(timeNow, cycleDuration); const double waveScale = 2.0 * M_PI / cycleDuration; @@ -76,7 +87,7 @@ static s32 drawDynamicUltraText( char letter = name[i]; if (letter == '\0') break; - double phase = waveScale * (timeBase + i * 0.12); + double phase = waveScale * (timeNow + i * 0.12); double raw = cos(phase); double n = (raw + 1.0) * 0.5; @@ -87,13 +98,13 @@ static s32 drawDynamicUltraText( double brightness = 0.75 + glow * 0.25; u8 r = static_cast( - (dynamicLogoRGB1.r + (dynamicLogoRGB2.r - dynamicLogoRGB1.r) * blend) * brightness + ((int)dynamicLogoRGB1.r + ((int)dynamicLogoRGB2.r - (int)dynamicLogoRGB1.r) * blend) * brightness ); u8 g = static_cast( - (dynamicLogoRGB1.g + (dynamicLogoRGB2.g - dynamicLogoRGB1.g) * blend) * brightness + ((int)dynamicLogoRGB1.g + ((int)dynamicLogoRGB2.g - (int)dynamicLogoRGB1.g) * blend) * brightness ); u8 b = static_cast( - (dynamicLogoRGB1.b + (dynamicLogoRGB2.b - dynamicLogoRGB1.b) * blend) * brightness + ((int)dynamicLogoRGB1.b + ((int)dynamicLogoRGB2.b - (int)dynamicLogoRGB1.b) * blend) * brightness ); r = std::clamp(r, 0, 15); @@ -121,12 +132,14 @@ static s32 drawDynamicUltraText( } void BaseGui::preDraw(tsl::gfx::Renderer* renderer) { + renderer->drawBitmap(LOGO_X, LOGO_Y - LOGO_LABEL_FONT_SIZE, LOGO_IMG_W, LOGO_IMG_H, hoc_rgba); + drawDynamicUltraText( renderer, - LOGO_X, - LOGO_Y, + LOGO_TEXT_X, + TEXT_Y, LOGO_LABEL_FONT_SIZE, - STATIC_GREEN, + STATIC_TEAL, false ); }