Skip to content

Commit 8803be9

Browse files
committed
Add LinkVertexRenderer in order to be able to use custom component for vertices
1 parent fe4af0e commit 8803be9

File tree

5 files changed

+103
-81
lines changed

5 files changed

+103
-81
lines changed

src/Blazor.Diagrams/Components/LinkVertexWidget.razor

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Blazor.Diagrams/Components/LinkVertexWidget.razor.cs

Lines changed: 0 additions & 60 deletions
This file was deleted.

src/Blazor.Diagrams/Components/LinkWidget.razor

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,13 @@ else
4444
{
4545
var selectedColor = Link.SelectedColor ?? BlazorDiagram.Options.Links.DefaultSelectedColor;
4646
var normalColor = Link.Color ?? BlazorDiagram.Options.Links.DefaultColor;
47-
<g>
48-
@foreach (var vertex in Link.Vertices)
49-
{
50-
<LinkVertexWidget @key="vertex.Id"
51-
Vertex="vertex"
52-
Color="@normalColor"
53-
SelectedColor="@selectedColor" />
54-
}
55-
</g>
47+
@foreach (var vertex in Link.Vertices)
48+
{
49+
<LinkVertexRenderer @key="vertex.Id"
50+
Vertex="vertex"
51+
Color="@normalColor"
52+
SelectedColor="@selectedColor" />
53+
}
5654
}
5755

5856
@foreach (var label in Link.Labels)

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
using System;
2-
using System.IO;
3-
using System.Linq;
42
using Blazor.Diagrams.Core.Extensions;
53
using Blazor.Diagrams.Core.Geometry;
64
using Blazor.Diagrams.Core.Models;
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
using Blazor.Diagrams.Core.Models.Base;
2+
using Blazor.Diagrams.Core.Models;
3+
using Microsoft.AspNetCore.Components;
4+
using System;
5+
using Microsoft.AspNetCore.Components.Web;
6+
using Blazor.Diagrams.Extensions;
7+
using Blazor.Diagrams.Core.Extensions;
8+
using Microsoft.AspNetCore.Components.Rendering;
9+
10+
namespace Blazor.Diagrams.Components.Renderers
11+
{
12+
public class LinkVertexRenderer : ComponentBase, IDisposable
13+
{
14+
private bool _shouldRender = true;
15+
16+
[CascadingParameter] public BlazorDiagram BlazorDiagram { get; set; } = null!;
17+
[Parameter] public LinkVertexModel Vertex { get; set; } = null!;
18+
[Parameter] public string? Color { get; set; }
19+
[Parameter] public string? SelectedColor { get; set; }
20+
21+
private string? ColorToUse => Vertex.Selected ? SelectedColor : Color;
22+
23+
public void Dispose()
24+
{
25+
Vertex.Changed -= OnVertexChanged;
26+
}
27+
28+
protected override void OnInitialized()
29+
{
30+
Vertex.Changed += OnVertexChanged;
31+
}
32+
33+
protected override bool ShouldRender()
34+
{
35+
if (!_shouldRender) return false;
36+
37+
_shouldRender = false;
38+
return true;
39+
}
40+
41+
protected override void BuildRenderTree(RenderTreeBuilder builder)
42+
{
43+
var componentType = BlazorDiagram.GetComponent(Vertex);
44+
45+
builder.OpenElement(0, "g");
46+
builder.AddAttribute(1, "class", "link-vertex");
47+
builder.AddAttribute(4, "cursor", "move");
48+
builder.AddAttribute(5, "ondblclick", value: EventCallback.Factory.Create<MouseEventArgs>(this, OnDoubleClick));
49+
builder.AddAttribute(6, "onpointerdown", EventCallback.Factory.Create<PointerEventArgs>(this, OnPointerDown));
50+
builder.AddAttribute(7, "onpointerup", EventCallback.Factory.Create<PointerEventArgs>(this, OnPointerUp));
51+
builder.AddEventStopPropagationAttribute(8, "onpointerdown", true);
52+
builder.AddEventStopPropagationAttribute(9, "onpointerup", true);
53+
54+
if (componentType == null)
55+
{
56+
builder.OpenElement(10, "circle");
57+
builder.AddAttribute(11, "cx", Vertex.Position.X.ToInvariantString());
58+
builder.AddAttribute(12, "cy", Vertex.Position.Y.ToInvariantString());
59+
builder.AddAttribute(13, "r", "5");
60+
builder.AddAttribute(14, "fill", ColorToUse);
61+
builder.CloseElement();
62+
}
63+
else
64+
{
65+
builder.OpenComponent(15, componentType);
66+
builder.AddAttribute(16, "Vertex", Vertex);
67+
builder.AddAttribute(17, "Color", ColorToUse);
68+
builder.CloseComponent();
69+
}
70+
71+
builder.CloseElement();
72+
}
73+
74+
private void OnVertexChanged(Model _)
75+
{
76+
_shouldRender = true;
77+
InvokeAsync(StateHasChanged);
78+
}
79+
80+
private void OnPointerDown(PointerEventArgs e)
81+
{
82+
BlazorDiagram.TriggerPointerDown(Vertex, e.ToCore());
83+
}
84+
85+
private void OnPointerUp(PointerEventArgs e)
86+
{
87+
BlazorDiagram.TriggerPointerUp(Vertex, e.ToCore());
88+
}
89+
90+
private void OnDoubleClick(MouseEventArgs e)
91+
{
92+
Vertex.Parent.Vertices.Remove(Vertex);
93+
Vertex.Parent.Refresh();
94+
}
95+
}
96+
}

0 commit comments

Comments
 (0)