qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 3/3] sdl: add support for high resolution window ico


From: Daniel P . Berrangé
Subject: [Qemu-devel] [PATCH 3/3] sdl: add support for high resolution window icon
Date: Tue, 18 Dec 2018 14:26:29 +0000

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é <address@hidden>
---
 configure         | 23 +++++++++++++++++++++++
 include/ui/sdl2.h |  3 +++
 ui/sdl2.c         | 14 ++++++++++----
 3 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/configure b/configure
index 96c948166c..1ed3643ecb 100755
--- a/configure
+++ b/configure
@@ -346,6 +346,7 @@ fdt=""
 netmap="no"
 sdl=""
 sdlabi=""
+sdl_image=""
 virtfs=""
 mpath=""
 vnc="yes"
@@ -2962,6 +2963,7 @@ sdl_probe ()
       feature_not_found "sdl" "Install SDL2-devel"
     fi
     sdl=no
+    sdl_image=no
     # no need to do the rest
     return
   fi
@@ -2992,6 +2994,21 @@ EOF
       sdl=yes
     fi
 
+    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
+       sdl_image=no
+    fi
+
     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
     if test "$sdl" = "yes" -a "$static" = "yes" ; then
       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
@@ -3002,6 +3019,7 @@ EOF
        :
       else
         sdl=no
+        sdl_image=no
       fi
     fi # static link
   else # sdl not found
@@ -3009,6 +3027,7 @@ EOF
       feature_not_found "sdl" "Install SDL devel"
     fi
     sdl=no
+    sdl_image=no
   fi # sdl compile test
 }
 
@@ -6022,6 +6041,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)"
@@ -6362,6 +6382,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..c24b99af94 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) {
+    icon = SDL_LoadBMP(CONFIG_QEMU_ICONDIR "/hicolor/32x32/apps/qemu.bmp");
+#endif
+    if (icon) {
+#ifndef CONFIG_SDL_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);
+#endif
+        SDL_SetWindowIcon(sdl2_console[0].real_window, icon);
     }
 
     gui_grab = 0;
-- 
2.19.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]