Integrate Custom UI Shift+Tab Overlay#539
Conversation
|
Isn't there already a single-header json lib here? |
|
and why did you return breaking/deprecated strings? I tried the overlay after several fixes and it:
|
thanks for the awsome review and comment it helped me alot i'm currently working on fixing each of them but just i have a question : |
thanks for letting me know about that sorry i wasn't aware of it fixed that issue and will be fixed in the next commit |
bloat.
In my experience, you don’t even need to configure anything.
then I’d like to understand how it searches for drives. For example, I have a Z: drive, but it’s not listed there. And, if I remember correctly, to enable avatars, you need to add enable_account_avatar=1 under [main::general] in configs.main.ini. There are a lot of debatable points - we should wait to see what others say. I just preferred the old minimalist interface. |
i'm constantly working on this to improve it and for the broadcast ip its actually alot useful since i have seen alot of people use it because when someone use a virtual lan software they get a virtual lan ip that they have to add to broadcast ip and thats why i have added that |
Implements locked/unlocked sections for achievements, adds a notification history panel to the steam overlay, and
resolves build configuration issues.
Detailed Changes:
overlay: Added collapsible headers separating unlocked and locked achievements in the overlay UI.
history: Implemented a Notification History window allowing users to browse formatted, cached timestamps and
type-labeled history, with support for clearing notifications.
robustness: Modified achievement notification logic to verify overlay readiness, preventing potential crashes
during notification queuing.
build: Corrected premake5.lua build properties for zlib and abseil random internal dependencies.
cleanup: Deleted local redundant json.hpp header in favor of standard json/json.hpp.
|
change to Draft until all issues are fixed
|
| static std::filesystem::path GetGoldbergSettingsPath() | ||
| { | ||
| const char* appdata = std::getenv("APPDATA"); | ||
| if (appdata && *appdata) { | ||
| return std::filesystem::path(appdata) / "GSE Saves" / "settings"; | ||
| } | ||
|
|
||
| const char* home = std::getenv("HOME"); | ||
| if (home && *home) { | ||
| return std::filesystem::path(home) / ".config" / "GSE Saves" / "settings"; | ||
| } | ||
|
|
||
| return std::filesystem::path("GSE Saves") / "settings"; |
There was a problem hiding this comment.
It looks like you assume every user uses appdata path, forgetting the fact settings can also be set to be saved locally. And, I think it is not recommended to use this method to retrieve appdata path in Windows. And also, on Windows, std::getenv() or similar c lib functions are default to use ANSI codepages instead of UTF-8, resulting encoding issues. My suggestion is to use non std variant like _wgetenv() and convert the result to UTF-8 manually. Finally, std::filesystem suffers from the encoding issue on Windows too, even though it is a modern function. You may better pass the wide string as-is instead of UTF-8/narrow string.
| static std::wstring Utf8ToWide(const std::string& s) | ||
| { | ||
| if (s.empty()) return {}; | ||
| int needed = MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, nullptr, 0); | ||
| if (needed <= 0) return {}; | ||
| std::wstring out((size_t)needed - 1, L'\0'); | ||
| MultiByteToWideChar(CP_UTF8, 0, s.c_str(), -1, &out[0], needed); | ||
| return out; | ||
| } |
| #ifdef _WIN32 | ||
| const char* userprofile = std::getenv("USERPROFILE"); | ||
| if (userprofile && *userprofile) { | ||
| g_avatar_picker_current_dir = std::filesystem::path(userprofile) / "Pictures"; | ||
| } | ||
| else { | ||
| g_avatar_picker_current_dir = std::filesystem::path("C:\\"); | ||
| } |
There was a problem hiding this comment.
Same encoding issue. And I wonder if it is better to make the path configurable.
|
|
||
| #ifdef _WIN32 | ||
| { | ||
| const char* drive_items[] = { "C:\\", "D:\\", "E:\\", "F:\\", "G:\\" }; |
There was a problem hiding this comment.
I'm confused about these drives. What if someone has a lot of drives? What if even more drives than A:\ to Z:\?
| ImGui::TextWrapped("%s", g_avatar_picker_selected_file.u8string().c_str()); | ||
| } | ||
| else { | ||
| ImGui::TextColored(RedAccentTheme::TextDim, "Select a .png, .jpg, or .jpeg image."); |
There was a problem hiding this comment.
Not an urgent problem, but it would be better to make all strings capable of being translated.
| static std::filesystem::path GetBroadcastsPath() | ||
| { | ||
| const char* appdata = std::getenv("APPDATA"); | ||
| if (appdata && *appdata) { | ||
| return std::filesystem::path(appdata) / "GSE Saves" / "settings" / "custom_broadcasts.txt"; | ||
| } | ||
|
|
||
| const char* home = std::getenv("HOME"); | ||
| if (home && *home) { | ||
| return std::filesystem::path(home) / ".config" / "GSE Saves" / "settings" / "custom_broadcasts.txt"; | ||
| } | ||
|
|
||
| return std::filesystem::path("GSE Saves") / "settings" / "custom_broadcasts.txt"; | ||
| } |
There was a problem hiding this comment.
Same with the first comment.
| @@ -383,8 +2232,7 @@ void Steam_Overlay::create_fonts() | |||
| font_ach_desc = add_overlay_font(font_size_ach_desc, settings->overlay_appearance.font_override_ach_desc); | |||
| stats.font = font_fps; | |||
|
|
|||
| bool res = fonts_atlas.IsBuilt(); | |||
| PRINT_DEBUG("isbuilt fonts atlas (result=%i)", (int)res); | |||
| bool res = fonts_atlas.Build(); | |||
There was a problem hiding this comment.
Apparently you still didn't refactor based on the latest commits, because this change breaks compilation.
| return false; | ||
| } | ||
|
|
||
| g_profile_avatar_rsrc->SetAutoLoad(InGameOverlay::ResourceAutoLoad_t::OnUse); |
| font_cfg.GlyphExtraAdvanceX = settings->overlay_appearance.font_glyph_extra_spacing_x; | ||
| // font_cfg.GlyphExtraSpacing.x = settings->overlay_appearance.font_glyph_extra_spacing_x; | ||
| // font_cfg.GlyphExtraSpacing.y = settings->overlay_appearance.font_glyph_extra_spacing_y; | ||
| font_cfg.GlyphExtraSpacing.x = settings->overlay_appearance.font_glyph_extra_spacing_x; |
| icon_handle = get_steam_client()->steam_user_stats->get_achievement_icon_handle(ach.name, achieved); | ||
| } | ||
| auto image_info = settings->get_image(icon_handle); | ||
| if (image_info) { | ||
| int icon_size = static_cast<int>(settings->overlay_appearance.icon_size); | ||
| //icon_rsrc->SetAutoLoad(InGameOverlay::ResourceAutoLoad_t::OnUse); | ||
| icon_rsrc->SetAutoLoad(InGameOverlay::ResourceAutoLoad_t::OnUse); |
Add overlay_avatar_picker_default_path to Settings and parse avatar_picker_default_path from overlay::general in the INI for both client and server. Expose selected/current language via Steam_Overlay (added selected_language member and GetSettings/GetCurrentLanguage accessors; stub GetCurrentLanguage updated). Increase translation buffer size and refresh many overlay translation strings (including Indonesian and other language fixes/punctuation) in steam_overlay_translations.h. and resolved all the issued comments
Resolve merge conflicts, merge translations from upstream/dev, and fix achievement icon dimension and username safety issues in steam_overlay.cpp.
|
my only consern right now is |
|
You forgot to add the necessary lines to configs.overlay.EXAMPLE.ini. Also remove Background FX and its related functionality (no negativity intended - it just turns the emulator into a circus). |
|
This is too much. gbe_fork is a Steam emulator; the overlay is just a utility that you tab into for 5 seconds. We don't need embedded icon fonts, background effects, or animations. The overlay should be Lightweight, Unobtrusive, Functional-first and Consistent. The "Config Saving" feature is good, you should make it's own PR. |
i know but imgui is still lightweight no matter what you do and i first asked in an issue if this is good and user agrees on it and even Detanup01 said its good soo thats why i made this PR the issue is here if you want to take a look Custom Shift + Tab UI Overhaul |
- Removed backgroundFX completely - Added text wrapping margin to fix clipped UI text - Fixed double-line corner border glitch on popups - Made hidden achievement descriptions a toggle button - Added smooth mouse-wheel scrolling to broadcast IP list - Prevented tiny scrollbars on notifications and achievement lists














Updated the Shift+Tab overlay code. This overhaul replaces the UI with a modern, themed interface featuring custom animations and persistent state saving.
Key Improvements
SaveGBEConfig/LoadGBEConfig) to save window positions and UI preferences togbe.cfg.Technical Changes
steam_overlay.cppandsteam_overlay_stats.cpp.premake5.lua.