Moved scaling by height to Images.
This commit is contained in:
parent
3acb3f09af
commit
3390d46f34
28
ui/button.go
28
ui/button.go
@ -14,9 +14,6 @@ type Button struct {
|
||||
Icon Image
|
||||
|
||||
IconScale float32
|
||||
|
||||
scale float32
|
||||
icon Image
|
||||
}
|
||||
|
||||
type ButtonType int
|
||||
@ -91,29 +88,6 @@ func (b *Button) fillColor(p *Palette) color.Color {
|
||||
return nil
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
if b.icon == nil || b.scale != scale {
|
||||
icon := ctx.Images().Scaled(b.Icon, scale)
|
||||
if icon == nil {
|
||||
return nil
|
||||
}
|
||||
b.icon = icon
|
||||
b.scale = scale
|
||||
}
|
||||
return b.icon
|
||||
}
|
||||
|
||||
func (b *Button) textColor(p *Palette) color.Color {
|
||||
if b.Font.Color != nil {
|
||||
return b.Font.Color
|
||||
@ -149,7 +123,7 @@ func (b *Button) Render(ctx Context) {
|
||||
bounds = bounds.Inset(pad)
|
||||
pos := bounds.Min
|
||||
if b.Icon != nil && b.Icon.Height() > 0 {
|
||||
icon := b.scaledIcon(ctx, bounds.Dy())
|
||||
icon, _ := ctx.Images().ScaledHeight(b.Icon, b.IconScale*bounds.Dy())
|
||||
if icon != nil {
|
||||
ctx.Renderer().DrawImageOptions(icon, geom.PtF32(pos.X, pos.Y+.5*(bounds.Dy()-icon.Height())), DrawOptions{Tint: textColor})
|
||||
pos.X += icon.Width() + pad
|
||||
|
13
ui/images.go
13
ui/images.go
@ -1,6 +1,9 @@
|
||||
package ui
|
||||
|
||||
import "github.com/nfnt/resize"
|
||||
import (
|
||||
"github.com/nfnt/resize"
|
||||
"opslag.de/schobers/geom"
|
||||
)
|
||||
|
||||
func ScaleImage(render Renderer, im Image, scale float32) Image {
|
||||
w := uint(im.Width() * scale)
|
||||
@ -74,6 +77,14 @@ func (i *Images) Scaled(im Image, scale float32) Image {
|
||||
return scaled
|
||||
}
|
||||
|
||||
func (i *Images) ScaledHeight(im Image, height float32) (Image, float32) {
|
||||
scale := height / im.Height()
|
||||
if geom.IsNaN32(scale) {
|
||||
return nil, 0
|
||||
}
|
||||
return i.Scaled(im, scale), scale
|
||||
}
|
||||
|
||||
func (i *Images) ScaledByName(name string, scale float32) Image {
|
||||
im := i.Image(name)
|
||||
if im == nil {
|
||||
|
Loading…
Reference in New Issue
Block a user