diff --git a/external/imgui/snes9x_imgui.cpp b/external/imgui/snes9x_imgui.cpp
index 1b617cff..590bd2c5 100644
--- a/external/imgui/snes9x_imgui.cpp
+++ b/external/imgui/snes9x_imgui.cpp
@@ -67,7 +67,7 @@ static void ImGui_DrawPressedKeys(int spacing)
draw_list->AddRectFilled(ImVec2(x, y),
ImVec2(x + box_width, y + box_height),
settings.box_color,
- 3.0f);
+ spacing / 2);
draw_list->AddText(ImVec2(x + spacing, y + spacing), settings.text_color, string);
@@ -85,7 +85,7 @@ static void ImGui_DrawPressedKeys(int spacing)
draw_list->AddRectFilled(ImVec2(x, y),
ImVec2(x + box_width, y + box_height),
settings.box_color,
- spacing / 3);
+ spacing / 2);
x += spacing;
y += spacing;
@@ -132,12 +132,15 @@ static void ImGui_DrawTextOverlay(const char *text,
draw_list->AddRectFilled(ImVec2(x, y),
ImVec2(x + box_size.x, y + box_size.y),
settings.box_color,
- settings.spacing / 3);
+ settings.spacing / 2);
draw_list->AddText(ImVec2(x + padding, y + padding), settings.text_color, text);
}
bool S9xImGuiDraw(int width, int height)
{
+ if (Memory.ROMFilename.empty())
+ return false;
+
if (!ImGui::GetCurrentContext())
return false;
@@ -147,15 +150,6 @@ bool S9xImGuiDraw(int width, int height)
ImGui::GetIO().DisplayFramebufferScale.y = 1.0;
ImGui::NewFrame();
- if (!GFX.InfoString.empty())
- ImGui_DrawTextOverlay(GFX.InfoString.c_str(),
- settings.spacing,
- height - settings.spacing,
- settings.spacing,
- ImGui::DrawTextAlignment::BEGIN,
- ImGui::DrawTextAlignment::END,
- width - settings.spacing * 4);
-
if (Settings.DisplayTime)
{
char string[256];
@@ -206,20 +200,32 @@ bool S9xImGuiDraw(int width, int height)
ImGui_DrawPressedKeys(settings.spacing / 2);
}
- if (Settings.Paused || Settings.ForcedPause)
+ if (Settings.DisplayIndicators)
{
- ImGui_DrawTextOverlay("❚❚",
- settings.spacing,
- settings.spacing,
- settings.spacing);
+ if (Settings.Paused || Settings.ForcedPause)
+ {
+ ImGui_DrawTextOverlay("❚❚",
+ settings.spacing,
+ settings.spacing,
+ settings.spacing);
+ }
+ else if (Settings.TurboMode)
+ {
+ ImGui_DrawTextOverlay("▶▶",
+ settings.spacing,
+ settings.spacing,
+ settings.spacing);
+ }
}
- else if (Settings.TurboMode)
- {
- ImGui_DrawTextOverlay("▶▶",
+
+ if (!GFX.InfoString.empty())
+ ImGui_DrawTextOverlay(GFX.InfoString.c_str(),
settings.spacing,
+ height - settings.spacing,
settings.spacing,
- settings.spacing);
- }
+ ImGui::DrawTextAlignment::BEGIN,
+ ImGui::DrawTextAlignment::END,
+ width - settings.spacing * 4);
ImGui::Render();
diff --git a/gtk/src/gtk_config.cpp b/gtk/src/gtk_config.cpp
index d3b0b124..1f03795d 100644
--- a/gtk/src/gtk_config.cpp
+++ b/gtk/src/gtk_config.cpp
@@ -96,6 +96,7 @@ int Snes9xConfig::load_defaults()
allow_xv = false;
allow_xrandr = false;
auto_vrr = false;
+ osd_size = 24;
force_inverted_byte_order = false;
hires_effect = HIRES_NORMAL;
pause_emulation_on_switch = false;
@@ -165,6 +166,7 @@ int Snes9xConfig::load_defaults()
Settings.Transparency = true;
Settings.DisplayTime = false;
Settings.DisplayFrameRate = false;
+ Settings.DisplayIndicators = false;
Settings.SixteenBitSound = true;
Settings.Stereo = true;
Settings.ReverseStereo = false;
@@ -236,6 +238,7 @@ int Snes9xConfig::save_config_file()
outstring("HardwareAcceleration", display_driver, "none, opengl, xv, vulkan");
outint("SplashBackground", splash_image, "0: Black, 1: Color bars, 2: Pattern, 3: Blue, 4: Default");
outbool("AutoVRR", auto_vrr, "Automatically use the best settings for variable sync in fullscreen mode");
+ outint("OSDSize", osd_size, "Size of on-screen display elements. Default: 24pt");
section = "NTSC";
outstring("Hue", std::to_string(ntsc_setup.hue));
@@ -316,6 +319,7 @@ int Snes9xConfig::save_config_file()
outbool("DisplayTime", Settings.DisplayTime);
outbool("DisplayFrameRate", Settings.DisplayFrameRate);
outbool("DisplayPressedKeys", Settings.DisplayPressedKeys);
+ outbool("DisplayIndicators", Settings.DisplayIndicators);
outint("SpeedControlMethod", Settings.SkipFrames, "0: Time the frames to 50 or 60Hz, 1: Same, but skip frames if too slow, 2: Synchronize to the sound buffer, 3: Unlimited, except potentially by vsync");
outint("SaveSRAMEveryNSeconds", Settings.AutoSaveDelay);
outbool("BlockInvalidVRAMAccess", Settings.BlockInvalidVRAMAccessMaster);
@@ -460,6 +464,7 @@ int Snes9xConfig::load_config_file()
inbool("BilinearFilter", Settings.BilinearFilter);
inint("SplashBackground", splash_image);
inbool("AutoVRR", auto_vrr);
+ inint("OSDSize", osd_size);
section = "NTSC";
indouble("Hue", ntsc_setup.hue);
@@ -541,6 +546,7 @@ int Snes9xConfig::load_config_file()
inint("SaveSRAMEveryNSeconds", Settings.AutoSaveDelay);
inbool("BlockInvalidVRAMAccess", Settings.BlockInvalidVRAMAccessMaster);
inbool("AllowDPadContradictions", Settings.UpAndDown);
+ inbool("DisplayIndicators", Settings.DisplayIndicators);
section = "Hacks";
inint("SuperFXClockMultiplier", Settings.SuperFXClockMultiplier);
diff --git a/gtk/src/gtk_config.h b/gtk/src/gtk_config.h
index 031dbc8f..a20ca982 100644
--- a/gtk/src/gtk_config.h
+++ b/gtk/src/gtk_config.h
@@ -72,6 +72,7 @@ class Snes9xConfig
bool force_inverted_byte_order;
int splash_image;
bool auto_vrr;
+ int osd_size;
snes_ntsc_setup_t ntsc_setup;
int ntsc_format;
diff --git a/gtk/src/gtk_display_driver_opengl.cpp b/gtk/src/gtk_display_driver_opengl.cpp
index 1678feb6..c98674d3 100644
--- a/gtk/src/gtk_display_driver_opengl.cpp
+++ b/gtk/src/gtk_display_driver_opengl.cpp
@@ -407,7 +407,10 @@ int S9xOpenGLDisplayDriver::init()
if (version >= 33)
{
- S9xImGuiInit();
+ auto defaults = S9xImGuiGetDefaults();
+ defaults.font_size = gui_config->osd_size;
+ defaults.spacing = defaults.font_size / 2.4;
+ S9xImGuiInit(&defaults);
ImGui_ImplOpenGL3_Init();
}
diff --git a/gtk/src/gtk_display_driver_vulkan.cpp b/gtk/src/gtk_display_driver_vulkan.cpp
index cdae88b6..64220b8a 100644
--- a/gtk/src/gtk_display_driver_vulkan.cpp
+++ b/gtk/src/gtk_display_driver_vulkan.cpp
@@ -31,7 +31,10 @@ S9xVulkanDisplayDriver::~S9xVulkanDisplayDriver()
bool S9xVulkanDisplayDriver::init_imgui()
{
- S9xImGuiInit();
+ auto defaults = S9xImGuiGetDefaults();
+ defaults.font_size = gui_config->osd_size;
+ defaults.spacing = defaults.font_size / 2.4;
+ S9xImGuiInit(&defaults);
ImGui_ImplVulkan_LoadFunctions([](const char *function, void *instance) {
return VULKAN_HPP_DEFAULT_DISPATCHER.vkGetInstanceProcAddr(*((VkInstance *)instance), function);
diff --git a/gtk/src/gtk_preferences.cpp b/gtk/src/gtk_preferences.cpp
index be41178f..3f566c2c 100644
--- a/gtk/src/gtk_preferences.cpp
+++ b/gtk/src/gtk_preferences.cpp
@@ -394,6 +394,8 @@ void Snes9xPreferences::move_settings_to_dialog()
set_check("show_time", Settings.DisplayTime);
set_check("show_frame_rate", Settings.DisplayFrameRate);
set_check("show_pressed_keys", Settings.DisplayPressedKeys);
+ set_check("show_indicators", Settings.DisplayIndicators);
+ set_spin("osd_size", config->osd_size);
set_check("change_display_resolution", config->change_display_resolution);
set_check("scale_to_fit", config->scale_to_fit);
set_check("overscan", config->overscan);
@@ -554,6 +556,10 @@ void Snes9xPreferences::get_settings_from_dialog()
if (config->force_inverted_byte_order != get_check("force_inverted_byte_order"))
gfx_needs_restart = true;
+ if (config->osd_size != get_spin("osd_size"))
+ gfx_needs_restart = true;
+
+
config->enable_icons = get_check("force_enable_icons");
auto settings = Gtk::Settings::get_default();
settings->set_property("gtk-menu-images", gui_config->enable_icons);
@@ -563,6 +569,8 @@ void Snes9xPreferences::get_settings_from_dialog()
Settings.DisplayTime = get_check("show_time");
Settings.DisplayFrameRate = get_check("show_frame_rate");
Settings.DisplayPressedKeys = get_check("show_pressed_keys");
+ Settings.DisplayIndicators = get_check("show_indicators");
+ config->osd_size = get_spin("osd_size");
config->scale_to_fit = get_check("scale_to_fit");
config->overscan = get_check("overscan");
config->maintain_aspect_ratio = get_check("maintain_aspect_ratio");
diff --git a/gtk/src/snes9x.ui b/gtk/src/snes9x.ui
index f2896492..08e811ee 100644
--- a/gtk/src/snes9x.ui
+++ b/gtk/src/snes9x.ui
@@ -209,6 +209,13 @@
1
1
+
diff --git a/snes9x.h b/snes9x.h
index 502dbf98..df305469 100644
--- a/snes9x.h
+++ b/snes9x.h
@@ -254,6 +254,7 @@ struct SSettings
bool8 DisplayWatchedAddresses;
bool8 DisplayPressedKeys;
bool8 DisplayMovieFrame;
+ bool DisplayIndicators;
bool8 AutoDisplayMessages;
uint32 InitialInfoStringTimeout;
uint16 DisplayColor;