Skip to content

Commit 497ec4e

Browse files
authored
Merge pull request #42 from WiseTechGlobal/archer/WI00715545/resizer-behaviour
resizing issue when resize to minimal dimension with resizer other than right-bottom resizer
2 parents 6478de3 + 1952c74 commit 497ec4e

File tree

4 files changed

+40
-29
lines changed

4 files changed

+40
-29
lines changed

src/Blazor.Diagrams.Core/Positions/Resizing/ResizerProvider.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,20 @@ virtual public (Size size, Point position) CalculateNewSizeAndPosition(double de
4141
if (width < NodeModel!.MinimumDimensions.Width)
4242
{
4343
width = NodeModel.MinimumDimensions.Width;
44-
positionX = NodeModel.Position.X;
44+
45+
if (ShouldChangeXPositionOnResize)
46+
{
47+
positionX = OriginalPosition.X + OriginalSize.Width - NodeModel.MinimumDimensions.Width;
48+
}
4549
}
4650
if (height < NodeModel.MinimumDimensions.Height)
4751
{
4852
height = NodeModel.MinimumDimensions.Height;
49-
positionY = NodeModel.Position.Y;
53+
54+
if (ShouldChangeYPositionOnResize)
55+
{
56+
positionY = OriginalPosition.Y + OriginalSize.Height - NodeModel.MinimumDimensions.Height;
57+
}
5058
}
5159

5260
return (new Size(width, height), new Point(positionX, positionY));

tests/Blazor.Diagrams.Core.Tests/Positions/Resizing/BottomLeftResizerProviderTests.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,30 +81,31 @@ public void DragResizer_SmallerThanMinSize_SetsNodeToMinSize()
8181
var diagram = new TestDiagram();
8282
diagram.SetContainer(new Rectangle(0, 0, 1000, 400));
8383
var node = new NodeModel(position: new Point(0, 0));
84-
node.Size = new Size(100, 200);
84+
node.Size = new Size(300, 300);
85+
node.MinimumDimensions = new Size(50, 100);
8586
var control = new ResizeControl(new BottomLeftResizerProvider());
8687
diagram.Controls.AddFor(node).Add(control);
8788
diagram.SelectModel(node, false);
8889

8990
// before resize
9091
node.Position.X.Should().Be(0);
9192
node.Position.Y.Should().Be(0);
92-
node.Size.Width.Should().Be(100);
93-
node.Size.Height.Should().Be(200);
93+
node.Size.Width.Should().Be(300);
94+
node.Size.Height.Should().Be(300);
9495

9596
// resize
96-
var eventArgs = new PointerEventArgs(0, 0, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
97+
var eventArgs = new PointerEventArgs(0, 300, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
9798
control.OnPointerDown(diagram, node, eventArgs);
98-
eventArgs = new PointerEventArgs(99, -199, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
99+
eventArgs = new PointerEventArgs(150, 150, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
99100
diagram.TriggerPointerMove(null, eventArgs);
100-
eventArgs = new PointerEventArgs(300, -300, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
101+
eventArgs = new PointerEventArgs(400, -100, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
101102
diagram.TriggerPointerMove(null, eventArgs);
102103

103104
// after resize
104-
node.Position.X.Should().Be(99);
105+
node.Position.X.Should().Be(250);
105106
node.Position.Y.Should().Be(0);
106-
node.Size.Width.Should().Be(0);
107-
node.Size.Height.Should().Be(0);
107+
node.Size.Width.Should().Be(50);
108+
node.Size.Height.Should().Be(100);
108109
}
109110

110111
[Fact]

tests/Blazor.Diagrams.Core.Tests/Positions/Resizing/TopLeftResizerProviderTests.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,30 +82,31 @@ public void DragResizer_SmallerThanMinSize_SetsNodeToMinSize()
8282
var diagram = new TestDiagram();
8383
diagram.SetContainer(new Rectangle(0, 0, 1000, 400));
8484
var node = new NodeModel(position: new Point(0, 0));
85-
node.Size = new Size(100, 200);
85+
node.Size = new Size(300, 300);
86+
node.MinimumDimensions = new Size(50, 100);
8687
var control = new ResizeControl(new TopLeftResizerProvider());
8788
diagram.Controls.AddFor(node).Add(control);
8889
diagram.SelectModel(node, false);
8990

9091
// before resize
9192
node.Position.X.Should().Be(0);
9293
node.Position.Y.Should().Be(0);
93-
node.Size.Width.Should().Be(100);
94-
node.Size.Height.Should().Be(200);
94+
node.Size.Width.Should().Be(300);
95+
node.Size.Height.Should().Be(300);
9596

9697
// resize
9798
var eventArgs = new PointerEventArgs(0, 0, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
9899
control.OnPointerDown(diagram, node, eventArgs);
99-
eventArgs = new PointerEventArgs(99, 199, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
100+
eventArgs = new PointerEventArgs(150, 150, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
100101
diagram.TriggerPointerMove(null, eventArgs);
101-
eventArgs = new PointerEventArgs(300, 300, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
102+
eventArgs = new PointerEventArgs(400, 400, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
102103
diagram.TriggerPointerMove(null, eventArgs);
103104

104105
// after resize
105-
node.Position.X.Should().Be(99);
106-
node.Position.Y.Should().Be(199);
107-
node.Size.Width.Should().Be(0);
108-
node.Size.Height.Should().Be(0);
106+
node.Position.X.Should().Be(250);
107+
node.Position.Y.Should().Be(200);
108+
node.Size.Width.Should().Be(50);
109+
node.Size.Height.Should().Be(100);
109110
}
110111

111112
[Fact]

tests/Blazor.Diagrams.Core.Tests/Positions/Resizing/TopRightResizerProviderTests.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,30 +80,31 @@ public void DragResizer_SmallerThanMinSize_SetsNodeToMinSize()
8080
var diagram = new TestDiagram();
8181
diagram.SetContainer(new Rectangle(0, 0, 1000, 400));
8282
var node = new NodeModel(position: new Point(0, 0));
83-
node.Size = new Size(100, 200);
83+
node.Size = new Size(300, 300);
84+
node.MinimumDimensions = new Size(50, 100);
8485
var control = new ResizeControl(new TopRightResizerProvider());
8586
diagram.Controls.AddFor(node).Add(control);
8687
diagram.SelectModel(node, false);
8788

8889
// before resize
8990
node.Position.X.Should().Be(0);
9091
node.Position.Y.Should().Be(0);
91-
node.Size.Width.Should().Be(100);
92-
node.Size.Height.Should().Be(200);
92+
node.Size.Width.Should().Be(300);
93+
node.Size.Height.Should().Be(300);
9394

9495
// resize
95-
var eventArgs = new PointerEventArgs(0, 0, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
96+
var eventArgs = new PointerEventArgs(300, 0, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
9697
control.OnPointerDown(diagram, node, eventArgs);
97-
eventArgs = new PointerEventArgs(-99, 199, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
98+
eventArgs = new PointerEventArgs(150, 150, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
9899
diagram.TriggerPointerMove(null, eventArgs);
99-
eventArgs = new PointerEventArgs(-300, 300, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
100+
eventArgs = new PointerEventArgs(-100, 400, 0, 0, false, false, false, 1, 1, 1, 1, 1, 1, "arrow", true);
100101
diagram.TriggerPointerMove(null, eventArgs);
101102

102103
// after resize
103104
node.Position.X.Should().Be(0);
104-
node.Position.Y.Should().Be(199);
105-
node.Size.Width.Should().Be(0);
106-
node.Size.Height.Should().Be(0);
105+
node.Position.Y.Should().Be(200);
106+
node.Size.Width.Should().Be(50);
107+
node.Size.Height.Should().Be(100);
107108
}
108109

109110
[Fact]

0 commit comments

Comments
 (0)