1
0

Improve icon rendering: fix scaling and centering for emoji, FontAwesome, and SVG icons

This commit is contained in:
Maksim Totmin 2026-06-17 20:19:56 +07:00
parent 777a8109b2
commit ef7d4bef8e
3 changed files with 16 additions and 10 deletions

View File

@ -175,9 +175,12 @@ func renderCBDTGlyph(r rune, targetSize int, scale float64) (image.Image, bool)
raw := emojiCBDT.imgs[idx] raw := emojiCBDT.imgs[idx]
displaySize := int(float64(targetSize) * scale) displaySize := int(float64(targetSize) * scale)
if displaySize < 1 { if displaySize > targetSize {
displaySize = targetSize displaySize = targetSize
} }
if displaySize < 1 {
displaySize = 1
}
scaled := raw scaled := raw
if raw.Bounds().Dx() != displaySize || raw.Bounds().Dy() != displaySize { if raw.Bounds().Dx() != displaySize || raw.Bounds().Dy() != displaySize {

View File

@ -115,11 +115,14 @@ func renderFAGlyph(style faStyle, name string, size int, scale float64) (image.I
rgba := image.NewRGBA(image.Rect(0, 0, size, size)) rgba := image.NewRGBA(image.Rect(0, 0, size, size))
offX := (size - int(fontSize)) / 2 adv := font.MeasureString(face, string(cp)).Ceil()
offX := (size - adv) / 2
if offX < 0 { if offX < 0 {
offX = size / 8 offX = 0
} }
baselineY := size * 7 / 10
metrics := face.Metrics()
baselineY := (size + metrics.Ascent.Ceil() - metrics.Descent.Ceil()) / 2
d := font.Drawer{ d := font.Drawer{
Dst: rgba, Dst: rgba,

View File

@ -153,12 +153,12 @@ func svgToPNG(svgPath string, targetSize int, scale float64) (image.Image, error
scale = 0.55 scale = 0.55
} }
renderSize := targetSize renderSize := int(float64(targetSize) * scale)
if scale < 1 { if renderSize > targetSize {
renderSize = int(float64(targetSize) * scale) renderSize = targetSize
if renderSize < 1 { }
renderSize = 1 if renderSize < 1 {
} renderSize = 1
} }
cmd := exec.Command("rsvg-convert", cmd := exec.Command("rsvg-convert",