From 8a09b93e4a13ba6cd3031f6503ca592893db593e Mon Sep 17 00:00:00 2001 From: Andy Williams Date: Thu, 13 May 2021 17:33:40 +0100 Subject: [PATCH] Fix issue with line resize Fixes #2208 --- canvas/line.go | 9 ++++++--- canvas/line_test.go | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/canvas/line.go b/canvas/line.go index 66a59f7306..85960b417e 100644 --- a/canvas/line.go +++ b/canvas/line.go @@ -45,9 +45,12 @@ func (l *Line) Position() fyne.Position { // Move the line object to a new position, relative to its parent / canvas func (l *Line) Move(pos fyne.Position) { - size := l.Size() - l.Position1 = pos - l.Position2 = fyne.NewPos(l.Position1.X+size.Width, l.Position1.Y+size.Height) + oldPos := l.Position() + deltaX := pos.X - oldPos.X + deltaY := pos.Y - oldPos.Y + + l.Position1 = l.Position1.Add(fyne.NewPos(deltaX, deltaY)) + l.Position2 = l.Position2.Add(fyne.NewPos(deltaX, deltaY)) } // MinSize for a Line simply returns Size{1, 1} as there is no diff --git a/canvas/line_test.go b/canvas/line_test.go index 1aae0783e2..064a5bf826 100644 --- a/canvas/line_test.go +++ b/canvas/line_test.go @@ -18,6 +18,25 @@ func TestLine_MinSize(t *testing.T) { assert.True(t, min.Height > 0) } +func TestLine_Move(t *testing.T) { + line := canvas.NewLine(color.Black) + + line.Resize(fyne.NewSize(10, 10)) + assert.Equal(t, fyne.NewPos(0, 0), line.Position1) + assert.Equal(t, fyne.NewPos(10, 10), line.Position2) + + line.Move(fyne.NewPos(5, 5)) + assert.Equal(t, fyne.NewPos(5, 5), line.Position1) + assert.Equal(t, fyne.NewPos(15, 15), line.Position2) + + // rotate + line.Position1 = fyne.NewPos(0, 10) + line.Position2 = fyne.NewPos(10, 0) + line.Move(fyne.NewPos(10, 10)) + assert.Equal(t, fyne.NewPos(10, 20), line.Position1) + assert.Equal(t, fyne.NewPos(20, 10), line.Position2) +} + func TestLine_Resize(t *testing.T) { line := canvas.NewLine(color.Black)