Skip to content

Commit 263bf68

Browse files
committed
Add UI visibility toggle
1 parent d07fb49 commit 263bf68

4 files changed

Lines changed: 42 additions & 3 deletions

File tree

src/common/gfx.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@ void gfx_disable_speaker_icon(void) {
176176
state.disable_speaker_icon = true;
177177
}
178178

179+
void gfx_set_border(gfx_border_t border) {
180+
assert(state.valid);
181+
state.border = border;
182+
}
183+
179184
chips_dim_t gfx_pixel_aspect(void) {
180185
assert(state.valid);
181186
return state.offscreen.pixel_aspect;

src/common/gfx.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ void gfx_shutdown(void);
4949
void gfx_flash_success(void);
5050
void gfx_flash_error(void);
5151
void gfx_disable_speaker_icon(void);
52+
void gfx_set_border(gfx_border_t border);
5253
chips_dim_t gfx_pixel_aspect(void);
5354
sg_view gfx_create_icon_texview(const uint8_t* packed_pixels, int width, int height, int stride, const char* label);
5455

src/ui/ui_x65.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include "ui.h"
99
#include <filesystem>
1010

11+
extern "C" void app_set_disable_gui(bool hidden);
12+
1113
#ifdef __EMSCRIPTEN__
1214
#include <emscripten/version.h>
1315
#endif
@@ -129,7 +131,7 @@ static void _ui_x65_draw_menu(ui_x65_t* ui) {
129131
if (ui->inject.menu_cb) {
130132
ui->inject.menu_cb();
131133
}
132-
if (ImGui::MenuItem("Reset UI")) {
134+
if (ImGui::MenuItem(ICON_LC_ROTATE_CCW_SQUARE " Reset UI")) {
133135
const ui_settings_t* settings = ui_settings();
134136
for (int i = 0; i < settings->num_slots; i++) {
135137
const ui_settings_slot_t* slot = &settings->slots[i];
@@ -139,6 +141,9 @@ static void _ui_x65_draw_menu(ui_x65_t* ui) {
139141
ui_settings_init(&ui_empty_settings);
140142
ui_x65_load_settings(ui, &ui_empty_settings);
141143
}
144+
if (ImGui::MenuItem(ICON_LC_EYE_OFF " Hide UI", "Ctrl+Shift+H")) {
145+
app_set_disable_gui(true);
146+
}
142147
ImGui::EndMenu();
143148
}
144149
ImGui::EndMainMenuBar();

src/x65.c

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static const char* settings_key = "Emu.x65";
4949
extern ui_settings_t* settings_load(const char* imgui_ini_key);
5050
int window_width = 0;
5151
int window_height = 0;
52-
static bool disable_gui = false;
52+
bool disable_gui = false;
5353

5454
typedef struct {
5555
uint32_t version;
@@ -124,6 +124,21 @@ static gfx_border_t gui_border(bool no_gui) {
124124
};
125125
}
126126

127+
#ifdef CHIPS_USE_UI
128+
// gfx draw_extra dispatch: gated on disable_gui at call time so the menu can
129+
// toggle UI visibility at runtime (init-time gating would lock the choice in)
130+
static void ui_draw_extra(const gfx_draw_info_t* draw_info) {
131+
if (!disable_gui) {
132+
ui_draw(draw_info);
133+
}
134+
}
135+
136+
void app_set_disable_gui(bool hidden) {
137+
disable_gui = hidden;
138+
gfx_set_border(gui_border(hidden));
139+
}
140+
#endif
141+
127142
// audio-streaming callback
128143
static void push_audio(const float* samples, int num_samples, void* user_data) {
129144
(void)user_data;
@@ -239,7 +254,7 @@ void app_init(void) {
239254
.disable_speaker_icon = sargs_exists("disable-speaker-icon"),
240255
#ifdef CHIPS_USE_UI
241256
.init_extra_cb = ui_preinit,
242-
.draw_extra_cb = disable_gui ? NULL : ui_draw,
257+
.draw_extra_cb = ui_draw_extra,
243258
#endif
244259
.border = gui_border(disable_gui),
245260
.display_info = x65_display_info(&state.x65),
@@ -422,6 +437,19 @@ void app_input(const sapp_event* event) {
422437
}
423438
#endif
424439
#ifdef CHIPS_USE_UI
440+
// Hide/show debug UI hotkey. Multi-modifier so it can't collide with X65
441+
// input, intercepted (and swallowed) before HID forwarding.
442+
if (event->type == SAPP_EVENTTYPE_KEY_DOWN || event->type == SAPP_EVENTTYPE_KEY_UP) {
443+
const uint32_t hide_ui_mods = SAPP_MODIFIER_CTRL | SAPP_MODIFIER_SHIFT;
444+
const bool is_hide_ui = event->key_code == SAPP_KEYCODE_H
445+
&& ((event->modifiers & hide_ui_mods) == hide_ui_mods);
446+
if (is_hide_ui) {
447+
if (event->type == SAPP_EVENTTYPE_KEY_DOWN) {
448+
app_set_disable_gui(!disable_gui);
449+
}
450+
return;
451+
}
452+
}
425453
if (!disable_gui && ui_input(event)) {
426454
// input was handled by UI
427455
return;

0 commit comments

Comments
 (0)