diff --git a/configure b/configure index 7f1426ed0c..9bdcedc87a 100755 --- a/configure +++ b/configure @@ -346,6 +346,7 @@ fdt="" netmap="no" sdl="" sdlabi="" +sdl_image="" virtfs="" mpath="" vnc="yes" @@ -1042,6 +1043,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" @@ -1704,6 +1709,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 @@ -3002,10 +3008,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 < @@ -6029,6 +6068,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)" @@ -6368,6 +6408,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 #include +#ifdef CONFIG_SDL_IMAGE +# include +#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;