From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Gerd Hoffmann" <kraxel@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [Qemu-devel] [PATCH v2 3/3] sdl: add support for high resolution window icon
Date: Thu, 10 Jan 2019 12:00:47 +0000 [thread overview]
Message-ID: <20190110120047.25369-4-berrange@redhat.com> (raw)
In-Reply-To: <20190110120047.25369-1-berrange@redhat.com>
Modern desktop environments can render icons at very large sizes,
especially with high DPI screens. Providing a 32x32 pixel bitmap is
nowhere near sufficient anymore.
When displayed in GNOME shell the QEMU icon looks awful, having been
scaled up to at least x4 its base size. This is compounded by the fact
that the BMP file doesn't do transparency, so while we've removed white
pixels, we still have anti-aliased nearly-white pixels which make the
logo look appalling on black backgrounds.
Loading a high resolution PNG icon addresses both problems, but requires
use of the extra SDL2_image library.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
configure | 43 +++++++++++++++++++++++++++++++++++++++++++
include/ui/sdl2.h | 3 +++
ui/sdl2.c | 18 ++++++++++++------
3 files changed, 58 insertions(+), 6 deletions(-)
diff --git a/configure b/configure
index 97918ba09c..880b38bd45 100755
--- a/configure
+++ b/configure
@@ -346,6 +346,7 @@ fdt=""
netmap="no"
sdl=""
sdlabi=""
+sdl_image=""
virtfs=""
mpath=""
vnc="yes"
@@ -1046,6 +1047,10 @@ for opt do
;;
--with-sdlabi=*) sdlabi="$optarg"
;;
+ --disable-sdl-image) sdl_image="no"
+ ;;
+ --enable-sdl-image) sdl_image="yes"
+ ;;
--disable-qom-cast-debug) qom_cast_debug="no"
;;
--enable-qom-cast-debug) qom_cast_debug="yes"
@@ -1714,6 +1719,7 @@ disabled with --disable-FEATURE, default is enabled if available:
gcrypt libgcrypt cryptography support
sdl SDL UI
--with-sdlabi select preferred SDL ABI 1.2 or 2.0
+ sdl_image SDL Image support for icons
gtk gtk UI
vte vte support for the gtk UI
curses curses UI
@@ -3018,10 +3024,43 @@ EOF
fi # sdl compile test
}
+sdl_image_probe ()
+{
+ if test "$sdl_image" != "no" ; then
+ if $pkg_config SDL2_image --exists; then
+ if test "$static" = "yes"; then
+ sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
+ else
+ sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
+ fi
+ sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
+ sdl_image=yes
+
+ sdl_cflags="$sdl_cflags $sdl_image_cflags"
+ sdl_libs="$sdl_libs $sdl_image_libs"
+ else
+ if test "$sdl_image" = "yes" ; then
+ feature_not_found "sdl_image" "Install SDL Image devel"
+ else
+ sdl_image=no
+ fi
+ fi
+ fi
+}
+
if test "$sdl" != "no" ; then
sdl_probe
fi
+if test "$sdl" = "yes" ; then
+ sdl_image_probe
+else
+ if test "$sdl_image" = "yes"; then
+ echo "warning: SDL Image requested, but SDL is not available, disabling"
+ fi
+ sdl_image=no
+fi
+
if test "$sdl" = "yes" ; then
cat > $TMPC <<EOF
#include <SDL.h>
@@ -6045,6 +6084,7 @@ if test "$darwin" = "yes" ; then
echo "Cocoa support $cocoa"
fi
echo "SDL support $sdl $(echo_version $sdl $sdlversion)"
+echo "SDL image support $sdl_image"
echo "GTK support $gtk $(echo_version $gtk $gtk_version)"
echo "GTK GL support $gtk_gl"
echo "VTE support $vte $(echo_version $vte $vteversion)"
@@ -6385,6 +6425,9 @@ if test "$sdl" = "yes" ; then
echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
+ if test "$sdl_image" = "yes" ; then
+ echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
+ fi
fi
if test "$cocoa" = "yes" ; then
echo "CONFIG_COCOA=y" >> $config_host_mak
diff --git a/include/ui/sdl2.h b/include/ui/sdl2.h
index f43eecdbd6..f6db642b65 100644
--- a/include/ui/sdl2.h
+++ b/include/ui/sdl2.h
@@ -6,6 +6,9 @@
#include <SDL.h>
#include <SDL_syswm.h>
+#ifdef CONFIG_SDL_IMAGE
+# include <SDL_image.h>
+#endif
#ifdef CONFIG_OPENGL
# include "ui/egl-helpers.h"
diff --git a/ui/sdl2.c b/ui/sdl2.c
index 4c0d5db473..cde7feba91 100644
--- a/ui/sdl2.c
+++ b/ui/sdl2.c
@@ -764,6 +764,7 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
uint8_t data = 0;
int i;
SDL_SysWMinfo info;
+ SDL_Surface *icon = NULL;
assert(o->type == DISPLAY_TYPE_SDL);
@@ -835,13 +836,18 @@ static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
#endif
}
+#ifdef CONFIG_SDL_IMAGE
+ icon = IMG_Load(CONFIG_QEMU_ICONDIR "/hicolor/128x128/apps/qemu.png");
+#else
/* Load a 32x32x4 image. White pixels are transparent. */
- SDL_Surface *image = SDL_LoadBMP(CONFIG_QEMU_ICONDIR
- "/hicolor/32x32/apps/qemu.bmp");
- if (image) {
- uint32_t colorkey = SDL_MapRGB(image->format, 255, 255, 255);
- SDL_SetColorKey(image, SDL_TRUE, colorkey);
- SDL_SetWindowIcon(sdl2_console[0].real_window, image);
+ icon = SDL_LoadBMP(CONFIG_QEMU_ICONDIR "/hicolor/32x32/apps/qemu.bmp");
+ if (icon) {
+ uint32_t colorkey = SDL_MapRGB(icon->format, 255, 255, 255);
+ SDL_SetColorKey(icon, SDL_TRUE, colorkey);
+ }
+#endif
+ if (icon) {
+ SDL_SetWindowIcon(sdl2_console[0].real_window, icon);
}
gui_grab = 0;
--
2.19.2
next prev parent reply other threads:[~2019-01-10 12:00 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-10 12:00 [Qemu-devel] [PATCH v2 0/3] Fix & improve icon display on GTK and SDL frontends Daniel P. Berrangé
2019-01-10 12:00 ` [Qemu-devel] [PATCH v2 1/3] ui: install logo icons to $prefix/share/icons Daniel P. Berrangé
2019-01-10 15:00 ` Eric Blake
2019-01-11 5:46 ` Gerd Hoffmann
2019-01-10 12:00 ` [Qemu-devel] [PATCH v2 2/3] ui: fix icon display for GTK frontend under GNOME Shell with Wayland Daniel P. Berrangé
2019-01-10 12:00 ` Daniel P. Berrangé [this message]
2019-01-11 10:43 ` [Qemu-devel] [PATCH v2 0/3] Fix & improve icon display on GTK and SDL frontends Gerd Hoffmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190110120047.25369-4-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.