Skip to content

Commit ef9309c

Browse files
authored
Merge pull request #152 from Blazor-Diagrams/develop
Version 2.1.6
2 parents 1c719cf + 4afbbcf commit ef9309c

File tree

6 files changed

+55
-18
lines changed

6 files changed

+55
-18
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## Diagrams (2.1.6) - 2021-10-31
8+
9+
### Fixed
10+
11+
- `ZoomBehavior` using new zoom before Clamp to set Pan. (fixes #141)
12+
- `PanChanged` not triggering when zooming with the mouse wheel.
13+
- Zoom value decreasing when the mouse wheel delta is zero.
14+
- Ports aren't refreshed when links are added in `OnInitializedAsync`. (fixes #111)
15+
716
## Diagrams (2.1.5) - 2021-08-30
817

918
### Fixed

src/Blazor.Diagrams.Core/Behaviors/ZoomBehavior.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Blazor.Diagrams.Core.Geometry;
2+
23
using Microsoft.AspNetCore.Components.Web;
4+
35
using System;
46

57
namespace Blazor.Diagrams.Core.Behaviors
@@ -13,16 +15,19 @@ public ZoomBehavior(Diagram diagram) : base(diagram)
1315

1416
private void Diagram_Wheel(WheelEventArgs e)
1517
{
18+
if (Diagram.Container == null || e.DeltaY == 0)
19+
return;
20+
1621
if (!Diagram.Options.Zoom.Enabled)
1722
return;
1823

1924
var scale = Math.Clamp(Diagram.Options.Zoom.ScaleFactor, 1.01, 2);
20-
2125
var oldZoom = Diagram.Zoom;
2226
var deltaY = Diagram.Options.Zoom.Inverse ? e.DeltaY * -1 : e.DeltaY;
2327
var newZoom = deltaY > 0 ? oldZoom * scale : oldZoom / scale;
28+
newZoom = Math.Clamp(newZoom, Diagram.Options.Zoom.Minimum, Diagram.Options.Zoom.Maximum);
2429

25-
if (newZoom < 0)
30+
if (newZoom < 0 || newZoom == Diagram.Zoom)
2631
return;
2732

2833
// Other algorithms (based only on the changes in the zoom) don't work for our case
@@ -38,12 +43,11 @@ private void Diagram_Wheel(WheelEventArgs e)
3843
var newPanX = Diagram.Pan.X - widthDiff * xFactor;
3944
var newPanY = Diagram.Pan.Y - heightDiff * yFactor;
4045

41-
newZoom = Math.Clamp(newZoom, Diagram.Options.Zoom.Minimum, Diagram.Options.Zoom.Maximum);
42-
if (newZoom == Diagram.Zoom)
43-
return;
44-
45-
Diagram.Pan = new Point(newPanX, newPanY);
46-
Diagram.SetZoom(newZoom);
46+
Diagram.Batch(() =>
47+
{
48+
Diagram.SetPan(newPanX, newPanY);
49+
Diagram.SetZoom(newZoom);
50+
});
4751
}
4852

4953
public override void Dispose()

src/Blazor.Diagrams.Core/Blazor.Diagrams.Core.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
<PackageLicenseExpression>MIT</PackageLicenseExpression>
88
<Authors>zHaytam</Authors>
99
<Description>A fully customizable and extensible all-purpose diagrams library for Blazor</Description>
10-
<AssemblyVersion>2.1.5</AssemblyVersion>
11-
<FileVersion>2.1.5</FileVersion>
10+
<AssemblyVersion>2.1.6</AssemblyVersion>
11+
<FileVersion>2.1.6</FileVersion>
1212
<RepositoryUrl>https://github.com/zHaytam/Blazor.Diagrams</RepositoryUrl>
13-
<Version>2.1.5</Version>
13+
<Version>2.1.6</Version>
1414
<PackageId>Z.Blazor.Diagrams.Core</PackageId>
1515
<PackageTags>blazor diagrams diagramming svg drag</PackageTags>
1616
<Product>Z.Blazor.Diagrams.Core</Product>

src/Blazor.Diagrams.Core/Diagram.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public Diagram(DiagramOptions? options = null)
6565
public LinkLayer Links { get; }
6666
public IReadOnlyList<GroupModel> Groups => _groups;
6767
public Rectangle? Container { get; internal set; }
68-
public Point Pan { get; internal set; } = Point.Zero;
68+
public Point Pan { get; private set; } = Point.Zero;
6969
public double Zoom { get; private set; } = 1;
7070
public DiagramOptions Options { get; }
7171
public bool SuspendRefresh { get; set; }
@@ -307,6 +307,13 @@ public void ZoomToFit(double margin = 10)
307307
Refresh();
308308
}
309309

