From 0ac2941802268430c1a7d5f308cc37b42a27ef1b Mon Sep 17 00:00:00 2001 From: Greg Pomerantz Date: Sun, 10 May 2026 06:52:54 -0400 Subject: [PATCH] Replace unicode cut icon with PNG icon in StatusBar - Load cut.png from embedded filesystem - drawStatusBar uses drawPng() for cut icon (16dp) - No other files modified --- internal/ui/render.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/internal/ui/render.go b/internal/ui/render.go index 2dda73b..a48d0de 100644 --- a/internal/ui/render.go +++ b/internal/ui/render.go @@ -1,6 +1,8 @@ package ui import ( + "bytes" + "embed" "image" "image/color" @@ -15,16 +17,35 @@ import ( "golang.org/x/image/math/fixed" ) +//go:embed icons/*.png +var iconFS embed.FS + // Renderer consumes a slice of elements and draws them. type Renderer struct { theme Theme shp *text.Shaper scale float32 // pixels per DP, from State.Scale + icons map[string]image.Image } // New creates a new Renderer. func New(th Theme, shp *text.Shaper) *Renderer { - return &Renderer{theme: th, shp: shp, scale: 1.0} + r := &Renderer{theme: th, shp: shp, scale: 1.0, icons: make(map[string]image.Image)} + r.loadIcons() + return r +} + +// loadIcons loads PNG icons from the embedded filesystem. +func (r *Renderer) loadIcons() { + data, err := iconFS.ReadFile("cut.png") + if err != nil { + return + } + img, _, err := image.Decode(bytes.NewReader(data)) + if err != nil { + return + } + r.icons["cut"] = img } // SetScale updates the renderer's scale factor from State.Scale. @@ -159,7 +180,8 @@ func (r *Renderer) drawStatusBar(gtx layout.Context, sb StatusBar, _ WindowConst leftX := reg.X + Dp(8) iconY := iconsLineY - r.drawText(gtx, th.Shaper, "✂", r.theme.FontSize, leftX, iconY, color.NRGBA{R: 0, G: 0, B: 0, A: 255}) + iconSize := Dp(16) + r.drawPng(gtx, r.icons["cut"], leftX, iconY, iconSize, iconSize, color.NRGBA{R: 0, G: 0, B: 0, A: 255}) leftX += Dp(36) r.drawText(gtx, th.Shaper, "⎘", r.theme.FontSize, leftX, iconY, color.NRGBA{R: 0, G: 0, B: 0, A: 255}) leftX += Dp(36)