From 468bd6f53a3395565d67baa7438b0d482eba46f1 Mon Sep 17 00:00:00 2001 From: Egon Elbre Date: Sun, 17 Jan 2021 17:51:57 +0200 Subject: [PATCH] widget/material: add hover to Button Signed-off-by: Egon Elbre --- internal/f32color/rgba.go | 11 +++++++++++ widget/material/button.go | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/internal/f32color/rgba.go b/internal/f32color/rgba.go index a566a2b7..c5b5d198 100644 --- a/internal/f32color/rgba.go +++ b/internal/f32color/rgba.go @@ -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 ( diff --git a/widget/material/button.go b/widget/material/button.go index 29b07982..4d6f201a 100644 --- a/widget/material/button.go +++ b/widget/material/button.go @@ -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() {