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]
displaySize := int(float64(targetSize) * scale)
if displaySize < 1 {
if displaySize > targetSize {
displaySize = targetSize
}
if displaySize < 1 {
displaySize = 1
}
scaled := raw
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))
offX := (size - int(fontSize)) / 2
adv := font.MeasureString(face, string(cp)).Ceil()
offX := (size - adv) / 2
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{
Dst: rgba,

View File

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