Skip to content

Commit

Permalink
Port previous two changes to gtk2 frontend. Add meson option to build
Browse files Browse the repository at this point in the history
gtk2 frontend (disabled by default). Fix meson.build dependency for
gtk2.
  • Loading branch information
thesourcehim committed Oct 26, 2024
1 parent 72315fa commit 5d498a9
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 7 deletions.
71 changes: 67 additions & 4 deletions desmume/src/frontend/posix/gtk2/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ VideoFilter* video;

desmume::config::Config config;

bool in_joy_config_mode = false;

enum {
MAIN_BG_0 = 0,
MAIN_BG_1,
Expand Down Expand Up @@ -2231,6 +2233,63 @@ static void Edit_Controls()

}

static gboolean JoyKeyAcceptTimerFunc(gpointer data)
{
if(!in_joy_config_mode)
return FALSE;
SDL_Event event;
u16 key;
bool done = FALSE;
while(SDL_PollEvent(&event) && !done)
{
switch(event.type)
{
case SDL_JOYBUTTONDOWN:
key = ((event.jbutton.which & 15) << 12) | JOY_BUTTON << 8 | (event.jbutton.button & 255);
done = TRUE;
break;
case SDL_JOYAXISMOTION:
if( ((u32)abs(event.jaxis.value) >> 14) != 0 )
{
key = ((event.jaxis.which & 15) << 12) | JOY_AXIS << 8 | ((event.jaxis.axis & 127) << 1);
if (event.jaxis.value > 0)
key |= 1;
done = TRUE;
}
break;
case SDL_JOYHATMOTION:
if (event.jhat.value != SDL_HAT_CENTERED) {
key = ((event.jhat.which & 15) << 12) | JOY_HAT << 8 | ((event.jhat.hat & 63) << 2);
if ((event.jhat.value & SDL_HAT_UP) != 0)
key |= JOY_HAT_UP;
else if ((event.jhat.value & SDL_HAT_RIGHT) != 0)
key |= JOY_HAT_RIGHT;
else if ((event.jhat.value & SDL_HAT_DOWN) != 0)
key |= JOY_HAT_DOWN;
else if ((event.jhat.value & SDL_HAT_LEFT) != 0)
key |= JOY_HAT_LEFT;
done = TRUE;
}
break;
}
}

if(done) {
struct modify_key_ctx *ctx = (struct modify_key_ctx*)data;
ctx->mk_key_chosen = key;
gchar* YouPressed = g_strdup_printf("You pressed : %d\nClick OK to keep this key.", ctx->mk_key_chosen);
gtk_label_set_text(GTK_LABEL(ctx->label), YouPressed);
g_free(YouPressed);
return FALSE;
}
return in_joy_config_mode;
}

static void JoyKeyAcceptTimerStart(GtkWidget *w, GdkEventFocus *e, struct modify_key_ctx *ctx)
{
g_timeout_add(200, JoyKeyAcceptTimerFunc, ctx);
}

static void AcceptNewJoyKey(GtkWidget *w, GdkEventFocus *e, struct modify_key_ctx *ctx)
{
gchar *YouPressed;
Expand All @@ -2253,7 +2312,7 @@ static void Modify_JoyKey(GtkWidget* widget, gpointer data)
Key = GPOINTER_TO_INT(data);
/* Joypad keys start at 1 */
ctx.key_id = Key+1;
ctx.mk_key_chosen = 0;
ctx.mk_key_chosen = Keypad_Temp[Key];
Title = g_strdup_printf("Press \"%s\" key ...\n", key_names[Key]);
mkDialog = gtk_dialog_new_with_buttons(Title,
GTK_WINDOW(pWindow),
Expand All @@ -2266,9 +2325,11 @@ static void Modify_JoyKey(GtkWidget* widget, gpointer data)
g_free(Title);
gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(mkDialog))), ctx.label, TRUE, FALSE, 0);
gtk_widget_show_all(gtk_dialog_get_content_area(GTK_DIALOG(mkDialog)));

in_joy_config_mode = true;
g_signal_connect(G_OBJECT(mkDialog), "focus_in_event", G_CALLBACK(JoyKeyAcceptTimerStart), &ctx);
JoyKeyAcceptTimerFunc(&ctx);

g_signal_connect(G_OBJECT(mkDialog), "focus_in_event", G_CALLBACK(AcceptNewJoyKey), &ctx);

switch(gtk_dialog_run(GTK_DIALOG(mkDialog))) {
case GTK_RESPONSE_OK:
Keypad_Temp[Key] = ctx.mk_key_chosen;
Expand All @@ -2281,6 +2342,7 @@ static void Modify_JoyKey(GtkWidget* widget, gpointer data)
ctx.mk_key_chosen = 0;
break;
}
in_joy_config_mode = false;

gtk_widget_destroy(mkDialog);

Expand Down Expand Up @@ -2959,7 +3021,8 @@ gboolean EmuLoop(gpointer data)
#endif

/* Merge the joystick keys with the keyboard ones */
process_joystick_events(&keys_latch);
if(!in_joy_config_mode)
process_joystick_events(&keys_latch);
/* Update! */
update_keypad(keys_latch);

Expand Down
4 changes: 2 additions & 2 deletions desmume/src/frontend/posix/gtk2/meson.build
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
dep_gtk3 = dependency('gtk+-3.0')
dep_gtk2 = dependency('gtk+-2.0')
dep_x11 = dependency('x11')

gtk_dependencies = dependencies + [dep_gtk3, dep_x11]
gtk_dependencies = dependencies + [dep_gtk2, dep_x11]

desmume_src = [
'../shared/avout_flac.cpp',
Expand Down
3 changes: 3 additions & 0 deletions desmume/src/frontend/posix/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -337,3 +337,6 @@ endif
if get_option('frontend-gtk')
subdir('gtk')
endif
if get_option('frontend-gtk2')
subdir('gtk2')
endif
7 changes: 6 additions & 1 deletion desmume/src/frontend/posix/meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,12 @@ option('openal',
option('frontend-gtk',
type: 'boolean',
value: true,
description: 'Enable GTK frontend',
description: 'Enable GTK3 frontend',
)
option('frontend-gtk2',
type: 'boolean',
value: false,
description: 'Enable GTK2 frontend',
)
option('frontend-cli',
type: 'boolean',
Expand Down

0 comments on commit 5d498a9

Please sign in to comment.