diff --git a/.github/workflows/mobile_tests.yml b/.github/workflows/mobile_tests.yml
new file mode 100644
index 0000000000..6362b3c124
--- /dev/null
+++ b/.github/workflows/mobile_tests.yml
@@ -0,0 +1,23 @@
+name: Mobile Tests
+on: [push, pull_request]
+
+jobs:
+ mobile_tests:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ go-version: [1.12.x, 1.15.x]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-go@v2
+ with:
+ go-version: ${{ matrix.go-version }}
+
+ - name: Get dependencies
+ run: sudo apt-get update && sudo apt-get install gcc libegl1-mesa-dev libgles2-mesa-dev libx11-dev xorg-dev
+
+ - name: Tests
+ run: go test -tags "ci mobile" ./...
+
diff --git a/.github/workflows/platform_tests.yml b/.github/workflows/platform_tests.yml
index 55a7cb2d0d..bff0ebf406 100644
--- a/.github/workflows/platform_tests.yml
+++ b/.github/workflows/platform_tests.yml
@@ -17,7 +17,7 @@ jobs:
go-version: ${{ matrix.go-version }}
- name: Get dependencies
- run: sudo apt-get update && sudo apt-get install golang gcc libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libx11-dev xorg-dev
+ run: sudo apt-get update && sudo apt-get install gcc libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libx11-dev xorg-dev
if: ${{ runner.os == 'Linux' }}
#- name: Verify go modules
diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml
index 3e44825c44..18e2dd32c0 100644
--- a/.github/workflows/static_analysis.yml
+++ b/.github/workflows/static_analysis.yml
@@ -12,8 +12,7 @@ jobs:
- name: Get dependencies
run: |
- sudo apt-get update
- sudo apt-get install golang gcc libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libx11-dev xorg-dev
+ sudo apt-get update && sudo apt-get install gcc libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libx11-dev xorg-dev
GO111MODULE=off go get golang.org/x/tools/cmd/goimports
GO111MODULE=off go get github.com/fzipp/gocyclo/cmd/gocyclo
GO111MODULE=off go get golang.org/x/lint/golint
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 760f4dcdd4..fcc4714e2b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,51 @@
This file lists the main changes with each version of the Fyne toolkit.
More detailed release notes can be found on the [releases page](https://github.com/fyne-io/fyne/releases).
+## 2.0.1 - 4 March 2021
+
+### Changed
+
+* An Entry with `Wrapping=fyne.TextWrapOff` no longer blocks scroll events from a parent
+
+### Fixed
+
+* Dialog.Resize() has no effect if called before Dialog.Show() (#1863)
+* SelectTab does not always correctly set the blue underline to the selected tab (#1872)
+* Entry Validation Broken when using Data binding (#1890)
+* Fix background colour not applying until theme change
+* android runtime error with fyne.dialog (#1896)
+* Fix scale calculations for Wayland phones (PinePhone)
+* Correct initial state of entry validation
+* fix entry widget mouse drag selection when scrolled
+* List widget panic when refreshing after changing content length (#1864)
+* Fix image caching that was too agressive on resize
+* Pointer and cursor misalignment in widget.Entry (#1937)
+* SIGSEGV Sometimes When Closing a Program by Clicking a Button (#1604)
+* Advanced Color Picker shows Black for custom primary color as RGBA (#1970)
+* Canvas.Focus() before window visible causes application to crash (#1893)
+* Menu over Content (#1973)
+* Error compiling fyne on Apple M1 arm64 (#1739)
+* Cells are not getting draw in correct location after column resize. (#1951)
+* Possible panic when selecting text in a widget.Entry (#1983)
+* Form validation doesn't enable submit button (#1965)
+* Creating a window shows it before calling .Show() and .Hide() does not work (#1835)
+* Dialogs are not refreshed correctly on .Show() (#1866)
+* Failed creating setting storage : no such directory (#2023)
+* Erroneous custom filter types not supported error on mobile (#2012)
+* High importance button show no hovered state (#1785)
+* List widget does not render all visible content after content data gets shorter (#1948)
+* Calling Select on List before draw can crash (#1960)
+* Dialog not resizing in newly created window (#1692)
+* Dialog not returning to requested size (#1382)
+* Entry without scrollable content prevents scrolling of outside scroller (#1939)
+* fyne_demo crash after selecting custom Theme and table (#2018)
+* Table widget crash when scrolling rapidly (#1887)
+* Cursor animation sometimes distorts the text (#1778)
+* Extended password entry panics when password revealer is clicked (#2036)
+* Data binding limited to 1024 simultaneous operations (#1838)
+* Custom theme does not refresh when variant changes (#2006)
+
+
## 2.0 - 22 January 2021
### Changes that are not backward compatible
diff --git a/README.md b/README.md
index 92122bc9fe..552a88a870 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
@@ -10,7 +10,7 @@
# About
-[Fyne](https://fyne.io) is an easy to use UI toolkit and app API written in Go.
+[Fyne](https://fyne.io) is an easy-to-use UI toolkit and app API written in Go.
It is designed to build applications that run on desktop and mobile devices with a
single codebase.
@@ -42,13 +42,19 @@ To run a showcase of the features of Fyne execute the following:
And you should see something like this (after you click a few buttons):
-
+
Or if you are using the light theme:
-
+
+
+
+And even running on a mobile device:
+
+
+
# Getting Started
@@ -86,7 +92,7 @@ func main() {
And you can run that simply as:
- go run main.go
+ $ go run main.go
It should look like this:
@@ -103,6 +109,12 @@ It should look like this:
> Note that Windows applications load from a command prompt by default, which means if you click an icon you may see a command window.
> To fix this add the parameters `-ldflags -H=windowsgui` to your run or build commands.
+## Run in mobile simulation
+
+There is a helpful mobile simulation mode that gives a hint of how your app would work on a mobile device:
+
+ $ go run -tags mobile main.go
+
# Installing
Using `go install` will copy the executable into your go `bin` dir.
@@ -112,7 +124,17 @@ application location you can use the fyne utility and the "install" subcommand.
$ go get fyne.io/fyne/v2/cmd/fyne
$ fyne install
-# Packaging a release
+# Packaging for mobile
+
+To run on a mobile device it is necessary to package up the application.
+To do this we can use the fyne utility "package" subcommand.
+You will need to add appropriate parameters as prompted, but the basic command is shown below.
+Once packaged you can install using the platform development tools or the fyne "install" subcommand.
+
+ $ fyne package -os android -appID my.domain.appname
+ $ fyne install -os android
+
+# Preparing a release
Using the fyne utility "release" subcommand you can package up your app for release
to app stores and market places. Make sure you have the standard build tools installed
diff --git a/app/settings.go b/app/settings.go
index 8da8ccc207..01078999c6 100644
--- a/app/settings.go
+++ b/app/settings.go
@@ -139,26 +139,36 @@ func (s *settings) fileChanged() {
}
func (s *settings) setupTheme() {
- if s.themeSpecified {
- return
- }
name := s.schema.ThemeName
if env := os.Getenv("FYNE_THEME"); env != "" {
- s.themeSpecified = true
name = env
}
- if name == "light" {
- s.applyTheme(theme.LightTheme(), theme.VariantLight)
- } else if name == "dark" {
- s.applyTheme(theme.DarkTheme(), theme.VariantDark)
- } else {
- if defaultVariant() == theme.VariantLight {
- s.applyTheme(theme.LightTheme(), theme.VariantLight)
- } else {
- s.applyTheme(theme.DarkTheme(), theme.VariantDark)
+ var variant fyne.ThemeVariant
+ effectiveTheme := s.theme
+ switch name {
+ case "light":
+ variant = theme.VariantLight
+ if !s.themeSpecified {
+ effectiveTheme = theme.LightTheme()
+ }
+ case "dark":
+ variant = theme.VariantDark
+ if !s.themeSpecified {
+ effectiveTheme = theme.DarkTheme()
+ }
+ default:
+ variant = defaultVariant()
+ if s.themeSpecified {
+ break
+ }
+ effectiveTheme = theme.DarkTheme()
+ if variant == theme.VariantLight {
+ effectiveTheme = theme.LightTheme()
}
}
+
+ s.applyTheme(effectiveTheme, variant)
}
func loadSettings() *settings {
diff --git a/app/settings_desktop.go b/app/settings_desktop.go
index 6f7f785558..0a9b3420e4 100644
--- a/app/settings_desktop.go
+++ b/app/settings_desktop.go
@@ -25,7 +25,7 @@ func ensureDirExists(dir string) {
return
}
- err := os.Mkdir(dir, 0700)
+ err := os.MkdirAll(dir, 0700)
if err != nil {
fyne.LogError("Unable to create settings storage:", err)
}
diff --git a/app/settings_test.go b/app/settings_test.go
index ea2368883e..67592838c7 100644
--- a/app/settings_test.go
+++ b/app/settings_test.go
@@ -76,16 +76,68 @@ func TestOverrideTheme_IgnoresSettingsChange(t *testing.T) {
}
set.setupTheme()
assert.Equal(t, theme.LightTheme(), set.Theme())
+
+ err = set.loadFromFile(filepath.Join("testdata", "dark-theme.json"))
+ if err != nil {
+ t.Error(err)
+ }
+ set.setupTheme()
+ assert.Equal(t, theme.LightTheme(), set.Theme())
err = os.Setenv("FYNE_THEME", "")
if err != nil {
t.Error(err)
}
+}
+
+func TestCustomTheme(t *testing.T) {
+ type customTheme struct {
+ fyne.Theme
+ }
+ set := &settings{}
+ ctheme := &customTheme{theme.LightTheme()}
+ set.SetTheme(ctheme)
+
+ set.setupTheme()
+ assert.True(t, set.Theme() == ctheme)
+ assert.Equal(t, defaultVariant(), set.ThemeVariant())
+
+ err := set.loadFromFile(filepath.Join("testdata", "light-theme.json"))
+ if err != nil {
+ t.Error(err)
+ }
+ set.setupTheme()
+ assert.True(t, set.Theme() == ctheme)
+ assert.Equal(t, theme.VariantLight, set.ThemeVariant())
err = set.loadFromFile(filepath.Join("testdata", "dark-theme.json"))
if err != nil {
t.Error(err)
}
+ set.setupTheme()
+ assert.True(t, set.Theme() == ctheme)
+ assert.Equal(t, theme.VariantDark, set.ThemeVariant())
+ err = os.Setenv("FYNE_THEME", "light")
+ if err != nil {
+ t.Error(err)
+ }
set.setupTheme()
- assert.Equal(t, theme.LightTheme(), set.Theme())
+ assert.True(t, set.Theme() == ctheme)
+ assert.Equal(t, theme.VariantLight, set.ThemeVariant())
+
+ err = os.Setenv("FYNE_THEME", "dark")
+ if err != nil {
+ t.Error(err)
+ }
+ set.setupTheme()
+ assert.True(t, set.Theme() == ctheme)
+ assert.Equal(t, theme.VariantDark, set.ThemeVariant())
+
+ err = os.Setenv("FYNE_THEME", "")
+ if err != nil {
+ t.Error(err)
+ }
+ set.setupTheme()
+ assert.True(t, set.Theme() == ctheme)
+ assert.Equal(t, theme.VariantDark, set.ThemeVariant())
}
diff --git a/canvas/base.go b/canvas/base.go
index da2ff35419..d7b5d3f158 100644
--- a/canvas/base.go
+++ b/canvas/base.go
@@ -14,8 +14,8 @@ import (
)
type baseObject struct {
- size fyne.Size // The current size of the Rectangle
- position fyne.Position // The current position of the Rectangle
+ size fyne.Size // The current size of the canvas object
+ position fyne.Position // The current position of the object
Hidden bool // Is this object currently hidden
min fyne.Size // The minimum size this object can be
@@ -23,7 +23,7 @@ type baseObject struct {
propertyLock sync.RWMutex
}
-// CurrentSize returns the current size of this rectangle object
+// CurrentSize returns the current size of this canvas object.
func (r *baseObject) Size() fyne.Size {
r.propertyLock.RLock()
defer r.propertyLock.RUnlock()
@@ -31,7 +31,7 @@ func (r *baseObject) Size() fyne.Size {
return r.size
}
-// Resize sets a new size for the rectangle object
+// Resize sets a new size for the canvas object.
func (r *baseObject) Resize(size fyne.Size) {
r.propertyLock.Lock()
defer r.propertyLock.Unlock()
@@ -39,7 +39,7 @@ func (r *baseObject) Resize(size fyne.Size) {
r.size = size
}
-// CurrentPosition gets the current position of this rectangle object, relative to its parent / canvas
+// CurrentPosition gets the current position of this canvas object, relative to its parent.
func (r *baseObject) Position() fyne.Position {
r.propertyLock.RLock()
defer r.propertyLock.RUnlock()
@@ -47,7 +47,7 @@ func (r *baseObject) Position() fyne.Position {
return r.position
}
-// Move the rectangle object to a new position, relative to its parent / canvas
+// Move the object to a new position, relative to its parent.
func (r *baseObject) Move(pos fyne.Position) {
r.propertyLock.Lock()
defer r.propertyLock.Unlock()
@@ -55,7 +55,7 @@ func (r *baseObject) Move(pos fyne.Position) {
r.position = pos
}
-// MinSize returns the specified minimum size, if set, or {1, 1} otherwise
+// MinSize returns the specified minimum size, if set, or {1, 1} otherwise.
func (r *baseObject) MinSize() fyne.Size {
r.propertyLock.RLock()
defer r.propertyLock.RUnlock()
@@ -67,7 +67,7 @@ func (r *baseObject) MinSize() fyne.Size {
return r.min
}
-// SetMinSize specifies the smallest size this object should be
+// SetMinSize specifies the smallest size this object should be.
func (r *baseObject) SetMinSize(size fyne.Size) {
r.propertyLock.Lock()
defer r.propertyLock.Unlock()
@@ -75,7 +75,7 @@ func (r *baseObject) SetMinSize(size fyne.Size) {
r.min = size
}
-// IsVisible returns true if this object is visible, false otherwise
+// IsVisible returns true if this object is visible, false otherwise.
func (r *baseObject) Visible() bool {
r.propertyLock.RLock()
defer r.propertyLock.RUnlock()
@@ -83,7 +83,7 @@ func (r *baseObject) Visible() bool {
return !r.Hidden
}
-// Show will set this object to be visible
+// Show will set this object to be visible.
func (r *baseObject) Show() {
r.propertyLock.Lock()
defer r.propertyLock.Unlock()
@@ -91,7 +91,7 @@ func (r *baseObject) Show() {
r.Hidden = false
}
-// Hide will set this object to not be visible
+// Hide will set this object to not be visible.
func (r *baseObject) Hide() {
r.propertyLock.Lock()
defer r.propertyLock.Unlock()
diff --git a/canvas/image.go b/canvas/image.go
index 01c668332e..36334ba372 100644
--- a/canvas/image.go
+++ b/canvas/image.go
@@ -68,15 +68,12 @@ func (i *Image) Alpha() float64 {
return 1.0 - i.Translucency
}
-// Resize on an image will usually scale the content or reposition it according to FillMode..
-// If the content of the File or Resource is an SVG file, however, this will cause a Refresh.
+// Resize on an image will scale the content or reposition it according to FillMode.
+// It will normally cause a Refresh to ensure the pixels are recalculated.
func (i *Image) Resize(s fyne.Size) {
i.baseObject.Resize(s)
- if (i.File != "" && filepath.Ext(i.File) == ".svg") ||
- (i.Resource != nil && filepath.Ext(i.Resource.Name()) == ".svg") {
- Refresh(i)
- }
+ Refresh(i)
}
// Refresh causes this object to be redrawn in it's current state
diff --git a/cmd/fyne/commands/bundle.go b/cmd/fyne/commands/bundle.go
index 296a4e45c0..2019b1a580 100644
--- a/cmd/fyne/commands/bundle.go
+++ b/cmd/fyne/commands/bundle.go
@@ -160,7 +160,7 @@ func writeResource(file, name string, f io.Writer) {
return
}
- v := fmt.Sprintf("var %s = &fyne.StaticResource{\n\tStaticName: %q,\n\tStaticContent: []byte(%q),\n}\n", name, staticRes.StaticName, staticRes.StaticContent)
+ v := fmt.Sprintf("var %s = &fyne.StaticResource{\n\tStaticName: %q,\n\tStaticContent: []byte(\n\t\t%q),\n}\n", name, staticRes.StaticName, staticRes.StaticContent)
_, err = f.Write([]byte(v))
if err != nil {
fyne.LogError("Unable to write to bundled file", err)
diff --git a/cmd/fyne_settings/settings/appearance.go b/cmd/fyne_settings/settings/appearance.go
index 96552341bc..ec44d9d62f 100644
--- a/cmd/fyne_settings/settings/appearance.go
+++ b/cmd/fyne_settings/settings/appearance.go
@@ -75,6 +75,9 @@ func (s *Settings) LoadAppearanceScreen(w fyne.Window) fyne.CanvasObject {
box.Add(widget.NewCard("Appearance", "", appearance))
bottom := container.NewHBox(layout.NewSpacer(),
&widget.Button{Text: "Apply", Importance: widget.HighImportance, OnTapped: func() {
+ if s.fyneSettings.Scale == 0.0 {
+ s.chooseScale(1.0)
+ }
err := s.save()
if err != nil {
fyne.LogError("Failed on saving", err)
diff --git a/container/apptabs.go b/container/apptabs.go
index 9f2631e1e0..ccebc08dd4 100644
--- a/container/apptabs.go
+++ b/container/apptabs.go
@@ -56,7 +56,7 @@ func NewAppTabs(items ...*TabItem) *AppTabs {
// Current is first tab item
tabs.current = 0
}
- tabs.ExtendBaseWidget(tabs)
+ tabs.BaseWidget.ExtendBaseWidget(tabs)
if tabs.mismatchedContent() {
internal.LogHint("AppTabs items should all have the same type of content (text, icons or both)")
@@ -86,7 +86,7 @@ func (c *AppTabs) Append(item *TabItem) {
// CreateRenderer is a private method to Fyne which links this widget to its renderer
func (c *AppTabs) CreateRenderer() fyne.WidgetRenderer {
- c.ExtendBaseWidget(c)
+ c.BaseWidget.ExtendBaseWidget(c)
r := &appTabsRenderer{line: canvas.NewRectangle(theme.ShadowColor()),
underline: canvas.NewRectangle(theme.PrimaryColor()), container: c}
r.updateTabs()
@@ -106,9 +106,16 @@ func (c *AppTabs) CurrentTabIndex() int {
return c.current
}
+// ExtendBaseWidget is used by an extending widget to make use of BaseWidget functionality.
+//
+// Deprecated: Support for extending containers is being removed
+func (c *AppTabs) ExtendBaseWidget(wid fyne.Widget) {
+ c.BaseWidget.ExtendBaseWidget(wid)
+}
+
// MinSize returns the size that this widget should not shrink below
func (c *AppTabs) MinSize() fyne.Size {
- c.ExtendBaseWidget(c)
+ c.BaseWidget.ExtendBaseWidget(c)
return c.BaseWidget.MinSize()
}
@@ -380,24 +387,28 @@ func (r *appTabsRenderer) moveSelection() {
}
r.underline.Show()
- if r.underline.Position().IsZero() || r.underline.Position() == underlinePos {
+ if r.underline.Position().IsZero() {
r.underline.Move(underlinePos)
r.underline.Resize(underlineSize)
- } else if r.animation == nil {
- r.animation = canvas.NewPositionAnimation(r.underline.Position(), underlinePos, canvas.DurationShort, func(p fyne.Position) {
- r.underline.Move(p)
- canvas.Refresh(r.underline)
- if p == underlinePos {
- r.animation = nil
- }
- })
- r.animation.Start()
+ return
+ }
- canvas.NewSizeAnimation(r.underline.Size(), underlineSize, canvas.DurationShort, func(s fyne.Size) {
- r.underline.Resize(s)
- canvas.Refresh(r.underline)
- }).Start()
+ if r.animation != nil {
+ r.animation.Stop()
}
+ r.animation = canvas.NewPositionAnimation(r.underline.Position(), underlinePos, canvas.DurationShort, func(p fyne.Position) {
+ r.underline.Move(p)
+ canvas.Refresh(r.underline)
+ if p == underlinePos {
+ r.animation = nil
+ }
+ })
+ r.animation.Start()
+
+ canvas.NewSizeAnimation(r.underline.Size(), underlineSize, canvas.DurationShort, func(s fyne.Size) {
+ r.underline.Resize(s)
+ canvas.Refresh(r.underline)
+ }).Start()
}
func (r *appTabsRenderer) tabsInSync() bool {
diff --git a/container/apptabs_internal_test.go b/container/apptabs_internal_test.go
index 57199b8240..87b60782b1 100644
--- a/container/apptabs_internal_test.go
+++ b/container/apptabs_internal_test.go
@@ -27,3 +27,21 @@ func Test_tabButtonRenderer_SetText(t *testing.T) {
renderer = cache.Renderer(button).(*tabButtonRenderer)
assert.Equal(t, "Replace", renderer.label.Text)
}
+
+func Test_tabButtonRenderer_DeleteAdd(t *testing.T) {
+ item1 := &TabItem{Text: "Test", Content: widget.NewLabel("Content")}
+ item2 := &TabItem{Text: "Delete", Content: widget.NewLabel("Delete")}
+ tabs := NewAppTabs(item1, item2)
+ tabRenderer := cache.Renderer(tabs).(*appTabsRenderer)
+ underline := tabRenderer.underline
+
+ pos := underline.Position()
+ tabs.SelectTab(item2)
+ assert.NotEqual(t, pos, underline.Position())
+ pos = underline.Position()
+
+ tabs.Remove(item2)
+ tabs.Append(item2)
+ tabs.SelectTab(item2)
+ assert.Equal(t, pos, underline.Position())
+}
diff --git a/container/appTabs_test.go b/container/apptabs_test.go
similarity index 100%
rename from container/appTabs_test.go
rename to container/apptabs_test.go
diff --git a/container/split.go b/container/split.go
index 10fdbdc881..caef2e8c1b 100644
--- a/container/split.go
+++ b/container/split.go
@@ -45,13 +45,13 @@ func newSplitContainer(horizontal bool, leading, trailing fyne.CanvasObject) *Sp
Leading: leading,
Trailing: trailing,
}
- s.ExtendBaseWidget(s)
+ s.BaseWidget.ExtendBaseWidget(s)
return s
}
// CreateRenderer is a private method to Fyne which links this widget to its renderer
func (s *Split) CreateRenderer() fyne.WidgetRenderer {
- s.ExtendBaseWidget(s)
+ s.BaseWidget.ExtendBaseWidget(s)
d := newDivider(s)
return &splitContainerRenderer{
split: s,
@@ -60,6 +60,13 @@ func (s *Split) CreateRenderer() fyne.WidgetRenderer {
}
}
+// ExtendBaseWidget is used by an extending widget to make use of BaseWidget functionality.
+//
+// Deprecated: Support for extending containers is being removed
+func (s *Split) ExtendBaseWidget(wid fyne.Widget) {
+ s.BaseWidget.ExtendBaseWidget(wid)
+}
+
// SetOffset sets the offset (0.0 to 1.0) of the Split divider.
// 0.0 - Leading is min size, Trailing uses all remaining space.
// 0.5 - Leading & Trailing equally share the available space.
diff --git a/container/testdata/apptabs/desktop/change_content_change_hidden.xml b/container/testdata/apptabs/desktop/change_content_change_hidden.xml
index 40e6092b23..26687a1ddb 100644
--- a/container/testdata/apptabs/desktop/change_content_change_hidden.xml
+++ b/container/testdata/apptabs/desktop/change_content_change_hidden.xml
@@ -2,7 +2,7 @@
- Text3
+ Text3
diff --git a/container/testdata/apptabs/desktop/change_content_change_visible.xml b/container/testdata/apptabs/desktop/change_content_change_visible.xml
index 40e6092b23..26687a1ddb 100644
--- a/container/testdata/apptabs/desktop/change_content_change_visible.xml
+++ b/container/testdata/apptabs/desktop/change_content_change_visible.xml
@@ -2,7 +2,7 @@
- Text3
+ Text3
diff --git a/container/testdata/apptabs/desktop/change_content_initial.xml b/container/testdata/apptabs/desktop/change_content_initial.xml
index 00cdc02f2a..167ce72824 100644
--- a/container/testdata/apptabs/desktop/change_content_initial.xml
+++ b/container/testdata/apptabs/desktop/change_content_initial.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/change_icon_change_selected.xml b/container/testdata/apptabs/desktop/change_icon_change_selected.xml
index a8f09cdc20..3b0153e95d 100644
--- a/container/testdata/apptabs/desktop/change_icon_change_selected.xml
+++ b/container/testdata/apptabs/desktop/change_icon_change_selected.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/change_icon_change_unselected.xml b/container/testdata/apptabs/desktop/change_icon_change_unselected.xml
index 83dfbe449b..043c1b0317 100644
--- a/container/testdata/apptabs/desktop/change_icon_change_unselected.xml
+++ b/container/testdata/apptabs/desktop/change_icon_change_unselected.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/change_icon_initial.xml b/container/testdata/apptabs/desktop/change_icon_initial.xml
index ff7f3e8635..f70ef6fbe5 100644
--- a/container/testdata/apptabs/desktop/change_icon_initial.xml
+++ b/container/testdata/apptabs/desktop/change_icon_initial.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/change_label_change_selected.xml b/container/testdata/apptabs/desktop/change_label_change_selected.xml
index d9e14ef920..5412067384 100644
--- a/container/testdata/apptabs/desktop/change_label_change_selected.xml
+++ b/container/testdata/apptabs/desktop/change_label_change_selected.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/change_label_change_unselected.xml b/container/testdata/apptabs/desktop/change_label_change_unselected.xml
index c657035a70..940f94ff04 100644
--- a/container/testdata/apptabs/desktop/change_label_change_unselected.xml
+++ b/container/testdata/apptabs/desktop/change_label_change_unselected.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/change_label_initial.xml b/container/testdata/apptabs/desktop/change_label_initial.xml
index 00cdc02f2a..167ce72824 100644
--- a/container/testdata/apptabs/desktop/change_label_initial.xml
+++ b/container/testdata/apptabs/desktop/change_label_initial.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/dynamic_appended.xml b/container/testdata/apptabs/desktop/dynamic_appended.xml
index 4fbb658872..14c622cb00 100644
--- a/container/testdata/apptabs/desktop/dynamic_appended.xml
+++ b/container/testdata/apptabs/desktop/dynamic_appended.xml
@@ -2,7 +2,7 @@
- Text 1
+ Text 1
diff --git a/container/testdata/apptabs/desktop/dynamic_appended_and_removed.xml b/container/testdata/apptabs/desktop/dynamic_appended_and_removed.xml
index 40082ad5fa..edc6ca7809 100644
--- a/container/testdata/apptabs/desktop/dynamic_appended_and_removed.xml
+++ b/container/testdata/apptabs/desktop/dynamic_appended_and_removed.xml
@@ -2,7 +2,7 @@
- Text 2
+ Text 2
diff --git a/container/testdata/apptabs/desktop/dynamic_appended_another_three.xml b/container/testdata/apptabs/desktop/dynamic_appended_another_three.xml
index c87e9f4c00..48634e09da 100644
--- a/container/testdata/apptabs/desktop/dynamic_appended_another_three.xml
+++ b/container/testdata/apptabs/desktop/dynamic_appended_another_three.xml
@@ -2,7 +2,7 @@
- Text 2
+ Text 2
diff --git a/container/testdata/apptabs/desktop/dynamic_initial.xml b/container/testdata/apptabs/desktop/dynamic_initial.xml
index d00ca13516..b040be263a 100644
--- a/container/testdata/apptabs/desktop/dynamic_initial.xml
+++ b/container/testdata/apptabs/desktop/dynamic_initial.xml
@@ -2,7 +2,7 @@
- Text 1
+ Text 1
diff --git a/container/testdata/apptabs/desktop/dynamic_replaced_completely.xml b/container/testdata/apptabs/desktop/dynamic_replaced_completely.xml
index f6dba008ea..002926c2df 100644
--- a/container/testdata/apptabs/desktop/dynamic_replaced_completely.xml
+++ b/container/testdata/apptabs/desktop/dynamic_replaced_completely.xml
@@ -2,7 +2,7 @@
- Text 6
+ Text 6
diff --git a/container/testdata/apptabs/desktop/hover_first.xml b/container/testdata/apptabs/desktop/hover_first.xml
index 90533fd6c0..c85dd829e0 100644
--- a/container/testdata/apptabs/desktop/hover_first.xml
+++ b/container/testdata/apptabs/desktop/hover_first.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/hover_none.xml b/container/testdata/apptabs/desktop/hover_none.xml
index 00cdc02f2a..167ce72824 100644
--- a/container/testdata/apptabs/desktop/hover_none.xml
+++ b/container/testdata/apptabs/desktop/hover_none.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/hover_second.xml b/container/testdata/apptabs/desktop/hover_second.xml
index eb4d7a705f..9746c3e9a6 100644
--- a/container/testdata/apptabs/desktop/hover_second.xml
+++ b/container/testdata/apptabs/desktop/hover_second.xml
@@ -2,7 +2,7 @@
- Text1
+ Text1
diff --git a/container/testdata/apptabs/desktop/single_custom_theme.png b/container/testdata/apptabs/desktop/single_custom_theme.png
index 69914fd22f..1866dbe5cc 100644
Binary files a/container/testdata/apptabs/desktop/single_custom_theme.png and b/container/testdata/apptabs/desktop/single_custom_theme.png differ
diff --git a/container/testdata/apptabs/desktop/single_initial.png b/container/testdata/apptabs/desktop/single_initial.png
index ecffb3809a..db9f2568cd 100644
Binary files a/container/testdata/apptabs/desktop/single_initial.png and b/container/testdata/apptabs/desktop/single_initial.png differ
diff --git a/container/testdata/apptabs/desktop/tab_location_bottom.xml b/container/testdata/apptabs/desktop/tab_location_bottom.xml
index 30e263a3f2..364d59ebb1 100644
--- a/container/testdata/apptabs/desktop/tab_location_bottom.xml
+++ b/container/testdata/apptabs/desktop/tab_location_bottom.xml
@@ -2,7 +2,7 @@
- Text 1
+ Text 1
diff --git a/container/testdata/apptabs/desktop/tab_location_leading.xml b/container/testdata/apptabs/desktop/tab_location_leading.xml
index fd6f863487..08374cebaf 100644
--- a/container/testdata/apptabs/desktop/tab_location_leading.xml
+++ b/container/testdata/apptabs/desktop/tab_location_leading.xml
@@ -1,8 +1,8 @@
-
@@ -38,8 +38,8 @@
-
- d
+
+ d
@@ -48,8 +48,8 @@
-
- e
+
+ e
@@ -58,8 +58,8 @@
-
- f
+
+ f
@@ -68,8 +68,8 @@
-
- g
+
+ g
@@ -78,8 +78,8 @@
-
- h
+
+ h
@@ -88,8 +88,8 @@
-
- i
+
+ i
@@ -98,8 +98,8 @@
-
- j
+
+ j
diff --git a/widget/testdata/list/offset_changed.xml b/widget/testdata/list/offset_changed.xml
index 2671f26b12..43e6e12a7a 100644
--- a/widget/testdata/list/offset_changed.xml
+++ b/widget/testdata/list/offset_changed.xml
@@ -3,23 +3,13 @@
-
-
-
-
-
-
- Test Item 5
-
-
-
-
- Test Item 6
+
+ Test Item 6
@@ -28,8 +18,8 @@
-
- Test Item 7
+
+ Test Item 7
@@ -38,8 +28,8 @@
-
- Test Item 8
+
+ Test Item 8
@@ -48,8 +38,8 @@
-
- Test Item 9
+
+ Test Item 9
@@ -58,8 +48,8 @@
-
- Test Item 10
+
+ Test Item 10
@@ -68,8 +58,8 @@
-
- Test Item 11
+
+ Test Item 11
@@ -78,8 +68,8 @@
-
- Test Item 12
+
+ Test Item 12
@@ -88,8 +78,8 @@
-
- Test Item 13
+
+ Test Item 13
@@ -98,17 +88,24 @@
-
- Test Item 14
+
+ Test Item 14
+
+
+
+
+
+
+
+
+
+ Test Item 15
-
-
-
@@ -133,6 +130,9 @@
+
+
+
diff --git a/widget/testdata/list/resized.xml b/widget/testdata/list/resized.xml
index 29c3b9cf7f..0f8b84dfe8 100644
--- a/widget/testdata/list/resized.xml
+++ b/widget/testdata/list/resized.xml
@@ -8,8 +8,8 @@
-
- Test Item 0
+
+ Test Item 0
@@ -18,8 +18,8 @@
-
- Test Item 1
+
+ Test Item 1
@@ -28,8 +28,8 @@
-
- Test Item 2
+
+ Test Item 2
@@ -38,8 +38,8 @@
-
- Test Item 3
+
+ Test Item 3
@@ -48,8 +48,8 @@
-
- Test Item 4
+
+ Test Item 4
@@ -58,8 +58,8 @@
-
- Test Item 5
+
+ Test Item 5
@@ -68,8 +68,8 @@
-
- Test Item 6
+
+ Test Item 6
@@ -78,8 +78,8 @@
-
- Test Item 7
+
+ Test Item 7
@@ -88,8 +88,8 @@
-
- Test Item 8
+
+ Test Item 8
@@ -98,8 +98,8 @@
-
- Test Item 9
+
+ Test Item 9
@@ -108,8 +108,8 @@
-
- Test Item 10
+
+ Test Item 10
@@ -118,8 +118,8 @@
-
- Test Item 11
+
+ Test Item 11
@@ -128,8 +128,8 @@
-
- Test Item 12
+
+ Test Item 12
@@ -138,8 +138,8 @@
-
- Test Item 13
+
+ Test Item 13
diff --git a/widget/testdata/list/small.xml b/widget/testdata/list/small.xml
index 107e8de667..e5261b537f 100644
--- a/widget/testdata/list/small.xml
+++ b/widget/testdata/list/small.xml
@@ -8,8 +8,8 @@
-
- Test Item 0
+
+ Test Item 0
@@ -18,8 +18,8 @@
-
- Test Item 1
+
+ Test Item 1
diff --git a/widget/testdata/menu/mobile/drag_bottom.xml b/widget/testdata/menu/mobile/drag_bottom.xml
index a7362ccdb6..289b3256a0 100644
--- a/widget/testdata/menu/mobile/drag_bottom.xml
+++ b/widget/testdata/menu/mobile/drag_bottom.xml
@@ -17,6 +17,7 @@
+
A
@@ -39,7 +40,8 @@
-
+
+
diff --git a/widget/testdata/menu/mobile/drag_middle.xml b/widget/testdata/menu/mobile/drag_middle.xml
index 049e71592d..8d36554f3a 100644
--- a/widget/testdata/menu/mobile/drag_middle.xml
+++ b/widget/testdata/menu/mobile/drag_middle.xml
@@ -17,6 +17,7 @@
+
A
@@ -39,7 +40,8 @@
-
+
+
diff --git a/widget/testdata/menu/mobile/drag_top.xml b/widget/testdata/menu/mobile/drag_top.xml
index c41d20236a..88b592b9de 100644
--- a/widget/testdata/menu/mobile/drag_top.xml
+++ b/widget/testdata/menu/mobile/drag_top.xml
@@ -17,6 +17,7 @@
+
A
@@ -39,7 +40,8 @@
-
+
+
diff --git a/widget/testdata/menu/mobile/layout_background_reset.xml b/widget/testdata/menu/mobile/layout_background_reset.xml
index 847d4d9353..1ce9d74b5f 100644
--- a/widget/testdata/menu/mobile/layout_background_reset.xml
+++ b/widget/testdata/menu/mobile/layout_background_reset.xml
@@ -17,6 +17,7 @@
+
A
diff --git a/widget/testdata/menu/mobile/layout_no_space_on_both_sides.xml b/widget/testdata/menu/mobile/layout_no_space_on_both_sides.xml
index 1f63833302..e5ac53f3d1 100644
--- a/widget/testdata/menu/mobile/layout_no_space_on_both_sides.xml
+++ b/widget/testdata/menu/mobile/layout_no_space_on_both_sides.xml
@@ -17,6 +17,7 @@
+
A
@@ -47,6 +48,7 @@
+
subitem A
@@ -74,6 +76,7 @@
+
subsubitem A (long)
diff --git a/widget/testdata/menu/mobile/layout_no_space_on_right.xml b/widget/testdata/menu/mobile/layout_no_space_on_right.xml
index cd24de2b52..da42e5ad26 100644
--- a/widget/testdata/menu/mobile/layout_no_space_on_right.xml
+++ b/widget/testdata/menu/mobile/layout_no_space_on_right.xml
@@ -17,6 +17,7 @@
+
A
@@ -47,6 +48,7 @@
+
subitem A
@@ -74,6 +76,7 @@
+
subsubitem A (long)
diff --git a/widget/testdata/menu/mobile/layout_normal.xml b/widget/testdata/menu/mobile/layout_normal.xml
index 847d4d9353..1ce9d74b5f 100644
--- a/widget/testdata/menu/mobile/layout_normal.xml
+++ b/widget/testdata/menu/mobile/layout_normal.xml
@@ -17,6 +17,7 @@
+
A
diff --git a/widget/testdata/menu/mobile/layout_normal_with_submenus.xml b/widget/testdata/menu/mobile/layout_normal_with_submenus.xml
index 49acd9f3c2..e3907f7da1 100644
--- a/widget/testdata/menu/mobile/layout_normal_with_submenus.xml
+++ b/widget/testdata/menu/mobile/layout_normal_with_submenus.xml
@@ -17,6 +17,7 @@
+
A
@@ -47,6 +48,7 @@
+
subitem A
@@ -74,6 +76,7 @@
+
subsubitem A (long)
diff --git a/widget/testdata/menu/mobile/layout_theme_changed.xml b/widget/testdata/menu/mobile/layout_theme_changed.xml
index 847d4d9353..1ce9d74b5f 100644
--- a/widget/testdata/menu/mobile/layout_theme_changed.xml
+++ b/widget/testdata/menu/mobile/layout_theme_changed.xml
@@ -17,6 +17,7 @@
+
A
diff --git a/widget/testdata/menu/mobile/layout_window_too_short.xml b/widget/testdata/menu/mobile/layout_window_too_short.xml
index c3d102cafe..b660ad083b 100644
--- a/widget/testdata/menu/mobile/layout_window_too_short.xml
+++ b/widget/testdata/menu/mobile/layout_window_too_short.xml
@@ -17,6 +17,7 @@
+
A
@@ -34,7 +35,8 @@
-
+
+
diff --git a/widget/testdata/menu/mobile/layout_window_too_short_for_submenu.xml b/widget/testdata/menu/mobile/layout_window_too_short_for_submenu.xml
index 6265fedaae..d9525e1fea 100644
--- a/widget/testdata/menu/mobile/layout_window_too_short_for_submenu.xml
+++ b/widget/testdata/menu/mobile/layout_window_too_short_for_submenu.xml
@@ -17,6 +17,7 @@
+
A
@@ -47,6 +48,7 @@
+
subitem A
@@ -74,6 +76,7 @@
+
subsubitem A (long)
diff --git a/widget/testdata/password_entry/concealed.xml b/widget/testdata/password_entry/concealed.xml
index a6419329fe..0473cd9dc9 100644
--- a/widget/testdata/password_entry/concealed.xml
+++ b/widget/testdata/password_entry/concealed.xml
@@ -6,7 +6,7 @@
- •••••••
+ •••••••
diff --git a/widget/testdata/password_entry/initial.xml b/widget/testdata/password_entry/initial.xml
index 72bf2cfadd..f8079fb4c2 100644
--- a/widget/testdata/password_entry/initial.xml
+++ b/widget/testdata/password_entry/initial.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/password_entry/obfuscation_typed.xml b/widget/testdata/password_entry/obfuscation_typed.xml
index a6419329fe..0473cd9dc9 100644
--- a/widget/testdata/password_entry/obfuscation_typed.xml
+++ b/widget/testdata/password_entry/obfuscation_typed.xml
@@ -6,7 +6,7 @@
- •••••••
+ •••••••
diff --git a/widget/testdata/password_entry/placeholder_initial.xml b/widget/testdata/password_entry/placeholder_initial.xml
index 7b619ab68b..4ba7987e9f 100644
--- a/widget/testdata/password_entry/placeholder_initial.xml
+++ b/widget/testdata/password_entry/placeholder_initial.xml
@@ -6,10 +6,10 @@
- Password
+ Password
-
+
diff --git a/widget/testdata/password_entry/placeholder_typed.xml b/widget/testdata/password_entry/placeholder_typed.xml
index a6419329fe..0473cd9dc9 100644
--- a/widget/testdata/password_entry/placeholder_typed.xml
+++ b/widget/testdata/password_entry/placeholder_typed.xml
@@ -6,7 +6,7 @@
- •••••••
+ •••••••
diff --git a/widget/testdata/password_entry/revealed.xml b/widget/testdata/password_entry/revealed.xml
index e84b0aa3d4..fdd761f9d3 100644
--- a/widget/testdata/password_entry/revealed.xml
+++ b/widget/testdata/password_entry/revealed.xml
@@ -6,7 +6,7 @@
- Hié™שרה
+ Hié™שרה
diff --git a/widget/testdata/popup/modal-onshow-theme-changed.png b/widget/testdata/popup/modal-onshow-theme-changed.png
new file mode 100644
index 0000000000..7eb9f2eb4d
Binary files /dev/null and b/widget/testdata/popup/modal-onshow-theme-changed.png differ
diff --git a/widget/testdata/popup/modal-onshow-theme-default.png b/widget/testdata/popup/modal-onshow-theme-default.png
new file mode 100644
index 0000000000..6d5b4ab05b
Binary files /dev/null and b/widget/testdata/popup/modal-onshow-theme-default.png differ
diff --git a/widget/testdata/popup/modal.xml b/widget/testdata/popup/modal.xml
index 0964ada44f..4e1dc93b03 100644
--- a/widget/testdata/popup/modal.xml
+++ b/widget/testdata/popup/modal.xml
@@ -4,20 +4,20 @@
-
+
-
-
-
-
-
+
+
+
+
+
-
-
- Hi
+
+
+ Hi
diff --git a/widget/testdata/popup/normal-onshow-theme-changed.png b/widget/testdata/popup/normal-onshow-theme-changed.png
new file mode 100644
index 0000000000..e91095e387
Binary files /dev/null and b/widget/testdata/popup/normal-onshow-theme-changed.png differ
diff --git a/widget/testdata/popup/normal-onshow-theme-default.png b/widget/testdata/popup/normal-onshow-theme-default.png
new file mode 100644
index 0000000000..6eb39805cf
Binary files /dev/null and b/widget/testdata/popup/normal-onshow-theme-default.png differ
diff --git a/widget/testdata/popup/normal.xml b/widget/testdata/popup/normal.xml
index aa8ce53ccc..84c5ee792a 100644
--- a/widget/testdata/popup/normal.xml
+++ b/widget/testdata/popup/normal.xml
@@ -4,19 +4,19 @@
-
+
-
-
-
-
-
+
+
+
+
+
-
-
- Hi
+
+
+ Hi
diff --git a/widget/testdata/select_entry/disableable_disabled.xml b/widget/testdata/select_entry/disableable_disabled.xml
index 4c253ca86b..cefd82dbb2 100644
--- a/widget/testdata/select_entry/disableable_disabled.xml
+++ b/widget/testdata/select_entry/disableable_disabled.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/disableable_enabled.xml b/widget/testdata/select_entry/disableable_enabled.xml
index 591c716a5b..debb22e079 100644
--- a/widget/testdata/select_entry/disableable_enabled.xml
+++ b/widget/testdata/select_entry/disableable_enabled.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/disableable_enabled_opened.xml b/widget/testdata/select_entry/disableable_enabled_opened.xml
index 7578659afd..b28966444b 100644
--- a/widget/testdata/select_entry/disableable_enabled_opened.xml
+++ b/widget/testdata/select_entry/disableable_enabled_opened.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/disableable_enabled_tapped.xml b/widget/testdata/select_entry/disableable_enabled_tapped.xml
index 669e4436be..f267fee874 100644
--- a/widget/testdata/select_entry/disableable_enabled_tapped.xml
+++ b/widget/testdata/select_entry/disableable_enabled_tapped.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/dropdown_B_opened.xml b/widget/testdata/select_entry/dropdown_B_opened.xml
index fc71f31dbc..e63d15a096 100644
--- a/widget/testdata/select_entry/dropdown_B_opened.xml
+++ b/widget/testdata/select_entry/dropdown_B_opened.xml
@@ -6,7 +6,7 @@
- B
+ B
diff --git a/widget/testdata/select_entry/dropdown_empty_opened.xml b/widget/testdata/select_entry/dropdown_empty_opened.xml
index 7578659afd..b28966444b 100644
--- a/widget/testdata/select_entry/dropdown_empty_opened.xml
+++ b/widget/testdata/select_entry/dropdown_empty_opened.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/dropdown_empty_opened_shrunk.xml b/widget/testdata/select_entry/dropdown_empty_opened_shrunk.xml
index 761b846ef2..f5658a30b6 100644
--- a/widget/testdata/select_entry/dropdown_empty_opened_shrunk.xml
+++ b/widget/testdata/select_entry/dropdown_empty_opened_shrunk.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/dropdown_empty_setopts.xml b/widget/testdata/select_entry/dropdown_empty_setopts.xml
index 7fe743aac4..b5caf53fc9 100644
--- a/widget/testdata/select_entry/dropdown_empty_setopts.xml
+++ b/widget/testdata/select_entry/dropdown_empty_setopts.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/dropdown_initial.xml b/widget/testdata/select_entry/dropdown_initial.xml
index 591c716a5b..debb22e079 100644
--- a/widget/testdata/select_entry/dropdown_initial.xml
+++ b/widget/testdata/select_entry/dropdown_initial.xml
@@ -6,10 +6,10 @@
-
+
-
+
diff --git a/widget/testdata/select_entry/dropdown_tapped_B.xml b/widget/testdata/select_entry/dropdown_tapped_B.xml
index 210dd3fa7d..1212265e2e 100644
--- a/widget/testdata/select_entry/dropdown_tapped_B.xml
+++ b/widget/testdata/select_entry/dropdown_tapped_B.xml
@@ -6,7 +6,7 @@
- B
+ B
diff --git a/widget/testdata/select_entry/dropdown_tapped_C.xml b/widget/testdata/select_entry/dropdown_tapped_C.xml
index ed9e14a87a..64d71e3732 100644
--- a/widget/testdata/select_entry/dropdown_tapped_C.xml
+++ b/widget/testdata/select_entry/dropdown_tapped_C.xml
@@ -6,7 +6,7 @@
- C
+ C
diff --git a/widget/testdata/table/col_size.png b/widget/testdata/table/col_size.png
index ec9c2fb5db..d69bd15d26 100644
Binary files a/widget/testdata/table/col_size.png and b/widget/testdata/table/col_size.png differ
diff --git a/widget/testdata/table/desktop/hovered.xml b/widget/testdata/table/desktop/hovered.xml
index adf2713f2a..8a09fce9c9 100644
--- a/widget/testdata/table/desktop/hovered.xml
+++ b/widget/testdata/table/desktop/hovered.xml
@@ -2,38 +2,38 @@
-
-
- Cell 0, 0
+
+
+ Cell 0, 0
-
- Cell 0, 1
+
+ Cell 0, 1
-
- Cell 1, 0
+
+ Cell 1, 0
-
- Cell 1, 1
+
+ Cell 1, 1
-
- Cell 2, 0
+
+ Cell 2, 0
-
- Cell 2, 1
+
+ Cell 2, 1
-
-
+
+
-
+
-
+
diff --git a/widget/testdata/table/desktop/hovered_out.xml b/widget/testdata/table/desktop/hovered_out.xml
index 0347602679..357c4bddb4 100644
--- a/widget/testdata/table/desktop/hovered_out.xml
+++ b/widget/testdata/table/desktop/hovered_out.xml
@@ -2,30 +2,30 @@
-
-
- Cell 0, 0
+
+
+ Cell 0, 0
-
- Cell 0, 1
+
+ Cell 0, 1
-
- Cell 1, 0
+
+ Cell 1, 0
-
- Cell 1, 1
+
+ Cell 1, 1
-
-
+
+
-
+
diff --git a/widget/testdata/table/selected.xml b/widget/testdata/table/selected.xml
index f6e47cab17..4e6f96de23 100644
--- a/widget/testdata/table/selected.xml
+++ b/widget/testdata/table/selected.xml
@@ -2,36 +2,36 @@
-
-
- Cell 0, 0
+
+
+ Cell 0, 0
-
- Cell 0, 1
+
+ Cell 0, 1
-
- Cell 1, 0
+
+ Cell 1, 0
-
- Cell 1, 1
+
+ Cell 1, 1
-
- Cell 2, 0
+
+ Cell 2, 0
-
- Cell 2, 1
+
+ Cell 2, 1
-
- Cell 3, 0
+
+ Cell 3, 0
-
- Cell 3, 1
+
+ Cell 3, 1
-
- Cell 4, 0
+
+ Cell 4, 0
-
- Cell 4, 1
+
+ Cell 4, 1
@@ -43,17 +43,17 @@
-
-
+
+
-
+
-
+
diff --git a/widget/testdata/table/selected_scrolled.xml b/widget/testdata/table/selected_scrolled.xml
index 2daace7a37..46e362c394 100644
--- a/widget/testdata/table/selected_scrolled.xml
+++ b/widget/testdata/table/selected_scrolled.xml
@@ -2,30 +2,30 @@
-
-
- Cell 1, 2
+
+
+ Cell 1, 2
-
- Cell 1, 3
+
+ Cell 1, 3
-
- Cell 2, 2
+
+ Cell 2, 2
-
- Cell 2, 3
+
+ Cell 2, 3
-
- Cell 3, 2
+
+ Cell 3, 2
-
- Cell 3, 3
+
+ Cell 3, 3
-
- Cell 4, 2
+
+ Cell 4, 2
-
- Cell 4, 3
+
+ Cell 4, 3
@@ -37,8 +37,8 @@
-
-
+
+
@@ -48,9 +48,9 @@
-
+
-
+
diff --git a/widget/testdata/table/theme_changed.png b/widget/testdata/table/theme_changed.png
index 26a87a8fe1..1e7166fcb1 100644
Binary files a/widget/testdata/table/theme_changed.png and b/widget/testdata/table/theme_changed.png differ
diff --git a/widget/testdata/table/theme_initial.png b/widget/testdata/table/theme_initial.png
index 58b6d682ed..11c0cbecad 100644
Binary files a/widget/testdata/table/theme_initial.png and b/widget/testdata/table/theme_initial.png differ
diff --git a/widget/testdata/tree/layout_multiple.xml b/widget/testdata/tree/layout_multiple.xml
index 998ca2f7b8..b71f4797c4 100644
--- a/widget/testdata/tree/layout_multiple.xml
+++ b/widget/testdata/tree/layout_multiple.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -16,7 +16,7 @@
- B
+ B
@@ -27,7 +27,7 @@
- 44444444444444444444
+ 44444444444444444444
diff --git a/widget/testdata/tree/layout_multiple_branch.xml b/widget/testdata/tree/layout_multiple_branch.xml
index 121b57f251..fba6ebd14f 100644
--- a/widget/testdata/tree/layout_multiple_branch.xml
+++ b/widget/testdata/tree/layout_multiple_branch.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -16,7 +16,7 @@
- B
+ B
diff --git a/widget/testdata/tree/layout_multiple_branch_opened.xml b/widget/testdata/tree/layout_multiple_branch_opened.xml
index 68fd5ea9cf..b63e3c5420 100644
--- a/widget/testdata/tree/layout_multiple_branch_opened.xml
+++ b/widget/testdata/tree/layout_multiple_branch_opened.xml
@@ -2,65 +2,65 @@
-
-
-
- A
+
+
+
+ A
-
-
+
+
-
-
- 11111
+
+
+ 11111
-
-
+
+
-
-
- B
+
+
+ B
-
-
+
+
-
-
- 2222222222
+
+
+ 2222222222
-
-
+
+
-
-
- C
+
+
+ C
-
-
+
+
-
-
- 333333333333333
+
+
+ 333333333333333
-
-
+
+
diff --git a/widget/testdata/tree/layout_multiple_branch_opened_leaf_selected.xml b/widget/testdata/tree/layout_multiple_branch_opened_leaf_selected.xml
index 51b150883b..0b1989d7c8 100644
--- a/widget/testdata/tree/layout_multiple_branch_opened_leaf_selected.xml
+++ b/widget/testdata/tree/layout_multiple_branch_opened_leaf_selected.xml
@@ -2,66 +2,66 @@
-
-
-
- A
+
+
+
+ A
-
-
+
+
-
-
- 11111
+
+
+ 11111
-
-
+
+
-
-
- B
+
+
+ B
-
-
+
+
-
-
- 2222222222
+
+
+ 2222222222
-
-
+
+
-
-
- C
+
+
+ C
-
-
+
+
-
-
- 333333333333333
+
+
+ 333333333333333
-
-
+
+
diff --git a/widget/testdata/tree/layout_multiple_branch_opened_selected.xml b/widget/testdata/tree/layout_multiple_branch_opened_selected.xml
index 585d6c1abe..f356ebd5de 100644
--- a/widget/testdata/tree/layout_multiple_branch_opened_selected.xml
+++ b/widget/testdata/tree/layout_multiple_branch_opened_selected.xml
@@ -2,66 +2,66 @@
-
-
-
- A
+
+
+
+ A
-
-
+
+
-
-
- 11111
+
+
+ 11111
-
-
+
+
-
-
- B
+
+
+ B
-
-
+
+
-
-
- 2222222222
+
+
+ 2222222222
-
-
+
+
-
-
- C
+
+
+ C
-
-
+
+
-
-
- 333333333333333
+
+
+ 333333333333333
-
-
+
+
diff --git a/widget/testdata/tree/layout_multiple_branch_selected.xml b/widget/testdata/tree/layout_multiple_branch_selected.xml
index e54c5fb6ad..fc41d2776b 100644
--- a/widget/testdata/tree/layout_multiple_branch_selected.xml
+++ b/widget/testdata/tree/layout_multiple_branch_selected.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -16,7 +16,7 @@
- B
+ B
diff --git a/widget/testdata/tree/layout_multiple_leaf.xml b/widget/testdata/tree/layout_multiple_leaf.xml
index cdc7d2aadf..f0e7e1d8d1 100644
--- a/widget/testdata/tree/layout_multiple_leaf.xml
+++ b/widget/testdata/tree/layout_multiple_leaf.xml
@@ -5,7 +5,7 @@
- 11111
+ 11111
@@ -13,7 +13,7 @@
- 2222222222
+ 2222222222
@@ -21,7 +21,7 @@
- 333333333333333
+ 333333333333333
@@ -29,7 +29,7 @@
- 44444444444444444444
+ 44444444444444444444
diff --git a/widget/testdata/tree/layout_multiple_leaf_selected.xml b/widget/testdata/tree/layout_multiple_leaf_selected.xml
index 0368416e01..bf27e102c6 100644
--- a/widget/testdata/tree/layout_multiple_leaf_selected.xml
+++ b/widget/testdata/tree/layout_multiple_leaf_selected.xml
@@ -5,7 +5,7 @@
- 11111
+ 11111
@@ -13,7 +13,7 @@
- 2222222222
+ 2222222222
@@ -22,7 +22,7 @@
- 333333333333333
+ 333333333333333
@@ -30,7 +30,7 @@
- 44444444444444444444
+ 44444444444444444444
diff --git a/widget/testdata/tree/layout_multiple_selected.xml b/widget/testdata/tree/layout_multiple_selected.xml
index 29ee7d9a6e..4c1d48b445 100644
--- a/widget/testdata/tree/layout_multiple_selected.xml
+++ b/widget/testdata/tree/layout_multiple_selected.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -16,7 +16,7 @@
- B
+ B
@@ -27,7 +27,7 @@
- 44444444444444444444
+ 44444444444444444444
diff --git a/widget/testdata/tree/layout_single_branch.xml b/widget/testdata/tree/layout_single_branch.xml
index 6675755a03..d6284b8afd 100644
--- a/widget/testdata/tree/layout_single_branch.xml
+++ b/widget/testdata/tree/layout_single_branch.xml
@@ -5,7 +5,7 @@
- A
+ A
diff --git a/widget/testdata/tree/layout_single_branch_opened.xml b/widget/testdata/tree/layout_single_branch_opened.xml
index d3a05492a9..290ddbfd14 100644
--- a/widget/testdata/tree/layout_single_branch_opened.xml
+++ b/widget/testdata/tree/layout_single_branch_opened.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -16,7 +16,7 @@
- 11111
+ 11111
diff --git a/widget/testdata/tree/layout_single_branch_opened_leaf_selected.xml b/widget/testdata/tree/layout_single_branch_opened_leaf_selected.xml
index 4c2501ba20..2d481e1eb9 100644
--- a/widget/testdata/tree/layout_single_branch_opened_leaf_selected.xml
+++ b/widget/testdata/tree/layout_single_branch_opened_leaf_selected.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -16,7 +16,7 @@
- 11111
+ 11111
diff --git a/widget/testdata/tree/layout_single_branch_opened_selected.xml b/widget/testdata/tree/layout_single_branch_opened_selected.xml
index b6790e4e3e..ee60bf29db 100644
--- a/widget/testdata/tree/layout_single_branch_opened_selected.xml
+++ b/widget/testdata/tree/layout_single_branch_opened_selected.xml
@@ -5,7 +5,7 @@
- A
+ A
@@ -17,7 +17,7 @@
- 11111
+ 11111
diff --git a/widget/testdata/tree/layout_single_branch_selected.xml b/widget/testdata/tree/layout_single_branch_selected.xml
index c8a7b29972..97d7d20f1e 100644
--- a/widget/testdata/tree/layout_single_branch_selected.xml
+++ b/widget/testdata/tree/layout_single_branch_selected.xml
@@ -5,7 +5,7 @@
- A
+ A
diff --git a/widget/testdata/tree/layout_single_leaf.xml b/widget/testdata/tree/layout_single_leaf.xml
index bd9046f555..a8a42438a9 100644
--- a/widget/testdata/tree/layout_single_leaf.xml
+++ b/widget/testdata/tree/layout_single_leaf.xml
@@ -5,7 +5,7 @@
- 11111
+ 11111
diff --git a/widget/testdata/tree/layout_single_leaf_selected.xml b/widget/testdata/tree/layout_single_leaf_selected.xml
index e3dc9684d8..094f375770 100644
--- a/widget/testdata/tree/layout_single_leaf_selected.xml
+++ b/widget/testdata/tree/layout_single_leaf_selected.xml
@@ -5,7 +5,7 @@
- 11111
+ 11111
diff --git a/widget/testdata/tree/move_initial.xml b/widget/testdata/tree/move_initial.xml
index 7d5b1f9045..83852c4b67 100644
--- a/widget/testdata/tree/move_initial.xml
+++ b/widget/testdata/tree/move_initial.xml
@@ -5,7 +5,7 @@
- foo
+ foo
@@ -16,7 +16,7 @@
- foobar
+ foobar
diff --git a/widget/testdata/tree/move_moved.xml b/widget/testdata/tree/move_moved.xml
index 7f2e5fc459..72c8488efe 100644
--- a/widget/testdata/tree/move_moved.xml
+++ b/widget/testdata/tree/move_moved.xml
@@ -5,7 +5,7 @@
- foo
+ foo
@@ -16,7 +16,7 @@
- foobar
+ foobar
diff --git a/widget/testdata/tree/refresh_initial.png b/widget/testdata/tree/refresh_initial.png
index d1f7b34a07..ba603a01ac 100644
Binary files a/widget/testdata/tree/refresh_initial.png and b/widget/testdata/tree/refresh_initial.png differ
diff --git a/widget/testdata/tree/refresh_replaced.png b/widget/testdata/tree/refresh_replaced.png
index b16f524641..392087ba5e 100644
Binary files a/widget/testdata/tree/refresh_replaced.png and b/widget/testdata/tree/refresh_replaced.png differ
diff --git a/widget/testdata/tree/theme_changed.png b/widget/testdata/tree/theme_changed.png
index f815c4a644..3329071632 100644
Binary files a/widget/testdata/tree/theme_changed.png and b/widget/testdata/tree/theme_changed.png differ
diff --git a/widget/testdata/tree/theme_initial.png b/widget/testdata/tree/theme_initial.png
index 5655b9fd4c..ce113d1659 100644
Binary files a/widget/testdata/tree/theme_initial.png and b/widget/testdata/tree/theme_initial.png differ
diff --git a/widget/text.go b/widget/text.go
index 94e68192b8..3d98346df8 100644
--- a/widget/text.go
+++ b/widget/text.go
@@ -291,7 +291,7 @@ func (r *textRenderer) Layout(size fyne.Size) {
xPos := theme.Padding() + r.provider.extraPad.Width
yPos := theme.Padding() + r.provider.extraPad.Height
lineHeight := r.provider.charMinSize().Height
- lineSize := fyne.NewSize(size.Width-theme.Padding()*2, lineHeight)
+ lineSize := fyne.NewSize(size.Width-yPos*2, lineHeight)
for i := 0; i < len(r.texts); i++ {
text := r.texts[i]
text.Resize(lineSize)