Skip to content

Commit

Permalink
Update shadows on theme change
Browse files Browse the repository at this point in the history
Fixes #589
  • Loading branch information
andydotxyz committed Dec 24, 2019
1 parent 6862874 commit 7af37bc
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 5 deletions.
8 changes: 6 additions & 2 deletions widget/button.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
type buttonRenderer struct {
icon *canvas.Image
label *canvas.Text
shadow fyne.CanvasObject
shadow *shadow

objects []fyne.CanvasObject
button *Button
Expand Down Expand Up @@ -125,6 +125,10 @@ func (b *buttonRenderer) Refresh() {
b.icon.Hide()
}

if b.shadow != nil {
b.shadow.depth = theme.Padding() / 2
}

b.Layout(b.button.Size())
canvas.Refresh(b.button)
}
Expand Down Expand Up @@ -206,7 +210,7 @@ func (b *Button) CreateRenderer() fyne.WidgetRenderer {
objects := []fyne.CanvasObject{
text,
}
var shadow fyne.CanvasObject
var shadow *shadow
if !b.HideShadow {
shadow = newShadow(shadowAround, theme.Padding()/2)
objects = append(objects, shadow)
Expand Down
9 changes: 7 additions & 2 deletions widget/scroller.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,8 @@ type scrollContainerRenderer struct {
scroll *ScrollContainer
vertArea *scrollBarArea
horizArea *scrollBarArea
leftShadow, rightShadow fyne.CanvasObject
topShadow, bottomShadow fyne.CanvasObject
leftShadow, rightShadow *shadow
topShadow, bottomShadow *shadow

objects []fyne.CanvasObject
}
Expand Down Expand Up @@ -273,6 +273,11 @@ func (r *scrollContainerRenderer) Objects() []fyne.CanvasObject {
}

func (r *scrollContainerRenderer) Refresh() {
r.leftShadow.depth = theme.Padding() * 2
r.rightShadow.depth = theme.Padding() * 2
r.topShadow.depth = theme.Padding() * 2
r.bottomShadow.depth = theme.Padding() * 2

r.Layout(r.scroll.Size())
}

Expand Down
41 changes: 40 additions & 1 deletion widget/shadow.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,45 @@ func (r *shadowRenderer) createShadows() {
}
}

func updateShadowStart(g *canvas.LinearGradient) {
if g == nil {
return
}

g.StartColor = theme.ShadowColor()
g.Refresh()
}

func updateShadowEnd(g *canvas.LinearGradient) {
if g == nil {
return
}

g.EndColor = theme.ShadowColor()
g.Refresh()
}

func updateShadowRadial(g *canvas.RadialGradient) {
if g == nil {
return
}

g.StartColor = theme.ShadowColor()
g.Refresh()
}

func (r *shadowRenderer) refreshShadows() {
updateShadowEnd(r.l)
updateShadowStart(r.r)
updateShadowStart(r.b)
updateShadowEnd(r.t)

updateShadowRadial(r.tl)
updateShadowRadial(r.tr)
updateShadowRadial(r.bl)
updateShadowRadial(r.br)
}

func (r *shadowRenderer) BackgroundColor() color.Color {
return color.Transparent
}
Expand Down Expand Up @@ -132,5 +171,5 @@ func (r *shadowRenderer) Objects() []fyne.CanvasObject {
}

func (r *shadowRenderer) Refresh() {
r.createShadows()
r.refreshShadows()
}
18 changes: 18 additions & 0 deletions widget/shadow_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"testing"

"fyne.io/fyne"
"fyne.io/fyne/internal/cache"
"fyne.io/fyne/theme"
"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -119,3 +120,20 @@ func TestShadow_BackgroundColor(t *testing.T) {
func TestShadow_MinSize(t *testing.T) {
assert.Equal(t, fyne.NewSize(0, 0), newShadow(shadowAround, theme.Padding()).MinSize())
}

func TestShadow_Theme(t *testing.T) {
shadow := newShadow(shadowAround, theme.Padding())
light := theme.LightTheme()
fyne.CurrentApp().Settings().SetTheme(light)
shadow.Refresh()
assert.Equal(t, light.ShadowColor(), cache.Renderer(shadow).(*shadowRenderer).l.EndColor)
assert.Equal(t, light.ShadowColor(), cache.Renderer(shadow).(*shadowRenderer).r.StartColor)
assert.Equal(t, light.ShadowColor(), cache.Renderer(shadow).(*shadowRenderer).tr.StartColor)

dark := theme.DarkTheme()
fyne.CurrentApp().Settings().SetTheme(dark)
shadow.Refresh()
assert.Equal(t, dark.ShadowColor(), cache.Renderer(shadow).(*shadowRenderer).r.StartColor)
assert.Equal(t, dark.ShadowColor(), cache.Renderer(shadow).(*shadowRenderer).r.StartColor)
assert.Equal(t, dark.ShadowColor(), cache.Renderer(shadow).(*shadowRenderer).tr.StartColor)
}

0 comments on commit 7af37bc

Please sign in to comment.