Added IconScale for Button.
This commit is contained in:
parent
ff51378aff
commit
4d518849e5
27
ui/button.go
27
ui/button.go
@ -14,6 +14,8 @@ type Button struct {
|
||||
Text string
|
||||
Icon Image
|
||||
|
||||
IconScale float32
|
||||
|
||||
scale float32
|
||||
icon Image
|
||||
}
|
||||
@ -42,15 +44,19 @@ func (b *Button) desiredSize(ctx Context) geom.PointF32 {
|
||||
var font = ctx.Renderer().Font(b.FontName(ctx))
|
||||
var w, h float32 = 0, font.Height()
|
||||
if len(b.Text) != 0 {
|
||||
w += font.WidthOf(b.Text) + pad
|
||||
w += pad + font.WidthOf(b.Text)
|
||||
}
|
||||
if b.Icon != nil && b.Icon.Height() > 0 {
|
||||
w += b.Icon.Width()*h/b.Icon.Height() + pad
|
||||
iconW := b.Icon.Width() * h / b.Icon.Height()
|
||||
if b.IconScale > 0 {
|
||||
iconW *= b.IconScale
|
||||
}
|
||||
w += pad + iconW
|
||||
}
|
||||
if w == 0 {
|
||||
return geom.ZeroPtF32
|
||||
}
|
||||
return geom.PtF32(pad+w, pad+h+pad)
|
||||
return geom.PtF32(w+pad, pad+h+pad)
|
||||
}
|
||||
|
||||
func (b *Button) DesiredSize(ctx Context) geom.PointF32 {
|
||||
@ -88,6 +94,12 @@ func (b *Button) fillColor(p *Palette) color.Color {
|
||||
|
||||
func (b *Button) scaledIcon(ctx Context, height float32) Image {
|
||||
scale := height / b.Icon.Height()
|
||||
if b.IconScale > 0 {
|
||||
scale *= b.IconScale
|
||||
}
|
||||
if geom.IsNaN32(scale) {
|
||||
return nil
|
||||
}
|
||||
if scale == 1 {
|
||||
b.scale = 1
|
||||
return b.Icon
|
||||
@ -97,7 +109,11 @@ func (b *Button) scaledIcon(ctx Context, height float32) Image {
|
||||
b.icon.Destroy()
|
||||
b.icon = nil
|
||||
}
|
||||
im := resize.Resize(uint(b.Icon.Width()*scale), 0, b.Icon.Image(), resize.Bilinear)
|
||||
w := uint(b.Icon.Width() * scale)
|
||||
if w == 0 {
|
||||
return nil
|
||||
}
|
||||
im := resize.Resize(w, 0, b.Icon.Image(), resize.Bilinear)
|
||||
icon, err := ctx.Renderer().CreateImage(im)
|
||||
if err != nil {
|
||||
return nil
|
||||
@ -142,10 +158,11 @@ func (b *Button) Render(ctx Context) {
|
||||
var pad = style.Dimensions.TextPadding
|
||||
bounds = bounds.Inset(pad)
|
||||
pos := bounds.Min
|
||||
pos.X += pad
|
||||
if b.Icon != nil && b.Icon.Height() > 0 {
|
||||
icon := b.scaledIcon(ctx, bounds.Dy())
|
||||
if icon != nil {
|
||||
ctx.Renderer().DrawImageOptions(icon, pos, DrawOptions{Tint: textColor})
|
||||
ctx.Renderer().DrawImageOptions(icon, geom.PtF32(pos.X, pos.Y+.5*(bounds.Dy()-icon.Height())), DrawOptions{Tint: textColor})
|
||||
pos.X += icon.Width() + pad
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user