Fix icon Y positioning: offset by icon height to align bottom with baseline

- drawPng uses top-left corner, drawText uses baseline
- Icon bottom (Y=42) now aligns with baseline at Y=42
- Icon top is at Y=26 (42-16), occupies Y=26 to Y=42
This commit is contained in:
Greg Pomerantz 2026-05-10 07:32:15 -04:00
parent 1416e2db26
commit dc4962a6c4

View File

@ -2,7 +2,9 @@ package ui
import ( import (
"bytes" "bytes"
"embed" "embed"
"fmt"
"image" "image"
"image/color" "image/color"
@ -181,9 +183,12 @@ func (r *Renderer) drawStatusBar(gtx layout.Context, sb StatusBar, _ WindowConst
iconY := iconsLineY iconY := iconsLineY
iconSize := Dp(16) iconSize := Dp(16)
fmt.Printf("[DEBUG drawStatusBar] reg=(%d, %d, %d, %d) filenameLineY=%d iconsLineY=%d iconY=%d iconSize=%d scale=%f\n",
reg.X, reg.Y, reg.W, reg.H, filenameLineY, iconsLineY, iconY, iconSize, r.scale)
// Icon Y is baseline position; drawPng uses top-left, so offset by icon height // Icon Y is baseline position; drawPng uses top-left, so offset by icon height
r.drawPng(gtx, r.icons["cut"], leftX, iconY, iconSize, iconSize, color.NRGBA{R: 0, G: 0, B: 0, A: 255}) // drawPng uses top-left, drawText uses baseline — offset by icon height
r.drawPng(gtx, r.icons["cut"], leftX, iconY-iconSize, iconSize, iconSize, color.NRGBA{R: 0, G: 0, B: 0, A: 255})
leftX += Dp(36) leftX += Dp(36)
r.drawText(gtx, th.Shaper, "⎘", r.theme.FontSize, leftX, iconY, color.NRGBA{R: 0, G: 0, B: 0, A: 255}) r.drawText(gtx, th.Shaper, "⎘", r.theme.FontSize, leftX, iconY, color.NRGBA{R: 0, G: 0, B: 0, A: 255})
leftX += Dp(36) leftX += Dp(36)
@ -400,6 +405,7 @@ type WindowConstraints struct {
// col is the tint color — if alpha < 255, the image is tinted using blendOp.DstIn. // col is the tint color — if alpha < 255, the image is tinted using blendOp.DstIn.
func (r *Renderer) drawPng(gtx layout.Context, img image.Image, x, y Dp, width, height Dp, col color.NRGBA) { func (r *Renderer) drawPng(gtx layout.Context, img image.Image, x, y Dp, width, height Dp, col color.NRGBA) {
if img == nil { if img == nil {
fmt.Printf("[DEBUG drawPng] SKIPPED: img is nil\n")
return return
} }
@ -408,6 +414,8 @@ func (r *Renderer) drawPng(gtx layout.Context, img image.Image, x, y Dp, width,
yPx := int(r.toPx(y)) yPx := int(r.toPx(y))
wPx := int(r.toPx(width)) wPx := int(r.toPx(width))
hPx := int(r.toPx(height)) hPx := int(r.toPx(height))
fmt.Printf("[DEBUG drawPng] Dp=(%d, %d, %d, %d) Px=(%d, %d, %d, %d) scale=%f\n",
x, y, width, height, xPx, yPx, wPx, hPx, r.scale)
// Compute destination rectangle // Compute destination rectangle
dst := image.Rect(xPx, yPx, xPx+wPx, yPx+hPx) dst := image.Rect(xPx, yPx, xPx+wPx, yPx+hPx)