1
0

fix: svg icons now respect icon_scale parameter

This commit is contained in:
Maksim Totmin 2026-06-17 15:12:17 +07:00
parent 75f09cea50
commit bb86e495c0
2 changed files with 26 additions and 4 deletions

View File

@ -4,6 +4,7 @@ import (
"bytes"
"fmt"
"image"
"image/draw"
_ "image/png"
"os"
"os/exec"
@ -147,10 +148,22 @@ func findSystemIcon(name string, targetSize int) (string, error) {
return "", fmt.Errorf("system icon %q not found", name)
}
func svgToPNG(svgPath string, targetSize int) (image.Image, error) {
func svgToPNG(svgPath string, targetSize int, scale float64) (image.Image, error) {
if scale <= 0 {
scale = 0.55
}
renderSize := targetSize
if scale < 1 {
renderSize = int(float64(targetSize) * scale)
if renderSize < 1 {
renderSize = 1
}
}
cmd := exec.Command("rsvg-convert",
"-w", strconv.Itoa(targetSize),
"-h", strconv.Itoa(targetSize),
"-w", strconv.Itoa(renderSize),
"-h", strconv.Itoa(renderSize),
"-f", "png",
svgPath,
)
@ -162,6 +175,15 @@ func svgToPNG(svgPath string, targetSize int) (image.Image, error) {
if err != nil {
return nil, fmt.Errorf("decode converted svg: %w", err)
}
if renderSize < targetSize {
canvas := image.NewRGBA(image.Rect(0, 0, targetSize, targetSize))
offX := (targetSize - renderSize) / 2
offY := (targetSize - renderSize) / 2
draw.Draw(canvas, image.Rect(offX, offY, offX+renderSize, offY+renderSize), img, image.Point{}, draw.Over)
img = canvas
}
return img, nil
}

View File

@ -853,7 +853,7 @@ func loadImage(path string, targetSize int, faScale float64) (image.Image, error
}
if strings.HasSuffix(resolved, ".svg") {
img, err := svgToPNG(resolved, targetSize)
img, err := svgToPNG(resolved, targetSize, faScale)
if err != nil {
return nil, err
}