Forráskód Böngészése

qubes-rpc: fix SVG icon scaling

rsvg-convert doesn't scale the image. Do it with convert, only when
really needed. Don't upscale the icon after converting to raster
version.

Fixes QubesOS/qubes-issues#1884
Marek Marczykowski-Górecki 8 éve
szülő
commit
7b5f2b77d1
1 módosított fájl, 11 hozzáadás és 6 törlés
  1. 11 6
      qubes-rpc/qubes.GetImageRGBA

+ 11 - 6
qubes-rpc/qubes.GetImageRGBA

@@ -5,7 +5,7 @@ ICON_MAXSIZE=512
 
 if [ "${filename%%:*}" = xdgicon ]; then
     filename="$(/usr/lib/qubes/xdg-icon "${filename#*:}" "$ICON_MAXSIZE")"
-    forcesize="$ICON_MAXSIZE"
+    forcemaxsize="$ICON_MAXSIZE"
 
     [ -n "${filename}" ]
 elif [ "${filename}" = "-" ] || [ "${filename##*:}" = "-" ]; then
@@ -25,12 +25,17 @@ w="$(echo "$s"|cut -d " " -f 1)"
 h="$(echo "$s"|cut -d " " -f 2)"
 m="$(echo "$s"|cut -d " " -f 3)"
 if [ "$m" = SVG ]; then
-    if [ -n "$forcesize" ]; then
-        w="$forcesize"
-        h="$forcesize"
-    fi
     tmpfile2="$(mktemp /tmp/qimg-XXXXXXXX.png)"
-    rsvg-convert -w "$w" -h "$h" -o "$tmpfile2" "$filename"
+    rsvg-convert -o "$tmpfile2" "$filename"
+    # downscale the image if necessary
+    if [ -n "$forcemaxsize" -a \
+            \( "$w" -gt "$forcemaxsize" -o "$h" -gt "$forcemaxsize" \) ]; then
+        convert "$tmpfile2" -scale "${forcemaxsize}x${forcemaxsize}" "$tmpfile2"
+        # read the size again, because icon may not be a square
+        s="$(identify -format '%w %h' "$tmpfile2")"
+        w="$(echo "$s"|cut -d " " -f 1)"
+        h="$(echo "$s"|cut -d " " -f 2)"
+    fi
     filename="$tmpfile2"
 fi
 echo "$w $h"