~eliasnaur/gio

468bd6f53a3395565d67baa7438b0d482eba46f1 — Egon Elbre 5 months ago 93ebd51
widget/material: add hover to Button

Signed-off-by: Egon Elbre <egonelbre@gmail.com>
2 files changed, 19 insertions(+), 2 deletions(-)

M internal/f32color/rgba.go
M widget/material/button.go
M internal/f32color/rgba.go => internal/f32color/rgba.go +11 -0
@@ 172,6 172,17 @@ func Disabled(c color.NRGBA) (d color.NRGBA) {
	}
}

// Hovered blends color towards a brighter color.
func Hovered(c color.NRGBA) (d color.NRGBA) {
	const r = 0x20 // lighten ratio
	return color.NRGBA{
		R: byte(255 - int(255-c.R)*(255-r)/256),
		G: byte(255 - int(255-c.G)*(255-r)/256),
		B: byte(255 - int(255-c.B)*(255-r)/256),
		A: c.A,
	}
}

// approxLuminance is a fast approximate version of RGBA.Luminance.
func approxLuminance(c color.NRGBA) byte {
	const (

M widget/material/button.go => widget/material/button.go +8 -2
@@ 128,8 128,11 @@ func (b ButtonLayoutStyle) Layout(gtx layout.Context, w layout.Widget) layout.Di
				Y: float32(gtx.Constraints.Min.Y),
			}}, rr).Add(gtx.Ops)
			background := b.Background
			if gtx.Queue == nil {
			switch {
			case gtx.Queue == nil:
				background = f32color.Disabled(b.Background)
			case b.Button.Hovered():
				background = f32color.Hovered(b.Background)
			}
			paint.Fill(gtx.Ops, background)
			for _, c := range b.Button.History() {


@@ 155,8 158,11 @@ func (b IconButtonStyle) Layout(gtx layout.Context) layout.Dimensions {
				Max: f32.Point{X: sizexf, Y: sizeyf},
			}, rr).Add(gtx.Ops)
			background := b.Background
			if gtx.Queue == nil {
			switch {
			case gtx.Queue == nil:
				background = f32color.Disabled(b.Background)
			case b.Button.Hovered():
				background = f32color.Hovered(b.Background)
			}
			paint.Fill(gtx.Ops, background)
			for _, c := range b.Button.History() {