From dab896d6e56eb61e11e17b1015dc558172812fa6 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Wed, 16 Dec 2020 19:38:16 +0000 Subject: [PATCH 1/4] Fix a missed mobile test case after theme deprecations --- widget/tabcontainer_mobile_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/widget/tabcontainer_mobile_test.go b/widget/tabcontainer_mobile_test.go index 29191897ff..2dadafab89 100644 --- a/widget/tabcontainer_mobile_test.go +++ b/widget/tabcontainer_mobile_test.go @@ -462,14 +462,14 @@ func TestTabContainer_HoverButtons(t *testing.T) { - Test1 + Test1 Test2 - + From 6b613f03865fde879458c89ab58833c13ac887b9 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Fri, 18 Dec 2020 11:49:20 +0000 Subject: [PATCH 2/4] Remove deprecated popup and dialog components (#1662) Fix it so that dialogs now don't show until Show or ShowXxx is called Fixes #852 --- CHANGELOG.md | 3 + dialog/base.go | 15 ++-- dialog/confirm_test.go | 1 + dialog/fileicon.go | 12 ---- dialog/form.go | 6 -- dialog/information_test.go | 1 + dialog/progressinfinite_test.go | 1 + internal/driver/gomobile/menu.go | 12 ++-- widget/entry.go | 2 +- widget/popup.go | 20 +----- widget/popup_menu.go | 120 +++---------------------------- widget/popup_menu_test.go | 47 +----------- widget/popup_test.go | 15 +++- widget/select.go | 2 +- widget/select_entry.go | 2 +- 15 files changed, 48 insertions(+), 211 deletions(-) delete mode 100644 dialog/fileicon.go diff --git a/CHANGELOG.md b/CHANGELOG.md index cad0ae5035..6b37c20b92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ These changes likely break some apps, please read the * A new, more flexible, Theme interface has been created that we encourage developers to use * The desktop.Cursor definition was renamed desktop.StandardCursor to make way for custom cursors +* Dialogs no longer show when created, unless using the ShowXxx convenience methods +* Removed deprecated types including dialog.FileIcon (now widget.FileIcon) + ### Added * Add MouseButtonTertiary for middle mouse button events on desktop diff --git a/dialog/base.go b/dialog/base.go index bf4f967474..901cfb5837 100644 --- a/dialog/base.go +++ b/dialog/base.go @@ -30,10 +30,9 @@ type Dialog interface { var _ Dialog = (*dialog)(nil) type dialog struct { - callback func(bool) - sendResponse bool - title string - icon fyne.Resource + callback func(bool) + title string + icon fyne.Resource win *widget.PopUp bg *canvas.Rectangle @@ -64,10 +63,6 @@ func NewCustomConfirm(title, confirm, dismiss string, content fyne.CanvasObject, callback func(bool), parent fyne.Window) Dialog { d := &dialog{content: content, title: title, icon: nil, parent: parent} d.callback = callback - // TODO: This is required to avoid confusion. - // Normally this function should only provide the dialog, but currently it is also displayed, which is wrong. - // For this case the ShowCustomConfirm() method was built. - d.sendResponse = true d.dismiss = &widget.Button{Text: dismiss, Icon: theme.CancelIcon(), OnTapped: d.Hide, @@ -103,7 +98,6 @@ func (d *dialog) Hide() { } func (d *dialog) Show() { - d.sendResponse = true d.win.Show() } @@ -191,10 +185,9 @@ func (d *dialog) applyTheme() { func (d *dialog) hideWithResponse(resp bool) { d.win.Hide() - if d.sendResponse && d.callback != nil { + if d.callback != nil { d.callback(resp) } - d.sendResponse = false } func (d *dialog) setButtons(buttons fyne.CanvasObject) { diff --git a/dialog/confirm_test.go b/dialog/confirm_test.go index cd4a8d5a73..1156ef4e31 100644 --- a/dialog/confirm_test.go +++ b/dialog/confirm_test.go @@ -67,6 +67,7 @@ func TestConfirmDialog_Resize(t *testing.T) { d := NewConfirm("Test", "Test", nil, window) theDialog := d.dialog + d.dialog.Show() // we cannot check window size if not shown //Test resize - normal size scenario size := fyne.NewSize(300, 180) //normal size to fit (600,400) diff --git a/dialog/fileicon.go b/dialog/fileicon.go deleted file mode 100644 index c3853f2697..0000000000 --- a/dialog/fileicon.go +++ /dev/null @@ -1,12 +0,0 @@ -package dialog - -import ( - "fyne.io/fyne" - "fyne.io/fyne/widget" -) - -// NewFileIcon takes a filepath and creates an icon with an overlayed label using the detected mimetype and extension -// Deprecated: Use widget.NewFileIcon instead -func NewFileIcon(uri fyne.URI) *widget.FileIcon { - return widget.NewFileIcon(uri) -} diff --git a/dialog/form.go b/dialog/form.go index e7928c50c4..9e149452cd 100644 --- a/dialog/form.go +++ b/dialog/form.go @@ -54,12 +54,6 @@ func NewForm(title, confirm, dismiss string, items []*widget.FormItem, callback content := fyne.NewContainerWithLayout(layout.NewFormLayout(), itemObjects...) d := &dialog{content: content, callback: callback, title: title, parent: parent} - - // TODO: Copied from NewCustomConfirm above. - // This is still a problem because commenting out the `.Show()` call below will still result in the - // dialog being shown. - d.sendResponse = true - d.dismiss = &widget.Button{Text: dismiss, Icon: theme.CancelIcon(), OnTapped: d.Hide, } diff --git a/dialog/information_test.go b/dialog/information_test.go index d0725f5db7..fd66a5c733 100644 --- a/dialog/information_test.go +++ b/dialog/information_test.go @@ -28,6 +28,7 @@ func TestDialog_Resize(t *testing.T) { defer window.Close() d := NewInformation("Looooooooooooooong title", "message...", window) theDialog := d.(*dialog) + d.Show() // we cannot check window size if not shown //Test resize - normal size scenario size := fyne.NewSize(300, 180) //normal size to fit (600,400) diff --git a/dialog/progressinfinite_test.go b/dialog/progressinfinite_test.go index ff0cdabf52..fc076ea929 100644 --- a/dialog/progressinfinite_test.go +++ b/dialog/progressinfinite_test.go @@ -27,6 +27,7 @@ func TestProgressInfiniteDialog_Resize(t *testing.T) { defer window.Close() d := NewProgressInfinite("title", "message", window) theDialog := d.dialog + d.dialog.Show() // we cannot check window size if not shown //Test resize - normal size scenario size := fyne.NewSize(300, 180) //normal size to fit (600,400) diff --git a/internal/driver/gomobile/menu.go b/internal/driver/gomobile/menu.go index 72322bfb81..90fdd88d0a 100644 --- a/internal/driver/gomobile/menu.go +++ b/internal/driver/gomobile/menu.go @@ -5,7 +5,8 @@ import ( "fyne.io/fyne" "fyne.io/fyne/canvas" - internalWidget "fyne.io/fyne/internal/widget" + "fyne.io/fyne/container" + "fyne.io/fyne/internal/cache" "fyne.io/fyne/layout" "fyne.io/fyne/theme" "fyne.io/fyne/widget" @@ -22,10 +23,9 @@ type menuLabel struct { func (m *menuLabel) Tapped(*fyne.PointEvent) { pos := fyne.CurrentApp().Driver().AbsolutePositionForObject(m) - widget.ShowPopUpMenuAtPosition(m.menu, m.canvas, fyne.NewPos(pos.X+m.Size().Width, pos.Y)) + menu := widget.NewPopUpMenu(m.menu, m.canvas) + menu.ShowAtPosition(fyne.NewPos(pos.X+m.Size().Width, pos.Y)) - // TODO use NewPopUpMenu in 2.0 once the Deprecated - menu := m.canvas.Overlays().Top().(*internalWidget.OverlayContainer).Content.(*widget.Menu) menuDismiss := menu.OnDismiss // this dismisses the menu stack menu.OnDismiss = func() { menuDismiss() @@ -35,7 +35,7 @@ func (m *menuLabel) Tapped(*fyne.PointEvent) { } func (m *menuLabel) CreateRenderer() fyne.WidgetRenderer { - return widget.Renderer(m.Box) + return cache.Renderer(m.Box) } func newMenuLabel(item *fyne.Menu, parent *widget.Box, c *mobileCanvas) *menuLabel { @@ -57,7 +57,7 @@ func (c *mobileCanvas) showMenu(menu *fyne.MainMenu) { panel.Append(newMenuLabel(item, panel, c)) } shadow := canvas.NewHorizontalGradient(theme.ShadowColor(), color.Transparent) - c.menu = fyne.NewContainer(panel, shadow) + c.menu = container.NewWithoutLayout(panel, shadow) safePos, safeSize := c.InteractiveArea() panel.Move(safePos) diff --git a/widget/entry.go b/widget/entry.go index 1b4e70f493..57e97238b5 100644 --- a/widget/entry.go +++ b/widget/entry.go @@ -492,7 +492,7 @@ func (e *Entry) TappedSecondary(pe *fyne.PointEvent) { menu = fyne.NewMenu("", cutItem, copyItem, pasteItem, selectAllItem) } - e.popUp = newPopUpMenu(menu, c) + e.popUp = NewPopUpMenu(menu, c) e.popUp.ShowAtPosition(popUpPos) } diff --git a/widget/popup.go b/widget/popup.go index ac6b58d26d..313de322fe 100644 --- a/widget/popup.go +++ b/widget/popup.go @@ -112,16 +112,6 @@ func (p *PopUp) CreateRenderer() fyne.WidgetRenderer { } } -// NewPopUpAtPosition creates a new popUp for the specified content at the specified absolute position. -// It will then display the popup on the passed canvas. -// -// Deprecated: Use ShowPopUpAtPosition() instead. -func NewPopUpAtPosition(content fyne.CanvasObject, canvas fyne.Canvas, pos fyne.Position) *PopUp { - p := newPopUp(content, canvas) - p.ShowAtPosition(pos) - return p -} - // ShowPopUpAtPosition creates a new popUp for the specified content at the specified absolute position. // It will then display the popup on the passed canvas. func ShowPopUpAtPosition(content fyne.CanvasObject, canvas fyne.Canvas, pos fyne.Position) { @@ -135,10 +125,8 @@ func newPopUp(content fyne.CanvasObject, canvas fyne.Canvas) *PopUp { } // NewPopUp creates a new popUp for the specified content and displays it on the passed canvas. -// -// Deprecated: This will no longer show the pop-up in 2.0. Use ShowPopUp() instead. func NewPopUp(content fyne.CanvasObject, canvas fyne.Canvas) *PopUp { - return NewPopUpAtPosition(content, canvas, fyne.NewPos(0, 0)) + return newPopUp(content, canvas) } // ShowPopUp creates a new popUp for the specified content and displays it on the passed canvas. @@ -154,12 +142,8 @@ func newModalPopUp(content fyne.CanvasObject, canvas fyne.Canvas) *PopUp { // NewModalPopUp creates a new popUp for the specified content and displays it on the passed canvas. // A modal PopUp blocks interactions with underlying elements, covered with a semi-transparent overlay. -// -// Deprecated: This will no longer show the pop-up in 2.0. Use ShowModalPopUp instead. func NewModalPopUp(content fyne.CanvasObject, canvas fyne.Canvas) *PopUp { - p := newModalPopUp(content, canvas) - p.Show() - return p + return newModalPopUp(content, canvas) } // ShowModalPopUp creates a new popUp for the specified content and displays it on the passed canvas. diff --git a/widget/popup_menu.go b/widget/popup_menu.go index aeab6e0149..4e68428bd2 100644 --- a/widget/popup_menu.go +++ b/widget/popup_menu.go @@ -1,13 +1,8 @@ package widget import ( - "image/color" - "fyne.io/fyne" - "fyne.io/fyne/canvas" - "fyne.io/fyne/driver/desktop" "fyne.io/fyne/internal/widget" - "fyne.io/fyne/theme" ) // PopUpMenu is a Menu which displays itself in an OverlayContainer. @@ -17,14 +12,10 @@ type PopUpMenu struct { overlay *widget.OverlayContainer } -// ShowPopUpMenuAtPosition creates a PopUp menu populated with items from the passed menu structure. -// It will automatically be positioned at the provided location and shown as an overlay on the specified canvas. -func ShowPopUpMenuAtPosition(menu *fyne.Menu, c fyne.Canvas, pos fyne.Position) { - m := newPopUpMenu(menu, c) - m.ShowAtPosition(pos) -} - -func newPopUpMenu(menu *fyne.Menu, c fyne.Canvas) *PopUpMenu { +// NewPopUpMenu creates a new, reusable popup menu. You can show it using ShowAtPosition. +// +// Since: 2.0.0 +func NewPopUpMenu(menu *fyne.Menu, c fyne.Canvas) *PopUpMenu { p := &PopUpMenu{Menu: NewMenu(menu), canvas: c} p.Menu.Resize(p.Menu.MinSize()) p.Menu.customSized = true @@ -37,6 +28,13 @@ func newPopUpMenu(menu *fyne.Menu, c fyne.Canvas) *PopUpMenu { return p } +// ShowPopUpMenuAtPosition creates a PopUp menu populated with items from the passed menu structure. +// It will automatically be positioned at the provided location and shown as an overlay on the specified canvas. +func ShowPopUpMenuAtPosition(menu *fyne.Menu, c fyne.Canvas, pos fyne.Position) { + m := NewPopUpMenu(menu, c) + m.ShowAtPosition(pos) +} + // CreateRenderer returns a new renderer for the pop-up menu. // // Implements: fyne.Widget @@ -99,99 +97,3 @@ func (p *PopUpMenu) adjustedPosition(pos fyne.Position, size fyne.Size) fyne.Pos } return fyne.NewPos(x, y) } - -// -// Deprecated pop-up menu implementation -// - -// NewPopUpMenuAtPosition creates a PopUp widget populated with menu items from the passed menu structure. -// It will automatically be positioned at the provided location and shown as an overlay on the specified canvas. -// -// Deprecated: Use ShowPopUpMenuAtPosition() instead. -func NewPopUpMenuAtPosition(menu *fyne.Menu, c fyne.Canvas, pos fyne.Position) *PopUp { - options := NewVBox() - for _, option := range menu.Items { - opt := option // capture value - if opt.IsSeparator { - options.Append(newSeparator()) - } else { - options.Append(newMenuItemWidget(opt.Label)) - } - } - pop := NewPopUpAtPosition(options, c, pos) - for i, o := range options.Children { - if label, ok := o.(*menuItemWidget); ok { - item := menu.Items[i] - label.OnTapped = func() { - pop.Hide() - item.Action() - } - } - } - return pop -} - -// NewPopUpMenu creates a PopUp widget populated with menu items from the passed menu structure. -// It will automatically be shown as an overlay on the specified canvas. -// -// Deprecated: Use ShowPopUpMenuAtPosition() with a zero position instead. -func NewPopUpMenu(menu *fyne.Menu, c fyne.Canvas) *PopUp { - return NewPopUpMenuAtPosition(menu, c, fyne.NewPos(0, 0)) -} - -type menuItemWidget struct { - *Label - OnTapped func() - hovered bool -} - -func (t *menuItemWidget) Tapped(*fyne.PointEvent) { - t.OnTapped() -} - -func (t *menuItemWidget) CreateRenderer() fyne.WidgetRenderer { - return &menuItemWidgetRenderer{t.Label.CreateRenderer().(*textRenderer), t} -} - -// MouseIn is called when a desktop pointer enters the widget -func (t *menuItemWidget) MouseIn(*desktop.MouseEvent) { - t.hovered = true - - canvas.Refresh(t) -} - -// MouseOut is called when a desktop pointer exits the widget -func (t *menuItemWidget) MouseOut() { - t.hovered = false - - canvas.Refresh(t) -} - -// MouseMoved is called when a desktop pointer hovers over the widget -func (t *menuItemWidget) MouseMoved(*desktop.MouseEvent) { -} - -func newMenuItemWidget(label string) *menuItemWidget { - ret := &menuItemWidget{Label: NewLabel(label)} - ret.ExtendBaseWidget(ret) - return ret -} - -type menuItemWidgetRenderer struct { - *textRenderer - label *menuItemWidget -} - -func (h *menuItemWidgetRenderer) BackgroundColor() color.Color { - if h.label.hovered { - return theme.HoverColor() - } - - return color.Transparent -} - -func newSeparator() fyne.CanvasObject { - s := canvas.NewRectangle(theme.DisabledTextColor()) - s.SetMinSize(fyne.NewSize(1, 2)) - return s -} diff --git a/widget/popup_menu_test.go b/widget/popup_menu_test.go index 9246b38665..12d950f845 100644 --- a/widget/popup_menu_test.go +++ b/widget/popup_menu_test.go @@ -4,13 +4,11 @@ import ( "image/color" "testing" + "github.com/stretchr/testify/assert" + "fyne.io/fyne" "fyne.io/fyne/canvas" - "fyne.io/fyne/internal/widget" "fyne.io/fyne/test" - "fyne.io/fyne/theme" - - "github.com/stretchr/testify/assert" ) func TestPopUpMenu_Move(t *testing.T) { @@ -517,7 +515,7 @@ func setupPopUpMenuTest() (*PopUpMenu, fyne.Window) { w := test.NewWindow(canvas.NewRectangle(color.NRGBA{G: 150, B: 150, A: 255})) w.Resize(fyne.NewSize(200, 200)) - m := newPopUpMenu(fyne.NewMenu( + m := NewPopUpMenu(fyne.NewMenu( "", fyne.NewMenuItem("Option A", nil), fyne.NewMenuItem("Option B", nil), @@ -529,42 +527,3 @@ func tearDownPopUpMenuTest(w fyne.Window) { w.Close() test.NewApp() } - -// -// Old pop-up menu tests -// - -func TestNewPopUpMenu(t *testing.T) { - c := test.Canvas() - menu := fyne.NewMenu("Foo", fyne.NewMenuItem("Bar", func() {})) - - pop := NewPopUpMenu(menu, c) - assert.Equal(t, 1, len(c.Overlays().List())) - assert.Equal(t, pop, c.Overlays().List()[0]) - - pop.Hide() - assert.Equal(t, 0, len(c.Overlays().List())) -} - -func TestPopUpMenu_Size(t *testing.T) { - win := test.NewWindow(NewLabel("OK")) - defer win.Close() - win.Resize(fyne.NewSize(100, 100)) - menu := fyne.NewMenu("Foo", - fyne.NewMenuItem("A", func() {}), - fyne.NewMenuItem("A", func() {}), - ) - menuItemSize := canvas.NewText("A", color.Black).MinSize().Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2)) - expectedSize := menuItemSize.Add(fyne.NewSize(0, menuItemSize.Height)).Add(fyne.NewSize(0, theme.Padding())) - c := win.Canvas() - - pop := NewPopUpMenu(menu, c) - defer pop.Hide() - assert.Equal(t, expectedSize, pop.Content.Size()) - - for _, o := range test.LaidOutObjects(pop) { - if s, ok := o.(*widget.Shadow); ok { - assert.Equal(t, expectedSize.Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2)), s.Size()) - } - } -} diff --git a/widget/popup_test.go b/widget/popup_test.go index 3e317dc1ff..454ec5312a 100644 --- a/widget/popup_test.go +++ b/widget/popup_test.go @@ -20,6 +20,9 @@ func TestNewPopUp(t *testing.T) { pop := NewPopUp(label, test.Canvas()) defer test.Canvas().Overlays().Remove(pop) + assert.Equal(t, 0, len(test.Canvas().Overlays().List())) + pop.Show() + assert.True(t, pop.Visible()) assert.Equal(t, 1, len(test.Canvas().Overlays().List())) assert.Equal(t, pop, test.Canvas().Overlays().List()[0]) @@ -164,6 +167,7 @@ func TestPopUp_ShowAtPosition(t *testing.T) { func TestPopUp_Hide(t *testing.T) { label := NewLabel("Hi") pop := NewPopUp(label, test.Canvas()) + pop.Show() assert.True(t, pop.Visible()) pop.Hide() @@ -174,7 +178,6 @@ func TestPopUp_Hide(t *testing.T) { func TestPopUp_MinSize(t *testing.T) { label := NewLabel("Hi") pop := NewPopUp(label, test.Canvas()) - defer test.Canvas().Overlays().Remove(pop) inner := pop.Content.MinSize() assert.Equal(t, label.MinSize().Width, inner.Width) @@ -209,6 +212,7 @@ func TestPopUp_Move_Constrained(t *testing.T) { defer win.Close() win.Resize(fyne.NewSize(60, 40)) pop := NewPopUp(label, win.Canvas()) + pop.Show() defer test.Canvas().Overlays().Remove(pop) pos := fyne.NewPos(30, 20) @@ -231,6 +235,7 @@ func TestPopUp_Move_ConstrainedWindowToSmall(t *testing.T) { defer win.Close() win.Resize(fyne.NewSize(10, 5)) pop := NewPopUp(label, win.Canvas()) + pop.Show() defer test.Canvas().Overlays().Remove(pop) pos := fyne.NewPos(20, 10) @@ -263,6 +268,7 @@ func TestPopUp_Resize(t *testing.T) { func TestPopUp_Tapped(t *testing.T) { label := NewLabel("Hi") pop := NewPopUp(label, test.Canvas()) + pop.Show() assert.True(t, pop.Visible()) test.Tap(pop) @@ -273,6 +279,7 @@ func TestPopUp_Tapped(t *testing.T) { func TestPopUp_TappedSecondary(t *testing.T) { label := NewLabel("Hi") pop := NewPopUp(label, test.Canvas()) + pop.Show() assert.True(t, pop.Visible()) test.TapSecondary(pop) @@ -285,17 +292,20 @@ func TestPopUp_Stacked(t *testing.T) { assert.Empty(t, test.Canvas().Overlays().List()) pop1 := NewPopUp(NewLabel("Hi"), test.Canvas()) + pop1.Show() assert.True(t, pop1.Visible()) assert.Equal(t, pop1, test.Canvas().Overlays().Top()) assert.Equal(t, []fyne.CanvasObject{pop1}, test.Canvas().Overlays().List()) pop2 := NewPopUp(NewLabel("Hi"), test.Canvas()) + pop2.Show() assert.True(t, pop1.Visible()) assert.True(t, pop2.Visible()) assert.Equal(t, pop2, test.Canvas().Overlays().Top()) assert.Equal(t, []fyne.CanvasObject{pop1, pop2}, test.Canvas().Overlays().List()) pop3 := NewPopUp(NewLabel("Hi"), test.Canvas()) + pop3.Show() assert.True(t, pop1.Visible()) assert.True(t, pop2.Visible()) assert.True(t, pop3.Visible()) @@ -347,6 +357,7 @@ func TestPopUp_Layout(t *testing.T) { func TestModalPopUp_Tapped(t *testing.T) { label := NewLabel("Hi") pop := NewModalPopUp(label, test.Canvas()) + pop.Show() defer test.Canvas().Overlays().Remove(pop) assert.True(t, pop.Visible()) @@ -359,6 +370,7 @@ func TestModalPopUp_Tapped(t *testing.T) { func TestModalPopUp_TappedSecondary(t *testing.T) { label := NewLabel("Hi") pop := NewModalPopUp(label, test.Canvas()) + pop.Show() defer test.Canvas().Overlays().Remove(pop) assert.True(t, pop.Visible()) @@ -392,7 +404,6 @@ func TestModalPopUp_Resize_Constrained(t *testing.T) { win := test.NewWindow(NewLabel("OK")) win.Resize(fyne.NewSize(80, 80)) pop := NewModalPopUp(label, win.Canvas()) - defer win.Canvas().Overlays().Remove(pop) pop.Resize(fyne.NewSize(90, 100)) assert.Equal(t, 80-theme.Padding()*2, pop.Content.Size().Width) diff --git a/widget/select.go b/widget/select.go index 3fbd3f4a83..4fa4fed47b 100644 --- a/widget/select.go +++ b/widget/select.go @@ -258,7 +258,7 @@ func (s *Select) showPopUp() { } c := fyne.CurrentApp().Driver().CanvasForObject(s.super()) - s.popUp = newPopUpMenu(fyne.NewMenu("", items...), c) + s.popUp = NewPopUpMenu(fyne.NewMenu("", items...), c) s.popUp.ShowAtPosition(s.popUpPos()) s.popUp.Resize(fyne.NewSize(s.Size().Width-theme.Padding()*2, s.popUp.MinSize().Height)) } diff --git a/widget/select_entry.go b/widget/select_entry.go index 232b2840c7..1a669a0f85 100644 --- a/widget/select_entry.go +++ b/widget/select_entry.go @@ -101,7 +101,7 @@ func (e *SelectEntry) setupDropDown() *Button { entryPos := fyne.CurrentApp().Driver().AbsolutePositionForObject(e.super()) popUpPos := entryPos.Add(fyne.NewPos(theme.Padding(), e.Size().Height)) - e.popUp = newPopUpMenu(e.dropDown, c) + e.popUp = NewPopUpMenu(e.dropDown, c) e.popUp.ShowAtPosition(popUpPos) e.popUp.Resize(fyne.NewSize(e.Size().Width-theme.Padding()*2, e.popUp.MinSize().Height)) }) From 1e82abf622966802c937fa0fdd39f8c01fba83e2 Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Thu, 17 Dec 2020 21:48:27 +0000 Subject: [PATCH 3/4] Fix accidental over-lapping data bind for slices --- data/binding/bindlists.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/binding/bindlists.go b/data/binding/bindlists.go index 445952679b..ee1210e469 100644 --- a/data/binding/bindlists.go +++ b/data/binding/bindlists.go @@ -112,8 +112,8 @@ func BindFloatList(v *[]float64) FloatList { b := &boundFloatList{val: v} - for _, i := range *v { - b.appendItem(BindFloat(&i)) + for i := range *v { + b.appendItem(BindFloat(&((*v)[i]))) } return b From e30a5033a7e4473ed1362a17a8c67814765fbffd Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Sat, 19 Dec 2020 22:03:59 +0000 Subject: [PATCH 4/4] Move to float32 coordinates (#1661) * Move geometry from int to float32. * remove deprecated Size.Union * Move mouse events to Delta from (int, int) * Add Vector2 for interoperability between Size, Position and Delta. Fixes #835 --- CHANGELOG.md | 18 +- canvas/animation.go | 8 +- canvas/base_internal_test.go | 8 +- canvas/circle_test.go | 4 +- canvas/line.go | 4 +- canvas/line_test.go | 4 +- .../text/layout_long_center_large.png | Bin 8731 -> 8737 bytes .../text/layout_long_leading_large.png | Bin 8725 -> 8731 bytes .../text/layout_long_trailing_large.png | Bin 8717 -> 8723 bytes .../text/layout_short_center_large.png | Bin 1147 -> 1150 bytes .../text/layout_short_leading_large.png | Bin 1140 -> 1144 bytes .../text/layout_short_trailing_large.png | Bin 1120 -> 1123 bytes canvas/text.go | 2 +- canvas/text_test.go | 12 +- cmd/fyne_demo/tutorials/animation.go | 4 +- cmd/fyne_demo/tutorials/theme.go | 2 +- cmd/fyne_settings/settings/scale.go | 4 +- cmd/fyne_settings/settings/scale_test.go | 2 +- container.go | 2 +- dialog/base.go | 4 +- dialog/color_wheel.go | 6 +- dialog/confirm_test.go | 4 +- dialog/file.go | 2 +- dialog/file_test.go | 4 +- dialog/information_test.go | 4 +- dialog/progressinfinite_test.go | 4 +- .../color/channel_layout_foobar_0.png | Bin 1882 -> 1892 bytes .../color/channel_layout_foobar_100.png | Bin 2076 -> 2124 bytes .../color/channel_layout_foobar_50.png | Bin 2029 -> 2069 bytes .../color/dialog_expanded_theme_default.png | Bin 37255 -> 37253 bytes .../color/dialog_expanded_theme_ugly.png | Bin 47481 -> 47415 bytes .../color/dialog_recents_theme_default.png | Bin 14450 -> 14450 bytes .../color/dialog_recents_theme_ugly.png | Bin 15818 -> 15816 bytes .../dialog_simple_recents_theme_default.png | Bin 9379 -> 9379 bytes .../dialog_simple_recents_theme_ugly.png | Bin 10117 -> 10117 bytes .../testdata/color/dialog_theme_default.png | Bin 14779 -> 14778 bytes dialog/testdata/color/dialog_theme_ugly.png | Bin 16126 -> 16138 bytes .../testdata/color/picker_layout_advanced.png | Bin 20940 -> 20943 bytes dialog/testdata/dialog-custom-default.png | Bin 4178 -> 4178 bytes dialog/testdata/dialog-custom-ugly.png | Bin 3991 -> 3991 bytes driver.go | 2 +- event.go | 4 +- geometry.go | 99 ++++-- geometry_test.go | 75 +++-- internal/driver/glfw/canvas.go | 8 +- internal/driver/glfw/canvas_test.go | 8 +- internal/driver/glfw/driver.go | 2 +- internal/driver/glfw/driver_test.go | 2 +- .../glfw/testdata/menu_bar_active_file.png | Bin 6415 -> 6416 bytes ...content_not_hoverable_with_active_menu.png | Bin 6415 -> 6416 bytes .../menu_bar_hovered_content_test_theme.png | Bin 4237 -> 4239 bytes .../testdata/menu_bar_hovered_file_new.png | Bin 6485 -> 6486 bytes .../testdata/menu_bar_hovered_file_open.png | Bin 6797 -> 6796 bytes .../testdata/menu_bar_hovered_file_recent.png | Bin 8603 -> 8605 bytes .../menu_bar_hovered_file_recent_older.png | Bin 9749 -> 9752 bytes ...enu_bar_hovered_file_recent_older_old1.png | Bin 9771 -> 9771 bytes internal/driver/glfw/window.go | 12 +- internal/driver/glfw/window_test.go | 35 +- internal/driver/gomobile/canvas.go | 9 +- internal/driver/gomobile/canvas_test.go | 2 +- internal/driver/gomobile/driver.go | 4 +- internal/painter/draw.go | 36 +-- internal/painter/font.go | 9 +- internal/painter/gl/draw.go | 20 +- internal/painter/gl/gl_common.go | 28 +- internal/painter/gl/painter.go | 19 +- internal/painter/image.go | 4 +- internal/painter/image_test.go | 4 +- internal/painter/software/draw.go | 20 +- internal/painter/software/painter.go | 6 +- internal/painter/software/painter_test.go | 10 +- .../software/testdata/draw_image_clipped.png | Bin 629 -> 628 bytes .../software/testdata/draw_rect_clipped.png | Bin 756 -> 760 bytes .../software/testdata/draw_text_clipped.png | Bin 2888 -> 2893 bytes internal/painter/vector.go | 8 +- internal/scale.go | 15 +- internal/widget/shadow.go | 2 +- layout/borderlayout.go | 2 +- layout/borderlayout_test.go | 8 +- layout/boxlayout.go | 14 +- layout/boxlayout_test.go | 24 +- layout/centerlayout.go | 4 +- layout/formlayout.go | 8 +- layout/formlayout_test.go | 2 +- layout/gridlayout.go | 20 +- layout/gridwraplayout.go | 4 +- layout/maxlayout.go | 2 +- layout/paddedlayout.go | 2 +- math.go | 4 +- math_test.go | 8 +- test/markup_renderer.go | 14 +- test/test.go | 9 +- test/test_test.go | 5 +- test/testdriver.go | 4 +- test/testtheme.go | 12 +- test/theme.go | 16 +- text.go | 2 +- theme.go | 2 +- theme/legacy.go | 12 +- theme/legacy_test.go | 16 +- theme/theme.go | 12 +- widget/accordion.go | 4 +- widget/accordion_internal_test.go | 40 +-- widget/button_internal_test.go | 10 +- widget/card.go | 2 +- widget/card_test.go | 112 +++---- widget/entry.go | 6 +- widget/entry_internal_test.go | 2 +- widget/entry_test.go | 8 +- widget/fileicon.go | 6 +- widget/label_test.go | 2 +- widget/list.go | 20 +- widget/list_test.go | 2 +- widget/menu_desktop_test.go | 2 +- widget/menu_item.go | 2 +- widget/menu_mobile_test.go | 2 +- widget/popup_test.go | 24 +- widget/progressbar.go | 2 +- widget/progressbar_extend_test.go | 4 +- widget/progressbar_test.go | 4 +- widget/progressbarinfinite.go | 6 +- widget/progressbarinfinite_test.go | 10 +- widget/radio.go | 14 +- widget/radio_group.go | 12 +- widget/radio_internal_test.go | 6 +- widget/scroller.go | 43 ++- widget/scroller_test.go | 298 +++++++++--------- widget/select_entry_test.go | 10 +- widget/separator.go | 2 +- widget/slider.go | 16 +- widget/slider_extend_test.go | 2 +- widget/slider_test.go | 2 +- widget/splitcontainer.go | 18 +- widget/splitcontainer_test.go | 62 ++-- widget/tabcontainer.go | 8 +- widget/tabcontainer_test.go | 6 +- widget/table.go | 41 +-- widget/table_test.go | 10 +- .../testdata/fileicon/fileicon_text_txt.png | Bin 2227 -> 2230 bytes widget/testdata/menu/layout_normal.png | Bin 3519 -> 3508 bytes widget/testdata/menu/layout_theme_changed.png | Bin 4192 -> 4192 bytes widget/testdata/select/theme_changed.png | Bin 3710 -> 3707 bytes widget/testdata/select/theme_initial.png | Bin 3518 -> 3534 bytes .../tabcontainer/mobile/theme_ugly.png | Bin 2141 -> 2143 bytes widget/testdata/tree/theme_changed.png | Bin 3211 -> 3211 bytes widget/text.go | 10 +- widget/text_benchmark_test.go | 4 +- widget/text_test.go | 14 +- widget/textgrid.go | 6 +- widget/tree.go | 14 +- widget/tree_internal_test.go | 14 +- 151 files changed, 848 insertions(+), 785 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b37c20b92..74b69a2c93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,9 +10,19 @@ More detailed release notes can be found on the [releases page](https://github.c These changes likely break some apps, please read the [upgrading doc](https://developer.fyne.io/api/v2.0/upgrading) for more info +* Coordinate system to float32 + * Size and Position units were changed from int to float32 + * `Text.TextSize` moved to float32 and `fyne.MeasureText` now takes a float32 size parameter + * Removed `Size.Union` + * Added fyne.Delta for difference based X, Y representation + * DraggedEvent.DraggedX and DraggedX (int, int) to DraggedEvent.Dragged (Delta) + * ScrollEvent.DeltaX and DeltaY (int, int) moved to ScrollEvent.Scrolled (Delta) + +* Theme API update + * `fyne.Theme` moved to `fyne.LegacyTheme` and can be load to a new theme using `theme.FromLegacy` + * A new, more flexible, Theme interface has been created that we encourage developers to use + * The second parameter of `theme.NewThemedResource` was removed, it was previously ignored -* `fyne.Theme` moved to `fyne.LegacyTheme` and can be load to a new theme using `theme.FromLegacy` -* A new, more flexible, Theme interface has been created that we encourage developers to use * The desktop.Cursor definition was renamed desktop.StandardCursor to make way for custom cursors * Dialogs no longer show when created, unless using the ShowXxx convenience methods @@ -21,9 +31,13 @@ These changes likely break some apps, please read the ### Added * Add MouseButtonTertiary for middle mouse button events on desktop +* Add fyne.Vector for simple x/y coordinates ### Changed +* Coordinate system is now float32 - see breaking changes above +* ScrollEvent and DragEvent moved to Delta from (int, int) + * Change bundled resources to use more efficient string storage * Desktop left and right mouse buttons renamed to MouseButtonPrimary and MouseButtonSecondary * Many optimisations and widget performance enhancements diff --git a/canvas/animation.go b/canvas/animation.go index a528459b89..61e81f89fb 100644 --- a/canvas/animation.go +++ b/canvas/animation.go @@ -49,7 +49,7 @@ func NewPositionAnimation(start, stop fyne.Position, d time.Duration, fn func(fy return &fyne.Animation{ Duration: d, Tick: func(done float32) { - fn(fyne.NewPos(scaleInt(start.X, xDelta, done), scaleInt(start.Y, yDelta, done))) + fn(fyne.NewPos(scaleVal(start.X, xDelta, done), scaleVal(start.Y, yDelta, done))) }} } @@ -63,7 +63,7 @@ func NewSizeAnimation(start, stop fyne.Size, d time.Duration, fn func(fyne.Size) return &fyne.Animation{ Duration: d, Tick: func(done float32) { - fn(fyne.NewSize(scaleInt(start.Width, widthDelta, done), scaleInt(start.Height, heightDelta, done))) + fn(fyne.NewSize(scaleVal(start.Width, widthDelta, done), scaleVal(start.Height, heightDelta, done))) }} } @@ -71,6 +71,6 @@ func scaleChannel(start int, diff, done float32) uint8 { return uint8(start + int(diff*done)) } -func scaleInt(start int, delta, done float32) int { - return start + int(delta*done) +func scaleVal(start float32, delta, done float32) float32 { + return start + delta*done } diff --git a/canvas/base_internal_test.go b/canvas/base_internal_test.go index 034c136832..c863d18144 100644 --- a/canvas/base_internal_test.go +++ b/canvas/base_internal_test.go @@ -21,8 +21,8 @@ func TestBase_Move(t *testing.T) { base.Move(fyne.NewPos(10, 10)) pos := base.Position() - assert.Equal(t, 10, pos.X) - assert.Equal(t, 10, pos.Y) + assert.Equal(t, float32(10), pos.X) + assert.Equal(t, float32(10), pos.Y) } func TestBase_Resize(t *testing.T) { @@ -30,8 +30,8 @@ func TestBase_Resize(t *testing.T) { base.Resize(fyne.NewSize(10, 10)) size := base.Size() - assert.Equal(t, 10, size.Width) - assert.Equal(t, 10, size.Height) + assert.Equal(t, float32(10), size.Width) + assert.Equal(t, float32(10), size.Height) } func TestBase_HideShow(t *testing.T) { diff --git a/canvas/circle_test.go b/canvas/circle_test.go index b33a6966aa..2f2776c7bd 100644 --- a/canvas/circle_test.go +++ b/canvas/circle_test.go @@ -26,8 +26,8 @@ func TestCircle_FillColor(t *testing.T) { } func TestCircle_Resize(t *testing.T) { - targetWidth := 50 - targetHeight := 50 + targetWidth := float32(50) + targetHeight := float32(50) circle := canvas.NewCircle(color.White) start := circle.Size() assert.True(t, start.Height == 0) diff --git a/canvas/line.go b/canvas/line.go index 98eceec826..a3b8a58d54 100644 --- a/canvas/line.go +++ b/canvas/line.go @@ -24,8 +24,8 @@ type Line struct { // Size returns the current size of bounding box for this line object func (l *Line) Size() fyne.Size { - return fyne.NewSize(int(math.Abs(float64(l.Position2.X)-float64(l.Position1.X))), - int(math.Abs(float64(l.Position2.Y)-float64(l.Position1.Y)))) + return fyne.NewSize(float32(math.Abs(float64(l.Position2.X)-float64(l.Position1.X))), + float32(math.Abs(float64(l.Position2.Y)-float64(l.Position1.Y)))) } // Resize sets a new bottom-right position for the line object and it will then be refreshed. diff --git a/canvas/line_test.go b/canvas/line_test.go index 8989fa468d..7d53edb068 100644 --- a/canvas/line_test.go +++ b/canvas/line_test.go @@ -24,8 +24,8 @@ func TestLine_Resize(t *testing.T) { line.Resize(fyne.NewSize(10, 0)) size := line.Size() - assert.Equal(t, size.Width, 10) - assert.Equal(t, size.Height, 0) + assert.Equal(t, float32(10), size.Width) + assert.Equal(t, float32(0), size.Height) } func TestLine_StrokeColor(t *testing.T) { diff --git a/canvas/testdata/text/layout_long_center_large.png b/canvas/testdata/text/layout_long_center_large.png index 1078dc6aefcd29bba083e7dd3ec03a99b05eb866..d53a853aaf3fec32e9c8aceec4ad656e2d3daa6b 100644 GIT binary patch delta 54 zcmbR3ve0FMIA1CU69WT-$IA00}69WUo|D~Z?3=E2oHma5|Zl2GWry$bn6q$1S?#ULQB!j1`pUXO@ GgeCx`)DY1C diff --git a/canvas/testdata/text/layout_long_leading_large.png b/canvas/testdata/text/layout_long_leading_large.png index f5fb3cb5e7381b45a57c84acb63d22e82c5a0ea4..17b442499ffa549ec938117fab89eb1e24425949 100644 GIT binary patch delta 54 zcmbR0GTUW>IA1CU69WT-$7xnzXW}tB!j1`pUXO@ GgeCx)k`N03 diff --git a/canvas/testdata/text/layout_long_trailing_large.png b/canvas/testdata/text/layout_long_trailing_large.png index 8b5783e1df189bec5623ccabbb0a2f14e2f87532..1bd1a8940e7d3449cbfe02666fbf6969c38663d2 100644 GIT binary patch literal 8723 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 UH>A&9;OX&XB^4!d#SDD^2Lj+0K>z>% literal 8717 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 j!T1dm3Bpne$EwE&zlq8EJ3_t%5hGSql diff --git a/canvas/testdata/text/layout_short_center_large.png b/canvas/testdata/text/layout_short_center_large.png index 241e6203cca9d72290d87d31f94feeada3daff81..bf9b6185fcbd8b68c4795d2439b19c28020d90f7 100644 GIT binary patch delta 725 zcmV;`0xJFc2>u9=7Y=0z0ssI2H2H>)000CgsB>THUzR>2wN(!ua_3 z*RNkce*Cy`X=rF@YHBK<&wu&y<^B8jTRt^x3UMch!-o%FyLPSJZvXi4V{B~f(W6I; zi;KP0e?R{A{rmS~vH1M?^Q%{{{`~nfr8GG?S*cVeCnxLm`rf^JuV26Z^y$-q?gRQm z+zH~{yLXo^U3&fcbxLV=cD7QfEG;dqt*x!EPESvtJbAL&Y?jOAg@uLFr%&I#dpDQM zUA}y|TCL8{&o>&4J$v@FTCG9v1Ny_6J3+Ksf35Yhr<7j2c#%>X8yoAbK6vn;*=(ki z-oAbN?Afzp$Bw0xW@cterPAW!Vx!SWDSi9)P235?KX-yC6bdI!oS2!J$>;MsckcY_ z;~xI!^IlzD?LDuotQfL`}fw)3!Bcd3=vFEPnSxin>TO1eEG6gtL@*v z|6eamOic8i%jNRQ%1TOU{cg;mLx;9}Uf6WvP6X?R=0}bkNhuvTaNyjzbKP!t;|pib zoSB%I$g=F{(WA4ovrnEpNh!U0_3F)=e>dmPpD&lo+qP|+nwlCPA0ON%pr0Je5W({D z^8NewFJ8PjKR@4UwQk+IwQJX|-s<#z}`+yMe|=9BRQZS?-7Y<|y0ssI2|D{zb000C+u_X)ve}XF(i)YWC9UUDV^dPXM#GT;w z?b~z?b@|=yZz(GkFl|_M~@yYE-v;~ z|M=VYfA8Om#p3hl&#zv+`t#?{l+xtnWTjG>oSdxJ>wEX^y?*`r)2B}dx)10NaVLm( z@7`Uybm{f$*D0mh+1W~^vb40cwzjsuIz2so^5n^8vso^e7Zw&ypFVx}?%iB2clq+= zYPC8)Ki_CH_UzfyYPANv59kkP?gY_lwbsj?e^Pq!;zdenY;3Hz`ryHXX0w@6di(b6 zvuDqa9Xpm%nwgm?l}d|?i;YGjrS$FFH*qHn|J(_pP$--@abjj>CZEsm+`03wk9+u^ z&wF)swfDTTvU2?R@sv`jR7xo=FE0;hWY|RFP6XSxZ(mqgSX*1WbLY;dPoIAM`t|VP zf5VM0WLegG9v&X< zBFnO)M~}|V&OUkaB&GD~)vGse-kd*wf4*EUZ`-zQYHDhHe0*@5fPQi;Lj=pq%lGf! zzj*QD{QP{Y)w*@-)~;Qur{b8~~90s3Rdjve`YzE-RK?-_cQWyNB#Ua$Z66iUp< z$Vj13sMTugm){`(aR&&h($07*qoM6N<$ Ef*1w)7Y=0z0ssI2H2H>)000C(u_X!tlOO>Ef9OYXuU4xkPoC`R>RQKr z0Qd!d6!%@bb{#u*Z2R`@>$nd9zktUw011_r{}hYGy?gg|c6LrpP0h^Atet4L+m%YC zr>E!R$B%E{zFm8(qobq0zrS2AfB5j>_3PK`yEy>=X({ge_wT=S>C(c&!j~^!y1TpY z-Mcq7HnuwPf4@I`{`|RGtv-JI_~ONjU%!5hh`zqQMx)W!*Ec&myL0Ex%a<=deE4uf z&jP@TrMSO(_3GTYbI+eYkBFh6p+=)IK0ZD@J-s|JFfefR=+XK4`Fg!RIy!p%`0<-J zZx#xL^XJdc%*>38jLgl=?bxxS)oN|@SpZm3h=^9Jf3;lphPoF-CJHYQ_>6?3{QaN(u$l%~$xm@15 zb?efnrPAue)YR1K_2lH_;lqa`qE@R##KgqJ2CWUikCZlV-aI-wIz2so`cklk& zL~n2J>UF(dpPZbGh~;-<_U+rZ?h6C(bA{!H<_8WOh=@IV_MAF(YH@LK?Zk-_CwhB( zi^bx>g9nF(h8{e45E0LwJ$v!u#p%-GAke@&bE`}=!(dN%G90Q^O1Vq)UTMZ^eh0Z=olUzj)*N=wv@}|X0!RP&(Mp-VzpYGot^#XD>0p&os~+Z z5!q}mzx)os?_eeF0A%8~WdM<&kCPw)5E}mn00960ogVm;Et|F`00000NkvXXu0mjf Dqydn> delta 716 zcmV;-0yF*i2=oY$7Y<|y0ssI2|D{zb000C#u_X!tf1w}6y;`lFJbALKt7{$i0pJ(- zQQUX!+I8&MvF+Qpuj4)d`~n`!03=je{!=U#_wL=>+1WWYH8nFcvv#80ZdWRmo}QkM zA3wf*`*!WEj*gE0{{C{g{Nclg*RNl%@8$sfr=_^>-@pITrArG73tzr`>F(~nckkZV z*x2gCfB*jQ`Sa&$wfgw+f7Wu@BjU-EClS%z-Mu<-=gyt^`T2-= z`SRtXM~@C2IusFugM+nNZES38Zf-6jK7INm?f}1!rEl()O6ACrBZGs3<#KuJ)~!pQ zmP)G=Q&Ur`*OQZzhYuf)h+3@{5fc*=8?-h6KT_JfdGqM#==AjTjT<-Ky?giV+qb)S zfA6lHC>D!mdDsl~;`wG$^!oapWCEf$Lh z4;~yE8hY^HK}0-z_Uy%r7pG63uGj0Ee>QFE@9*#F>Djnb0Pq*3iHV8Zw{M?4dv;`G zq}6I&yLN5cwr#7o-@ku<>(;F+SFUt*b+y~=@$vEd_wPr<;^JbX(KvJF%=PQnBVu7; z;lhOrZ{EDw(6a!rqGNb?I3l)e*-|c-o6Y9GK0_}Si`8m%c6Rokuf%kAc2+8t5oWWw y{PH^hzk`*y1CWW|mI0BRmyxUp8vY*u0RR6!g7}eH7xwf30000)000Cku_X-we*uX*z_2S8i)YWC9UmY6`&+~v zVA$>3x9`-cQ@eNX{`*_R9U!35t$qLi{>ZZI;K74qV`J;<>(y#?aMbB^3WdVt;N5zI=KA{=K*Z43Wc!4_~`>t=(?_`0-<6V&c)GN6X90{ptVy z_5J(ze`2xt{Q2{%SFis3`7@<7Jw08iRHmn=>-GBHy?d`;zy9>;Q*j3v7VqA@yL9Q& z>({SSO7rvcl}cr0Wo2Vyqc@$MojrN-WV6{Um&;2_OQ%ntzI*p>E|dU0hsj zG#Y#M>}j=HcJ2T}q}6Km%AQhs@!~~FX<}lce?NWj;6bz5Oewv6`}WzhXUC2mODWCG z&6P@}<>lo@qmfej_U&6Q?*6$042wdcaN@*?xw*M~KEHG4&VL#``lr(C>+AjNwY9b5 z$B(C!N~KatX?1mV(^rW*z);w}ef!eV(#FQdojZ3vefsq4*RO{U9}XVKvaEkSIy&0v ze{}jEbGh8_-@gYBTgw0ph1uEJQmJ(F=FOKcU)E~1{rmTCIxsag)xR#6%WG?EDW%@K zF^3Kv+H_dl0fs_vX@2C$k(APb0|(BXJJ;=Y2M?S%b7pF4D$BB?M~}|W&p&zcB&GD~ z)vGse-kd*wzFaPE+qP|HW@d77(pm;!e^{)puHL_Y|Ki1qi;Ih`R_oTSTf27c>Q6s^ z{(SG=y&E@fjE|3ZI-Ql3mB)`CrC0+SlH5^ z1Hd0UcI?RK^R-%S(+<5S%d%pzSg+T6ufz-*8yhPW3bk6T_wu{A0|aE}4iJ#Ik+pr3 h&;uVD{XYNz|Nnk*_>*&^x~TvF002ovPDHLkV1gB;f@1&x delta 701 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 Y|4JguE7+m1GXMYp07*qoM6N<$g0bSD@c;k- delta 1824 zcmV+*2jBSQ4%!ZoB!3}EL_t(|oa~!zNK&wrfDYH3bsf@3R_HF zQww@}kyJzx^ng+HrV@%=gDlvzB1*y}ER(ht(i0m&Q7_sl%%s$;Rfua#ZLaB_&duEg z=N|rZZnJyV|D4aOYuEW*zw39M@AZ6?y?XU(V4xqY*$#kVb^&0K!5NXg8GqQp9}9&- znM{V`_{hkJ(P$hP7>J+_4u`XK>sA2h=;-+N?OUXwhD~m6u0o*@i^VA^DF84uG(-@@ z-Me?+y?Yn682(s-2|sV%yr!lm9*>89c6D_{Ed0ie8v(#*G)6~w9*?(g-#(d47MLmc zNqKpBXJ@BYt985GQHbQ9Y=7RoS*cVeBqa3p^=UMkw{PFhN*KX}U%q@fkH>SlT*r$(YPEXNqD4~~l$DjGr>7q|awPiNS5{VT+O+A+nKKrPW$oIvDwS&c z_U*&N!%+@nnl(N(H5C9xMn+;|W5>qEd_LcQdkUK^l}eRL<*HSy;(z1gCl$%d%Tp*6 za=CoLf(8F{==1ps3JR1;<`0zoi)jAxGii(QphY@VV z@87>)p-`Y1^3AhK7bmj~)R4m&-kV{J2CSp*-Ba zeY>%-G0+0(CdOeQg zB_$<(zhAG{2X9YqZtkQRekv*|Ds(zsWQ$j1BqSsV1Ol_!jDLQTBxyFA#bWWbYuBO{ z1I3gh{@JrjZl96EF;Jv|)&wr$%c zkw~0QXLECNYip~=BPi z#Kc6ZltQ5>DSs*H>FF_&H5dEaIwDjuLtEHu-0MOFXa_iPD0GKmp zPIYy4Sy|cr`}ZlImo8m0nM@dlEnd7hEiFwdmA-uW5`O?R8V!bFIF1hw57*Sxuvn~& zj0|cU$YQZnDixYnrUiAT5XsNa@9pgk-5vlIE?gLveIT*1u>deJF+t^wkB{^D{D>XS zglUd*fuJQH0N%fUPbEYmkx(e)a=AE;13-U&f1nMT3@E;Q`GTgnfq{Xvw6vt8Bml_F z%-pqWmw#9+M(+g?nD%%)A*zl}BB8fPC=`ZnJaarA&!nbtxm=ga70nnZ!VsR?1GCv| zl;(1|Xv^mHdP$PRFpR_DARFpYpod9MyoIH6lH8qtWh_<#iyWM{N{CPH;{mXj) zc5F5q03;_TqXYmXB_-MI_E`xgjGMdu{(dB6QGZbpIyDs(6aYYPZ?DhiLzDlC6)OM$ zZNkx`Ko3%>6z$>j^Ya0~VzJDfI~PqPEiElCUcB&lJd;!p7pv78y0OJ#nMqyYVzb$- zRx4^dqOh>=&6_vTjDaGIx9o5@?%cUkRaJHP@L_ZmMmKu*?%e}`*4Ea#x;lkIk(HIj z;eT+lva(2$ym8}3pocA6wk%n)BsDda&*ytQ9+S!B{7GC~+|HdlySuwru3YK&`vZ6Q z;X)8Z=-Z{&uV2q(&5i)QUcX_(hF7m%ef;>by1H5@6rMP7BANkEgg3k{T)5zNyOm1i zvSrHvpr@zj?AfyphXVkfJb9v4t9R_!k$;z$hweu&UcA`V)kT#Z92{(GYumkhH;>12 zI2`BBof{e&0)U2whT7WNyu7^Z?Cg$?j){p0biW%J27{rzygU?3k|YfVL&OzD#?6~I z1p+~1VPoJV30|JZSf9Ke2c2ZK3)9D-=8=LG7!x9q{{eJ&cw|`Nw zv9XDXi8h-paQTmkiAhdQ9vvMWA0H3D36nW^@St2SpVmyT*K0JInO7G9d_F%eF3xVZ zPkTE3{}Ce+iNY=8_xqhr=Tv(xm&+AIKU8*7gGrKfI-O{*H*?Hpb75g2`YC?ZfpZ%poGS&Yr zh(sdlvn+;TgM)(vL3DO@Quh#a=HDzlLlBt1z@aIO@HB-Ho~AIu)07!qj5GX_a6k1% zjllb9X2jDJMtGXS2v1X(HU9S#O3d O0000 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 delta 2015 zcmV<52O#*B5bY0;B!9F?L_t(|oa~!_NK@Y%$DgbFWxu?-T61l)wwCEynWQr5$3TU& z(GU8g5Xt_LB+@KHgg}Kt*8&l&2t+|tLLp02Bt;a&pkyuBRLIPn*ji~i*U~n(`{mn# zefM3uPtNUAc<<}4bI&>VdCuAU-gBPwT&1O?qyPo^2>R0lpnv!?P{NZGN_dh&2~Sce z;YkW5JV~L1Cn=QhB!v>5q)@_>6iRrKLJ3b&DB(#8B|J%?geNI9@67^%AT>1=$MLzj zx!&I1@$qpVd@vY{3l}Z`Kub%@*RNlF9crM6ii%Pym9eq091aHnOeT|7tL^CMc>DJ4 zpB`EO@h1GXZGYPyJb1ujvCySXr}J6(bLY+hKyPpFUnM+?#mdXeOHEC6uZ;LfdU|?i zXXm|p_iQ$sA3Z7*ipi&()fISQBjc}wHF8k7=|@9 zHMwf+b~`HExN(Ee=NA_j+ibR+oSc%9lKlL9fBF3tZ^CoATmYDxo1@d|7K_EAP9tIr_hfF5hwQJYp*1RVtNe z=_@NM8yXtQ&(G)acq)}DA|e9yvDs`D6%{=_J%0eeWHL)iO5)?=T^61`eR}`?eRrE# zSy_hA2?TU3s;o<1$XsJ|cGMUE4#uyC7`Sa(I!MeISv)L>XiNs>DPN)0y>C^oDd{|gm zS65e4Q`5(f9}gZpD3i%LIyx2>7KB2fLVuxqxNHvmvoRfS;~j^nelvsqbLK|w)6 zq0kiu1_cGFR4TNt_&|4ew{JJPkV>Vaqob%Skx15Js=vQqBofWe&Tihk`Rv)V85tSZ zuV0^>oMbQ<9+AZ2;-V|84g~*joPTo%ZTSH3{{4GbK_n6h1Og_LiQ_l`jE#-C_u=#T z?iSFlPY}fT_&ATpW3$-+5E&VH>C&ax*jPH9?&|4Yw%hGKtL_&B0)f9wwYRss$~84L z)z#IRnVIF~mX-*DKqohkCVzJe9<57D zO8{{D_U-uic)eae>-D;yT^n7H-BI-7y@LO%jJIl{22g-hlg1#mRKxC^`W7mLZNVYcsM|Q zSGUw#ES6`_o}E5@y0EYiopDh{@A>oR0MOXjSXx@DR4T<{F@wPni^T*%G&eW9Tgb@B zIB?(qm&*+a39;MleSLk_pKRQ?F*`eZXlO{GP&l1V_XvOOEE~OFyMJ~qJw5$5E$H?7 zHE!()27__(i@7roq9% zwL4vj)&0Z|A3khuZgw~vadB}R4rgR!q_D8iVzB_gz`%f7t)7{gK}UI$$#m=1E%(!i z(P*r!tQ3pIY&P3sv45ykDwD}X5JW{qh1F_}j*dQc>QqlpPeVgP0H*1Q`(EoEf*^js zvv-_Mr$V8qtE)ptm}AF|6&Dwy@D>2>-o1-*J5QcG5ekJRB_;mKSS$?;91cfsZ!eDHd-m*EwnJ-c>zzAyem!NZ56Jt*yAX*)uFtXk3MD*Ap@b(X{|Nv9|NkcH5S6Q5Ksx{c002ovPDHLkV1gLv@lOB% diff --git a/dialog/testdata/color/dialog_expanded_theme_default.png b/dialog/testdata/color/dialog_expanded_theme_default.png index ad75736063c6220fc4343ddc35bc2a8c858aa3fd..37c898f8302ae39a600535445dbf490c85445986 100644 GIT binary patch literal 37253 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 E7YSBC=Kufz diff --git a/dialog/testdata/color/dialog_recents_theme_default.png b/dialog/testdata/color/dialog_recents_theme_default.png index 0d7a5f32e73cfe1127a0979a27975c91a1be2fa9..9fd09fdc189f3a613e927a77ead74f3831e80ad3 100644 GIT binary patch delta 4180 zcmc&$c{H2b-j0?U+Fm(F(ZNADrRAuqqO?l2hAL4d5kpW@shUL_ImxS})f(H=L0eO6 zCSq(v62wqc%^Y)4YK$gkL5Ta_Z+-vV```D+*SptVd#(3fd++BrJ@Z0~>G zb)bBEzmwwWk8yEvLIlPw#VWcjk4Xcx!R@aS@i*{L);v-m#E71@Fk(-6UTNJ|f?sTB+eZ zbB$@O>TAiw&qU;}kL+1RPyJ2~=RGjCj8*ug4!p#+h#!={21OZ~;Z|CddwY7s#Kefu zSZVbN2XX?2;?tXhAR)0dhDj!NXSrF~;*C5JD5*Gh*45C$qRoZBk^~`0z}Pe{yvq7d zFIO)kle=*v`;Qo7=dv>y3AVuM7hf$s@=UDe;dXL=y35Eya2j zoy9lf+i|-fjw1mfK=24NhR1w%;-!uQv zJ~@`x>!VdoZ_H6LK9N~N!&zQkST2vZA9Z6W8MAlqu-_KU$R)C@2RtqlfQnMPfj3hZ z8q#{+4L|PxsyZp`rQ}dpVO5itPahm6`L=b9wFqFRAs?e^_Zg-3-Ni4}3A5v~`|cJq zIP~^p9d+lbK^$5X=3l*zgng>;8*v79F__L~Ip7`>GvAY~Gxi{Jw{>;4bDY3qPft&m zmX?x`WWD>GuXRzveae8Ok&FT1&!)IzN-wU9Xb^Tbr(2Vn8yoX=5D0{%l$1)$Io!sN zi=4^^euQJiJ^M0`r;TpUx5Lf8-vB|!wkn-OG{SBUTW;z1=__vM3#Gb^3DAf8@m$4oh&!HaYZ+1)A=SQ3r>`tYnP#X(xlVXaPB?#PiNPWMMKpdZWG zMTZVtWfFD)BDArw(O-P967!ZPx zwpS7tl+#2RelmyiH||*@5U)n|Z%{Rk$DclZ8pq|ZLDs?H3Eu^L`wOjeYfR#fYCKr_ z*4AbL`$QC#h%<4&dbObnyXxRj!=pN-9vZ2^^T0`j2GnfL>};)qV}R^9I~(wKa+1LX z&k7aIJ+;=L+(gVtVxI2~5VlReVf1o=d{NxRTVv!`_w`mjQ{X`L23;;JnQwL-OPT+c zgfaNB%8oVgzd4|5z@I^o{mwJ#yKD0WO0Z9#`Di#odr|LJ>QNHaDvnk*{F0Z;t>#3J zrfe7lIx^e*OLg@pr7rPk&`GLI_^h}^>V=OBoah@wsHB#f&vl^tH|%rBXH!>!+lJ`A zq9R6Fx@u^+%Lh_UjuJ)@2CHKWXnM81(e`uTaz@#>AFbuK+1c4F6AXp|RnXf`1}boC zb1>p5Rn?F}RoJ!8v~i-*?GrpWZc6CU(A^Om2b*n7b;c>G3y@9k<&56F`A**&!#X3!|4S>vM78w0jHov^IJ!dXsK9J(*vnZl%hj=mR?j8 zZ@(CDzgpJ({vXQXHzraZTm$9^>|o zjw8#9sN+#^Uh_raQEvSQyNc9`p--ug?85SjhLM)@jNgwIEVP@#`{L#PnhEu_b+mh{ zHm>#{z-K`@73n@M;a9o#>Zmn`vp}~g?sZzRfh;1+1b(YsC}tAY=DN?I>6;g_Y;xhE zutDNVz6T=x|5=D6mYXU~?JK=$(0(_RBY7WY1K67T=x__Mc5!_m2mgc-wVmbq3~ zmkydznl;&FhhfQgzCuJ*5UxowB*9Pae=}I7@bQ*ToKSDxf+dzB$ z_&Zwz&Nz0CWwK21=Wm-e^&(9tmlnz@Q!+)&|y8I6x(9hMG_8aEr4va81*t`I+OW)IWw6^Z1 zV-}RG(k^*-y-#uu_u1p`1_cE*JU;AL?$tiio_w2 zC-tHQ%J-WHO!XFb4^v_)ovC4t%PGK`!Fw{P;&i%;d3st9C^H?{ZNo*`pllZ%5g1`m z`DyLG+Cx&%9%sT9FbyVx=DcW*cbQNvuA0P)Vl6G(+umwY{YUSXqRyQ=x4ky+UW!VP z(N!R#K*3DY$7N(>_%qlQ;P#b{i;EwNhgOPeY6xI^2AQ$EysT)N(ALp$IdtwBbP~J> zv|lgqn<3~>Y)nj!#oG)}mf{ZTQA$A-H#L31Ig9?aI#0f5J`@yOiUS!eT^1nv0WsGit;xgP zj}!VFOAc)|lHkQEJGog|*LqFR^>ZKDo(-5gB}~asNUq33c->tJ($=<;!%Q)r!}vLI zbttr{=)?AU+r<KMKOw8zdo3LA?(SY9 z{A<%%cy+HbF|U{v;Zk+H>dGVi0XxYECqb!irY4yhy1GNl<$GP$$K#v4&+Bm}5Y>Mc z6{|o1n#dou%*{J(at{y!#0wyMAP_T?pSJ>LIpP}-s37?M%F6nEFcT61zmnN4h!YXn zw~r*z?R`EbV~`r9F9Vr#+H4%jhoYX>I>Qr0r{|Rj^#by!AIyhnKoUn2op_>!dfqZW z+q*pbS`G~nIomv5oklQFtUnti>Gie43_Bk9j&X}C$m2mGIvSUyi|OolPBr)B0VnXv zrrvoYmKY>5wl^|W?4jiAsx}9jegu7A#LX_w-$z31eu>gT-EQmc{E(!+bww!ReIWYr z^zMxwm9H96l7!*Z!r*A}d#3+9$XK6QB^I_}si;dLQ^( zF-76fjhdaq9(yjiharYHEBQu1*zS1PopR`zH+5p}W1XV(4z$KoAxPaco?XaoQ6oz4 zQ+2YogFq9!3*nJA#OLov^SyX+=M6{@=n*)RSgp<$VVS{%H9`B>g|Ct*?5bEOB(ilq zoa1~v)@9&!e63i(<$g&YA;^a)Y+*-4tr+e%G=BPlmN3N7b@M?Z5XMq*`&U$(>29(I z!IQ10jaVx6P}DE=lp>jsn2-A+x+dP)JFTm%fV&#l!k0oG9)O5k8Otq$3WyXwnZ)~D zBo#yCD~HifA3eF^YAla*5imRzauNSXe+8Ywlb;TAVD~MFC z7uSYB9@YVOegVt=XI9+5V*x*})c+m$e{q4I%(wqE0{CwRAB+L;U(Ef#QULsCKz?#O iF#msAyRjz>f$Z&xM4SxeL?w(tz;WFeeyzyJHS(YJHzaKU delta 3327 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 diff --git a/dialog/testdata/color/dialog_recents_theme_ugly.png b/dialog/testdata/color/dialog_recents_theme_ugly.png index 7ca20e0159b22983f36daea9fd971c04db9b74ae..aee2f7e4aad58f0ebfee6e33ec8cbd721f8f8507 100644 GIT binary patch literal 15816 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 AT>t<8 diff --git a/dialog/testdata/color/dialog_simple_recents_theme_default.png b/dialog/testdata/color/dialog_simple_recents_theme_default.png index 8fcebe0df54c978c692d673c3e3eafe511618014..d062e524198c4c07261f2a314ef3f4ca26fabf3c 100644 GIT binary patch delta 43 ycmZ4Nx!7~VTgHhOSU10AoTemw>pv$0!~g$zNsG*`uj=+<00K`}KbLh*2~7aBG!h{I delta 44 zcmZ4Nx!7~VTgJ_w7^f*sc2H!MzV)Azf#LsuJL^Seh6iSCV*mnAS3j3^P6=Xc52&$9|Ep(UVEF&v>vriZiI6f;Acw)z)z4*}Q$iB}k6{pC diff --git a/dialog/testdata/color/dialog_theme_default.png b/dialog/testdata/color/dialog_theme_default.png index f0f87f972ff5a75527980f5bd01ed488e7b0e47c..a87a51ea427ad8caf93611734a0b170f1a44bfa1 100644 GIT binary patch literal 14778 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 SjfdAG{?Ii#m;d{fJO2Y5@0;lW diff --git a/dialog/testdata/color/dialog_theme_ugly.png b/dialog/testdata/color/dialog_theme_ugly.png index 7f3cc464028c0b176d4c07f24e0496da1a6f0689..e772d302e61872a2269b0cc1f969d034ca9dbe21 100644 GIT binary patch literal 16138 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 jpEda3VH3dw>296)}8_ diff --git a/dialog/testdata/color/picker_layout_advanced.png b/dialog/testdata/color/picker_layout_advanced.png index 5ee0d7b2f402ce3fee536a2441583c149cad2074..91cad34b7e84cd48dafde904c71c4d542126dcb5 100644 GIT binary patch delta 10125 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 delta 3445 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 does not consume space on the canvas diff --git a/internal/driver/glfw/canvas_test.go b/internal/driver/glfw/canvas_test.go index d7ab0ae50a..2476fecb87 100644 --- a/internal/driver/glfw/canvas_test.go +++ b/internal/driver/glfw/canvas_test.go @@ -455,7 +455,7 @@ func TestGlCanvas_Scale(t *testing.T) { func TestGlCanvas_SetContent(t *testing.T) { fyne.CurrentApp().Settings().SetTheme(theme.DarkTheme()) - var menuHeight int + var menuHeight float32 if hasNativeMenu() { menuHeight = 0 } else { @@ -465,8 +465,8 @@ func TestGlCanvas_SetContent(t *testing.T) { name string padding bool menu bool - expectedPad int - expectedMenuHeight int + expectedPad float32 + expectedMenuHeight float32 }{ {"window without padding", false, false, 0, 0}, {"window with padding", true, false, theme.Padding(), 0}, @@ -481,7 +481,7 @@ func TestGlCanvas_SetContent(t *testing.T) { w.SetMainMenu(fyne.NewMainMenu(fyne.NewMenu("Test", fyne.NewMenuItem("Test", func() {})))) } content := canvas.NewCircle(color.Black) - canvasSize := 200 + canvasSize := float32(200) w.SetContent(content) w.Resize(fyne.NewSize(canvasSize, canvasSize)) diff --git a/internal/driver/glfw/driver.go b/internal/driver/glfw/driver.go index 213c544e29..4d58d9ff7b 100644 --- a/internal/driver/glfw/driver.go +++ b/internal/driver/glfw/driver.go @@ -35,7 +35,7 @@ type gLDriver struct { animation *animation.Runner } -func (d *gLDriver) RenderedTextSize(text string, size int, style fyne.TextStyle) fyne.Size { +func (d *gLDriver) RenderedTextSize(text string, size float32, style fyne.TextStyle) fyne.Size { return painter.RenderedTextSize(text, size, style) } diff --git a/internal/driver/glfw/driver_test.go b/internal/driver/glfw/driver_test.go index d951f874df..41ee2d6acd 100644 --- a/internal/driver/glfw/driver_test.go +++ b/internal/driver/glfw/driver_test.go @@ -42,7 +42,7 @@ func Test_gLDriver_AbsolutePositionForObject(t *testing.T) { movl := buildMenuOverlay(mm, c) c.setMenuOverlay(movl) w.SetContent(content) - w.Resize(fyne.NewSize(200, 200)) + w.Resize(fyne.NewSize(200, 199)) ovli1 := widget.NewLabel("Overlay Item 1") ovli2 := widget.NewLabel("Overlay Item 2") diff --git a/internal/driver/glfw/testdata/menu_bar_active_file.png b/internal/driver/glfw/testdata/menu_bar_active_file.png index cb1c0de760b678ff35b84edd7811bc15a972ab74..8c3a63f84f2169236e8e86e032eb6a9334c63866 100644 GIT binary patch delta 5201 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 UyR2>m1^@s607*qoM6N<$f=L+pQ~&?~ diff --git a/internal/driver/glfw/testdata/menu_bar_hovered_file_new.png b/internal/driver/glfw/testdata/menu_bar_hovered_file_new.png index 154626760a107caa98bbc3dd711d92e2e112dd05..97f8b506df26b728430fdbf0bf0d44bf898d34b3 100644 GIT binary patch literal 6486 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 literal 6797 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 YdeW=l_nx*C@PX>yU2SE8;-i=U0c^$-oB#j- diff --git a/internal/driver/glfw/testdata/menu_bar_hovered_file_recent.png b/internal/driver/glfw/testdata/menu_bar_hovered_file_recent.png index f5784c11196e6e70406d6ff914c14889c784489b..72b9f9d026128549e2696978aa41524855dd1612 100644 GIT binary patch literal 8605 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 e6bI+}dUiccg=O_#V_(N-v1vvhVj+_ literal 8603 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 diff --git a/internal/driver/glfw/testdata/menu_bar_hovered_file_recent_older.png b/internal/driver/glfw/testdata/menu_bar_hovered_file_recent_older.png index 1bacf2cf4395f5744fa7345fcee164262f06b563..61b004a6eaea08497235d45afa9827a889ad0bbb 100644 GIT binary patch literal 9752 zcmdU#cQl;s_V-65F-n*Ri53J=qW9i1dJw%tiRisV8=b@;NC<-HLG&)#s0j&SFrpJ( z^xmTk@0D}Tdw$RPt@FqG?`y4CVU7E~?(5q7yFdH8??}zZO1B882_O*2Efr;XZ3qO1 z^Upu%HSn8bdMZW;gn3p){-Lf<`sTE+iSEcO-mb?=|25IikdB+gFy(lsIZSU<<_bk8l2ZypeN=ov|iy0ChTd5({q8}w7AyuKUYqFF` z7^M9k5(2x)a6N<<$^bz=gyP&Q&1DdzAn5Du-Ce9_WNJA(9#N_|yeBCs$;JkisjIIq zuut`jHS%A{K%AZIXf#rUNR}s|TaNe9JklrWe(1Oa)?i7`)r0Zz#vmiQlT7($G5OOKaOMHV&zYX+Ot@ zhpU2$y>hGe#;YuyTdl0Em)6#v=;@8Hr%-U46qc1KKvUkomptG6^x(mR7XOnZ^wRCy zx6jr`a-TeTf<0-_RJ>N*t|ya^JIvQ@$UkET5FLQSWrRbht(wG?uHNsMwz&QD0sjgIT#c8Z%oD zras=8ZSy-??}#ATnL-VXjEsEyW}=4vvz3*Vs%o?$C-;K~DG~@5EiElpPZHSJ4_IAfPNBvf?%sa1G0Ggb zgEt!^BNN=8Uek8jX#8|$k3@uzPmA6&GbQDTnc2?bA{iOkC;OrN3<<=-EcP{(K>5>_ z$@P}``FWYEi-Y-&h@)DG;t6`>TSHELDPny5$f&4PVdqJ3uDyMI^{%s*GyXeeCMfL# zkM@p^+?<@K=;*T2(#xHzOV`u=rJ;QFAp_Qj2KjQ(t*yEwVF<)P2Zm|z$ zG6;%f5PV(dx)G1l-(yFOapWTC0=~O^e7w22Ia+31;CJ=~kN#s`p436F0NA40;43MY zsn)>rjf%FJy`91EmKJPh@D6m>r`d6=e7?)v+`J8YOe1}+ZDtm{I*|Q9C%=ZOok=N% zoPvT0SzJgtQ#>tt^YYs0_R8s1C`SMyA{6$ueRrTPYc1ystATR{WswgTfWV?4Sq-(MJUDe9LY2ewRy@yJYwOD#T4ePta#E~Y%jvCjc%%L95 z3h%SekRUg`MJw*v`I<^!U*Cj# ztfPa8m$$Nyxhsa21_qNIs%dIEH+F6DIy+oDJ3D*4%5bm$o-rJ$xw(?n)tg%DJHl>+ znt0Ic!D_Px_Ov=Qv;#34Sm2lX_HCu_!Scn$#rXJm7$JqCygV<_!D6h8^rq1Q2#&GR zCkgM~>FVp>p{6cQ=9Yp#depPmO{I>M-+%SZM>4al%vn!Q z&%^f3Q8ru8dzVOc$T7@E zl-sAGm7=Dvtv&casxj7jqNk@vi6>N}^WDaxHv8(+IeiugG!*8I&-yq$#3Ne~UD<`4 z4E0rd@uM+Vtx%KAFe$Ob)Og3rbiQ3MZ#c!^FPsK?c(}P0e+oSN12v7xQEpyd*swv# z+;t$x+&(nYt6v%j!r=LbCw0of2<+M;_Qd!z2QQyZN+*(swhPsqC7Ns?9(CERyPfg# zOf6Mk@d$gzJumpI?B?j`xM!oulHlv_Pqv{<@t$M>$o|*h*Qse~=CS0S)a6A*57dWD ztz6%7(#3WKL*P*HTVr3pUf&5Xa_JN>GT~0ftPs8%cICYG`9s5R7u+Oka~pu(0?Y&|0i@4+hTTvnCBh93Cibwh2Pr|~&9B`@(oyzp76z`KxjE~optUwN7;zT+?+OM!X z!7F`fh~v$P(o)X88`rK~TgGJZ#3_SYsIeH=IX%(W9|d`NZ_`Lw70jT(S!{5$q8DTo8uD_j#{)Ko~+_Xm_}2zc}KW( z;F(&wXw^swM*7^z+1c5`g0YoveeO$WOiTQy~F?jj;-PxZT%Re~p!!{*g-X z7%;e8I8hvWDfsfVpw)mNWLtivX&D4$o$D;Pxc!D_OzP3=Ch!#!i;|(oD@Wg&G2VFI_ z-Xtz#-8T)HGwUNIBgtQx>9w`BK@NlOpkP#(pe*d|#r%(*BqStcWZKMvv3m55II<$6 znXqckCYR|(a1$gFSxD{S;Su`s6?W4aZ`!IyySck8a$!k*gHz{rvfw zHy*ODuTRQ{TR195O-)VtqCA$MTAb#YT@a#D(k!KLY)5nW$a@T3}J- zGxzyLfku`hG%qjjIcloPvWw;Z{kbq6(?)V?Y9l?p#Ds+0g4=6E;L1S7P0g#_aOd4o zjB!x+@$N~Pgr0KKCdJp3^9u_vvqncpxeY7tiHlRSzOkMtF{oI835$pn6cmu$72Vxm zLi^0CCUdKU1N*rZUCqgnjP^fTS7>Ak9|V#XT7O`AN67t`ayM>yc{%Nse72^Yi_23} z(`kEV(IaLVnc2e^!Yl6qO(Z5JN=YDvg@t*Es}k0NA6MOEZVBduNZp=N!1*tE^BfD9l@(uAE;BO|+0g&cP|8OAfE`~iMO!}tXRe%9FQ zJb5w!c0ehX?u}Vre}7C=)VjCa`kU*>0nO&-X6fH^xIk*aF(LOf`UG^Xw_cotA~(`lf&{!_CPF7=FNV zHa;ya+7$r=?EHAE<4puHtsnMi?3=}NBcs&f=bPhI&}_hK+cPaRu2@D!M!1}u9)mnI z5PZhxG+Qo$m|F1r#KZ(I2Z1;N+>WiNs7S(llb4V04}dBwf3I`?*%?c329(c%FMzEO z@FE!p2M6-4!?D4IY@+Yx@z&4Z5B2nJXI53?I^q&RANNu|0;rv*n*2CRy2WXN9|_CC zxaxJ|c03=9RAcElX)AeLKZpN-GF;1yC?o7+l14Mjqz^WiRfkcb{1C3TN zS@iVuZ8m+W_+%_TzP|X^ukrBkBv~W2r&L_L9-eq?Acxy{gWhG5Z`|SPS_1-skOB=Jlk!! zP^%%mKSjV62&TT47N6a~JszHl!NI{;=`-ju|4#m)%nzNDkrXniz0&|k$Bn3{D1AKl z_nHaJb*e zc3-tqP*9MC#e!=a*5>>6k)d|cArM0n|JtW2En(IZ;I{hFRh-6JTIQ9~FCXVPL+w+a z);c7Xlx%=(aG7mY*Ls(gW#;Kw1H|pj>Nf;pYERRi{M65WckYXTZ9mZVZ(M6@YoNSV zRaH^&JXO=s=o9gDp~iyl>2av7U?z8 z%)&#uJ9qA+@_=R(T(Bs!IO_`4 z9i`8p%SH~)0i;qY52~?op>q04bX$i0RfP5Y`zlU&D4CrXkeSTO&UU!xIoJr{QWJ1 zPQF@IP0dI9$-cf@vs}cGfn(AzUG~5$>-{YeUWbVhIuPwIGYvb^@J&4=) zGuP(LaS6g+YQ=NJZO3J6l7G`;oc?Q<1j-PPUeYdlXHJ=-rZ^-htyCd>SiqXi7L{)= zoi(dtP$|KG9E=|ZXGnYm>ZV&CQve4Ox>`^@VLSDqCV5yz>*wRjjSv|7u5cv^MMYx% zjY~=hDe7awZIG=g3vGg0k}#Zyfd1^@fN7dG6pg_cl<}{%hMdp2{>v@;2Vh@`vj}cY zr)Sb>^3!{gAj|6NjOa`ES0`e?xIv3lK{-HsSOd8R8>DLkXU-vM0G)x7U-q zUi-QXvq>(Xs*2V?@3+9yHat8^-QaJkU}!kr@O*LDIEGfj8{igb7C)Ak0|K*#W*e9V zf-XsrgG04Iqpr604XC@Is>a5SAu1l8d;nZ8&uCupbgv09bT_8VQ1Up%HvAS9X^Yd7 zg1%>%C3l3&%v~`@{qvdrc{klp+x4L!w@|24&=BfzH4I#UqXAvZPi&Qj)X{K`LbPGh zNID%UB?)b(gGy>z0-ahNcI9ZpENDM6HhHX;M#L>T1cUH+ZvI4Af~R66J*Q4sxMgcA z?SA}44&zAgUrBfFJPte?9vP#MW_$K3xwN!AUo5@V#f2cen}=KfHqkAg^#=k10uoh} z47$b!V>y-#KMEtsV$;R-F5jXkYXMh%d_p71#I$HWk@Z zV@a8xobtrOlSgQv@d@|&M3E83~chEPo&%4UfgTEf7DygX)`C0Ln2;I z{b0GTq@?70A)3diR%Y)j8Hau;EK;5{^6TIrDJF8tAq8MPaE=m_lYvYkz7)NESYU4p z4aH(_bNWk2(73kV=}q~Bji8UYJmXN%;@fE!2tM9SA-r=BnXjOD?Bx~cy0`Fh!GbQ< zHa}fV#BRLOz${=d7bA`CN0S||AAK9l)9L7Fn{1^Gb_c-}ZBWME=+QO&)oLk6AK zL&WL#(S@&AM*y#7=R3r#^GWgKPpx%1-Cs*!y>bl*DB3p=VrMHXZ@pZtXj>Q( zj?l>5T%4QRT>ZZ2u5|Mzov3%|hX%?qnG(IxF1iDmD-S*~G2QGS7IWheuc*v&x)$;%9b6lbsI-2N~xMB${Kc2Dj~LL5+;1mB{xydv$sN+|$3{ zj-#bowY#SQCRLOWb#Y{6U8}VD&QqkOX<*>j-+KiK@$88*@=4Y^Q!VF9NnGoMvs^s& zy86c>>FTenC(sWb0JBchRX1aXcQrk0>13Ph^5WolD@IsQ5IA4*Y0P_#0cUFk>jg1Q z{(lia6WtPHk@Q^n>XECc4pjH(>XHY})>g>&Y;~YIDvBjiK9CP(!fo$z?B<0PkTPwN zYAgKyn6saQb9hblN!UwmI+t31ozb}K>(`UHm-l>tn4>Up1b?G@6L4v+3Ts_QqT$w47i+G90`MrS;*RLZwx=d3bUndV zPg8X83aYDmrOW;Wkvfw=1}sT(g9C!fu_dD)L}_Q4;f6f!{I=IYrb}ZB-Q$MzUf?UE zf-~Oc0z=Bm4P{~!>8TVF$3HlSGvFl)1}pzub35@1#_SJ^hhjf;NNip)W;4dIF)~^J zb^u5QYy%nW;ZS5S<`MDh>qt$Ga5hqL$5Bo~!e}rQnQ20}j#rvD^h{bW1(ba*l!eyj zoiJtt?ALiS+}+oAbaFyMK=2Yq%>Xrz@cgK3S5oCp)G=2j@p)VpdZcmAn9W{SR|ldD z+(T#OnA{WJ&0E(voP!kL{2iXB>8Ys%=Q*ADb;wD6%{ahU6kJAD4i1f0-K2pCDlh?n zJ5%K-vqf|~seJb0(89meI&TK`FmOJLEu5BFD&2&@dSRQ*#Y_N z(pKsxNo~MI8I+h~7<~L-zC|-dZFFktb;PHIq;e|wT}kd_;C9|aeu#KRugOLZTAzwEnl_c$e(5qXywRXvzyM*DWrru%)K{rRXu(=Ktb9Lh|3A z|DTE6aN74u-q;AW+d`h--%`BuDDgtXvLVla0TK}&?(G-rcdfy%go`fueDFQr6&d-j zXO1P$CfXMka@(-p#|sK0*A}~CxJnAY>yL6dSy#qlfFi|aijSa7N2y}F2*DRV{@QdC zKya}3$jHd`8}oEp&=CyA6<{>@**Rz*cz?G2=_vn`Z9)oeO7~lh%+PFoJ7U{!FK_h6 z#GJ?8?e6W)W^(}7P8XTo+*lxO^A}m0neLi*qtoZqq7hWDFskht8S%noN&#&Jkb=SR zh>L@c%mbaoMY}fsHIj@~Jr%j~aQpkpp)L$w_WBk+)j-88o@(;)?K=xeG*ndIn3)e& zdQt92>u+8Y_0@yQq9Gy@ZeH!~A!N4Y?8;MD$Nhk#q_kLD2vlfYJp-nweRqUw+#?S{ z0?&1;;jfWOk2BcY5E>^(=RZ|>T9EYyC=&7X%*>~ThLkik{(B4G4i7#5T=yafd&WnU z@MH7}XVW_G{d>wj_83Sg%wcI_Zf;gbM-Tri_r+eI=4v)JqYWLposzvR}K=;)u#zLUSYk1d|N8ySHamAKd7 zziH@aatEJfr%7vo80h)=fssIQ`}Wb42gW|!4Ya>tpBDFg)Ya8NPi-!C0n97#2?Jx} zpF%qf+XVNJv0$&K(ldBiSnC~Z0cXn0>f~xNWMQsWrxC8U)@745k>>9iaBr3ZCvoSC z4HvuQ)Q>ObMxLIgfh{EoL&;eI?g9b_7ok1K9nAYG095@?8;4tsjhvmGCX?m<(Z$Yw z{CL05tGBoJaDRW$qzia2GY!uzzeU|9>X1DBl~AHz)}wW9oXe;;7^wFenob)isY6B< zmE+*xC}dV#UQ`7mFcu=-9K#H@FEnA#pT`Y2iny4xJ;!bPy5yck#kVlGx9HUqxpxp9 zRX*MDm#AmqdQ0%d=}Jm8g@n6~SbuhgVd+p4xIJ5x!>1r)V4(twqNMXnC|32B%)b_{X3$aAhlVtqLuJftk@e47#QIV@v(hO*3?KPzEr6 zij>{$bgWSKTe^J_AEx=4IkN&)s_rqTf24M%2#X`4iJM=Xoc!<>e_H8J15~ zddi=+_(#iJnT$=t` zwKYN$7#KJ`J&j2h8*(r=X;W`;li?;Mp2UF{CWdy!Bqk-68CE`fUr|wMz!R6ZB+wDT z^Il+Ofj;=Y<6Xk(-tTNBh3}<(s}q&KF77GbxN$3}GOLq~91t1Qe?Dyf>NGY|_8B9L zXmxDIe9_5MPhacD_H{-i@aPP*wMi)`R(5t=K{IDScExYiP6q z4Jm!{skE%@G$2S>`Bgv)|yPlnof zQ#}*KMxOTC`A(Y*aF55w4aux$|Jn2-wkGpXydAvs!57b+oHjvc|0D@S&ouBM1u&9B zRYJVln)eU07_+hTzkdD27Df8Rke5IqcVA~?)xo5 z@22MO*(8(F*cT*zm}e!{`>cDFwmk7(rYAxGBjXd3UHLkHkfN9BqStro3baPfkiz625iwn29d4t<*)jWjYc0`D`31NlS) zZ$c;7pZw2b$ST0OI5|hb{5Uc3HU-6)&W_I7y?;Gl7|pBX5xcg@Pi(=bi3yD`NbAI}F>?jfbjPS}x;w8&$-a_t*!$GWxg z7&cEE4H$I)1xaAMn(LVhFZ8LO@F9gV2r_maqqi03%x?Ubmxlf`PXC8u{`WHeA6EMR i=|{$|@F0+@D}#G!tR3}u81TjyL`C7Td^!Bt%l`xU^uo^o literal 9749 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 diff --git a/internal/driver/glfw/testdata/menu_bar_hovered_file_recent_older_old1.png b/internal/driver/glfw/testdata/menu_bar_hovered_file_recent_older_old1.png index b273914796127ca8f15b4b812dae15779e366df5..cd35052f900500ba42fca17c15f714948aa42da4 100644 GIT binary patch delta 3322 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 aspect { - newWidth = int(float32(size.Height) * aspect) + newWidth = size.Height * aspect widthPad = (size.Width - newWidth) / 2 } else if viewAspect < aspect { - newHeight = int(float32(size.Width) / aspect) + newHeight = size.Width / aspect heightPad = (size.Height - newHeight) / 2 } @@ -33,17 +33,17 @@ func rectInnerCoords(size fyne.Size, pos fyne.Position, fill canvas.ImageFill, a // rectCoords calculates the openGL coordinate space of a rectangle func (p *glPainter) rectCoords(size fyne.Size, pos fyne.Position, frame fyne.Size, - fill canvas.ImageFill, aspect float32, pad int) []float32 { + fill canvas.ImageFill, aspect float32, pad float32) []float32 { size, pos = rectInnerCoords(size, pos, fill, aspect) - xPos := float32(pos.X-pad) / float32(frame.Width) + xPos := (pos.X - pad) / frame.Width x1 := -1 + xPos*2 - x2Pos := float32(pos.X+size.Width+pad) / float32(frame.Width) + x2Pos := (pos.X + size.Width + pad) / frame.Width x2 := -1 + x2Pos*2 - yPos := float32(pos.Y-pad) / float32(frame.Height) + yPos := (pos.Y - pad) / frame.Height y1 := 1 - yPos*2 - y2Pos := float32(pos.Y+size.Height+pad) / float32(frame.Height) + y2Pos := (pos.Y + size.Height + pad) / frame.Height y2 := 1 - y2Pos*2 return []float32{ @@ -56,7 +56,7 @@ func (p *glPainter) rectCoords(size fyne.Size, pos fyne.Position, frame fyne.Siz } func (p *glPainter) drawTextureWithDetails(o fyne.CanvasObject, creator func(canvasObject fyne.CanvasObject) Texture, - pos fyne.Position, size, frame fyne.Size, fill canvas.ImageFill, alpha float32, pad int) { + pos fyne.Position, size, frame fyne.Size, fill canvas.ImageFill, alpha float32, pad float32) { texture := getTexture(o, creator) if texture == NoTexture { diff --git a/internal/painter/gl/gl_common.go b/internal/painter/gl/gl_common.go index 1f30b618fb..d8416311ac 100644 --- a/internal/painter/gl/gl_common.go +++ b/internal/painter/gl/gl_common.go @@ -84,8 +84,8 @@ func (p *glPainter) newGlTextTexture(obj fyne.CanvasObject) Texture { text := obj.(*canvas.Text) bounds := text.MinSize() - width := p.textureScaleInt(bounds.Width) - height := p.textureScaleInt(bounds.Height) + width := int(p.textureScale(bounds.Width)) + height := int(p.textureScale(bounds.Height)) img := image.NewRGBA(image.Rect(0, 0, width, height)) var opts truetype.Options @@ -107,10 +107,10 @@ func (p *glPainter) newGlTextTexture(obj fyne.CanvasObject) Texture { func (p *glPainter) newGlImageTexture(obj fyne.CanvasObject) Texture { img := obj.(*canvas.Image) - width := p.textureScaleInt(img.Size().Width) - height := p.textureScaleInt(img.Size().Height) + width := p.textureScale(img.Size().Width) + height := p.textureScale(img.Size().Height) - tex := painter.PaintImage(img, p.canvas, width, height) + tex := painter.PaintImage(img, p.canvas, int(width), int(height)) if tex == nil { return NoTexture } @@ -121,26 +121,26 @@ func (p *glPainter) newGlImageTexture(obj fyne.CanvasObject) Texture { func (p *glPainter) newGlRasterTexture(obj fyne.CanvasObject) Texture { rast := obj.(*canvas.Raster) - width := p.textureScaleInt(rast.Size().Width) - height := p.textureScaleInt(rast.Size().Height) + width := p.textureScale(rast.Size().Width) + height := p.textureScale(rast.Size().Height) - return p.imgToTexture(rast.Generator(width, height), rast.ScaleMode) + return p.imgToTexture(rast.Generator(int(width), int(height)), rast.ScaleMode) } func (p *glPainter) newGlLinearGradientTexture(obj fyne.CanvasObject) Texture { gradient := obj.(*canvas.LinearGradient) - width := p.textureScaleInt(gradient.Size().Width) - height := p.textureScaleInt(gradient.Size().Height) + width := p.textureScale(gradient.Size().Width) + height := p.textureScale(gradient.Size().Height) - return p.imgToTexture(gradient.Generate(width, height), canvas.ImageScaleSmooth) + return p.imgToTexture(gradient.Generate(int(width), int(height)), canvas.ImageScaleSmooth) } func (p *glPainter) newGlRadialGradientTexture(obj fyne.CanvasObject) Texture { gradient := obj.(*canvas.RadialGradient) - width := p.textureScaleInt(gradient.Size().Width) - height := p.textureScaleInt(gradient.Size().Height) + width := p.textureScale(gradient.Size().Width) + height := p.textureScale(gradient.Size().Height) - return p.imgToTexture(gradient.Generate(width, height), canvas.ImageScaleSmooth) + return p.imgToTexture(gradient.Generate(int(width), int(height)), canvas.ImageScaleSmooth) } diff --git a/internal/painter/gl/painter.go b/internal/painter/gl/painter.go index 7cb065e47b..70270b7054 100644 --- a/internal/painter/gl/painter.go +++ b/internal/painter/gl/painter.go @@ -52,10 +52,10 @@ func (p *glPainter) Clear() { } func (p *glPainter) StartClipping(pos fyne.Position, size fyne.Size) { - x := p.textureScaleInt(pos.X) - y := p.textureScaleInt(pos.Y) - w := p.textureScaleInt(size.Width) - h := p.textureScaleInt(size.Height) + x := p.textureScale(pos.X) + y := p.textureScale(pos.Y) + w := p.textureScale(size.Width) + h := p.textureScale(size.Height) p.glScissorOpen(int32(x), int32(y), int32(w), int32(h)) } @@ -73,18 +73,11 @@ func (p *glPainter) Free(obj fyne.CanvasObject) { p.freeTexture(obj) } -func (p *glPainter) textureScaleInt(v int) int { +func (p *glPainter) textureScale(v float32) float32 { if p.canvas.Scale() == 1.0 && p.texScale == 1.0 { return v } - return int(math.Round(float64(v) * float64(p.canvas.Scale()*p.texScale))) -} - -func (p *glPainter) textureScale(v float32) int { - if p.canvas.Scale() == 1.0 && p.texScale == 1.0 { - return int(v) - } - return int(math.Round(float64(v) * float64(p.canvas.Scale()*p.texScale))) + return float32(math.Round(float64(v * p.canvas.Scale() * p.texScale))) } var startCacheMonitor = &sync.Once{} diff --git a/internal/painter/image.go b/internal/painter/image.go index d3a59f5a8f..1fe80f7c29 100644 --- a/internal/painter/image.go +++ b/internal/painter/image.go @@ -129,8 +129,8 @@ func scaleImage(pixels image.Image, scaledW, scaledH int, scale canvas.ImageScal return pixels } - pixW := fyne.Min(scaledW, pixels.Bounds().Dx()) // don't push more pixels than we have to - pixH := fyne.Min(scaledH, pixels.Bounds().Dy()) // the GL calls will scale this up on GPU. + pixW := int(fyne.Min(float32(scaledW), float32(pixels.Bounds().Dx()))) // don't push more pixels than we have to + pixH := int(fyne.Min(float32(scaledH), float32(pixels.Bounds().Dy()))) // the GL calls will scale this up on GPU. scaledBounds := image.Rect(0, 0, pixW, pixH) tex := image.NewNRGBA(scaledBounds) switch scale { diff --git a/internal/painter/image_test.go b/internal/painter/image_test.go index 058d6beae0..325eb05067 100644 --- a/internal/painter/image_test.go +++ b/internal/painter/image_test.go @@ -14,8 +14,8 @@ func TestPaintImage_SVG(t *testing.T) { defer test.NewApp() for name, tt := range map[string]struct { - width int - height int + width float32 + height float32 fillMode canvas.ImageFill wantImage string }{ diff --git a/internal/painter/software/draw.go b/internal/painter/software/draw.go index 78e18379d6..8888a560cf 100644 --- a/internal/painter/software/draw.go +++ b/internal/painter/software/draw.go @@ -29,8 +29,8 @@ func drawCircle(c fyne.Canvas, circle *canvas.Circle, pos fyne.Position, base *i scaledX, scaledY := internal.ScaleInt(c, pos.X-pad), internal.ScaleInt(c, pos.Y-pad) bounds := clip.Intersect(image.Rect(scaledX, scaledY, scaledX+scaledWidth, scaledY+scaledHeight)) - raw := painter.DrawCircle(circle, pad, func(in float32) int { - return int(math.Round(float64(in) * float64(c.Scale()))) + raw := painter.DrawCircle(circle, pad, func(in float32) float32 { + return float32(math.Round(float64(in) * float64(c.Scale()))) }) // the clip intersect above cannot be negative, so we may need to compensate @@ -112,8 +112,8 @@ func drawLine(c fyne.Canvas, line *canvas.Line, pos fyne.Position, base *image.N scaledX, scaledY := internal.ScaleInt(c, pos.X-pad), internal.ScaleInt(c, pos.Y-pad) bounds := clip.Intersect(image.Rect(scaledX, scaledY, scaledX+scaledWidth, scaledY+scaledHeight)) - raw := painter.DrawLine(line, pad, func(in float32) int { - return int(math.Round(float64(in) * float64(c.Scale()))) + raw := painter.DrawLine(line, pad, func(in float32) float32 { + return float32(math.Round(float64(in) * float64(c.Scale()))) }) // the clip intersect above cannot be negative, so we may need to compensate @@ -141,8 +141,8 @@ func drawText(c fyne.Canvas, text *canvas.Text, pos fyne.Position, base *image.N txtImg := image.NewRGBA(image.Rect(0, 0, width, height)) var opts truetype.Options - fontSize := float64(text.TextSize) * float64(c.Scale()) - opts.Size = fontSize + fontSize := text.TextSize * c.Scale() + opts.Size = float64(fontSize) opts.DPI = painter.TextDPI face := painter.CachedFontFace(text.TextStyle, &opts) @@ -154,8 +154,8 @@ func drawText(c fyne.Canvas, text *canvas.Text, pos fyne.Position, base *image.N d.DrawString(text.Text) size := text.Size() - offsetX := 0 - offsetY := 0 + offsetX := float32(0) + offsetY := float32(0) switch text.Alignment { case fyne.TextAlignTrailing: offsetX = size.Width - bounds.Width @@ -197,8 +197,8 @@ func drawRectangleStroke(c fyne.Canvas, rect *canvas.Rectangle, pos fyne.Positio scaledX, scaledY := internal.ScaleInt(c, pos.X-pad), internal.ScaleInt(c, pos.Y-pad) bounds := clip.Intersect(image.Rect(scaledX, scaledY, scaledX+scaledWidth, scaledY+scaledHeight)) - raw := painter.DrawRectangle(rect, pad, func(in float32) int { - return int(math.Round(float64(in) * float64(c.Scale()))) + raw := painter.DrawRectangle(rect, pad, func(in float32) float32 { + return float32(math.Round(float64(in) * float64(c.Scale()))) }) // the clip intersect above cannot be negative, so we may need to compensate diff --git a/internal/painter/software/painter.go b/internal/painter/software/painter.go index c75b7b5b40..79be9ed78d 100644 --- a/internal/painter/software/painter.go +++ b/internal/painter/software/painter.go @@ -29,11 +29,13 @@ func (*Painter) Paint(c fyne.Canvas) image.Image { draw.Draw(base, bounds, image.NewUniform(theme.BackgroundColor()), image.Point{}, draw.Src) paint := func(obj fyne.CanvasObject, pos, clipPos fyne.Position, clipSize fyne.Size) bool { + w := fyne.Min(clipPos.X+clipSize.Width, c.Size().Width) + h := fyne.Min(clipPos.Y+clipSize.Height, c.Size().Height) clip := image.Rect( internal.ScaleInt(c, clipPos.X), internal.ScaleInt(c, clipPos.Y), - internal.ScaleInt(c, clipPos.X+clipSize.Width), - internal.ScaleInt(c, clipPos.Y+clipSize.Height), + internal.ScaleInt(c, w), + internal.ScaleInt(c, h), ) switch o := obj.(type) { case *canvas.Image: diff --git a/internal/painter/software/painter_test.go b/internal/painter/software/painter_test.go index 7d52544f18..b3b9fd06a3 100644 --- a/internal/painter/software/painter_test.go +++ b/internal/painter/software/painter_test.go @@ -54,7 +54,7 @@ func TestPainter_paintGradient_clipped(t *testing.T) { scroll := widget.NewScrollContainer(g) scroll.Move(fyne.NewPos(10, 10)) scroll.Resize(fyne.NewSize(50, 50)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -30, DeltaY: -30}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-30, -30)}) cont := fyne.NewContainer(scroll) c := test.NewCanvas() c.SetPadded(false) @@ -86,7 +86,7 @@ func TestPainter_paintImage_clipped(t *testing.T) { scroll := widget.NewScrollContainer(img) scroll.Move(fyne.NewPos(10, 10)) scroll.Resize(fyne.NewSize(50, 50)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -15, DeltaY: -15}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-15, -15)}) cont := fyne.NewContainer(scroll) c := test.NewCanvas() c.SetPadded(false) @@ -292,7 +292,7 @@ func TestPainter_paintRectangle_clipped(t *testing.T) { scroll := widget.NewScrollContainer(box) scroll.Move(fyne.NewPos(10, 10)) scroll.Resize(fyne.NewSize(50, 50)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -10, DeltaY: -10}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-10, -10)}) cont := fyne.NewContainer(scroll) c := test.NewCanvas() c.SetPadded(false) @@ -323,7 +323,7 @@ func TestPainter_paintText_clipped(t *testing.T) { scroll := widget.NewScrollContainer(widget.NewLabel("some text\nis here\nand here")) scroll.Move(fyne.NewPos(10, 10)) scroll.Resize(fyne.NewSize(50, 50)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -10, DeltaY: -10}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-10, -10)}) cont := fyne.NewContainer(scroll) c := test.NewCanvas() c.SetPadded(false) @@ -340,7 +340,7 @@ func TestPainter_paintWidgetBackground_clipped(t *testing.T) { scroll := widget.NewScrollContainer(w) scroll.Move(fyne.NewPos(10, 10)) scroll.Resize(fyne.NewSize(50, 50)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -10, DeltaY: -10}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-10, -10)}) cont := fyne.NewContainer(scroll) c := test.NewCanvas() c.SetPadded(false) diff --git a/internal/painter/software/testdata/draw_image_clipped.png b/internal/painter/software/testdata/draw_image_clipped.png index 30cf7b86a4d9f93325c7fa5f1b945d77bd444d92..09fbd0f9a0b0c4971aa06b16593ec50cfc4f2185 100644 GIT binary patch delta 603 zcmey$@`YuBO1-tGi(^Q|oHw)m&#kf%Y2WX^q~SZ0Q7L!c;nt0u$ulgHSl=C6DQ&RD z%lqeJU$1-8j~1MDe0&1uOdv0Z{j(JzM`~SY~qx<exv zn2=e&^Yt!`u0sYg|K<9R-wZ$XS?1QI(z#QDG`HS=zx@C9`yVZ))GHl6CEzM(a(Rl* z=>@vEx7i#6uA8nny-=j>Vb<1PUzvdtm0mp?pI#FD#Q9yT*K0rT1)tz&nm_mbPh0vi z*hK4SAvsbP*CNWAjGyW;N(Y+8P6-t z9!`DFFW1k$#Z|M^)FyVi9OFl4m>Q%II$%4u{?fk(HY!^ePifj_!uFz6)+^|g0>`mp z*Ylqj%v=_;K0L$wvdL7&D^CN0ysnn+HF0>(KX1muC0pg#nH^&JmM*VcvPmcTaQkyP zzV>E=f^)3`(@!4_;;{~VK8OGCh3|Xc|K9xhtOG~k?z`{4|F-y%3iM)VsA-;rYv3L+ zp*Dd>c`HI*M|oxHv#q~mA^+*oJNDLMy`^h-^W#*{{R9dmsw%bwWz}5w)O@=+{{Q8C kJps5+fxf6`Vqp0He}R(Rod3GovJ61r>FVdQ&MBb@01TZS#sB~S delta 604 zcmeyu@|9(RO1+Jzi(^Q|oHw)m*DZ1oXm_7je~w|(Rpkm^{$r9JJ=WoK4&2`Hm8s3` z<+jX%Nox5{F(u0{SZD^_f22Dv^yU5OZcSx7Z@ewrzwGFrdiEbSOIjF%4l!sZHcTW#o6V^e(^l*Y}I! zG`o~CmMJPvSu&;X@tNlvs%N;qd|FpvHTRK)-=rg-Z8G+~E#uDp=^iN3vvHHo%x5)r z(p`zwQpZ1LZS|UTBxRK z_nrOxbKzS`EjzN}uEnmu-nNeOoe(%!kkv0~X{_hey16`fmi(IbC21`J7pAqd?ONyB zS^VyIUH!Tj7JR?}c>R?tx6(##DchCQKq03qrF$DE-f^H}$1Ql9a#64U!lM;@QK`F+|%0iSNM zFdJ{~lpTlM%Fo^0^8h5MBP<5TO;6zWjjmQW2buQ%}jxQ8izUNKmcbWQU{XZYLrJUC} zXWM<5Va-Leh0_9C_W**&{ z9^RJo#Mi*POT}?w`pLOmimNY}WjMTMTOG-p*CN0C$8luhi=8I*5yi*) z!e;2Y95t+yZ9Vw(c%Y^6kG{wwS;2o3PYY z;urJnJzI6>hqf#4m2011#@^23-1TR_N}zB}bpTSx{E}s0`2YX8lghhSX8m#uK;Y@> K=d#Wzp$P!jEL`sZ delta 732 zcmeyt`h|6ZO8st67srr_Id5j2&AV;Db3F36-!IEI+p+@_+7taRWIt4Y@%c+<*$ZKb z>h47I-$q|{yfsnSsLQLU-kK$FvT!nw$q#nL4cmNPsGpj&T0{S|(6Xg(>dhZ~2vXsM zqf?K!*N0tYO5oez@cA6i`?|fmKbzWL{rbYKCcW@p{bmcc1?(?2JURFLg}6UcCS!rz zv?mvmEB96YDKZI=NI$qv`pAix%C>2JV*72&Rm2lL`$b(JX76L|JU(;t>$ZskJ+9r_ zbCcKHZ+3E*hqknG9cb}CX7`r$yeqO?Zi5$aNCmzNr>Zr~1$SUcaGgjhp$RnzX{a z$T@Neo!bt5VqL#PY#C>o=R_3`T^&vXVEqFQD&~P2@lprbcOO*D@}JzU-ehy*u#BC*-9R+uy&XhcQ9c7 z+Rtga^Fxm-zwLWG@z+C-&i~U@vYO)gfu4e+dS(WO|Nqy;t32}QT`t1_1fH&bF6*2U FngD&rWlI16 diff --git a/internal/painter/software/testdata/draw_text_clipped.png b/internal/painter/software/testdata/draw_text_clipped.png index 1404f19785fce109ed7819b0651cd979e0c93183..755dce022f118440ac312cb691adcfb0e1cfb2de 100644 GIT binary patch delta 2886 zcmV-M3%T^j7R?rrB!3i1L_t(|oa~xwOk719$IpH5?4ISo0tJLZEp2Uyg(kL2wOA7q zEg#TIQxz}Rep4ZlhS)|;tRJdP)Wl0dqOlrnYOD=LB}hYBA(TQ1R9clSUE;D`%CfL$ zFK5qX&gD%y@nqfFT?(ylw&DM2&&+dX<~Q@q?96k9*uH%`a(`zD`+qm!)@vCl6SRz! z30g+V1T7a^(sLSIF6q_eVSpIO`A56Bxx`h zXqp}x8bT0+B+2pdahj$tT(|%LAW72i_v1KTTz_0ll4N;#c|}D;MqozB#4PCu7$9Cx`~UauF&apIaZO#=X| zT)A>^a1bJK97mEQe1)cIK@jvuv)OF7+ewlvEiI*KdjJ0Ydf_xp7ZeoemQXqpf*`7@ zmVcC#-;OePbNpzQ2yv)N1#1Vq9xj35X&P&7?b z6a^n)35k}64EQS9jGkp7k^in+PDi$_|uYSo1c7h^r z#_4oo|5P{}HknLtbtOp>*7DqQ&oK;xq9{dCR;x92o6{g&x^xLakg2JuZ@>Nakw+f+ zt+y^;zWo0C?{{`~e*gXVO-)TnUWXva*w|QKU*Dla zhkp9$r)}G|MIw>IhY#Cqww9KbihqiV;^Jb9#ge)fGc|tdH>By6vgT3>C`sia5yQ2=Xn5ts;X(rzXP|e%Sf4^Wu#2dGEydJNqdcPESt< zgTcgHgTYW%R;Fp1+wE2q1tvNi4p9_&o-Z#iw_2^EqoaCyadB}t9RBOCziuPa6Hh#W z<9JR^PEk?OmtTH)<;s;L1AhR(zJ2>@YHFgRN7t=ew`I$ga5((bQ%@lX(%9J8(9keDJDZ)IJuxxy#v5;>*wiiw z>F1w+jz*&-N#^C{MIw>w&jN*og@c2Gb#--`rfu7{?e*7R@9OHBn17ha&CNY<;6QtO zdq+nHilS|8ZTt7{fByOB;aj_R?>>3*WL;eyjC*a}x^>sCUCqtSZnxWNwSM^FhfPgQ zAAIn^;*iqJrNY8Oc#a4LgV4v4q-ok0Uwi?xPMta>Nm6lfF@hl5w{H)J!yO$R(B{O6 z6DwA%xa+RF;9HSM z?>?{B``d57{c9wVWm%r*bv#iN4F&^(AVoz*4u|9GufK*_IF2I-!Y~Y+C*$Mei5*l_ zRJ3~aYTejmGTCf49LE=Ol(=c6^5q2+aYPH&IwooXPHll>0sKeoaAAdFAWK&gD52pYC^f=y3`vSz(?TpYOx6%`e|^wLY$AFlqJ@XKvM zTCrk9Lqo&$A2|M-@JpKAgO(sQL8;%8Wmymec%LLO9RMJT;=)f2i8X4PR#;dF_eV=Y zQWOQfCVw2q&1N&t^A?Mxyu6&_xT&eB#A6(aqNSy!X0zGj@d$zt3WeatEU~nBJkGK# z03atPhhdnRnVF>BJw;I^B_*1sc|0E2BeEXag zfj}T_{3s1lety2kh$T;2!hnt*9(I1>Z`9t zB7YI5)A{ntFW+dCD2fUM0(0P^a9X)!qx3?EX(Py4{ zrlFzX?YG}n6ouos4I4I$jEwy7!w(Db+ce9AAP5G70dDW3(demDr=rm)0Ko6}pFe-z zYPA9YP!!F}%j@jyoST~i0L;wHoIH6_M}JBb$8q!X^Y9V_0AO%%aCUY!D=P~Cuy*ZQ zpU>CR(*ppIB&oZ*8{Rhn0K{UkU@+L*+bfEqa!pGbC7$P@PeY_&FzEGq;p}Q}Z`U-< z@Ap#_b@1Rpuh*-e$%Db*nKNhHZg*0ThQr}AXU`&@xgcXc;LJ kw2YJqx&x8^7XSeN|3)D~6of7LVE_OC07*qoM6N<$f`t8)P5=M^ delta 2881 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 0 && co.StrokeColor != nil { - return int(co.StrokeWidth) + 2 + return co.StrokeWidth + 2 } case *canvas.Line: if co.StrokeWidth > 0 { - return int(co.StrokeWidth) + 2 + return co.StrokeWidth + 2 } case *canvas.Rectangle: if co.StrokeWidth > 0 && co.StrokeColor != nil { - return int(co.StrokeWidth) + 2 + return co.StrokeWidth + 2 } } diff --git a/internal/scale.go b/internal/scale.go index 67a5ac4876..a56a692ed8 100644 --- a/internal/scale.go +++ b/internal/scale.go @@ -7,21 +7,16 @@ import ( ) // ScaleInt converts a fyne coordinate in the given canvas to a screen coordinate -func ScaleInt(c fyne.Canvas, v int) int { - switch c.Scale() { - case 1.0: - return v - default: - return int(math.Round(float64(v) * float64(c.Scale()))) - } +func ScaleInt(c fyne.Canvas, v float32) int { + return int(math.Round(float64(v * c.Scale()))) } // UnscaleInt converts a screen coordinate for a given canvas to a fyne coordinate -func UnscaleInt(c fyne.Canvas, v int) int { +func UnscaleInt(c fyne.Canvas, v int) float32 { switch c.Scale() { case 1.0: - return v + return float32(v) default: - return int(float32(v) / c.Scale()) + return float32(v) / c.Scale() } } diff --git a/internal/widget/shadow.go b/internal/widget/shadow.go index 6e370434a5..d4abaafb28 100644 --- a/internal/widget/shadow.go +++ b/internal/widget/shadow.go @@ -113,7 +113,7 @@ func (r *shadowRenderer) BackgroundColor() color.Color { } func (r *shadowRenderer) Layout(size fyne.Size) { - depth := int(r.s.level) + depth := float32(r.s.level) if r.tl != nil { r.tl.Resize(fyne.NewSize(depth, depth)) r.tl.Move(fyne.NewPos(-depth, -depth)) diff --git a/layout/borderlayout.go b/layout/borderlayout.go index 6c46127270..d329331f69 100644 --- a/layout/borderlayout.go +++ b/layout/borderlayout.go @@ -71,7 +71,7 @@ func (b *borderLayout) MinSize(objects []fyne.CanvasObject) fyne.Size { } if child != b.top && child != b.bottom && child != b.left && child != b.right { - minSize = minSize.Union(child.MinSize()) + minSize = minSize.Max(child.MinSize()) } } diff --git a/layout/borderlayout_test.go b/layout/borderlayout_test.go index 2d6538868c..7fff3c8027 100644 --- a/layout/borderlayout_test.go +++ b/layout/borderlayout_test.go @@ -24,11 +24,11 @@ func TestNewBorderContainer(t *testing.T) { assert.Equal(t, 3, len(c.Objects)) c.Resize(fyne.NewSize(100, 100)) - assert.Equal(t, 0, top.Position().X) - assert.Equal(t, 0, top.Position().Y) - assert.Equal(t, 90, right.Position().X) + assert.Equal(t, float32(0), top.Position().X) + assert.Equal(t, float32(0), top.Position().Y) + assert.Equal(t, float32(90), right.Position().X) assert.Equal(t, 10+theme.Padding(), right.Position().Y) - assert.Equal(t, 0, middle.Position().X) + assert.Equal(t, float32(0), middle.Position().X) assert.Equal(t, 10+theme.Padding(), middle.Position().Y) assert.Equal(t, 90-theme.Padding(), middle.Size().Width) assert.Equal(t, 90-theme.Padding(), middle.Size().Height) diff --git a/layout/boxlayout.go b/layout/boxlayout.go index ca99f04ee2..7737d66b22 100644 --- a/layout/boxlayout.go +++ b/layout/boxlayout.go @@ -58,7 +58,7 @@ func (g *boxLayout) isSpacer(obj fyne.CanvasObject) bool { // Any spacers added will pad the view, sharing the space if there are two or more. func (g *boxLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { spacers := make([]fyne.CanvasObject, 0) - total := 0 + total := float32(0) for _, child := range objects { if !child.Visible() { continue @@ -75,16 +75,16 @@ func (g *boxLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { } } - x, y := 0, 0 - var extra int + x, y := float32(0), float32(0) + var extra float32 if g.horizontal { - extra = size.Width - total - (theme.Padding() * (len(objects) - len(spacers) - 1)) + extra = size.Width - total - (theme.Padding() * float32(len(objects)-len(spacers)-1)) } else { - extra = size.Height - total - (theme.Padding() * (len(objects) - len(spacers) - 1)) + extra = size.Height - total - (theme.Padding() * float32(len(objects)-len(spacers)-1)) } - extraCell := 0 + extraCell := float32(0) if len(spacers) > 0 { - extraCell = int(float64(extra) / float64(len(spacers))) + extraCell = extra / float32(len(spacers)) } for _, child := range objects { diff --git a/layout/boxlayout_test.go b/layout/boxlayout_test.go index dbc877dd09..e8ecee42a0 100644 --- a/layout/boxlayout_test.go +++ b/layout/boxlayout_test.go @@ -63,8 +63,8 @@ func TestHBoxLayout_Wide(t *testing.T) { container.Resize(fyne.NewSize(308, 100)) assert.Equal(t, fyne.NewSize(150+(theme.Padding()*2), 100), container.MinSize()) - assert.Equal(t, 50, obj1.Size().Width) - assert.Equal(t, 50, obj2.Size().Width) + assert.Equal(t, float32(50), obj1.Size().Width) + assert.Equal(t, float32(50), obj2.Size().Width) cell2Pos := fyne.NewPos(50+theme.Padding(), 0) assert.Equal(t, cell2Pos, obj2.Position()) cell3Pos := fyne.NewPos(100+theme.Padding()*2, 0) @@ -100,8 +100,8 @@ func TestHBoxLayout_Spacer(t *testing.T) { container.Resize(fyne.NewSize(300, 100)) assert.Equal(t, container.MinSize(), fyne.NewSize(150+(theme.Padding()*2), 100)) - assert.Equal(t, 50, obj1.Size().Width) - assert.Equal(t, 50, obj2.Size().Width) + assert.Equal(t, float32(50), obj1.Size().Width) + assert.Equal(t, float32(50), obj2.Size().Width) cell2Pos := fyne.NewPos(200-theme.Padding(), 0) assert.Equal(t, cell2Pos, obj2.Position()) cell3Pos := fyne.NewPos(250, 0) @@ -119,8 +119,8 @@ func TestHBoxLayout_MiddleSpacer(t *testing.T) { container.Resize(fyne.NewSize(300, 100)) assert.Equal(t, container.MinSize(), fyne.NewSize(150+(theme.Padding()*2), 100)) - assert.Equal(t, 50, obj1.Size().Width) - assert.Equal(t, 50, obj2.Size().Width) + assert.Equal(t, float32(50), obj1.Size().Width) + assert.Equal(t, float32(50), obj2.Size().Width) cell2Pos := fyne.NewPos(50+theme.Padding(), 0) assert.Equal(t, cell2Pos, obj2.Position()) cell3Pos := fyne.NewPos(250, 0) @@ -189,8 +189,8 @@ func TestVBoxLayout_Tall(t *testing.T) { container.Resize(fyne.NewSize(100, 308)) assert.Equal(t, container.MinSize(), fyne.NewSize(100, 150+(theme.Padding()*2))) - assert.Equal(t, 50, obj1.Size().Height) - assert.Equal(t, 50, obj2.Size().Height) + assert.Equal(t, float32(50), obj1.Size().Height) + assert.Equal(t, float32(50), obj2.Size().Height) cell2Pos := fyne.NewPos(0, 50+theme.Padding()) assert.Equal(t, cell2Pos, obj2.Position()) cell3Pos := fyne.NewPos(0, 100+theme.Padding()*2) @@ -208,8 +208,8 @@ func TestVBoxLayout_Spacer(t *testing.T) { container.Resize(fyne.NewSize(100, 300)) assert.Equal(t, container.MinSize(), fyne.NewSize(100, 150+(theme.Padding()*2))) - assert.Equal(t, 50, obj1.Size().Height) - assert.Equal(t, 50, obj2.Size().Height) + assert.Equal(t, float32(50), obj1.Size().Height) + assert.Equal(t, float32(50), obj2.Size().Height) cell2Pos := fyne.NewPos(0, 200-theme.Padding()) assert.Equal(t, cell2Pos, obj2.Position()) cell3Pos := fyne.NewPos(0, 250) @@ -227,8 +227,8 @@ func TestVBoxLayout_MiddleSpacer(t *testing.T) { container.Resize(fyne.NewSize(100, 300)) assert.Equal(t, container.MinSize(), fyne.NewSize(100, 150+(theme.Padding()*2))) - assert.Equal(t, 50, obj1.Size().Height) - assert.Equal(t, 50, obj2.Size().Height) + assert.Equal(t, float32(50), obj1.Size().Height) + assert.Equal(t, float32(50), obj2.Size().Height) cell2Pos := fyne.NewPos(0, 50+theme.Padding()) assert.Equal(t, cell2Pos, obj2.Position()) cell3Pos := fyne.NewPos(0, 250) diff --git a/layout/centerlayout.go b/layout/centerlayout.go index 122260e554..fc733c69aa 100644 --- a/layout/centerlayout.go +++ b/layout/centerlayout.go @@ -19,7 +19,7 @@ func (c *centerLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { for _, child := range objects { childMin := child.MinSize() child.Resize(childMin) - child.Move(fyne.NewPos(int(float32(size.Width-childMin.Width)/2), int(float32(size.Height-childMin.Height)/2))) + child.Move(fyne.NewPos(float32(size.Width-childMin.Width)/2, float32(size.Height-childMin.Height)/2)) } } @@ -32,7 +32,7 @@ func (c *centerLayout) MinSize(objects []fyne.CanvasObject) fyne.Size { continue } - minSize = minSize.Union(child.MinSize()) + minSize = minSize.Max(child.MinSize()) } return minSize diff --git a/layout/formlayout.go b/layout/formlayout.go index 4e604626f6..5a8cf40354 100644 --- a/layout/formlayout.go +++ b/layout/formlayout.go @@ -32,7 +32,7 @@ func (f *formLayout) countRows(objects []fyne.CanvasObject) int { // The width of the label column will be set as the max width value between all the label cells. // The width of the content column will be set as the max width value between all the content cells // or the remaining space of the bounding containerWidth, if it is larger. -func (f *formLayout) tableCellsSize(objects []fyne.CanvasObject, containerWidth int) [][2]fyne.Size { +func (f *formLayout) tableCellsSize(objects []fyne.CanvasObject, containerWidth float32) [][2]fyne.Size { rows := f.countRows(objects) table := make([][2]fyne.Size, rows) @@ -42,8 +42,8 @@ func (f *formLayout) tableCellsSize(objects []fyne.CanvasObject, containerWidth lowBound := 0 highBound := 2 - labelCellMaxWidth := 0 - contentCellMaxWidth := 0 + labelCellMaxWidth := float32(0) + contentCellMaxWidth := float32(0) for row := 0; row < rows; { currentRow := objects[lowBound:highBound] lowBound = highBound @@ -82,7 +82,7 @@ func (f *formLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { table := f.tableCellsSize(objects, size.Width) row := 0 - y := 0 + y := float32(0) for i := 0; i < len(objects); i += formLayoutCols { if !objects[i].Visible() && (i+1 < len(objects) && !objects[i+1].Visible()) { continue diff --git a/layout/formlayout_test.go b/layout/formlayout_test.go index 591f89c560..33691f246f 100644 --- a/layout/formlayout_test.go +++ b/layout/formlayout_test.go @@ -129,6 +129,6 @@ func TestFormLayout_MinSize_Hidden(t *testing.T) { l := layout.NewFormLayout() layoutMin := l.MinSize(container.Objects) expectedRowWidth := 50 + 100 + theme.Padding() - expectedRowHeight := 100 + expectedRowHeight := float32(100) assert.Equal(t, fyne.NewSize(expectedRowWidth, expectedRowHeight), layoutMin) } diff --git a/layout/gridlayout.go b/layout/gridlayout.go index 1b8986672f..b76b583d64 100644 --- a/layout/gridlayout.go +++ b/layout/gridlayout.go @@ -57,15 +57,15 @@ func (g *gridLayout) countRows(objects []fyne.CanvasObject) int { // Get the leading (top or left) edge of a grid cell. // size is the ideal cell size and the offset is which col or row its on. -func getLeading(size float64, offset int) int { +func getLeading(size float64, offset int) float32 { ret := (size + float64(theme.Padding())) * float64(offset) - return int(math.Round(ret)) + return float32(math.Round(ret)) } // Get the trailing (bottom or right) edge of a grid cell. // size is the ideal cell size and the offset is which col or row its on. -func getTrailing(size float64, offset int) int { +func getTrailing(size float64, offset int) float32 { return getLeading(size, offset+1) - theme.Padding() } @@ -75,8 +75,8 @@ func getTrailing(size float64, offset int) int { func (g *gridLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { rows := g.countRows(objects) - padWidth := (g.Cols - 1) * theme.Padding() - padHeight := (rows - 1) * theme.Padding() + padWidth := float32(g.Cols-1) * theme.Padding() + padHeight := float32(rows-1) * theme.Padding() cellWidth := float64(size.Width-padWidth) / float64(g.Cols) cellHeight := float64(size.Height-padHeight) / float64(rows) @@ -132,14 +132,14 @@ func (g *gridLayout) MinSize(objects []fyne.CanvasObject) fyne.Size { continue } - minSize = minSize.Union(child.MinSize()) + minSize = minSize.Max(child.MinSize()) } if g.horizontal() { - minContentSize := fyne.NewSize(minSize.Width*g.Cols, minSize.Height*rows) - return minContentSize.Add(fyne.NewSize(theme.Padding()*fyne.Max(g.Cols-1, 0), theme.Padding()*fyne.Max(rows-1, 0))) + minContentSize := fyne.NewSize(minSize.Width*float32(g.Cols), minSize.Height*float32(rows)) + return minContentSize.Add(fyne.NewSize(theme.Padding()*fyne.Max(float32(g.Cols-1), 0), theme.Padding()*fyne.Max(float32(rows-1), 0))) } - minContentSize := fyne.NewSize(minSize.Width*rows, minSize.Height*g.Cols) - return minContentSize.Add(fyne.NewSize(theme.Padding()*fyne.Max(rows-1, 0), theme.Padding()*fyne.Max(g.Cols-1, 0))) + minContentSize := fyne.NewSize(minSize.Width*float32(rows), minSize.Height*float32(g.Cols)) + return minContentSize.Add(fyne.NewSize(theme.Padding()*fyne.Max(float32(rows-1), 0), theme.Padding()*fyne.Max(float32(g.Cols-1), 0))) } diff --git a/layout/gridwraplayout.go b/layout/gridwraplayout.go index 989a7f3a10..ab077462cd 100644 --- a/layout/gridwraplayout.go +++ b/layout/gridwraplayout.go @@ -32,7 +32,7 @@ func (g *gridWrapLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { g.colCount = int(math.Floor(float64(size.Width+theme.Padding()) / float64(g.CellSize.Width+theme.Padding()))) } - i, x, y := 0, 0, 0 + i, x, y := 0, float32(0), float32(0) for _, child := range objects { if !child.Visible() { continue @@ -60,5 +60,5 @@ func (g *gridWrapLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { // of columns as this layout re-flows dynamically. func (g *gridWrapLayout) MinSize(objects []fyne.CanvasObject) fyne.Size { return fyne.NewSize(g.CellSize.Width, - (g.CellSize.Height*g.rowCount)+((g.rowCount-1)*theme.Padding())) + (g.CellSize.Height*float32(g.rowCount))+(float32(g.rowCount-1)*theme.Padding())) } diff --git a/layout/maxlayout.go b/layout/maxlayout.go index 31bde0871a..492b5fcade 100644 --- a/layout/maxlayout.go +++ b/layout/maxlayout.go @@ -33,7 +33,7 @@ func (m *maxLayout) MinSize(objects []fyne.CanvasObject) fyne.Size { continue } - minSize = minSize.Union(child.MinSize()) + minSize = minSize.Max(child.MinSize()) } return minSize diff --git a/layout/paddedlayout.go b/layout/paddedlayout.go index fd71b68512..2d15202fd7 100644 --- a/layout/paddedlayout.go +++ b/layout/paddedlayout.go @@ -30,7 +30,7 @@ func (l *paddedLayout) MinSize(objects []fyne.CanvasObject) (min fyne.Size) { continue } - min = min.Union(child.MinSize()) + min = min.Max(child.MinSize()) } min = min.Add(fyne.NewSize(2*theme.Padding(), 2*theme.Padding())) return diff --git a/math.go b/math.go index 8867d20478..3f66064cbe 100644 --- a/math.go +++ b/math.go @@ -1,7 +1,7 @@ package fyne // Min returns the smaller of the passed values. -func Min(x, y int) int { +func Min(x, y float32) float32 { if x < y { return x } @@ -9,7 +9,7 @@ func Min(x, y int) int { } // Max returns the larger of the passed values. -func Max(x, y int) int { +func Max(x, y float32) float32 { if x > y { return x } diff --git a/math_test.go b/math_test.go index 144755411e..a5ed76f8c1 100644 --- a/math_test.go +++ b/math_test.go @@ -7,11 +7,11 @@ import ( ) func TestMin(t *testing.T) { - assert.Equal(t, Min(1, 3), 1) - assert.Equal(t, Min(1, -3), -3) + assert.Equal(t, float32(1), Min(1, 3)) + assert.Equal(t, float32(-3), Min(1, -3)) } func TestMax(t *testing.T) { - assert.Equal(t, Max(1, 3), 3) - assert.Equal(t, Max(1, -3), 1) + assert.Equal(t, float32(3), Max(1, 3)) + assert.Equal(t, float32(1), Max(1, -3)) } diff --git a/test/markup_renderer.go b/test/markup_renderer.go index ba8697c460..77f00af61c 100644 --- a/test/markup_renderer.go +++ b/test/markup_renderer.go @@ -110,19 +110,19 @@ func (r *markupRenderer) setFloatPosAttr(attrs map[string]*string, name string, attrs[name] = &value } -func (r *markupRenderer) setIntAttrWithDefault(attrs map[string]*string, name string, i int, d int) { - if i == d { +func (r *markupRenderer) setSizeAttrWithDefault(attrs map[string]*string, name string, i float32, d float32) { + if int(i) == int(d) { return } - value := fmt.Sprintf("%d", i) + value := fmt.Sprintf("%d", int(i)) attrs[name] = &value } func (r *markupRenderer) setPosAttr(attrs map[string]*string, name string, pos fyne.Position) { - if pos.X == 0 && pos.Y == 0 { + if int(pos.X) == 0 && int(pos.Y) == 0 { return } - value := fmt.Sprintf("%d,%d", pos.X, pos.Y) + value := fmt.Sprintf("%d,%d", int(pos.X), int(pos.Y)) attrs[name] = &value } @@ -174,7 +174,7 @@ func (r *markupRenderer) setScaleModeAttr(attrs map[string]*string, name string, } func (r *markupRenderer) setSizeAttr(attrs map[string]*string, name string, size fyne.Size) { - value := fmt.Sprintf("%dx%d", size.Width, size.Height) + value := fmt.Sprintf("%dx%d", int(size.Width), int(size.Height)) attrs[name] = &value } @@ -360,7 +360,7 @@ func (r *markupRenderer) writeTag(name string, isEmpty bool, attrs map[string]*s func (r *markupRenderer) writeText(t *canvas.Text, attrs map[string]*string) { r.setColorAttrWithDefault(attrs, "color", t.Color, theme.TextColor()) r.setAlignmentAttr(attrs, "alignment", t.Alignment) - r.setIntAttrWithDefault(attrs, "textSize", t.TextSize, theme.TextSize()) + r.setSizeAttrWithDefault(attrs, "textSize", t.TextSize, theme.TextSize()) r.setBoolAttr(attrs, "bold", t.TextStyle.Bold) r.setBoolAttr(attrs, "italic", t.TextStyle.Italic) r.setBoolAttr(attrs, "monospace", t.TextStyle.Monospace) diff --git a/test/test.go b/test/test.go index ca4184817e..7e84ba328b 100644 --- a/test/test.go +++ b/test/test.go @@ -50,7 +50,7 @@ func AssertRendersToMarkup(t *testing.T, expected string, c fyne.Canvas, msgAndA // Drag drags at an absolute position on the canvas. // deltaX/Y is the dragging distance: <0 for dragging up/left, >0 for dragging down/right. -func Drag(c fyne.Canvas, pos fyne.Position, deltaX, deltaY int) { +func Drag(c fyne.Canvas, pos fyne.Position, deltaX, deltaY float32) { matches := func(object fyne.CanvasObject) bool { if _, ok := object.(fyne.Draggable); ok { return true @@ -63,8 +63,7 @@ func Drag(c fyne.Canvas, pos fyne.Position, deltaX, deltaY int) { } e := &fyne.DragEvent{ PointEvent: fyne.PointEvent{Position: p}, - DraggedX: deltaX, - DraggedY: deltaY, + Dragged: fyne.Delta{DX: deltaX, DY: deltaY}, } o.(fyne.Draggable).Dragged(e) o.(fyne.Draggable).DragEnd() @@ -140,7 +139,7 @@ func MoveMouse(c fyne.Canvas, pos fyne.Position) { // Scroll scrolls at an absolute position on the canvas. // deltaX/Y is the scrolling distance: <0 for scrolling up/left, >0 for scrolling down/right. -func Scroll(c fyne.Canvas, pos fyne.Position, deltaX, deltaY int) { +func Scroll(c fyne.Canvas, pos fyne.Position, deltaX, deltaY float32) { matches := func(object fyne.CanvasObject) bool { if _, ok := object.(fyne.Scrollable); ok { return true @@ -152,7 +151,7 @@ func Scroll(c fyne.Canvas, pos fyne.Position, deltaX, deltaY int) { return } - e := &fyne.ScrollEvent{DeltaX: deltaX, DeltaY: deltaY} + e := &fyne.ScrollEvent{Scrolled: fyne.Delta{DX: deltaX, DY: deltaY}} o.(fyne.Scrollable).Scrolled(e) } diff --git a/test/test_test.go b/test/test_test.go index b29be4fe6b..3273d5a5a4 100644 --- a/test/test_test.go +++ b/test/test_test.go @@ -106,8 +106,7 @@ func TestDrag(t *testing.T) { test.Drag(c, fyne.NewPos(15, 15), 17, 42) assert.Equal(t, &fyne.DragEvent{ PointEvent: fyne.PointEvent{Position: fyne.Position{X: 5, Y: 5}}, - DraggedX: 17, - DraggedY: 42, + Dragged: fyne.NewDelta(17, 42), }, d.event) assert.True(t, d.wasDragged) } @@ -199,7 +198,7 @@ func TestScroll(t *testing.T) { assert.Nil(t, s.event, "nothing happens if no scrollable was found at position") test.Scroll(c, fyne.NewPos(15, 15), 17, 42) - assert.Equal(t, &fyne.ScrollEvent{DeltaX: 17, DeltaY: 42}, s.event) + assert.Equal(t, &fyne.ScrollEvent{Scrolled: fyne.NewDelta(17, 42)}, s.event) } var _ fyne.Draggable = (*draggable)(nil) diff --git a/test/testdriver.go b/test/testdriver.go index 070d136b04..0895512486 100644 --- a/test/testdriver.go +++ b/test/testdriver.go @@ -98,7 +98,7 @@ func (d *testDriver) Device() fyne.Device { } // RenderedTextSize looks up how bit a string would be if drawn on screen -func (d *testDriver) RenderedTextSize(text string, size int, style fyne.TextStyle) fyne.Size { +func (d *testDriver) RenderedTextSize(text string, size float32, style fyne.TextStyle) fyne.Size { var opts truetype.Options opts.Size = float64(size) opts.DPI = painter.TextDPI @@ -106,7 +106,7 @@ func (d *testDriver) RenderedTextSize(text string, size int, style fyne.TextStyl face := painter.CachedFontFace(style, &opts) advance := font.MeasureString(face, text) - sws := fyne.NewSize(advance.Ceil(), face.Metrics().Height.Ceil()) + sws := fyne.NewSize(float32(advance.Ceil()), float32(face.Metrics().Height.Ceil())) gls := painter.RenderedTextSize(text, size, style) if sws != gls { log.Println("SoftwareTextSize:", sws) diff --git a/test/testtheme.go b/test/testtheme.go index 2967d11943..25a8585b33 100644 --- a/test/testtheme.go +++ b/test/testtheme.go @@ -36,12 +36,12 @@ func NewTheme() fyne.Theme { fyne.TextStyle{Italic: true}: theme.DefaultTextBoldItalicFont(), fyne.TextStyle{Monospace: true}: theme.DefaultTextFont(), }, - sizes: map[fyne.ThemeSizeName]int{ - theme.SizeNameInlineIcon: 24, - theme.SizeNamePadding: 10, - theme.SizeNameScrollBar: 10, - theme.SizeNameScrollBarSmall: 2, - theme.SizeNameText: 18, + sizes: map[fyne.ThemeSizeName]float32{ + theme.SizeNameInlineIcon: float32(24), + theme.SizeNamePadding: float32(10), + theme.SizeNameScrollBar: float32(10), + theme.SizeNameScrollBarSmall: float32(2), + theme.SizeNameText: float32(18), }, } } diff --git a/test/theme.go b/test/theme.go index cd18eb29f2..07b52cea73 100644 --- a/test/theme.go +++ b/test/theme.go @@ -14,7 +14,7 @@ var _ fyne.Theme = (*configurableTheme)(nil) type configurableTheme struct { colors map[fyne.ThemeColorName]color.Color fonts map[fyne.TextStyle]fyne.Resource - sizes map[fyne.ThemeSizeName]int + sizes map[fyne.ThemeSizeName]float32 } // Theme returns a theme useful for image based tests. @@ -41,12 +41,12 @@ func Theme() fyne.Theme { fyne.TextStyle{Italic: true}: theme.DefaultTextItalicFont(), fyne.TextStyle{Monospace: true}: theme.DefaultTextMonospaceFont(), }, - sizes: map[fyne.ThemeSizeName]int{ - theme.SizeNameInlineIcon: 20, - theme.SizeNamePadding: 4, - theme.SizeNameScrollBar: 16, - theme.SizeNameScrollBarSmall: 3, - theme.SizeNameText: 14, + sizes: map[fyne.ThemeSizeName]float32{ + theme.SizeNameInlineIcon: float32(20), + theme.SizeNamePadding: float32(4), + theme.SizeNameScrollBar: float32(16), + theme.SizeNameScrollBarSmall: float32(3), + theme.SizeNameText: float32(14), }, } } @@ -65,6 +65,6 @@ func (t *configurableTheme) Icon(n fyne.ThemeIconName) fyne.Resource { return theme.DefaultTheme().Icon(n) } -func (t *configurableTheme) Size(s fyne.ThemeSizeName) int { +func (t *configurableTheme) Size(s fyne.ThemeSizeName) float32 { return t.sizes[s] } diff --git a/text.go b/text.go index aa8b3747e8..4acf92fb45 100644 --- a/text.go +++ b/text.go @@ -36,6 +36,6 @@ type TextStyle struct { } // MeasureText uses the current driver to calculate the size of text when rendered. -func MeasureText(text string, size int, style TextStyle) Size { +func MeasureText(text string, size float32, style TextStyle) Size { return CurrentApp().Driver().RenderedTextSize(text, size, style) } diff --git a/theme.go b/theme.go index ceb9dd7b1f..0296213e5d 100644 --- a/theme.go +++ b/theme.go @@ -29,7 +29,7 @@ type Theme interface { Color(ThemeColorName, ThemeVariant) color.Color Font(TextStyle) Resource Icon(ThemeIconName) Resource - Size(ThemeSizeName) int + Size(ThemeSizeName) float32 } // LegacyTheme defines the requirements of any Fyne theme. diff --git a/theme/legacy.go b/theme/legacy.go index dccd275ede..16f0c22bd3 100644 --- a/theme/legacy.go +++ b/theme/legacy.go @@ -69,18 +69,18 @@ func (l *legacyWrapper) Icon(n fyne.ThemeIconName) fyne.Resource { return DefaultTheme().Icon(n) } -func (l *legacyWrapper) Size(n fyne.ThemeSizeName) int { +func (l *legacyWrapper) Size(n fyne.ThemeSizeName) float32 { switch n { case SizeNameInlineIcon: - return l.old.IconInlineSize() + return float32(l.old.IconInlineSize()) case SizeNamePadding: - return l.old.Padding() + return float32(l.old.Padding()) case SizeNameScrollBar: - return l.old.ScrollBarSize() + return float32(l.old.ScrollBarSize()) case SizeNameScrollBarSmall: - return l.old.ScrollBarSmallSize() + return float32(l.old.ScrollBarSmallSize()) case SizeNameText: - return l.old.TextSize() + return float32(l.old.TextSize()) default: return DefaultTheme().Size(n) } diff --git a/theme/legacy_test.go b/theme/legacy_test.go index 302db8fabe..d090340ad4 100644 --- a/theme/legacy_test.go +++ b/theme/legacy_test.go @@ -34,9 +34,9 @@ func TestLegacyWrapper_Font(t *testing.T) { func TestLegacyWrapper_Size(t *testing.T) { newTheme := FromLegacy(oldTheme) - assert.Equal(t, oldTheme.IconInlineSize(), newTheme.Size(SizeNameInlineIcon)) - assert.Equal(t, oldTheme.Padding(), newTheme.Size(SizeNamePadding)) - assert.Equal(t, oldTheme.TextSize(), newTheme.Size(SizeNameText)) + assert.Equal(t, oldTheme.IconInlineSize(), int(newTheme.Size(SizeNameInlineIcon))) + assert.Equal(t, oldTheme.Padding(), int(newTheme.Size(SizeNamePadding))) + assert.Equal(t, oldTheme.TextSize(), int(newTheme.Size(SizeNameText))) } var _ fyne.LegacyTheme = (*legacyTheme)(nil) @@ -89,7 +89,7 @@ func (t *legacyTheme) TextColor() color.Color { } func (t *legacyTheme) TextSize() int { - return TextSize() + return int(TextSize()) } func (t *legacyTheme) TextFont() fyne.Resource { @@ -113,17 +113,17 @@ func (t *legacyTheme) TextMonospaceFont() fyne.Resource { } func (t *legacyTheme) Padding() int { - return Padding() + return int(Padding()) } func (t *legacyTheme) IconInlineSize() int { - return IconInlineSize() + return int(IconInlineSize()) } func (t *legacyTheme) ScrollBarSize() int { - return ScrollBarSize() + return int(ScrollBarSize()) } func (t *legacyTheme) ScrollBarSmallSize() int { - return ScrollBarSmallSize() + return int(ScrollBarSmallSize()) } diff --git a/theme/theme.go b/theme/theme.go index 101d6a3766..0788c2ff19 100644 --- a/theme/theme.go +++ b/theme/theme.go @@ -259,7 +259,7 @@ func (t *builtinTheme) Font(style fyne.TextStyle) fyne.Resource { return t.regular } -func (t *builtinTheme) Size(s fyne.ThemeSizeName) int { +func (t *builtinTheme) Size(s fyne.ThemeSizeName) float32 { switch s { case SizeNameInlineIcon: return 20 @@ -358,7 +358,7 @@ func ShadowColor() color.Color { } // TextSize returns the standard text size -func TextSize() int { +func TextSize() float32 { return current().Size(SizeNameText) } @@ -389,22 +389,22 @@ func TextMonospaceFont() fyne.Resource { // Padding is the standard gap between elements and the border around interface // elements -func Padding() int { +func Padding() float32 { return current().Size(SizeNamePadding) } // IconInlineSize is the standard size of icons which appear within buttons, labels etc. -func IconInlineSize() int { +func IconInlineSize() float32 { return current().Size(SizeNameInlineIcon) } // ScrollBarSize is the width (or height) of the bars on a ScrollContainer -func ScrollBarSize() int { +func ScrollBarSize() float32 { return current().Size(SizeNameScrollBar) } // ScrollBarSmallSize is the width (or height) of the minimized bars on a ScrollContainer -func ScrollBarSmallSize() int { +func ScrollBarSmallSize() float32 { return current().Size(SizeNameScrollBarSmall) } diff --git a/widget/accordion.go b/widget/accordion.go index fd8cfcf87a..8cdc3258f2 100644 --- a/widget/accordion.go +++ b/widget/accordion.go @@ -137,8 +137,8 @@ type accordionRenderer struct { } func (r *accordionRenderer) Layout(size fyne.Size) { - x := 0 - y := 0 + x := float32(0) + y := float32(0) for i, ai := range r.container.Items { if i != 0 { div := r.dividers[i-1] diff --git a/widget/accordion_internal_test.go b/widget/accordion_internal_test.go index f950897544..15be3e391c 100644 --- a/widget/accordion_internal_test.go +++ b/widget/accordion_internal_test.go @@ -44,15 +44,15 @@ func TestAccordionRenderer_Layout(t *testing.T) { ac.CloseAll() min := ac.MinSize() ar.Layout(min) - assert.Equal(t, 0, aih0.Position().X) + assert.Equal(t, float32(0), aih0.Position().X) assert.Equal(t, theme.Padding(), aih0.Position().Y) assert.Equal(t, min.Width, aih0.Size().Width) assert.Equal(t, aih0.MinSize().Height, aih0.Size().Height) - assert.Equal(t, 0, aih1.Position().X) + assert.Equal(t, float32(0), aih1.Position().X) assert.Equal(t, aih0.MinSize().Height+theme.Padding()*3+1, aih1.Position().Y) assert.Equal(t, min.Width, aih1.Size().Width) assert.Equal(t, aih1.MinSize().Height, aih1.Size().Height) - assert.Equal(t, 0, aih2.Position().X) + assert.Equal(t, float32(0), aih2.Position().X) assert.Equal(t, aih0.MinSize().Height+aih1.MinSize().Height+5*theme.Padding()+2, aih2.Position().Y) assert.Equal(t, min.Width, aih2.Size().Width) assert.Equal(t, aih2.MinSize().Height, aih2.Size().Height) @@ -64,23 +64,23 @@ func TestAccordionRenderer_Layout(t *testing.T) { ac.Open(2) min := ac.MinSize() ar.Layout(min) - assert.Equal(t, 0, aih0.Position().X) + assert.Equal(t, float32(0), aih0.Position().X) assert.Equal(t, theme.Padding(), aih0.Position().Y) assert.Equal(t, min.Width, aih0.Size().Width) assert.Equal(t, aih0.MinSize().Height, aih0.Size().Height) - assert.Equal(t, 0, aih1.Position().X) + assert.Equal(t, float32(0), aih1.Position().X) assert.Equal(t, aih0.MinSize().Height+3*theme.Padding()+1, aih1.Position().Y) assert.Equal(t, min.Width, aih1.Size().Width) assert.Equal(t, aih1.MinSize().Height, aih1.Size().Height) - assert.Equal(t, 0, aih2.Position().X) + assert.Equal(t, float32(0), aih2.Position().X) assert.Equal(t, aih0.MinSize().Height+aih1.MinSize().Height+aid1.MinSize().Height+6*theme.Padding()+2, aih2.Position().Y) assert.Equal(t, min.Width, aih2.Size().Width) assert.Equal(t, aih2.MinSize().Height, aih2.Size().Height) - assert.Equal(t, 0, aid1.Position().X) + assert.Equal(t, float32(0), aid1.Position().X) assert.Equal(t, aih0.MinSize().Height+aih1.MinSize().Height+4*theme.Padding()+1, aid1.Position().Y) assert.Equal(t, min.Width, aid1.Size().Width) assert.Equal(t, aid1.MinSize().Height, aid1.Size().Height) - assert.Equal(t, 0, aid2.Position().X) + assert.Equal(t, float32(0), aid2.Position().X) assert.Equal(t, aih0.MinSize().Height+aih1.MinSize().Height+aid1.MinSize().Height+aih2.MinSize().Height+7*theme.Padding()+2, aid2.Position().Y) assert.Equal(t, min.Width, aid2.Size().Width) assert.Equal(t, aid2.MinSize().Height, aid2.Size().Height) @@ -91,19 +91,19 @@ func TestAccordionRenderer_Layout(t *testing.T) { ac.Open(2) min := ac.MinSize() ar.Layout(min) - assert.Equal(t, 0, aih0.Position().X) + assert.Equal(t, float32(0), aih0.Position().X) assert.Equal(t, theme.Padding(), aih0.Position().Y) assert.Equal(t, min.Width, aih0.Size().Width) assert.Equal(t, aih0.MinSize().Height, aih0.Size().Height) - assert.Equal(t, 0, aih1.Position().X) + assert.Equal(t, float32(0), aih1.Position().X) assert.Equal(t, aih0.MinSize().Height+3*theme.Padding()+1, aih1.Position().Y) assert.Equal(t, min.Width, aih1.Size().Width) assert.Equal(t, aih1.MinSize().Height, aih1.Size().Height) - assert.Equal(t, 0, aih2.Position().X) + assert.Equal(t, float32(0), aih2.Position().X) assert.Equal(t, aih0.MinSize().Height+aih1.MinSize().Height+5*theme.Padding()+2, aih2.Position().Y) assert.Equal(t, min.Width, aih2.Size().Width) assert.Equal(t, aih2.MinSize().Height, aih2.Size().Height) - assert.Equal(t, 0, aid2.Position().X) + assert.Equal(t, float32(0), aid2.Position().X) assert.Equal(t, aih0.MinSize().Height+aih1.MinSize().Height+aih2.MinSize().Height+6*theme.Padding()+2, aid2.Position().Y) assert.Equal(t, min.Width, aid2.Size().Width) assert.Equal(t, aid2.MinSize().Height, aid2.Size().Height) @@ -113,27 +113,27 @@ func TestAccordionRenderer_Layout(t *testing.T) { ac.OpenAll() min := ac.MinSize() ar.Layout(min) - assert.Equal(t, 0, aih0.Position().X) + assert.Equal(t, float32(0), aih0.Position().X) assert.Equal(t, theme.Padding(), aih0.Position().Y) assert.Equal(t, min.Width, aih0.Size().Width) assert.Equal(t, aih0.MinSize().Height, aih0.Size().Height) - assert.Equal(t, 0, aih1.Position().X) + assert.Equal(t, float32(0), aih1.Position().X) assert.Equal(t, aih0.MinSize().Height+aid0.MinSize().Height+4*theme.Padding()+1, aih1.Position().Y) assert.Equal(t, min.Width, aih1.Size().Width) assert.Equal(t, aih1.MinSize().Height, aih1.Size().Height) - assert.Equal(t, 0, aih2.Position().X) + assert.Equal(t, float32(0), aih2.Position().X) assert.Equal(t, aih0.MinSize().Height+aid0.MinSize().Height+aih1.MinSize().Height+aid1.MinSize().Height+7*theme.Padding()+2, aih2.Position().Y) assert.Equal(t, min.Width, aih2.Size().Width) assert.Equal(t, aih2.MinSize().Height, aih2.Size().Height) - assert.Equal(t, 0, aid0.Position().X) + assert.Equal(t, float32(0), aid0.Position().X) assert.Equal(t, aih0.MinSize().Height+theme.Padding()*2, aid0.Position().Y) assert.Equal(t, min.Width, aid0.Size().Width) assert.Equal(t, aid0.MinSize().Height, aid0.Size().Height) - assert.Equal(t, 0, aid1.Position().X) + assert.Equal(t, float32(0), aid1.Position().X) assert.Equal(t, aih0.MinSize().Height+aid0.MinSize().Height+aih1.MinSize().Height+5*theme.Padding()+1, aid1.Position().Y) assert.Equal(t, min.Width, aid1.Size().Width) assert.Equal(t, aid1.MinSize().Height, aid1.Size().Height) - assert.Equal(t, 0, aid2.Position().X) + assert.Equal(t, float32(0), aid2.Position().X) assert.Equal(t, aih0.MinSize().Height+aid0.MinSize().Height+aih1.MinSize().Height+aid1.MinSize().Height+aih2.MinSize().Height+8*theme.Padding()+2, aid2.Position().Y) assert.Equal(t, min.Width, aid2.Size().Width) assert.Equal(t, aid2.MinSize().Height, aid2.Size().Height) @@ -145,8 +145,8 @@ func TestAccordionRenderer_MinSize(t *testing.T) { ac := NewAccordion() ar := test.WidgetRenderer(ac).(*accordionRenderer) min := ar.MinSize() - assert.Equal(t, 0, min.Width) - assert.Equal(t, 0, min.Height) + assert.Equal(t, float32(0), min.Width) + assert.Equal(t, float32(0), min.Height) }) t.Run("Single", func(t *testing.T) { ai := NewAccordionItem("foo", NewLabel("foobar")) diff --git a/widget/button_internal_test.go b/widget/button_internal_test.go index 49d8d5ff18..0f6313b3d5 100644 --- a/widget/button_internal_test.go +++ b/widget/button_internal_test.go @@ -99,20 +99,14 @@ func TestButtonRenderer_Layout_Stretch(t *testing.T) { button.Resize(button.MinSize().Add(fyne.NewSize(100, 100))) render := test.WidgetRenderer(button).(*buttonRenderer) - iconYOffset, labelYOffset := 0, 0 textHeight := render.label.MinSize().Height - if theme.IconInlineSize() > textHeight { - labelYOffset = (theme.IconInlineSize() - textHeight) / 2 - } else { - iconYOffset = (textHeight - theme.IconInlineSize()) / 2 - } minIconHeight := fyne.Max(theme.IconInlineSize(), textHeight) assert.Equal(t, 50+theme.Padding()*3, render.icon.Position().X, "icon x") - assert.Equal(t, 50+theme.Padding()*2+iconYOffset, render.icon.Position().Y, "icon y") + assert.Equal(t, 50+theme.Padding()*2, render.icon.Position().Y, "icon y") assert.Equal(t, theme.IconInlineSize(), render.icon.Size().Width, "icon width") assert.Equal(t, minIconHeight, render.icon.Size().Height, "icon height") assert.Equal(t, 50+theme.Padding()*4+theme.IconInlineSize(), render.label.Position().X, "label x") - assert.Equal(t, 50+theme.Padding()*2+labelYOffset, render.label.Position().Y, "label y") + assert.Equal(t, 50+theme.Padding()*2, render.label.Position().Y, "label y") assert.Equal(t, render.label.MinSize(), render.label.Size(), "label size") } diff --git a/widget/card.go b/widget/card.go index 9c75042bc9..3707322c10 100644 --- a/widget/card.go +++ b/widget/card.go @@ -220,7 +220,7 @@ func (c *cardRenderer) Refresh() { // applyTheme updates this button to match the current theme func (c *cardRenderer) applyTheme() { if c.header != nil { - c.header.TextSize = int(float32(theme.TextSize()) * 1.7) + c.header.TextSize = theme.TextSize() * 1.7 c.header.Color = theme.TextColor() } if c.subHeader != nil { diff --git a/widget/card_test.go b/widget/card_test.go index 62dd6bb76e..e7223824b2 100644 --- a/widget/card_test.go +++ b/widget/card_test.go @@ -48,20 +48,20 @@ func TestCard_Layout(t *testing.T) { icon: nil, content: nil, want: ` - + - - + + - - - - - + + + + + - Title + Title @@ -100,21 +100,21 @@ func TestCard_Layout(t *testing.T) { icon: nil, content: nil, want: ` - + - - + + - - - - - + + + + + - Title - Subtitle + Title + Subtitle @@ -126,21 +126,21 @@ func TestCard_Layout(t *testing.T) { icon: canvas.NewImageFromResource(theme.FyneLogo()), content: nil, want: ` - + - - + + - - - - - + + + + + - Title - Subtitle + Title + Subtitle @@ -207,22 +207,22 @@ func TestCard_Layout(t *testing.T) { icon: nil, content: newContentRect(), want: ` - + - - + + - - - - - - - + + + + + + + - Hello + Hello - + @@ -262,23 +262,23 @@ func TestCard_Layout(t *testing.T) { icon: canvas.NewImageFromResource(theme.FyneLogo()), content: newContentRect(), want: ` - + - - + + - - - - - - - + + + + + + + - Longer title - subtitle with length - - + Longer title + subtitle with length + + @@ -297,7 +297,7 @@ func TestCard_Layout(t *testing.T) { size := card.MinSize().Max(fyne.NewSize(80, 0)) // give a little width for image only tests window.Resize(size.Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2))) if tt.content != nil { - assert.Equal(t, 10, tt.content.Size().Height) + assert.Equal(t, float32(10), tt.content.Size().Height) } test.AssertRendersToMarkup(t, tt.want, window.Canvas()) diff --git a/widget/entry.go b/widget/entry.go index 57e97238b5..48ea5083cb 100644 --- a/widget/entry.go +++ b/widget/entry.go @@ -1236,9 +1236,9 @@ func (r *entryRenderer) buildSelection() { provider := r.entry.textProvider() // Convert column, row into x,y - getCoordinates := func(column int, row int) (int, int) { + getCoordinates := func(column int, row int) (float32, float32) { sz := provider.lineSizeToColumn(column, row) - return sz.Width + theme.Padding()*2, sz.Height*row + theme.Padding()*2 + return sz.Width + theme.Padding()*2, sz.Height*float32(row) + theme.Padding()*2 } lineHeight := r.entry.text.charMinSize().Height @@ -1314,7 +1314,7 @@ func (r *entryRenderer) moveCursor() { size := provider.lineSizeToColumn(r.entry.CursorColumn, r.entry.CursorRow) provider.propertyLock.RUnlock() xPos := size.Width - yPos := size.Height * r.entry.CursorRow + yPos := size.Height * float32(r.entry.CursorRow) r.entry.propertyLock.RUnlock() r.entry.propertyLock.Lock() diff --git a/widget/entry_internal_test.go b/widget/entry_internal_test.go index 9205b8ec75..e12a939d8e 100644 --- a/widget/entry_internal_test.go +++ b/widget/entry_internal_test.go @@ -107,7 +107,7 @@ func TestEntry_MouseClickAndDragOutsideText(t *testing.T) { me := &desktop.MouseEvent{PointEvent: *ev, Button: desktop.MouseButtonPrimary} entry.MouseDown(me) - de := &fyne.DragEvent{PointEvent: *ev, DraggedX: 1, DraggedY: 0} + de := &fyne.DragEvent{PointEvent: *ev, Dragged: fyne.NewDelta(1, 0)} entry.Dragged(de) entry.MouseUp(me) assert.False(t, entry.selecting) diff --git a/widget/entry_test.go b/widget/entry_test.go index 3888ab7712..972568d148 100644 --- a/widget/entry_test.go +++ b/widget/entry_test.go @@ -346,7 +346,7 @@ func TestEntry_DragSelect(t *testing.T) { me := &desktop.MouseEvent{PointEvent: *ev1, Button: desktop.MouseButtonPrimary} entry.MouseDown(me) for ; ev1.Position.X < ev2.Position.X; ev1.Position.X++ { - de := &fyne.DragEvent{PointEvent: *ev1, DraggedX: 1, DraggedY: 0} + de := &fyne.DragEvent{PointEvent: *ev1, Dragged: fyne.NewDelta(1, 0)} entry.Dragged(de) } me = &desktop.MouseEvent{PointEvent: *ev1, Button: desktop.MouseButtonPrimary} @@ -2414,7 +2414,7 @@ func TestEntry_Tapped(t *testing.T) { `, c) testCharSize := theme.TextSize() - pos := fyne.NewPos(int(float32(testCharSize)*1.5), testCharSize/2) // tap in the middle of the 2nd "M" + pos := fyne.NewPos(testCharSize*1.5, testCharSize/2) // tap in the middle of the 2nd "M" ev := &fyne.PointEvent{Position: pos} entry.Tapped(ev) test.AssertRendersToMarkup(t, ` @@ -2435,7 +2435,7 @@ func TestEntry_Tapped(t *testing.T) { assert.Equal(t, 0, entry.CursorRow) assert.Equal(t, 1, entry.CursorColumn) - pos = fyne.NewPos(int(float32(testCharSize)*2.5), testCharSize/2) // tap in the middle of the 3rd "M" + pos = fyne.NewPos(testCharSize*2.5, testCharSize/2) // tap in the middle of the 3rd "M" ev = &fyne.PointEvent{Position: pos} entry.Tapped(ev) test.AssertRendersToMarkup(t, ` @@ -3098,7 +3098,7 @@ func getClickPosition(str string, row int) *fyne.PointEvent { x := fyne.MeasureText(str, theme.TextSize(), fyne.TextStyle{}).Width + theme.Padding() rowHeight := fyne.MeasureText("M", theme.TextSize(), fyne.TextStyle{}).Height - y := theme.Padding() + row*rowHeight + rowHeight/2 + y := theme.Padding() + float32(row)*rowHeight + rowHeight/2 pos := fyne.NewPos(x, y) return &fyne.PointEvent{Position: pos} diff --git a/widget/fileicon.go b/widget/fileicon.go index 3905d5b766..3550ad890e 100644 --- a/widget/fileicon.go +++ b/widget/fileicon.go @@ -141,15 +141,15 @@ func (s *fileIconRenderer) MinSize() fyne.Size { func (s *fileIconRenderer) Layout(size fyne.Size) { isize := fyne.Min(size.Width, size.Height) - xoff := 0 + xoff := float32(0) yoff := (size.Height - isize) / 2 if size.Width > size.Height { xoff = (size.Width - isize) / 2 } - yoff += int(float64(isize) * ratioDown) + yoff += isize * ratioDown - s.ext.TextSize = int(float64(isize) * ratioTextSize) + s.ext.TextSize = float32(int(isize * ratioTextSize)) s.ext.Resize(fyne.NewSize(isize, s.ext.MinSize().Height)) s.ext.Move(fyne.NewPos(xoff, yoff)) diff --git a/widget/label_test.go b/widget/label_test.go index 45124c7c80..305673a791 100644 --- a/widget/label_test.go +++ b/widget/label_test.go @@ -129,7 +129,7 @@ func TestText_MinSize_MultiLine(t *testing.T) { assert.True(t, min2.Width < min.Width) assert.True(t, min2.Height > min.Height) - yPos := -1 + yPos := float32(-1) for _, text := range test.WidgetRenderer(textMultiLine).(*textRenderer).texts { assert.True(t, text.Size().Height < min2.Height) assert.True(t, text.Position().Y > yPos) diff --git a/widget/list.go b/widget/list.go index d12f4aed82..6a0ca45eb1 100644 --- a/widget/list.go +++ b/widget/list.go @@ -34,7 +34,7 @@ type List struct { scroller *ScrollContainer selected []ListItemID itemMin fyne.Size - offsetY int + offsetY float32 } // NewList creates and returns a list widget for displaying items in @@ -111,7 +111,7 @@ func (l *List) Select(id ListItemID) { if l.scroller == nil { return } - y := (id * l.itemMin.Height) + (id * separatorThickness) + y := (float32(id) * l.itemMin.Height) + (float32(id) * separatorThickness) if y < l.scroller.Offset.Y { l.scroller.Offset.Y = y } else if y+l.itemMin.Height > l.scroller.Offset.Y+l.scroller.Size().Height { @@ -149,7 +149,7 @@ type listRenderer struct { visibleItemCount int firstItemIndex ListItemID lastItemIndex ListItemID - previousOffsetY int + previousOffsetY float32 } func newListRenderer(objects []fyne.CanvasObject, l *List, scroller *ScrollContainer, layout *fyne.Container) *listRenderer { @@ -204,7 +204,7 @@ func (l *listRenderer) Layout(size fyne.Size) { if l.visibleItemCount <= 0 { return } - min := fyne.Min(length, l.visibleItemCount) + min := int(fyne.Min(float32(length), float32(l.visibleItemCount))) if len(l.children) > min { for i := len(l.children); i >= min; i-- { l.itemPool.Release(l.children[i-1]) @@ -262,7 +262,7 @@ func (l *listRenderer) getItem() fyne.CanvasObject { } func (l *listRenderer) offsetChanged() { - offsetChange := int(math.Abs(float64(l.previousOffsetY - l.list.offsetY))) + offsetChange := float32(math.Abs(float64(l.previousOffsetY - l.list.offsetY))) if l.previousOffsetY < l.list.offsetY { // Scrolling Down. @@ -283,7 +283,7 @@ func (l *listRenderer) prependItem(id ListItemID) { l.layout.Objects = l.layout.Layout.(*listLayout).getObjects() } -func (l *listRenderer) scrollDown(offsetChange int) { +func (l *listRenderer) scrollDown(offsetChange float32) { itemChange := 0 layoutEndY := l.children[len(l.children)-1].Position().Y + l.list.itemMin.Height + separatorThickness scrollerEndY := l.scroller.Offset.Y + l.scroller.Size().Height @@ -311,7 +311,7 @@ func (l *listRenderer) scrollDown(offsetChange int) { } } -func (l *listRenderer) scrollUp(offsetChange int) { +func (l *listRenderer) scrollUp(offsetChange float32) { itemChange := 0 layoutStartY := l.children[0].Position().Y if layoutStartY > l.scroller.Offset.Y { @@ -464,7 +464,7 @@ type listLayout struct { list *List dividers []fyne.CanvasObject children []fyne.CanvasObject - layoutEndY int + layoutEndY float32 } func newListLayout(list *List) fyne.Layout { @@ -475,7 +475,7 @@ func (l *listLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { if l.list.offsetY != 0 { return } - y := 0 + y := float32(0) for _, child := range l.children { child.Move(fyne.NewPos(0, y)) y += l.list.itemMin.Height + separatorThickness @@ -488,7 +488,7 @@ func (l *listLayout) Layout(objects []fyne.CanvasObject, size fyne.Size) { func (l *listLayout) MinSize(objects []fyne.CanvasObject) fyne.Size { if f := l.list.Length; f != nil { return fyne.NewSize(l.list.itemMin.Width, - (l.list.itemMin.Height+separatorThickness)*f()-separatorThickness) + (l.list.itemMin.Height+separatorThickness)*float32(f())-separatorThickness) } return fyne.NewSize(0, 0) } diff --git a/widget/list_test.go b/widget/list_test.go index 6e2441ee9b..d80f459162 100644 --- a/widget/list_test.go +++ b/widget/list_test.go @@ -360,7 +360,7 @@ func TestList_OffsetChange(t *testing.T) { assert.Equal(t, visibleCount, lastItemIndex-firstItemIndex) scroll := test.WidgetRenderer(list).(*listRenderer).scroller - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 0, DeltaY: -300}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(0, -300)}) indexChange := int(math.Floor(float64(300) / float64(template.MinSize().Height))) diff --git a/widget/menu_desktop_test.go b/widget/menu_desktop_test.go index 9c2ee44052..dfceef5112 100644 --- a/widget/menu_desktop_test.go +++ b/widget/menu_desktop_test.go @@ -854,7 +854,7 @@ func TestMenu_Scrolling(t *testing.T) { - + diff --git a/widget/menu_item.go b/widget/menu_item.go index 0b651b8e79..9304e1d1fe 100644 --- a/widget/menu_item.go +++ b/widget/menu_item.go @@ -143,7 +143,7 @@ type menuItemRenderer struct { widget.BaseRenderer i *menuItem icon *canvas.Image - lastThemePadding int + lastThemePadding float32 minSize fyne.Size text *canvas.Text } diff --git a/widget/menu_mobile_test.go b/widget/menu_mobile_test.go index 4f87aebb71..8593d6c7b1 100644 --- a/widget/menu_mobile_test.go +++ b/widget/menu_mobile_test.go @@ -854,7 +854,7 @@ func TestMenu_Dragging(t *testing.T) { - + diff --git a/widget/popup_test.go b/widget/popup_test.go index 454ec5312a..2dcd70f57b 100644 --- a/widget/popup_test.go +++ b/widget/popup_test.go @@ -92,7 +92,7 @@ func TestShowModalPopUp(t *testing.T) { defer test.NewApp() w := test.NewWindow(canvas.NewRectangle(color.Transparent)) - w.Resize(fyne.NewSize(200, 200)) + w.Resize(fyne.NewSize(200, 199)) require.Nil(t, w.Canvas().Overlays().Top()) label := NewLabel("Hi") @@ -106,12 +106,12 @@ func TestShowModalPopUp(t *testing.T) { } test.AssertRendersToMarkup(t, ` - + - + - + @@ -202,8 +202,8 @@ func TestPopUp_Move(t *testing.T) { assert.Equal(t, pos.Add(fyne.NewPos(theme.Padding(), theme.Padding())), pop.Content.Position()) popPos := pop.Position() - assert.Equal(t, 0, popPos.X) // these are 0 as the popUp must fill our overlay - assert.Equal(t, 0, popPos.Y) + assert.Equal(t, float32(0), popPos.X) // these are 0 as the popUp must fill our overlay + assert.Equal(t, float32(0), popPos.Y) } func TestPopUp_Move_Constrained(t *testing.T) { @@ -261,8 +261,8 @@ func TestPopUp_Resize(t *testing.T) { assert.Equal(t, size.Subtract(fyne.NewSize(theme.Padding()*2, theme.Padding()*2)), pop.Content.Size()) popSize := pop.Size() - assert.Equal(t, 80, popSize.Width) // these are 80 as the popUp must fill our overlay - assert.Equal(t, 80, popSize.Height) + assert.Equal(t, float32(80), popSize.Width) // these are 80 as the popUp must fill our overlay + assert.Equal(t, float32(80), popSize.Height) } func TestPopUp_Tapped(t *testing.T) { @@ -395,8 +395,8 @@ func TestModalPopUp_Resize(t *testing.T) { assert.Equal(t, size.Subtract(fyne.NewSize(theme.Padding()*2, theme.Padding()*2)), pop.Content.Size()) popSize := pop.Size() - assert.Equal(t, 80, popSize.Width) // these are 80 as the popUp must fill our overlay - assert.Equal(t, 80, popSize.Height) + assert.Equal(t, float32(80), popSize.Width) // these are 80 as the popUp must fill our overlay + assert.Equal(t, float32(80), popSize.Height) } func TestModalPopUp_Resize_Constrained(t *testing.T) { @@ -408,6 +408,6 @@ func TestModalPopUp_Resize_Constrained(t *testing.T) { pop.Resize(fyne.NewSize(90, 100)) assert.Equal(t, 80-theme.Padding()*2, pop.Content.Size().Width) assert.Equal(t, 80-theme.Padding()*2, pop.Content.Size().Height) - assert.Equal(t, 80, pop.Size().Width) - assert.Equal(t, 80, pop.Size().Height) + assert.Equal(t, float32(80), pop.Size().Width) + assert.Equal(t, float32(80), pop.Size().Height) } diff --git a/widget/progressbar.go b/widget/progressbar.go index 0f8d5c0d2f..b961959dcd 100644 --- a/widget/progressbar.go +++ b/widget/progressbar.go @@ -52,7 +52,7 @@ func (p *progressRenderer) updateBar() { } size := p.progress.Size() - p.bar.Resize(fyne.NewSize(int(float32(size.Width)*ratio), size.Height)) + p.bar.Resize(fyne.NewSize(size.Width*ratio, size.Height)) } // Layout the components of the check widget diff --git a/widget/progressbar_extend_test.go b/widget/progressbar_extend_test.go index 0e33f573d2..5b7a4cbd4b 100644 --- a/widget/progressbar_extend_test.go +++ b/widget/progressbar_extend_test.go @@ -25,9 +25,9 @@ func TestProgressBarRenderer_Extended_Layout(t *testing.T) { r := test.WidgetRenderer(bar).(*progressRenderer) assert.Equal(t, 0.0, bar.Value) - assert.Equal(t, 0, r.bar.Size().Width) + assert.Equal(t, float32(0), r.bar.Size().Width) bar.SetValue(.5) assert.Equal(t, .5, bar.Value) - assert.Equal(t, 50, r.bar.Size().Width) + assert.Equal(t, float32(50), r.bar.Size().Width) } diff --git a/widget/progressbar_test.go b/widget/progressbar_test.go index eeabba91c2..407e4ba5cd 100644 --- a/widget/progressbar_test.go +++ b/widget/progressbar_test.go @@ -72,10 +72,10 @@ func TestProgressRenderer_Layout(t *testing.T) { bar.Resize(fyne.NewSize(100, 10)) render := test.WidgetRenderer(bar).(*progressRenderer) - assert.Equal(t, 0, render.bar.Size().Width) + assert.Equal(t, float32(0), render.bar.Size().Width) bar.SetValue(.5) - assert.Equal(t, 50, render.bar.Size().Width) + assert.Equal(t, float32(50), render.bar.Size().Width) bar.SetValue(1) assert.Equal(t, bar.Size().Width, render.bar.Size().Width) diff --git a/widget/progressbarinfinite.go b/widget/progressbarinfinite.go index 2636fd686e..9c5fbf38b8 100644 --- a/widget/progressbarinfinite.go +++ b/widget/progressbarinfinite.go @@ -39,9 +39,9 @@ func (p *infProgressRenderer) updateBar() { barWidth := p.bar.Size().Width barPos := p.bar.Position() - maxBarWidth := int(float64(progressSize.Width) * maxProgressBarInfiniteWidthRatio) - minBarWidth := int(float64(progressSize.Width) * minProgressBarInfiniteWidthRatio) - stepSize := int(float64(progressSize.Width) * progressBarInfiniteStepSizeRatio) + maxBarWidth := progressSize.Width * maxProgressBarInfiniteWidthRatio + minBarWidth := progressSize.Width * minProgressBarInfiniteWidthRatio + stepSize := progressSize.Width * progressBarInfiniteStepSizeRatio // check to make sure inner bar is sized correctly // if bar is on the first half of the progress bar, grow it up to maxProgressBarInfiniteWidthPercent diff --git a/widget/progressbarinfinite_test.go b/widget/progressbarinfinite_test.go index 41f117dfbb..4d937d1b3a 100644 --- a/widget/progressbarinfinite_test.go +++ b/widget/progressbarinfinite_test.go @@ -47,18 +47,18 @@ func TestProgressBarInfinite_Reshown(t *testing.T) { func TestInfiniteProgressRenderer_Layout(t *testing.T) { bar := NewProgressBarInfinite() - width := 100.0 - bar.Resize(fyne.NewSize(int(width), 10)) + width := float32(100.0) + bar.Resize(fyne.NewSize(width, 10)) render := test.WidgetRenderer(bar).(*infProgressRenderer) // width of bar is one step size because updateBar() will have run once - assert.Equal(t, int(width*progressBarInfiniteStepSizeRatio), render.bar.Size().Width) + assert.Equal(t, width*progressBarInfiniteStepSizeRatio, render.bar.Size().Width) // make sure the inner progress bar grows in size // call updateBar() enough times to grow the inner bar - maxWidth := int(width * maxProgressBarInfiniteWidthRatio) - for i := 0; i < maxWidth; i++ { + maxWidth := width * maxProgressBarInfiniteWidthRatio + for i := 0; i < int(maxWidth); i++ { render.updateBar() } diff --git a/widget/radio.go b/widget/radio.go index 44952d41e5..06194a8b23 100644 --- a/widget/radio.go +++ b/widget/radio.go @@ -171,7 +171,7 @@ func (r *Radio) indexByPosition(pos fyne.Position) int { return index } -func (r *Radio) itemHeight() int { +func (r *Radio) itemHeight() float32 { if r.Horizontal { return r.MinSize().Height } @@ -180,10 +180,10 @@ func (r *Radio) itemHeight() int { if r.Options != nil && len(r.Options) > 0 { count = len(r.Options) } - return r.MinSize().Height / count + return r.MinSize().Height / float32(count) } -func (r *Radio) itemWidth() int { +func (r *Radio) itemWidth() float32 { if !r.Horizontal { return r.MinSize().Width } @@ -192,7 +192,7 @@ func (r *Radio) itemWidth() int { if r.Options != nil && len(r.Options) > 0 { count = len(r.Options) } - return r.MinSize().Width / count + return r.MinSize().Width / float32(count) } func (r *Radio) removeDuplicateOptions() { @@ -219,7 +219,7 @@ func (r *radioRenderer) Layout(size fyne.Size) { labelSize := fyne.NewSize(itemWidth, itemHeight) focusIndicatorSize := fyne.NewSize(theme.IconInlineSize()+theme.Padding()*2, theme.IconInlineSize()+theme.Padding()*2) - x, y := 0, 0 + x, y := float32(0), float32(0) for _, item := range r.items { item.focusIndicator.Resize(focusIndicatorSize) item.focusIndicator.Move(fyne.NewPos(x, y+(itemHeight-focusIndicatorSize.Height)/2)) @@ -243,8 +243,8 @@ func (r *radioRenderer) Layout(size fyne.Size) { // This is based on the contained text, the radio icon and a standard amount of padding // between each item. func (r *radioRenderer) MinSize() fyne.Size { - width := 0 - height := 0 + width := float32(0) + height := float32(0) for _, item := range r.items { itemMin := item.label.MinSize().Add(fyne.NewSize(theme.Padding()*4, theme.Padding()*2)) itemMin = itemMin.Add(fyne.NewSize(theme.IconInlineSize()+theme.Padding(), 0)) diff --git a/widget/radio_group.go b/widget/radio_group.go index cfca81fc0f..23783d983d 100644 --- a/widget/radio_group.go +++ b/widget/radio_group.go @@ -142,18 +142,18 @@ func (r *radioGroupRenderer) Layout(_ fyne.Size) { if r.items != nil && len(r.items) > 0 { count = len(r.items) } - var itemHeight, itemWidth int + var itemHeight, itemWidth float32 minSize := r.radio.MinSize() if r.radio.Horizontal { itemHeight = minSize.Height - itemWidth = minSize.Width / count + itemWidth = minSize.Width / float32(count) } else { - itemHeight = minSize.Height / count + itemHeight = minSize.Height / float32(count) itemWidth = minSize.Width } itemSize := fyne.NewSize(itemWidth, itemHeight) - x, y := 0, 0 + x, y := float32(0), float32(0) for _, item := range r.items { item.Resize(itemSize) item.Move(fyne.NewPos(x, y)) @@ -169,8 +169,8 @@ func (r *radioGroupRenderer) Layout(_ fyne.Size) { // This is based on the contained text, the radio icon and a standard amount of padding // between each item. func (r *radioGroupRenderer) MinSize() fyne.Size { - width := 0 - height := 0 + width := float32(0) + height := float32(0) for _, item := range r.items { itemMin := item.MinSize() if r.radio.Horizontal { diff --git a/widget/radio_internal_test.go b/widget/radio_internal_test.go index 702e6aea37..865d0e9fe4 100644 --- a/widget/radio_internal_test.go +++ b/widget/radio_internal_test.go @@ -334,12 +334,12 @@ func TestRadio_FocusIndicator_Centered_Vertically(t *testing.T) { heightCenterOffset := (radio.itemHeight() - focusIndicatorSize) / 2 for i, item := range render.items { - x, y := 0, heightCenterOffset + x, y := float32(0), heightCenterOffset if tt.isHorizontal { - x = i * radio.itemWidth() + x = float32(i) * radio.itemWidth() } else { - y = i*radio.itemHeight() + heightCenterOffset + y = float32(i)*radio.itemHeight() + heightCenterOffset } assert.Equal(t, fyne.NewPos(x, y), item.focusIndicator.Position1) diff --git a/widget/scroller.go b/widget/scroller.go index 81a92912c1..5c54c30ef7 100644 --- a/widget/scroller.go +++ b/widget/scroller.go @@ -31,7 +31,7 @@ type scrollBarOrientation int const ( scrollBarOrientationVertical scrollBarOrientation = 0 scrollBarOrientationHorizontal scrollBarOrientation = 1 - scrollContainerMinSize = 32 // TODO consider the smallest useful scroll view? + scrollContainerMinSize = float32(32) // TODO consider the smallest useful scroll view? ) type scrollBarRenderer struct { @@ -60,8 +60,8 @@ var _ fyne.Draggable = (*scrollBar)(nil) type scrollBar struct { BaseWidget area *scrollBarArea - draggedDistance int - dragStart int + draggedDistance float32 + dragStart float32 isDragged bool orientation scrollBarOrientation } @@ -92,9 +92,9 @@ func (b *scrollBar) Dragged(e *fyne.DragEvent) { switch b.orientation { case scrollBarOrientationHorizontal: - b.draggedDistance += e.DraggedX + b.draggedDistance += e.Dragged.DX case scrollBarOrientationVertical: - b.draggedDistance += e.DraggedY + b.draggedDistance += e.Dragged.DY } b.area.moveBar(b.draggedDistance+b.dragStart, b.Size()) } @@ -127,7 +127,7 @@ func (r *scrollBarAreaRenderer) BackgroundColor() color.Color { } func (r *scrollBarAreaRenderer) Layout(_ fyne.Size) { - var barHeight, barWidth, barX, barY int + var barHeight, barWidth, barX, barY float32 switch r.area.orientation { case scrollBarOrientationHorizontal: barWidth, barHeight, barX, barY = r.barSizeAndOffset(r.area.scroll.Offset.X, r.area.scroll.Content.Size().Width, r.area.scroll.Size().Width) @@ -139,8 +139,7 @@ func (r *scrollBarAreaRenderer) Layout(_ fyne.Size) { } func (r *scrollBarAreaRenderer) MinSize() fyne.Size { - var min int - min = theme.ScrollBarSize() + min := theme.ScrollBarSize() if !r.area.isLarge { min = theme.ScrollBarSmallSize() * 2 } @@ -157,10 +156,10 @@ func (r *scrollBarAreaRenderer) Refresh() { canvas.Refresh(r.bar) } -func (r *scrollBarAreaRenderer) barSizeAndOffset(contentOffset, contentLength, scrollLength int) (length, width, lengthOffset, widthOffset int) { +func (r *scrollBarAreaRenderer) barSizeAndOffset(contentOffset, contentLength, scrollLength float32) (length, width, lengthOffset, widthOffset float32) { if scrollLength < contentLength { - portion := float64(scrollLength) / float64(contentLength) - length = int(float64(scrollLength) * portion) + portion := scrollLength / contentLength + length = float32(int(scrollLength)) * portion if length < theme.ScrollBarSize() { length = theme.ScrollBarSize() } @@ -168,7 +167,7 @@ func (r *scrollBarAreaRenderer) barSizeAndOffset(contentOffset, contentLength, s length = scrollLength } if contentOffset != 0 { - lengthOffset = int(float64(scrollLength-length) * (float64(contentOffset) / float64(contentLength-scrollLength))) + lengthOffset = (scrollLength - length) * (contentOffset / (contentLength - scrollLength)) } if r.area.isLarge { width = theme.ScrollBarSize() @@ -207,7 +206,7 @@ func (a *scrollBarArea) MouseOut() { a.scroll.Refresh() } -func (a *scrollBarArea) moveBar(offset int, barSize fyne.Size) { +func (a *scrollBarArea) moveBar(offset float32, barSize fyne.Size) { switch a.orientation { case scrollBarOrientationHorizontal: a.scroll.Offset.X = a.computeScrollOffset(barSize.Width, offset, a.scroll.Size().Width, a.scroll.Content.Size().Width) @@ -220,15 +219,15 @@ func (a *scrollBarArea) moveBar(offset int, barSize fyne.Size) { a.scroll.refreshWithoutOffsetUpdate() } -func (a *scrollBarArea) computeScrollOffset(length, offset, scrollLength, contentLength int) int { +func (a *scrollBarArea) computeScrollOffset(length, offset, scrollLength, contentLength float32) float32 { maxOffset := scrollLength - length if offset < 0 { offset = 0 } else if offset > maxOffset { offset = maxOffset } - ratio := float32(offset) / float32(maxOffset) - scrollOffset := int(ratio * float32(contentLength-scrollLength)) + ratio := offset / maxOffset + scrollOffset := ratio * (contentLength - scrollLength) return scrollOffset } @@ -294,7 +293,7 @@ func (r *scrollContainerRenderer) Refresh() { r.Layout(r.scroll.Size()) } -func (r *scrollContainerRenderer) handleAreaVisibility(contentSize int, scrollSize int, area *scrollBarArea) { +func (r *scrollContainerRenderer) handleAreaVisibility(contentSize, scrollSize float32, area *scrollBarArea) { if contentSize <= scrollSize { area.Hide() } else if r.scroll.Visible() { @@ -302,7 +301,7 @@ func (r *scrollContainerRenderer) handleAreaVisibility(contentSize int, scrollSi } } -func (r *scrollContainerRenderer) handleShadowVisibility(offset int, contentSize int, scrollSize int, shadowStart fyne.CanvasObject, shadowEnd fyne.CanvasObject) { +func (r *scrollContainerRenderer) handleShadowVisibility(offset, contentSize, scrollSize float32, shadowStart fyne.CanvasObject, shadowEnd fyne.CanvasObject) { if !r.scroll.Visible() { return } @@ -399,7 +398,7 @@ func (s *ScrollContainer) Dragged(e *fyne.DragEvent) { return } - if s.updateOffset(e.DraggedX, e.DraggedY) { + if s.updateOffset(e.Dragged.DX, e.Dragged.DY) { s.refreshWithoutOffsetUpdate() } } @@ -443,7 +442,7 @@ func (s *ScrollContainer) Resize(size fyne.Size) { // Scrolled is called when an input device triggers a scroll event func (s *ScrollContainer) Scrolled(ev *fyne.ScrollEvent) { - dx, dy := ev.DeltaX, ev.DeltaY + dx, dy := ev.Scrolled.DX, ev.Scrolled.DY if s.Size().Width < s.Content.MinSize().Width && s.Size().Height >= s.Content.MinSize().Height && dx == 0 { dx, dy = dy, dx } @@ -452,7 +451,7 @@ func (s *ScrollContainer) Scrolled(ev *fyne.ScrollEvent) { } } -func (s *ScrollContainer) updateOffset(deltaX, deltaY int) bool { +func (s *ScrollContainer) updateOffset(deltaX, deltaY float32) bool { if s.Content.Size().Width <= s.Size().Width && s.Content.Size().Height <= s.Size().Height { if s.Offset.X != 0 || s.Offset.Y != 0 { s.Offset.X = 0 @@ -469,7 +468,7 @@ func (s *ScrollContainer) updateOffset(deltaX, deltaY int) bool { return true } -func computeOffset(start, delta, outerWidth, innerWidth int) int { +func computeOffset(start, delta, outerWidth, innerWidth float32) float32 { offset := start + delta if offset+outerWidth >= innerWidth { offset = innerWidth - outerWidth diff --git a/widget/scroller_test.go b/widget/scroller_test.go index d52139fccd..7165465ac4 100644 --- a/widget/scroller_test.go +++ b/widget/scroller_test.go @@ -20,7 +20,7 @@ func TestNewScrollContainer(t *testing.T) { scroll.Resize(fyne.NewSize(100, 100)) barArea := test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea bar := test.WidgetRenderer(barArea).(*scrollBarAreaRenderer).bar - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.Y) assert.Equal(t, theme.ScrollBarSmallSize()*2, barArea.Size().Width) assert.Equal(t, theme.ScrollBarSmallSize(), bar.Size().Width) assert.Equal(t, theme.ScrollBarSmallSize(), bar.Position().X) @@ -39,8 +39,8 @@ func TestScrollContainer_MinSize(t *testing.T) { assert.Equal(t, scrollMin, scroll.MinSize()) assert.Equal(t, fyne.NewSize(500, 100), rect.Size()) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) } func TestScrollContainer_ScrollToTop(t *testing.T) { @@ -49,7 +49,7 @@ func TestScrollContainer_ScrollToTop(t *testing.T) { scroll := NewScrollContainer(rect) scroll.ScrollToTop() Y := scroll.Offset.Y - assert.Equal(t, 0, Y) + assert.Equal(t, float32(0), Y) } func TestScrollContainer_ScrollToBottom(t *testing.T) { @@ -57,7 +57,7 @@ func TestScrollContainer_ScrollToBottom(t *testing.T) { rect.SetMinSize(fyne.NewSize(500, 50)) scroll := NewScrollContainer(rect) scroll.ScrollToBottom() - ExpectedY := 50 + ExpectedY := float32(50) Y := scroll.Content.Size().Height - scroll.Size().Height assert.Equal(t, ExpectedY, Y) } @@ -68,24 +68,24 @@ func TestScrollContainer_MinSize_Direction(t *testing.T) { rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewScrollContainer(rect) size := scroll.MinSize() - assert.Equal(t, 32, size.Height) - assert.Equal(t, 32, size.Width) + assert.Equal(t, float32(32), size.Height) + assert.Equal(t, float32(32), size.Width) }) t.Run("HorizontalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewHScrollContainer(rect) size := scroll.MinSize() - assert.Equal(t, 100, size.Height) - assert.Equal(t, 32, size.Width) + assert.Equal(t, float32(100), size.Height) + assert.Equal(t, float32(32), size.Width) }) t.Run("VerticalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewVScrollContainer(rect) size := scroll.MinSize() - assert.Equal(t, 32, size.Height) - assert.Equal(t, 100, size.Width) + assert.Equal(t, float32(32), size.Height) + assert.Equal(t, float32(100), size.Width) }) } @@ -96,8 +96,8 @@ func TestScrollContainer_SetMinSize_Direction(t *testing.T) { scroll := NewScrollContainer(rect) scroll.SetMinSize(fyne.NewSize(50, 50)) size := scroll.MinSize() - assert.Equal(t, 50, size.Height) - assert.Equal(t, 50, size.Width) + assert.Equal(t, float32(50), size.Height) + assert.Equal(t, float32(50), size.Width) }) t.Run("HorizontalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) @@ -105,8 +105,8 @@ func TestScrollContainer_SetMinSize_Direction(t *testing.T) { scroll := NewHScrollContainer(rect) scroll.SetMinSize(fyne.NewSize(50, 50)) size := scroll.MinSize() - assert.Equal(t, 100, size.Height) - assert.Equal(t, 50, size.Width) + assert.Equal(t, float32(100), size.Height) + assert.Equal(t, float32(50), size.Width) }) t.Run("VerticalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) @@ -114,8 +114,8 @@ func TestScrollContainer_SetMinSize_Direction(t *testing.T) { scroll := NewVScrollContainer(rect) scroll.SetMinSize(fyne.NewSize(50, 50)) size := scroll.MinSize() - assert.Equal(t, 50, size.Height) - assert.Equal(t, 100, size.Width) + assert.Equal(t, float32(50), size.Height) + assert.Equal(t, float32(100), size.Width) }) } @@ -126,8 +126,8 @@ func TestScrollContainer_Resize_Direction(t *testing.T) { scroll := NewScrollContainer(rect) scroll.Resize(scroll.MinSize()) size := scroll.Size() - assert.Equal(t, 32, size.Height) - assert.Equal(t, 32, size.Width) + assert.Equal(t, float32(32), size.Height) + assert.Equal(t, float32(32), size.Width) }) t.Run("HorizontalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) @@ -135,8 +135,8 @@ func TestScrollContainer_Resize_Direction(t *testing.T) { scroll := NewHScrollContainer(rect) scroll.Resize(scroll.MinSize()) size := scroll.Size() - assert.Equal(t, 100, size.Height) - assert.Equal(t, 32, size.Width) + assert.Equal(t, float32(100), size.Height) + assert.Equal(t, float32(32), size.Width) }) t.Run("VerticalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) @@ -144,8 +144,8 @@ func TestScrollContainer_Resize_Direction(t *testing.T) { scroll := NewVScrollContainer(rect) scroll.Resize(scroll.MinSize()) size := scroll.Size() - assert.Equal(t, 32, size.Height) - assert.Equal(t, 100, size.Width) + assert.Equal(t, float32(32), size.Height) + assert.Equal(t, float32(100), size.Width) }) } @@ -155,13 +155,13 @@ func TestScrollContainer_Refresh(t *testing.T) { scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(100, 100)) assert.Equal(t, fyne.NewSize(1000, 1000), rect.Size()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -1000, DeltaY: -1000}) - assert.Equal(t, 900, scroll.Offset.X) - assert.Equal(t, 900, scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-1000, -1000)}) + assert.Equal(t, float32(900), scroll.Offset.X) + assert.Equal(t, float32(900), scroll.Offset.Y) assert.Equal(t, fyne.NewSize(1000, 1000), rect.Size()) rect.SetMinSize(fyne.NewSize(500, 500)) Refresh(scroll) - assert.Equal(t, 400, scroll.Offset.X) + assert.Equal(t, float32(400), scroll.Offset.X) assert.Equal(t, fyne.NewSize(500, 500), rect.Size()) rect2 := canvas.NewRectangle(color.White) @@ -175,11 +175,11 @@ func TestScrollContainer_Scrolled(t *testing.T) { rect.SetMinSize(fyne.NewSize(1000, 1000)) scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(100, 100)) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -10, DeltaY: -10}) - assert.Equal(t, 10, scroll.Offset.X) - assert.Equal(t, 10, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-10, -10)}) + assert.Equal(t, float32(10), scroll.Offset.X) + assert.Equal(t, float32(10), scroll.Offset.Y) } @@ -188,8 +188,8 @@ func TestScrollContainer_Scrolled_Limit(t *testing.T) { rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(80, 80)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -25, DeltaY: -25}) - assert.Equal(t, 20, scroll.Offset.X) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-25, -25)}) + assert.Equal(t, float32(20), scroll.Offset.X) } func TestScrollContainer_Scrolled_Back(t *testing.T) { @@ -199,9 +199,9 @@ func TestScrollContainer_Scrolled_Back(t *testing.T) { scroll.Resize(fyne.NewSize(100, 100)) scroll.Offset.X = 10 scroll.Offset.Y = 10 - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 10, DeltaY: 10}) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(10, 10)}) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) } func TestScrollContainer_Scrolled_BackLimit(t *testing.T) { @@ -211,9 +211,9 @@ func TestScrollContainer_Scrolled_BackLimit(t *testing.T) { scroll.Resize(fyne.NewSize(100, 100)) scroll.Offset.X = 10 scroll.Offset.Y = 10 - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 20, DeltaY: 20}) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(20, 20)}) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) } @@ -222,10 +222,10 @@ func TestScrollContainer_Resize(t *testing.T) { scroll := NewScrollContainer(rect) rect.SetMinSize(fyne.NewSize(100, 100)) scroll.Resize(fyne.NewSize(80, 80)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -20, DeltaY: -20}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-20, -20)}) scroll.Resize(fyne.NewSize(100, 100)) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) } @@ -234,10 +234,10 @@ func TestScrollContainer_ResizeOffset(t *testing.T) { scroll := NewScrollContainer(rect) rect.SetMinSize(fyne.NewSize(100, 100)) scroll.Resize(fyne.NewSize(80, 80)) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -20, DeltaY: -20}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-20, -20)}) scroll.Resize(fyne.NewSize(90, 90)) - assert.Equal(t, 10, scroll.Offset.X) - assert.Equal(t, 10, scroll.Offset.Y) + assert.Equal(t, float32(10), scroll.Offset.X) + assert.Equal(t, float32(10), scroll.Offset.Y) } func TestScrollContainer_ResizeExpand(t *testing.T) { @@ -245,8 +245,8 @@ func TestScrollContainer_ResizeExpand(t *testing.T) { rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(120, 140)) - assert.Equal(t, 120, rect.Size().Width) - assert.Equal(t, 140, rect.Size().Height) + assert.Equal(t, float32(120), rect.Size().Width) + assert.Equal(t, float32(140), rect.Size().Height) } func TestScrollContainer_ScrollBarForSmallContentIsHidden(t *testing.T) { @@ -330,7 +330,7 @@ func TestScrollContainer_ScrollBarGrowsAndShrinksOnMouseInAndMouseOut(t *testing assert.Equal(t, theme.ScrollBarSize(), areaHoriz.Size().Height) assert.Equal(t, fyne.NewPos(0, 100-theme.ScrollBarSize()), areaHoriz.Position()) assert.Equal(t, theme.ScrollBarSize(), barHoriz.Size().Height) - assert.Equal(t, 0, barHoriz.Position().Y) + assert.Equal(t, float32(0), barHoriz.Position().Y) barHoriz.MouseOut() assert.Equal(t, theme.ScrollBarSmallSize()*2, areaHoriz.Size().Height) assert.Equal(t, fyne.NewPos(0, 100-theme.ScrollBarSmallSize()*2), areaHoriz.Position()) @@ -346,7 +346,7 @@ func TestScrollContainer_ScrollBarGrowsAndShrinksOnMouseInAndMouseOut(t *testing assert.Equal(t, theme.ScrollBarSize(), areaVert.Size().Width) assert.Equal(t, fyne.NewPos(100-theme.ScrollBarSize(), 0), areaVert.Position()) assert.Equal(t, theme.ScrollBarSize(), barVert.Size().Width) - assert.Equal(t, 0, barVert.Position().X) + assert.Equal(t, float32(0), barVert.Position().X) barVert.MouseOut() assert.Equal(t, theme.ScrollBarSmallSize()*2, areaVert.Size().Width) assert.Equal(t, fyne.NewPos(100-theme.ScrollBarSmallSize()*2, 0), areaVert.Position()) @@ -363,10 +363,10 @@ func TestScrollContainer_ShowShadowOnLeftIfContentIsScrolled(t *testing.T) { assert.False(t, r.leftShadow.Visible()) assert.Equal(t, fyne.NewPos(0, 0), r.leftShadow.Position()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -1}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DX: -1}}) assert.True(t, r.leftShadow.Visible()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 1}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DX: 1}}) assert.False(t, r.leftShadow.Visible()) } @@ -379,10 +379,10 @@ func TestScrollContainer_ShowShadowOnRightIfContentCanScroll(t *testing.T) { assert.True(t, r.rightShadow.Visible()) assert.Equal(t, scroll.size.Width, r.rightShadow.Position().X+r.rightShadow.Size().Width) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -400}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DX: -400}}) assert.False(t, r.rightShadow.Visible()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 100}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DX: 100}}) assert.True(t, r.rightShadow.Visible()) } @@ -395,10 +395,10 @@ func TestScrollContainer_ShowShadowOnTopIfContentIsScrolled(t *testing.T) { assert.False(t, r.topShadow.Visible()) assert.Equal(t, fyne.NewPos(0, 0), r.topShadow.Position()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaY: -1}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DY: -1}}) assert.True(t, r.topShadow.Visible()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaY: 1}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DY: 1}}) assert.False(t, r.topShadow.Visible()) } @@ -411,10 +411,10 @@ func TestScrollContainer_ShowShadowOnBottomIfContentCanScroll(t *testing.T) { assert.True(t, r.bottomShadow.Visible()) assert.Equal(t, scroll.size.Height, r.bottomShadow.Position().Y+r.bottomShadow.Size().Height) - scroll.Scrolled(&fyne.ScrollEvent{DeltaY: -400}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DY: -400}}) assert.False(t, r.bottomShadow.Visible()) - scroll.Scrolled(&fyne.ScrollEvent{DeltaY: 100}) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.Delta{DY: 100}}) assert.True(t, r.bottomShadow.Visible()) } @@ -423,22 +423,22 @@ func TestScrollContainer_ScrollHorizontallyWithVerticalMouseScroll(t *testing.T) rect.SetMinSize(fyne.NewSize(1000, 50)) scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(100, 100)) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 0, DeltaY: -10}) - assert.Equal(t, 10, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(0, -10)}) + assert.Equal(t, float32(10), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) t.Run("not if scroll event includes horizontal offset", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) rect.SetMinSize(fyne.NewSize(1000, 50)) scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(100, 100)) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: -20, DeltaY: -40}) - assert.Equal(t, 20, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(-20, -40)}) + assert.Equal(t, float32(20), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) }) t.Run("not if content is vertically scrollable", func(t *testing.T) { @@ -446,11 +446,11 @@ func TestScrollContainer_ScrollHorizontallyWithVerticalMouseScroll(t *testing.T) rect.SetMinSize(fyne.NewSize(1000, 1000)) scroll := NewScrollContainer(rect) scroll.Resize(fyne.NewSize(100, 100)) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 0, scroll.Offset.Y) - scroll.Scrolled(&fyne.ScrollEvent{DeltaX: 0, DeltaY: -10}) - assert.Equal(t, 0, scroll.Offset.X) - assert.Equal(t, 10, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.Y) + scroll.Scrolled(&fyne.ScrollEvent{Scrolled: fyne.NewDelta(0, -10)}) + assert.Equal(t, float32(0), scroll.Offset.X) + assert.Equal(t, float32(10), scroll.Offset.Y) }) } @@ -462,13 +462,13 @@ func TestScrollBarRenderer_BarSize(t *testing.T) { areaHoriz := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).horizArea).(*scrollBarAreaRenderer) areaVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer) - assert.Equal(t, 100, areaHoriz.bar.Size().Width) - assert.Equal(t, 100, areaVert.bar.Size().Height) + assert.Equal(t, float32(100), areaHoriz.bar.Size().Width) + assert.Equal(t, float32(100), areaVert.bar.Size().Height) // resize so content is twice our size. Bar should therefore be half again. scroll.Resize(fyne.NewSize(50, 50)) - assert.Equal(t, 25, areaHoriz.bar.Size().Width) - assert.Equal(t, 25, areaVert.bar.Size().Height) + assert.Equal(t, float32(25), areaHoriz.bar.Size().Width) + assert.Equal(t, float32(25), areaVert.bar.Size().Height) } func TestScrollContainerRenderer_LimitBarSize(t *testing.T) { @@ -479,8 +479,8 @@ func TestScrollContainerRenderer_LimitBarSize(t *testing.T) { areaHoriz := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).horizArea).(*scrollBarAreaRenderer) areaVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer) - assert.Equal(t, 120, areaHoriz.bar.Size().Width) - assert.Equal(t, 120, areaVert.bar.Size().Height) + assert.Equal(t, float32(120), areaHoriz.bar.Size().Width) + assert.Equal(t, float32(120), areaVert.bar.Size().Height) } func TestScrollContainerRenderer_Direction(t *testing.T) { @@ -528,24 +528,24 @@ func TestScrollContainerRenderer_MinSize_Direction(t *testing.T) { rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewScrollContainer(rect) size := test.WidgetRenderer(scroll).MinSize() - assert.Equal(t, 32, size.Height) - assert.Equal(t, 32, size.Width) + assert.Equal(t, float32(32), size.Height) + assert.Equal(t, float32(32), size.Width) }) t.Run("HorizontalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewHScrollContainer(rect) size := test.WidgetRenderer(scroll).MinSize() - assert.Equal(t, 100, size.Height) - assert.Equal(t, 32, size.Width) + assert.Equal(t, float32(100), size.Height) + assert.Equal(t, float32(32), size.Width) }) t.Run("VerticalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) rect.SetMinSize(fyne.NewSize(100, 100)) scroll := NewVScrollContainer(rect) size := test.WidgetRenderer(scroll).MinSize() - assert.Equal(t, 32, size.Height) - assert.Equal(t, 100, size.Width) + assert.Equal(t, float32(32), size.Height) + assert.Equal(t, float32(100), size.Width) }) } @@ -556,8 +556,8 @@ func TestScrollContainerRenderer_SetMinSize_Direction(t *testing.T) { scroll := NewScrollContainer(rect) scroll.SetMinSize(fyne.NewSize(50, 50)) size := test.WidgetRenderer(scroll).MinSize() - assert.Equal(t, 50, size.Height) - assert.Equal(t, 50, size.Width) + assert.Equal(t, float32(50), size.Height) + assert.Equal(t, float32(50), size.Width) }) t.Run("HorizontalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) @@ -565,8 +565,8 @@ func TestScrollContainerRenderer_SetMinSize_Direction(t *testing.T) { scroll := NewHScrollContainer(rect) scroll.SetMinSize(fyne.NewSize(50, 50)) size := test.WidgetRenderer(scroll).MinSize() - assert.Equal(t, 100, size.Height) - assert.Equal(t, 50, size.Width) + assert.Equal(t, float32(100), size.Height) + assert.Equal(t, float32(50), size.Width) }) t.Run("VerticalOnly", func(t *testing.T) { rect := canvas.NewRectangle(color.Black) @@ -574,8 +574,8 @@ func TestScrollContainerRenderer_SetMinSize_Direction(t *testing.T) { scroll := NewVScrollContainer(rect) scroll.SetMinSize(fyne.NewSize(50, 50)) size := test.WidgetRenderer(scroll).MinSize() - assert.Equal(t, 50, size.Height) - assert.Equal(t, 100, size.Width) + assert.Equal(t, float32(50), size.Height) + assert.Equal(t, float32(100), size.Width) }) } @@ -588,15 +588,15 @@ func TestScrollBar_Dragged_ClickedInside(t *testing.T) { scrollBarVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer).bar // Create drag event with starting position inside scroll rectangle area - dragEvent := fyne.DragEvent{DraggedX: 20} - assert.Equal(t, 0, scroll.Offset.X) + dragEvent := fyne.DragEvent{Dragged: fyne.Delta{DX: 20}} + assert.Equal(t, float32(0), scroll.Offset.X) scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 100, scroll.Offset.X) + assert.Equal(t, float32(100), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 20} - assert.Equal(t, 0, scroll.Offset.Y) + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 20}} + assert.Equal(t, float32(0), scroll.Offset.Y) scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 100, scroll.Offset.Y) + assert.Equal(t, float32(100), scroll.Offset.Y) } func TestScrollBar_DraggedBack_ClickedInside(t *testing.T) { @@ -608,21 +608,21 @@ func TestScrollBar_DraggedBack_ClickedInside(t *testing.T) { scrollBarVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer).bar // Drag forward - dragEvent := fyne.DragEvent{DraggedX: 20} + dragEvent := fyne.DragEvent{Dragged: fyne.Delta{DX: 20}} scrollBarHoriz.Dragged(&dragEvent) - dragEvent = fyne.DragEvent{DraggedY: 20} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 20}} scrollBarVert.Dragged(&dragEvent) // Drag back - dragEvent = fyne.DragEvent{DraggedX: -10} - assert.Equal(t, 100, scroll.Offset.X) + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: -10}} + assert.Equal(t, float32(100), scroll.Offset.X) scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 50, scroll.Offset.X) + assert.Equal(t, float32(50), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: -10} - assert.Equal(t, 100, scroll.Offset.Y) + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: -10}} + assert.Equal(t, float32(100), scroll.Offset.Y) scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 50, scroll.Offset.Y) + assert.Equal(t, float32(50), scroll.Offset.Y) } func TestScrollBar_Dragged_Limit(t *testing.T) { @@ -634,46 +634,46 @@ func TestScrollBar_Dragged_Limit(t *testing.T) { scrollBarVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer).bar // Drag over limit - dragEvent := fyne.DragEvent{DraggedX: 2000} - assert.Equal(t, 0, scroll.Offset.X) + dragEvent := fyne.DragEvent{Dragged: fyne.Delta{DX: 2000}} + assert.Equal(t, float32(0), scroll.Offset.X) scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 800, scroll.Offset.X) + assert.Equal(t, float32(800), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 2000} - assert.Equal(t, 0, scroll.Offset.Y) + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 2000}} + assert.Equal(t, float32(0), scroll.Offset.Y) scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 800, scroll.Offset.Y) + assert.Equal(t, float32(800), scroll.Offset.Y) // Drag again - dragEvent = fyne.DragEvent{DraggedX: 100} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: 100}} // Offset doesn't go over limit - assert.Equal(t, 800, scroll.Offset.X) + assert.Equal(t, float32(800), scroll.Offset.X) scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 800, scroll.Offset.X) + assert.Equal(t, float32(800), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 100} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 100}} // Offset doesn't go over limit - assert.Equal(t, 800, scroll.Offset.Y) + assert.Equal(t, float32(800), scroll.Offset.Y) scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 800, scroll.Offset.Y) + assert.Equal(t, float32(800), scroll.Offset.Y) // Drag back (still outside limit) - dragEvent = fyne.DragEvent{DraggedX: -1000} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: -1000}} scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 800, scroll.Offset.X) + assert.Equal(t, float32(800), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: -1000} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: -1000}} scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 800, scroll.Offset.Y) + assert.Equal(t, float32(800), scroll.Offset.Y) // Drag back (inside limit) - dragEvent = fyne.DragEvent{DraggedX: -1040} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: -1040}} scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 300, scroll.Offset.X) + assert.Equal(t, float32(300), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: -1040} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: -1040}} scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 300, scroll.Offset.Y) + assert.Equal(t, float32(300), scroll.Offset.Y) } func TestScrollBar_Dragged_BackLimit(t *testing.T) { @@ -685,35 +685,35 @@ func TestScrollBar_Dragged_BackLimit(t *testing.T) { scrollBarVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer).bar // Drag over back limit - dragEvent := fyne.DragEvent{DraggedX: -1000} + dragEvent := fyne.DragEvent{Dragged: fyne.Delta{DX: -1000}} // Offset doesn't go over limit - assert.Equal(t, 0, scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.X) scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 0, scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: -1000} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: -1000}} // Offset doesn't go over limit - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.Y) scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.Y) // Drag (still outside limit) - dragEvent = fyne.DragEvent{DraggedX: 500} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: 500}} scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 0, scroll.Offset.X) + assert.Equal(t, float32(0), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 500} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 500}} scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 0, scroll.Offset.Y) + assert.Equal(t, float32(0), scroll.Offset.Y) // Drag (inside limit) - dragEvent = fyne.DragEvent{DraggedX: 520} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: 520}} scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 100, scroll.Offset.X) + assert.Equal(t, float32(100), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 520} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 520}} scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 100, scroll.Offset.Y) + assert.Equal(t, float32(100), scroll.Offset.Y) } func TestScrollBar_DraggedWithNonZeroStartPosition(t *testing.T) { @@ -724,22 +724,22 @@ func TestScrollBar_DraggedWithNonZeroStartPosition(t *testing.T) { scrollBarHoriz := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).horizArea).(*scrollBarAreaRenderer).bar scrollBarVert := test.WidgetRenderer(test.WidgetRenderer(scroll).(*scrollContainerRenderer).vertArea).(*scrollBarAreaRenderer).bar - dragEvent := fyne.DragEvent{DraggedX: 50} - assert.Equal(t, 0, scroll.Offset.X) + dragEvent := fyne.DragEvent{Dragged: fyne.Delta{DX: 50}} + assert.Equal(t, float32(0), scroll.Offset.X) scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 250, scroll.Offset.X) + assert.Equal(t, float32(250), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 50} - assert.Equal(t, 0, scroll.Offset.Y) + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 50}} + assert.Equal(t, float32(0), scroll.Offset.Y) scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 250, scroll.Offset.Y) + assert.Equal(t, float32(250), scroll.Offset.Y) // Drag again (after releasing mouse button) - dragEvent = fyne.DragEvent{DraggedX: 20} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DX: 20}} scrollBarHoriz.Dragged(&dragEvent) - assert.Equal(t, 350, scroll.Offset.X) + assert.Equal(t, float32(350), scroll.Offset.X) - dragEvent = fyne.DragEvent{DraggedY: 20} + dragEvent = fyne.DragEvent{Dragged: fyne.Delta{DY: 20}} scrollBarVert.Dragged(&dragEvent) - assert.Equal(t, 350, scroll.Offset.Y) + assert.Equal(t, float32(350), scroll.Offset.Y) } diff --git a/widget/select_entry_test.go b/widget/select_entry_test.go index d5d9564825..f3d7f1e91d 100644 --- a/widget/select_entry_test.go +++ b/widget/select_entry_test.go @@ -708,11 +708,11 @@ func TestSelectEntry_SetOptions_Empty(t *testing.T) { `, c) } -func dropDownIconWidth() int { +func dropDownIconWidth() float32 { return theme.IconInlineSize() + theme.Padding() } -func emptyTextWidth() int { +func emptyTextWidth() float32 { return widget.NewLabel("M").MinSize().Width } @@ -721,8 +721,8 @@ func optionsMinSize(options []string) fyne.Size { for _, option := range options { labels = append(labels, widget.NewLabel(option)) } - minWidth := 0 - minHeight := 0 + minWidth := float32(0) + minHeight := float32(0) for _, label := range labels { if minWidth < label.MinSize().Width { minWidth = label.MinSize().Width @@ -730,6 +730,6 @@ func optionsMinSize(options []string) fyne.Size { minHeight += label.MinSize().Height } // padding between all options - minHeight += (len(labels) - 1) * theme.Padding() + minHeight += float32(len(labels)-1) * theme.Padding() return fyne.NewSize(minWidth, minHeight) } diff --git a/widget/separator.go b/widget/separator.go index d55c7fd003..ae0b51fe09 100644 --- a/widget/separator.go +++ b/widget/separator.go @@ -7,7 +7,7 @@ import ( "fyne.io/fyne/theme" ) -const separatorThickness = 1 +const separatorThickness = float32(1) var _ fyne.Widget = (*Separator)(nil) diff --git a/widget/slider.go b/widget/slider.go index 355c1b52be..df5d02b9f2 100644 --- a/widget/slider.go +++ b/widget/slider.go @@ -97,11 +97,11 @@ func (s *Slider) Dragged(e *fyne.DragEvent) { } } -func (s *Slider) buttonDiameter() int { +func (s *Slider) buttonDiameter() float32 { return theme.Padding() * standardScale } -func (s *Slider) endOffset() int { +func (s *Slider) endOffset() float32 { return s.buttonDiameter()/2 + theme.Padding() } @@ -211,8 +211,8 @@ func (s *Slider) Unbind() { } const ( - standardScale = 4 - minLongSide = 50 + standardScale = float32(4) + minLongSide = float32(50) ) type sliderRenderer struct { @@ -293,7 +293,7 @@ func (s *sliderRenderer) MinSize() fyne.Size { return fyne.Size{Width: 0, Height: 0} } -func (s *sliderRenderer) getOffset() int { +func (s *sliderRenderer) getOffset() float32 { endPad := s.slider.endOffset() w := s.slider size := s.track.Size() @@ -305,14 +305,14 @@ func (s *sliderRenderer) getOffset() int { return endPad } } - ratio := (w.Value - w.Min) / (w.Max - w.Min) + ratio := float32((w.Value - w.Min) / (w.Max - w.Min)) switch w.Orientation { case Vertical: - y := int(float64(size.Height)-ratio*float64(size.Height)) + endPad + y := size.Height - ratio*size.Height + endPad return y case Horizontal: - x := int(ratio*float64(size.Width)) + endPad + x := ratio*size.Width + endPad return x } diff --git a/widget/slider_extend_test.go b/widget/slider_extend_test.go index a5a3254f64..76df3f65a7 100644 --- a/widget/slider_extend_test.go +++ b/widget/slider_extend_test.go @@ -42,7 +42,7 @@ func TestSlider_Extended_Drag(t *testing.T) { thumb := objs[2] thumbPos := thumb.Position() - drag := &fyne.DragEvent{DraggedX: 10, DraggedY: 2} + drag := &fyne.DragEvent{Dragged: fyne.NewDelta(10, 2)} slider.Dragged(drag) assert.Greater(t, thumbPos.X, thumb.Position().X) assert.Equal(t, thumbPos.Y, thumb.Position().Y) diff --git a/widget/slider_test.go b/widget/slider_test.go index ea4f25fbc7..dae00a0b8c 100644 --- a/widget/slider_test.go +++ b/widget/slider_test.go @@ -146,7 +146,7 @@ func TestSlider_OnChanged(t *testing.T) { slider.SetValue(0.5) assert.Equal(t, 1, changes) - drag := &fyne.DragEvent{DraggedX: 10, DraggedY: 2} + drag := &fyne.DragEvent{Dragged: fyne.NewDelta(10, 2)} slider.Dragged(drag) assert.Equal(t, 2, changes) } diff --git a/widget/splitcontainer.go b/widget/splitcontainer.go index 82c1cd95c7..9f8ea1fcdf 100644 --- a/widget/splitcontainer.go +++ b/widget/splitcontainer.go @@ -151,7 +151,7 @@ func (r *splitContainerRenderer) Refresh() { canvas.Refresh(r.split) } -func (r *splitContainerRenderer) computeSplitLengths(total, lMin, tMin int) (int, int) { +func (r *splitContainerRenderer) computeSplitLengths(total, lMin, tMin float32) (float32, float32) { available := float64(total - dividerThickness()) if available <= 0 { return 0, 0 @@ -175,7 +175,7 @@ func (r *splitContainerRenderer) computeSplitLengths(total, lMin, tMin int) (int ld = offset * available tr = available - ld - return int(ld), int(tr) + return float32(ld), float32(tr) } // Declare conformity with interfaces @@ -222,9 +222,9 @@ func (d *divider) DragEnd() { func (d *divider) Dragged(event *fyne.DragEvent) { offset := d.split.Offset if d.split.Horizontal { - offset += float64(event.DraggedX) / float64(d.split.Size().Width) + offset += float64(event.Dragged.DX) / float64(d.split.Size().Width) } else { - offset += float64(event.DraggedY) / float64(d.split.Size().Height) + offset += float64(event.Dragged.DY) / float64(d.split.Size().Height) } d.split.SetOffset(offset) } @@ -260,7 +260,7 @@ func (r *dividerRenderer) Destroy() { } func (r *dividerRenderer) Layout(size fyne.Size) { - var x, y, w, h int + var x, y, w, h float32 if r.divider.split.Horizontal { x = (dividerThickness() - handleThickness()) / 2 y = (size.Height - handleLength()) / 2 @@ -292,18 +292,18 @@ func (r *dividerRenderer) Refresh() { r.Layout(r.divider.Size()) } -func dividerThickness() int { +func dividerThickness() float32 { return theme.Padding() * 2 } -func dividerLength() int { +func dividerLength() float32 { return theme.Padding() * 6 } -func handleThickness() int { +func handleThickness() float32 { return theme.Padding() / 2 } -func handleLength() int { +func handleLength() float32 { return theme.Padding() * 4 } diff --git a/widget/splitcontainer_test.go b/widget/splitcontainer_test.go index 31f47eb7a7..b340d61758 100644 --- a/widget/splitcontainer_test.go +++ b/widget/splitcontainer_test.go @@ -136,19 +136,19 @@ func TestSplitContainer_SetRatio(t *testing.T) { sc.SetOffset(0.75) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, int(0.75*usableLength), sizeA.Width) - assert.Equal(t, 100, sizeA.Height) - assert.Equal(t, int(0.25*usableLength), sizeB.Width) - assert.Equal(t, 100, sizeB.Height) + assert.Equal(t, float32(0.75*usableLength), sizeA.Width) + assert.Equal(t, float32(100), sizeA.Height) + assert.Equal(t, float32(0.25*usableLength), sizeB.Width) + assert.Equal(t, float32(100), sizeB.Height) }) t.Run("Trailing", func(t *testing.T) { sc.SetOffset(0.25) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, int(0.25*usableLength), sizeA.Width) - assert.Equal(t, 100, sizeA.Height) - assert.Equal(t, int(0.75*usableLength), sizeB.Width) - assert.Equal(t, 100, sizeB.Height) + assert.Equal(t, float32(0.25*usableLength), sizeA.Width) + assert.Equal(t, float32(100), sizeA.Height) + assert.Equal(t, float32(0.75*usableLength), sizeB.Width) + assert.Equal(t, float32(100), sizeB.Height) }) }) t.Run("Vertical", func(t *testing.T) { @@ -158,19 +158,19 @@ func TestSplitContainer_SetRatio(t *testing.T) { sc.SetOffset(0.75) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, 100, sizeA.Width) - assert.Equal(t, int(0.75*usableLength), sizeA.Height) - assert.Equal(t, 100, sizeB.Width) - assert.Equal(t, int(0.25*usableLength), sizeB.Height) + assert.Equal(t, float32(100), sizeA.Width) + assert.Equal(t, float32(0.75*usableLength), sizeA.Height) + assert.Equal(t, float32(100), sizeB.Width) + assert.Equal(t, float32(0.25*usableLength), sizeB.Height) }) t.Run("Trailing", func(t *testing.T) { sc.SetOffset(0.25) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, 100, sizeA.Width) - assert.Equal(t, int(0.25*usableLength), sizeA.Height) - assert.Equal(t, 100, sizeB.Width) - assert.Equal(t, int(0.75*usableLength), sizeB.Height) + assert.Equal(t, float32(100), sizeA.Width) + assert.Equal(t, float32(0.25*usableLength), sizeA.Height) + assert.Equal(t, float32(100), sizeB.Width) + assert.Equal(t, float32(0.75*usableLength), sizeB.Height) }) }) } @@ -189,19 +189,19 @@ func TestSplitContainer_SetRatio_limits(t *testing.T) { sizeA := objA.Size() sizeB := objB.Size() assert.Equal(t, 150-dividerThickness(), sizeA.Width) - assert.Equal(t, 50, sizeA.Height) - assert.Equal(t, 50, sizeB.Width) - assert.Equal(t, 50, sizeB.Height) + assert.Equal(t, float32(50), sizeA.Height) + assert.Equal(t, float32(50), sizeB.Width) + assert.Equal(t, float32(50), sizeB.Height) }) t.Run("Trailing", func(t *testing.T) { sc.SetOffset(0.0) sc.Resize(fyne.NewSize(200, 50)) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, 50, sizeA.Width) - assert.Equal(t, 50, sizeA.Height) + assert.Equal(t, float32(50), sizeA.Width) + assert.Equal(t, float32(50), sizeA.Height) assert.Equal(t, 150-dividerThickness(), sizeB.Width) - assert.Equal(t, 50, sizeB.Height) + assert.Equal(t, float32(50), sizeB.Height) }) }) t.Run("Vertical", func(t *testing.T) { @@ -211,19 +211,19 @@ func TestSplitContainer_SetRatio_limits(t *testing.T) { sc.Resize(fyne.NewSize(50, 200)) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, 50, sizeA.Width) + assert.Equal(t, float32(50), sizeA.Width) assert.Equal(t, 150-dividerThickness(), sizeA.Height) - assert.Equal(t, 50, sizeB.Width) - assert.Equal(t, 50, sizeB.Height) + assert.Equal(t, float32(50), sizeB.Width) + assert.Equal(t, float32(50), sizeB.Height) }) t.Run("Trailing", func(t *testing.T) { sc.SetOffset(0.0) sc.Resize(fyne.NewSize(50, 200)) sizeA := objA.Size() sizeB := objB.Size() - assert.Equal(t, 50, sizeA.Width) - assert.Equal(t, 50, sizeA.Height) - assert.Equal(t, 50, sizeB.Width) + assert.Equal(t, float32(50), sizeA.Width) + assert.Equal(t, float32(50), sizeA.Height) + assert.Equal(t, float32(50), sizeB.Width) assert.Equal(t, 150-dividerThickness(), sizeB.Height) }) }) @@ -254,8 +254,7 @@ func TestSplitContainer_divider_drag(t *testing.T) { divider.Dragged(&fyne.DragEvent{ PointEvent: fyne.PointEvent{Position: fyne.NewPos(20, 9)}, - DraggedX: 10, - DraggedY: -1, + Dragged: fyne.NewDelta(10, -1), }) assert.Equal(t, 0.6, split.Offset) @@ -270,8 +269,7 @@ func TestSplitContainer_divider_drag(t *testing.T) { divider.Dragged(&fyne.DragEvent{ PointEvent: fyne.PointEvent{Position: fyne.NewPos(9, 20)}, - DraggedX: -1, - DraggedY: 10, + Dragged: fyne.NewDelta(-1, 10), }) assert.Equal(t, 0.6, split.Offset) diff --git a/widget/tabcontainer.go b/widget/tabcontainer.go index d81d37d812..c03c5e7e5d 100644 --- a/widget/tabcontainer.go +++ b/widget/tabcontainer.go @@ -266,7 +266,7 @@ func (r *tabContainerRenderer) MinSize() fyne.Size { childMin := fyne.NewSize(0, 0) for _, child := range r.container.Items { - childMin = childMin.Union(child.Content.MinSize()) + childMin = childMin.Max(child.Content.MinSize()) } tabLocation := r.container.tabLocation @@ -561,7 +561,7 @@ func (r *tabButtonRenderer) Layout(size fyne.Size) { padding := r.padding() innerSize := size.Subtract(padding) innerOffset := fyne.NewPos(padding.Width/2, padding.Height/2) - labelShift := 0 + labelShift := float32(0) if r.icon != nil { var iconOffset fyne.Position if r.button.IconPosition == buttonIconTop { @@ -589,7 +589,7 @@ func (r *tabButtonRenderer) Layout(size fyne.Size) { } func (r *tabButtonRenderer) MinSize() fyne.Size { - var contentWidth, contentHeight int + var contentWidth, contentHeight float32 textSize := r.label.MinSize() if r.button.IconPosition == buttonIconTop { contentWidth = fyne.Max(textSize.Width, r.iconSize()) @@ -653,7 +653,7 @@ func (r *tabButtonRenderer) Refresh() { canvas.Refresh(r.button) } -func (r *tabButtonRenderer) iconSize() int { +func (r *tabButtonRenderer) iconSize() float32 { switch r.button.IconPosition { case buttonIconTop: return 2 * theme.IconInlineSize() diff --git a/widget/tabcontainer_test.go b/widget/tabcontainer_test.go index bb4d3adad9..b16b4bd0ec 100644 --- a/widget/tabcontainer_test.go +++ b/widget/tabcontainer_test.go @@ -32,7 +32,7 @@ func TestTabContainer_Empty(t *testing.T) { assert.Equal(t, -1, tabs.CurrentTabIndex()) assert.Nil(t, tabs.CurrentTab()) min := tabs.MinSize() - assert.Equal(t, 0, min.Width) + assert.Equal(t, float32(0), min.Width) assert.Equal(t, theme.Padding(), min.Height) } @@ -56,8 +56,8 @@ func TestTabContainer_Resize_Empty(t *testing.T) { tabs := widget.NewTabContainer() tabs.Resize(fyne.NewSize(10, 10)) size := tabs.Size() - assert.Equal(t, 10, size.Height) - assert.Equal(t, 10, size.Width) + assert.Equal(t, float32(10), size.Height) + assert.Equal(t, float32(10), size.Width) } func TestTabContainer_SelectTab(t *testing.T) { diff --git a/widget/table.go b/widget/table.go index 1281784470..ae2a583353 100644 --- a/widget/table.go +++ b/widget/table.go @@ -35,7 +35,7 @@ type Table struct { selectedCell, hoveredCell *TableCellID cells *tableCells - columnWidths map[int]int + columnWidths map[int]float32 moveCallback func() offset fyne.Position scroll *ScrollContainer @@ -107,9 +107,9 @@ func (t *Table) Select(id TableCellID) { // to the internal content width not including any standard padding or divider size. // // Since: 1.4.1 -func (t *Table) SetColumnWidth(id, width int) { +func (t *Table) SetColumnWidth(id int, width float32) { if t.columnWidths == nil { - t.columnWidths = make(map[int]int) + t.columnWidths = make(map[int]float32) } t.columnWidths[id] = width + 2*theme.Padding() // The API uses content size so it's consistent with templates t.Refresh() @@ -139,8 +139,8 @@ func (t *Table) scrollTo(id TableCellID) { minSize := t.templateSize() cellPadded := minSize.Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2)) - cellX := 0 - cellWidth := 0 + cellX := float32(0) + cellWidth := float32(0) for i := 0; i <= id.Col; i++ { if cellWidth > 0 { cellX += cellWidth + separatorThickness @@ -159,7 +159,7 @@ func (t *Table) scrollTo(id TableCellID) { scrollPos.X = cellX + cellWidth - t.scroll.size.Width } - cellY := id.Row * (cellPadded.Height + separatorThickness) + cellY := float32(id.Row) * (cellPadded.Height + separatorThickness) if cellY < scrollPos.Y { scrollPos.Y = cellY } else if cellY+cellPadded.Height > scrollPos.Y+t.scroll.size.Height { @@ -184,11 +184,11 @@ func (t *Table) templateSize() fyne.Size { return fyne.Size{} } -func (t *Table) visibleColumnWidths(colWidth, cols int) (visible map[int]int, offX, minCol, maxCol int) { +func (t *Table) visibleColumnWidths(colWidth float32, cols int) (visible map[int]float32, offX float32, minCol, maxCol int) { maxCol = cols - colOffset := 0 + colOffset := float32(0) isVisible := false - visible = make(map[int]int) + visible = make(map[int]float32) if t.scroll.size.Width <= 0 { return @@ -264,7 +264,7 @@ func (t *tableRenderer) Refresh() { t.t.cells.Refresh() } -func (t *tableRenderer) moveColumnMarker(marker fyne.CanvasObject, col, offX, minCol int, widths map[int]int) { +func (t *tableRenderer) moveColumnMarker(marker fyne.CanvasObject, col int, offX float32, minCol int, widths map[int]float32) { if col == -1 { marker.Hide() } else { @@ -339,7 +339,8 @@ func (t *tableRenderer) moveIndicators() { } i = 0 - for y := theme.Padding() + t.scroll.Offset.Y - (t.scroll.Offset.Y % (t.cellSize.Height + separatorThickness)) - separatorThickness; y < t.scroll.Offset.Y+t.t.size.Height && i < rows-1; y += t.cellSize.Height + separatorThickness { + count := int(t.scroll.Offset.Y) % int(t.cellSize.Height+separatorThickness) + for y := theme.Padding() + t.scroll.Offset.Y - float32(count) - separatorThickness; y < t.scroll.Offset.Y+t.t.size.Height && i < rows-1; y += t.cellSize.Height + separatorThickness { if y < theme.Padding()+t.scroll.Offset.Y { continue } @@ -361,7 +362,7 @@ func (t *tableRenderer) moveRowMarker(marker fyne.CanvasObject, row int) { if row == -1 { marker.Hide() } else { - offY := row*(t.cellSize.Height+separatorThickness) - t.scroll.Offset.Y + offY := float32(row)*(t.cellSize.Height+separatorThickness) - t.scroll.Offset.Y y1 := theme.Padding() + offY y2 := y1 + t.cellSize.Height if y2 < theme.Padding() || y1 > t.t.size.Height { @@ -430,7 +431,7 @@ func (c *tableCells) Tapped(e *fyne.PointEvent) { } col := c.columnAt(e.Position) - row := e.Position.Y / (c.cellSize.Height + separatorThickness) + row := int(e.Position.Y / (c.cellSize.Height + separatorThickness)) c.t.Select(TableCellID{row, col}) } @@ -459,7 +460,7 @@ func (c *tableCells) hoverAt(pos fyne.Position) { } col := c.columnAt(pos) - row := pos.Y / (c.cellSize.Height + separatorThickness) + row := int(pos.Y / (c.cellSize.Height + separatorThickness)) c.t.hoveredCell = &TableCellID{row, col} rows, cols := 0, 0 @@ -506,7 +507,7 @@ func (r *tableCellsRenderer) MinSize() fyne.Size { } else { fyne.LogError("Missing Length callback required for Table", nil) } - return fyne.NewSize(r.cells.cellSize.Width*cols+(cols-1), r.cells.cellSize.Height*rows+(rows-1)) + return fyne.NewSize(r.cells.cellSize.Width*float32(cols)+float32(cols-1), r.cells.cellSize.Height*float32(rows)+float32(rows-1)) } func (r *tableCellsRenderer) Refresh() { @@ -527,9 +528,9 @@ func (r *tableCellsRenderer) Refresh() { if len(visibleColWidths) == 0 { // we can't show anything until we have some dimensions return } - offY := r.cells.t.offset.Y - (r.cells.t.offset.Y % (r.cells.cellSize.Height + separatorThickness)) - minRow := offY / (r.cells.cellSize.Height + separatorThickness) - maxRow := fyne.Min(minRow+rows, dataRows) + offY := r.cells.t.offset.Y - float32(int(r.cells.t.offset.Y)%int(r.cells.cellSize.Height+separatorThickness)) + minRow := int(offY / (r.cells.cellSize.Height + separatorThickness)) + maxRow := int(fyne.Min(float32(minRow+rows), float32(dataRows))) updateCell := r.cells.t.UpdateCell if updateCell == nil { @@ -555,7 +556,7 @@ func (r *tableCellsRenderer) Refresh() { } c.Move(fyne.NewPos(theme.Padding()+cellOffset, - theme.Padding()+row*(r.cells.cellSize.Height+separatorThickness))) + theme.Padding()+float32(row)*(r.cells.cellSize.Height+separatorThickness))) c.Resize(fyne.NewSize(colWidth-theme.Padding()*2, r.cells.cellSize.Height-theme.Padding()*2)) } @@ -591,5 +592,5 @@ func (r *tableCellsRenderer) visibleRows() int { if f := r.cells.t.Length; f != nil { dataRows, _ = r.cells.t.Length() } - return fyne.Min(int(rows), dataRows) + return int(fyne.Min(float32(rows), float32(dataRows))) } diff --git a/widget/table_test.go b/widget/table_test.go index c92dd03b17..af7a84ca1c 100644 --- a/widget/table_test.go +++ b/widget/table_test.go @@ -45,8 +45,8 @@ func TestTable_Cache(t *testing.T) { objRef := cellRenderer.Objects()[0].(*Label) test.Scroll(c, fyne.NewPos(10, 10), -150, -150) - assert.Equal(t, 0, renderer.scroll.Offset.Y) // we didn't scroll as data shorter - assert.Equal(t, 150, renderer.scroll.Offset.X) + assert.Equal(t, float32(0), renderer.scroll.Offset.Y) // we didn't scroll as data shorter + assert.Equal(t, float32(150), renderer.scroll.Offset.X) assert.Equal(t, 6, len(cellRenderer.Objects())) assert.Equal(t, "Cell 0, 1", cellRenderer.Objects()[0].(*Label).Text) assert.NotEqual(t, objRef, cellRenderer.Objects()[0].(*Label)) // we want to re-use visible cells without rewriting them @@ -429,14 +429,14 @@ func TestTable_Select(t *testing.T) { - + - + @@ -494,7 +494,7 @@ func TestTable_SetColumnWidth(t *testing.T) { cellRenderer := test.WidgetRenderer(renderer.scroll.Content.(*tableCells)) cellRenderer.Refresh() assert.Equal(t, 10, len(cellRenderer.Objects())) - assert.Equal(t, 16, cellRenderer.(*tableCellsRenderer).Objects()[0].Size().Width) + assert.Equal(t, float32(16), cellRenderer.(*tableCellsRenderer).Objects()[0].Size().Width) w := test.NewWindow(table) defer w.Close() diff --git a/widget/testdata/fileicon/fileicon_text_txt.png b/widget/testdata/fileicon/fileicon_text_txt.png index 089962d0fa973cceeff376199a66fb7d210447a6..b945add941eb03efc959f9fd34387b5b68e7d33b 100644 GIT binary patch delta 2096 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 a3GMBb2~AuMGN&Vi1o4NNttkydNd6l;uKHjA diff --git a/widget/testdata/menu/layout_normal.png b/widget/testdata/menu/layout_normal.png index 5c80fa72b92d4043417191a4e117e2388825960b..748109011f40f3ab2ce7db42d1d9e7090fa9903a 100644 GIT binary patch literal 3508 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 b!Bi?|^8F0$4^KYAz`Eq<;ZXJC_22&ot{bg8 diff --git a/widget/testdata/menu/layout_theme_changed.png b/widget/testdata/menu/layout_theme_changed.png index 76b74b095bd0381d63e917ed1c532e206278fae9..66e88a0eb7bde36dcb7da7ec0af23e3f7b5cb317 100644 GIT binary patch delta 3146 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 kGy#)P4`CYqKL7y#|EUucFKyxd54H*c0BDmC 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 b5e`-qAY4%Za9EHI00000NkvXXu0mjf5|*Mg diff --git a/widget/testdata/select/theme_initial.png b/widget/testdata/select/theme_initial.png index 63624ecd3a4cb2b34c4381138f23ce66d085fef4..f0733856b743c0363d4dfbc9d4ae5aab4cf5c536 100644 GIT binary patch delta 3041 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 delta 3023 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