310+
public void SetPan(double x, double y)
311+
{
312+
Pan = new Point(x, y);
313+
PanChanged?.Invoke();
314+
Refresh();
315+
}
316+
310317
public void UpdatePan(double deltaX, double deltaY)
311318
{
312319
Pan = Pan.Add(deltaX, deltaY);

src/Blazor.Diagrams/Blazor.Diagrams.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
<RazorLangVersion>3.0</RazorLangVersion>
66
<Authors>zHaytam</Authors>
77
<PackageLicenseExpression>MIT</PackageLicenseExpression>
8-
<AssemblyVersion>2.1.5</AssemblyVersion>
9-
<FileVersion>2.1.5</FileVersion>
8+
<AssemblyVersion>2.1.6</AssemblyVersion>
9+
<FileVersion>2.1.6</FileVersion>
1010
<RepositoryUrl>https://github.com/zHaytam/Blazor.Diagrams</RepositoryUrl>
1111
<Description>A fully customizable and extensible all-purpose diagrams library for Blazor</Description>
12-
<Version>2.1.5</Version>
12+
<Version>2.1.6</Version>
1313
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1414
<PackageTags>blazor diagrams diagramming svg drag</PackageTags>
1515
<PackageId>Z.Blazor.Diagrams</PackageId>

src/Blazor.Diagrams/Components/Renderers/PortRenderer.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ public class PortRenderer : ComponentBase, IDisposable
1616
{
1717
private bool _shouldRender = true;
1818
private ElementReference _element;
19+
private bool _updatingDimensions;
20+
private bool _shouldRefreshPort;
1921

2022
[CascadingParameter]
2123
public Diagram Diagram { get; set; }
@@ -105,6 +107,7 @@ private PortModel FindPortOn(double clientX, double clientY)
105107

106108
private async Task UpdateDimensions()
107109
{
110+
_updatingDimensions = true;
108111
var zoom = Diagram.Zoom;
109112
var pan = Diagram.Pan;
110113
var rect = await JSRuntime.GetBoundingClientRect(_element);
@@ -114,14 +117,28 @@ private async Task UpdateDimensions()
114117
(rect.Top - Diagram.Container.Top - pan.Y) / zoom);
115118

116119
Port.Initialized = true;
120+
_updatingDimensions = false;
117121

118-
// We don't really need to refresh the port again,
119-
// let's just refresh the links so that they use the new port's position
120-
Port.RefreshLinks();
122+
if (_shouldRefreshPort)
123+
{
124+
_shouldRefreshPort = false;
125+
Port.RefreshAll();
126+
}
127+
else
128+
{
129+
Port.RefreshLinks();
130+
}
121131
}
122132

123133
private async void OnPortChanged()
124134
{
135+
// If an update is ongoing and the port is refreshed again,
136+
// it's highly likely the port needs to be refreshed (e.g. link added)
137+
if (_updatingDimensions)
138+
{
139+
_shouldRefreshPort = true;
140+
}
141+
125142
if (Port.Initialized)
126143
{
127144
_shouldRender = true;

0 commit comments

Comments
 (0)