From 3194bd3fb42c6a9ca4ef88d4a2295c8cb326e6a5 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Wed, 11 Mar 2026 00:13:32 +0300 Subject: [PATCH] overlays/home: Add icons repository wrapper --- rpcs3/Emu/CMakeLists.txt | 1 + .../Overlays/HomeMenu/overlay_home_icons.cpp | 59 +++++++++++++++++++ .../Overlays/HomeMenu/overlay_home_icons.h | 23 ++++++++ rpcs3/emucore.vcxproj | 2 + rpcs3/emucore.vcxproj.filters | 6 ++ 5 files changed, 91 insertions(+) create mode 100644 rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.cpp create mode 100644 rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.h diff --git a/rpcs3/Emu/CMakeLists.txt b/rpcs3/Emu/CMakeLists.txt index c7eea83995..5405571fb0 100644 --- a/rpcs3/Emu/CMakeLists.txt +++ b/rpcs3/Emu/CMakeLists.txt @@ -487,6 +487,7 @@ target_sources(rpcs3_emu PRIVATE RSX/NV47/HW/nv406e.cpp RSX/NV47/HW/nv4097.cpp RSX/Overlays/FriendsList/overlay_friends_list_dialog.cpp + RSX/Overlays/HomeMenu/overlay_home_icons.cpp RSX/Overlays/HomeMenu/overlay_home_menu.cpp RSX/Overlays/HomeMenu/overlay_home_menu_components.cpp RSX/Overlays/HomeMenu/overlay_home_menu_main_menu.cpp diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.cpp new file mode 100644 index 0000000000..e183ee5459 --- /dev/null +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.cpp @@ -0,0 +1,59 @@ +#include "stdafx.h" +#include "overlay_home_icons.h" + +#include + +namespace rsx::overlays::home_menu +{ + std::unordered_map> g_icons_cache; + + static const char* fa_icon_to_filename(fa_icon icon) + { + switch (icon) + { + case fa_icon::home: + return "home.png"; + case fa_icon::settings: + return "settings.png"; + case fa_icon::back: + return "circle-left-solid.png"; + case fa_icon::floppy: + return "floppy-disk-solid.png"; + case fa_icon::maximize: + return "maximize-solid.png"; + case fa_icon::play: + return "play-button-arrowhead.png"; + case fa_icon::poweroff: + return "power-off-solid.png"; + case fa_icon::restart: + return "rotate-left-solid.png"; + case fa_icon::screenshot: + return "screenshot.png"; + case fa_icon::video_camera: + return "video-camera.png"; + } + } + + void load_icon(fa_icon icon) + { + if (!g_icons_cache.empty()) + { + return; + } + + const std::string image_path = fmt::format("%s/Icons/ui/home/%s", fs::get_config_dir(), fa_icon_to_filename(icon)); + g_icons_cache[icon] = std::make_unique(image_path); + } + + const image_info* get_icon(fa_icon icon) + { + auto found = g_icons_cache.find(icon); + if (found != g_icons_cache.end()) + { + return found->second.get(); + } + + load_icon(icon); + return g_icons_cache.at(icon).get(); + } +} diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.h new file mode 100644 index 0000000000..b173c87170 --- /dev/null +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_icons.h @@ -0,0 +1,23 @@ +#pragma once + +#include "Emu/RSX/Overlays/overlays.h" +#include "Emu/RSX/Overlays/overlay_controls.h" + +namespace rsx::overlays::home_menu +{ + enum class fa_icon + { + home = 0, + settings, + back, + floppy, + maximize, + play, + poweroff, + restart, + screenshot, + video_camera + }; + + const image_info* get_icon(fa_icon icon); +} diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index e47021e9fa..64df75078b 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -135,6 +135,7 @@ + @@ -696,6 +697,7 @@ + diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 195df46767..4669778e16 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -1417,6 +1417,9 @@ Emu\GPU\RSX\Overlays + + Emu\GPU\RSX\Overlays\HomeMenu + @@ -2845,6 +2848,9 @@ Emu\GPU\RSX\Overlays + + Emu\GPU\RSX\Overlays\HomeMenu +