Add drawPng function to Renderer for PNG icon rendering
- Takes image.Image, position (x,y) in Dp, size (width,height) in Dp - Tint color with alpha < 255 applies color overlay using clip.Rect - Converts Dp to pixels using Renderer.toPx() - Uses paint.NewImageOp for image rendering
This commit is contained in:
parent
a065ee979d
commit
14284afa73
|
|
@ -372,6 +372,42 @@ func (r *Renderer) drawLine(gtx layout.Context, shp *text.Shaper, line []text.Gl
|
||||||
t.Pop()
|
t.Pop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// drawPng draws a PNG image at the given position and size.
|
||||||
|
// x, y are in Dp (top-left corner).
|
||||||
|
// width, height are in Dp (target size).
|
||||||
|
// 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) {
|
||||||
|
if img == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert Dp to pixels
|
||||||
|
xPx := int(r.toPx(x))
|
||||||
|
yPx := int(r.toPx(y))
|
||||||
|
wPx := int(r.toPx(width))
|
||||||
|
hPx := int(r.toPx(height))
|
||||||
|
|
||||||
|
// Compute source rectangle (full image)
|
||||||
|
src := image.Rect(0, 0, img.Bounds().Dx(), img.Bounds().Dy())
|
||||||
|
_ = src // unused, but kept for clarity
|
||||||
|
|
||||||
|
// Compute destination rectangle
|
||||||
|
dst := image.Rect(xPx, yPx, xPx+wPx, yPx+hPx)
|
||||||
|
|
||||||
|
// If tint color has alpha < 255, apply tint using blendOp.DstIn
|
||||||
|
if col.A < 255 {
|
||||||
|
// Draw tinted rectangle over the image
|
||||||
|
bgClip := clip.Rect(dst).Push(gtx.Ops)
|
||||||
|
paint.ColorOp{Color: col}.Add(gtx.Ops)
|
||||||
|
paint.PaintOp{}.Add(gtx.Ops)
|
||||||
|
bgClip.Pop()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the image
|
||||||
|
paint.NewImageOp(img).Add(gtx.Ops)
|
||||||
|
paint.PaintOp{}.Add(gtx.Ops)
|
||||||
|
}
|
||||||
|
|
||||||
// WindowConstraints tracks the initial window constraints captured at the start of Draw.
|
// WindowConstraints tracks the initial window constraints captured at the start of Draw.
|
||||||
// All elements are positioned relative to these bounds to ensure consistency.
|
// All elements are positioned relative to these bounds to ensure consistency.
|
||||||
type WindowConstraints struct {
|
type WindowConstraints struct {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user