From: <sba...@us...> - 2024-10-19 07:54:18
|
This is an automated email from the git hooks/post-receive-user script. sbaldovi pushed a commit to branch master in repository fuse. View the commit online: https://sourceforge.net/p/fuse-emulator/fuse/ci/51438970e6931d66adbc2de22dd56b5bc17177a7/ commit 51438970e6931d66adbc2de22dd56b5bc17177a7 Author: Alberto Garcia <be...@ig...> AuthorDate: Sat Oct 12 01:23:23 2024 +0200 Use PNG instead of XPM for the icons in the GTK UI Starting from version 2.42.11 the gdk-pixbuf library disables the XPM loader by default. Because of that Fuse won't be able to show the toolbar icons in the GTK UI. This patch converts the icons to PNG and embeds them in the binary using GResource. The old ui/gtk/pixmaps.c is no longer needed by the GTK UI but it is still used to generate ui/xlib/xpixmaps.c so it is moved to that directory. (fixes bug #509) --- .gitignore | 2 ++ ui/gtk/Makefile.am | 29 ++++++++++++++++++++++++++--- ui/gtk/browse.c | 2 +- ui/gtk/gtkinternals.h | 26 ++++++++++++++------------ ui/gtk/gtkui.c | 5 +++++ ui/gtk/icons/disk_active.png | Bin 0 -> 244 bytes ui/gtk/icons/disk_inactive.png | Bin 0 -> 262 bytes ui/gtk/icons/mdr_active.png | Bin 0 -> 183 bytes ui/gtk/icons/mdr_inactive.png | Bin 0 -> 187 bytes ui/gtk/icons/mouse_active.png | Bin 0 -> 158 bytes ui/gtk/icons/mouse_inactive.png | Bin 0 -> 162 bytes ui/gtk/icons/pause_active.png | Bin 0 -> 265 bytes ui/gtk/icons/pause_inactive.png | Bin 0 -> 275 bytes ui/gtk/icons/tape_active.png | Bin 0 -> 221 bytes ui/gtk/icons/tape_inactive.png | Bin 0 -> 244 bytes ui/gtk/icons/tape_marker.png | Bin 0 -> 142 bytes ui/gtk/resources.xml | 16 ++++++++++++++++ ui/gtk/statusbar.c | 20 ++++++++++---------- ui/xlib/Makefile.am | 5 +++-- ui/{gtk/pixmaps.c => xlib/xpixmaps.c.in} | 4 +--- ui/xlib/xstatusbar.pl | 2 +- 21 files changed, 79 insertions(+), 32 deletions(-) diff --git a/.gitignore b/.gitignore index b321f4a0..8b1dc1d0 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,8 @@ tags /ui/gtk/options.c /ui/gtk/options.h /ui/gtk/options_internals.h +/ui/gtk/resources.c +/ui/gtk/resources.h /ui/null/options.c /ui/sdl/keysyms.c /ui/widget/fuse.font diff --git a/ui/gtk/Makefile.am b/ui/gtk/Makefile.am index ef5f3891..76385cbf 100644 --- a/ui/gtk/Makefile.am +++ b/ui/gtk/Makefile.am @@ -30,6 +30,18 @@ pkgdata_DATA += ui/gtk/menu_data.ui endif +gtkui_resource_files = \ + ui/gtk/icons/disk_active.png \ + ui/gtk/icons/disk_inactive.png \ + ui/gtk/icons/mdr_active.png \ + ui/gtk/icons/mdr_inactive.png \ + ui/gtk/icons/mouse_active.png \ + ui/gtk/icons/mouse_inactive.png \ + ui/gtk/icons/pause_active.png \ + ui/gtk/icons/pause_inactive.png \ + ui/gtk/icons/tape_active.png \ + ui/gtk/icons/tape_inactive.png \ + ui/gtk/icons/tape_marker.png CLEANFILES += $(ui_gtk_built) @@ -50,9 +62,10 @@ ui_gtk_files = \ ui/gtk/menu_data.c \ ui/gtk/options.c \ ui/gtk/picture.c \ - ui/gtk/pixmaps.c \ ui/gtk/pokefinder.c \ ui/gtk/pokemem.c \ + ui/gtk/resources.c \ + ui/gtk/resources.h \ ui/gtk/rollback.c \ ui/gtk/roms.c \ ui/gtk/statusbar.c \ @@ -74,11 +87,15 @@ ui_gtk_built = \ ui/gtk/menu_data.c \ ui/gtk/menu_data.ui \ ui/gtk/options.c \ - ui/gtk/options_internals.h + ui/gtk/options_internals.h \ + ui/gtk/resources.c \ + ui/gtk/resources.h EXTRA_DIST += \ + $(gtkui_resource_files) \ ui/gtk/options.pl \ - ui/gtk/options-header.pl + ui/gtk/options-header.pl \ + ui/gtk/resources.xml ui/gtk/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat @$(MKDIR_P) ui/gtk @@ -99,3 +116,9 @@ ui/gtk/options.c: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/gtk/options.p ui/gtk/options_internals.h: $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/gtk/options-header.pl $(srcdir)/ui/options.dat $(srcdir)/perl/Fuse.pm $(srcdir)/perl/Fuse/Dialog.pm @$(MKDIR_P) ui/gtk $(AM_V_GEN)$(PERL) $(srcdir)/perl/cpp-perl.pl config.h $(srcdir)/ui/options.dat | $(PERL) -I$(srcdir)/perl $(srcdir)/ui/gtk/options-header.pl - > $@.tmp && mv $@.tmp $@ + +ui/gtk/resources.c: ui/gtk/resources.xml $(gtkui_resource_files) + $(AM_V_GEN)glib-compile-resources --sourcedir=$(srcdir) --target=$@ --internal --generate-source --c-name=gtkui $< + +ui/gtk/resources.h: ui/gtk/resources.xml $(gtkui_resource_files) + $(AM_V_GEN)glib-compile-resources --sourcedir=$(srcdir) --target=$@ --internal --generate-header --c-name=gtkui $< diff --git a/ui/gtk/browse.c b/ui/gtk/browse.c index 7bd8c962..257b2205 100644 --- a/ui/gtk/browse.c +++ b/ui/gtk/browse.c @@ -155,7 +155,7 @@ create_dialog( void ) gtk_box_pack_start( GTK_BOX( content_area ), scrolled_window, TRUE, TRUE, 0 ); /* The tape marker pixbuf */ - tape_marker_pixbuf = gdk_pixbuf_new_from_xpm_data( gtkpixmap_tape_marker ); + tape_marker_pixbuf = gdk_pixbuf_new_from_resource( ICON_TAPE_MARKER, NULL ); /* FIXME: unref this at exit */ /* And the list itself */ diff --git a/ui/gtk/gtkinternals.h b/ui/gtk/gtkinternals.h index e06307f6..4b96c2fc 100644 --- a/ui/gtk/gtkinternals.h +++ b/ui/gtk/gtkinternals.h @@ -130,19 +130,21 @@ extern GtkActionEntry gtkui_menu_data[]; extern guint gtkui_menu_data_size; /* - * The icon pixmaps (pixmaps.c) + * Resources for the GTK UI (ui/gtk/resources.xml) */ -extern const char *gtkpixmap_tape_inactive[]; -extern const char *gtkpixmap_tape_active[]; -extern const char *gtkpixmap_mdr_inactive[]; -extern const char *gtkpixmap_mdr_active[]; -extern const char *gtkpixmap_disk_inactive[]; -extern const char *gtkpixmap_disk_active[]; -extern const char *gtkpixmap_pause_inactive[]; -extern const char *gtkpixmap_pause_active[]; -extern const char *gtkpixmap_tape_marker[]; -extern const char *gtkpixmap_mouse_inactive[]; -extern const char *gtkpixmap_mouse_active[]; + +#define FUSE_RESOURCE_PREFIX "/net/sourceforge/fuse_emulator/" +#define ICON_DISK_ACTIVE FUSE_RESOURCE_PREFIX "disk_active.png" +#define ICON_DISK_INACTIVE FUSE_RESOURCE_PREFIX "disk_inactive.png" +#define ICON_MDR_ACTIVE FUSE_RESOURCE_PREFIX "mdr_active.png" +#define ICON_MDR_INACTIVE FUSE_RESOURCE_PREFIX "mdr_inactive.png" +#define ICON_MOUSE_ACTIVE FUSE_RESOURCE_PREFIX "mouse_active.png" +#define ICON_MOUSE_INACTIVE FUSE_RESOURCE_PREFIX "mouse_inactive.png" +#define ICON_PAUSE_ACTIVE FUSE_RESOURCE_PREFIX "pause_active.png" +#define ICON_PAUSE_INACTIVE FUSE_RESOURCE_PREFIX "pause_inactive.png" +#define ICON_TAPE_ACTIVE FUSE_RESOURCE_PREFIX "tape_active.png" +#define ICON_TAPE_INACTIVE FUSE_RESOURCE_PREFIX "tape_inactive.png" +#define ICON_TAPE_MARKER FUSE_RESOURCE_PREFIX "tape_marker.png" /* * Statusbar routines (statusbar.c) diff --git a/ui/gtk/gtkui.c b/ui/gtk/gtkui.c index 835b74e5..7229fb09 100644 --- a/ui/gtk/gtkui.c +++ b/ui/gtk/gtkui.c @@ -51,6 +51,7 @@ #include "settings.h" #include "snapshot.h" #include "timer/timer.h" +#include "ui/gtk/resources.h" #include "ui/ui.h" #include "utils.h" @@ -166,6 +167,8 @@ ui_init( int *argc, char ***argv ) gtk_widget_set_default_visual( gdk_rgb_get_visual() ); #endif /* #if !GTK_CHECK_VERSION( 3, 0, 0 ) */ + g_resources_register( gtkui_get_resource() ); + gtkui_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); #ifdef FUSE_ICON_AVAILABLE @@ -317,6 +320,8 @@ ui_end(void) g_object_unref( ui_manager_menu ); + g_resources_unregister( gtkui_get_resource() ); + return 0; } diff --git a/ui/gtk/icons/disk_active.png b/ui/gtk/icons/disk_active.png new file mode 100644 index 00000000..027c63e7 Binary files /dev/null and b/ui/gtk/icons/disk_active.png differ diff --git a/ui/gtk/icons/disk_inactive.png b/ui/gtk/icons/disk_inactive.png new file mode 100644 index 00000000..56843cdc Binary files /dev/null and b/ui/gtk/icons/disk_inactive.png differ diff --git a/ui/gtk/icons/mdr_active.png b/ui/gtk/icons/mdr_active.png new file mode 100644 index 00000000..e198241e Binary files /dev/null and b/ui/gtk/icons/mdr_active.png differ diff --git a/ui/gtk/icons/mdr_inactive.png b/ui/gtk/icons/mdr_inactive.png new file mode 100644 index 00000000..b8c44996 Binary files /dev/null and b/ui/gtk/icons/mdr_inactive.png differ diff --git a/ui/gtk/icons/mouse_active.png b/ui/gtk/icons/mouse_active.png new file mode 100644 index 00000000..7178af74 Binary files /dev/null and b/ui/gtk/icons/mouse_active.png differ diff --git a/ui/gtk/icons/mouse_inactive.png b/ui/gtk/icons/mouse_inactive.png new file mode 100644 index 00000000..82a98c70 Binary files /dev/null and b/ui/gtk/icons/mouse_inactive.png differ diff --git a/ui/gtk/icons/pause_active.png b/ui/gtk/icons/pause_active.png new file mode 100644 index 00000000..014e6464 Binary files /dev/null and b/ui/gtk/icons/pause_active.png differ diff --git a/ui/gtk/icons/pause_inactive.png b/ui/gtk/icons/pause_inactive.png new file mode 100644 index 00000000..269543f2 Binary files /dev/null and b/ui/gtk/icons/pause_inactive.png differ diff --git a/ui/gtk/icons/tape_active.png b/ui/gtk/icons/tape_active.png new file mode 100644 index 00000000..cd5781e1 Binary files /dev/null and b/ui/gtk/icons/tape_active.png differ diff --git a/ui/gtk/icons/tape_inactive.png b/ui/gtk/icons/tape_inactive.png new file mode 100644 index 00000000..d6719f0a Binary files /dev/null and b/ui/gtk/icons/tape_inactive.png differ diff --git a/ui/gtk/icons/tape_marker.png b/ui/gtk/icons/tape_marker.png new file mode 100644 index 00000000..4090343b Binary files /dev/null and b/ui/gtk/icons/tape_marker.png differ diff --git a/ui/gtk/resources.xml b/ui/gtk/resources.xml new file mode 100644 index 00000000..9e7ba5bc --- /dev/null +++ b/ui/gtk/resources.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<gresources> + <gresource prefix="/net/sourceforge/fuse_emulator"> + <file alias="disk_active.png">ui/gtk/icons/disk_active.png</file> + <file alias="disk_inactive.png">ui/gtk/icons/disk_inactive.png</file> + <file alias="mdr_active.png">ui/gtk/icons/mdr_active.png</file> + <file alias="mdr_inactive.png">ui/gtk/icons/mdr_inactive.png</file> + <file alias="mouse_active.png">ui/gtk/icons/mouse_active.png</file> + <file alias="mouse_inactive.png">ui/gtk/icons/mouse_inactive.png</file> + <file alias="pause_active.png">ui/gtk/icons/pause_active.png</file> + <file alias="pause_inactive.png">ui/gtk/icons/pause_inactive.png</file> + <file alias="tape_active.png">ui/gtk/icons/tape_active.png</file> + <file alias="tape_inactive.png">ui/gtk/icons/tape_inactive.png</file> + <file alias="tape_marker.png">ui/gtk/icons/tape_marker.png</file> + </gresource> +</gresources> diff --git a/ui/gtk/statusbar.c b/ui/gtk/statusbar.c index 5e845f1c..d97c66c5 100644 --- a/ui/gtk/statusbar.c +++ b/ui/gtk/statusbar.c @@ -59,29 +59,29 @@ gtkstatusbar_create( GtkBox *parent ) /* FIXME: unref these pixbuf on statusbar destroy */ pixbuf_tape_inactive = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_tape_inactive ); + gdk_pixbuf_new_from_resource( ICON_TAPE_INACTIVE, NULL ); pixbuf_tape_active = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_tape_active ); + gdk_pixbuf_new_from_resource( ICON_TAPE_ACTIVE, NULL ); pixbuf_mdr_inactive = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_mdr_inactive ); + gdk_pixbuf_new_from_resource( ICON_MDR_INACTIVE, NULL ); pixbuf_mdr_active = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_mdr_active ); + gdk_pixbuf_new_from_resource( ICON_MDR_ACTIVE, NULL ); pixbuf_disk_inactive = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_disk_inactive ); + gdk_pixbuf_new_from_resource( ICON_DISK_INACTIVE, NULL ); pixbuf_disk_active = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_disk_active ); + gdk_pixbuf_new_from_resource( ICON_DISK_ACTIVE, NULL ); pixbuf_pause_inactive = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_pause_inactive ); + gdk_pixbuf_new_from_resource( ICON_PAUSE_INACTIVE, NULL ); pixbuf_pause_active = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_pause_active ); + gdk_pixbuf_new_from_resource( ICON_PAUSE_ACTIVE, NULL ); pixbuf_mouse_inactive = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_mouse_inactive ); + gdk_pixbuf_new_from_resource( ICON_MOUSE_INACTIVE, NULL ); pixbuf_mouse_active = - gdk_pixbuf_new_from_xpm_data( gtkpixmap_mouse_active ); + gdk_pixbuf_new_from_resource( ICON_MOUSE_ACTIVE, NULL ); speed_status = gtk_label_new( "100%" ); gtk_label_set_width_chars( GTK_LABEL( speed_status ), 8 ); diff --git a/ui/xlib/Makefile.am b/ui/xlib/Makefile.am index a2345ec1..a5577b12 100644 --- a/ui/xlib/Makefile.am +++ b/ui/xlib/Makefile.am @@ -50,12 +50,13 @@ ui_xlib_built = \ EXTRA_DIST += \ ui/xlib/xpixmaps.c \ + ui/xlib/xpixmaps.c.in \ ui/xlib/xstatusbar.pl ui/xlib/keysyms.c: $(srcdir)/keysyms.pl $(srcdir)/keysyms.dat @$(MKDIR_P) ui/xlib $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/keysyms.pl x $(srcdir)/keysyms.dat > $@.tmp && mv $@.tmp $@ -ui/xlib/xpixmaps.c: ui/xlib/xstatusbar.pl $(srcdir)/ui/gtk/pixmaps.c +ui/xlib/xpixmaps.c: ui/xlib/xstatusbar.pl $(srcdir)/ui/xlib/xpixmaps.c.in @$(MKDIR_P) ui/xlib - $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/ui/xlib/xstatusbar.pl $(srcdir)/ui/gtk/pixmaps.c > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(PERL) -I$(srcdir)/perl $(srcdir)/ui/xlib/xstatusbar.pl $(srcdir)/ui/xlib/xpixmaps.c.in > $@.tmp && mv $@.tmp $@ diff --git a/ui/gtk/pixmaps.c b/ui/xlib/xpixmaps.c.in similarity index 98% rename from ui/gtk/pixmaps.c rename to ui/xlib/xpixmaps.c.in index 40311da6..a86ecbda 100644 --- a/ui/gtk/pixmaps.c +++ b/ui/xlib/xpixmaps.c.in @@ -21,9 +21,7 @@ */ -#include "config.h" - -#include "gtkinternals.h" +#error "This file is used to generate ui/xlib/xpixmaps.c and is not meant to be compiled" const char *gtkpixmap_tape_inactive[] = { "27 17 13 1", diff --git a/ui/xlib/xstatusbar.pl b/ui/xlib/xstatusbar.pl index 0f753382..fd6644dd 100644 --- a/ui/xlib/xstatusbar.pl +++ b/ui/xlib/xstatusbar.pl @@ -13,7 +13,7 @@ my $check_mask = ''; my $do_icon = 0; -print "/*\n This file generated from ../gtk/pixmaps.c with xstatusbar.pl\n" . +print "/*\n This file generated from xpixmaps.c.in with xstatusbar.pl\n" . "*/\n\n"; my $pixmaps = shift; |