1 Commits

Author SHA1 Message Date
0% [█ █ █ █ █ █ █ █ █ █] 100% 3aa2a7c518 Added new icon 2026-07-18 23:25:36 -05:00
10 changed files with 23272 additions and 242 deletions
+73 -65
View File
@@ -23,89 +23,97 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lblServers = new System.Windows.Forms.Label();
this.lstServers = new System.Windows.Forms.ListBox();
this.btnConnect = new System.Windows.Forms.Button();
this.btnSwitchMode = new System.Windows.Forms.Button();
this.chkLogging = new System.Windows.Forms.CheckBox();
this.updateTimer = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClientForm));
lblServers = new Label();
lstServers = new ListBox();
btnConnect = new Button();
btnSwitchMode = new Button();
chkLogging = new CheckBox();
updateTimer = new System.Windows.Forms.Timer(components);
SuspendLayout();
//
// lblServers
//
this.lblServers.AutoSize = true;
this.lblServers.Location = new System.Drawing.Point(20, 20);
this.lblServers.Name = "lblServers";
this.lblServers.Size = new System.Drawing.Size(182, 13);
this.lblServers.TabIndex = 0;
this.lblServers.Text = "Discovered Servers (Auto-updating):";
lblServers.AutoSize = true;
lblServers.Location = new Point(40, 46);
lblServers.Margin = new Padding(6, 0, 6, 0);
lblServers.Name = "lblServers";
lblServers.Size = new Size(346, 30);
lblServers.TabIndex = 0;
lblServers.Text = "Discovered Servers (Auto-updating):";
//
// lstServers
//
this.lstServers.FormattingEnabled = true;
this.lstServers.Location = new System.Drawing.Point(20, 40);
this.lstServers.Name = "lstServers";
this.lstServers.Size = new System.Drawing.Size(440, 160);
this.lstServers.TabIndex = 1;
this.lstServers.DoubleClick += new System.EventHandler(this.lstServers_DoubleClick);
this.lstServers.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lstServers_KeyDown);
//
// chkLogging
//
this.chkLogging.AutoSize = true;
this.chkLogging.Location = new System.Drawing.Point(20, 210);
this.chkLogging.Name = "chkLogging";
this.chkLogging.Size = new System.Drawing.Size(100, 17);
this.chkLogging.TabIndex = 4;
this.chkLogging.Text = "Enable Logging";
this.chkLogging.UseVisualStyleBackColor = true;
this.chkLogging.CheckedChanged += new System.EventHandler(this.chkLogging_CheckedChanged);
lstServers.FormattingEnabled = true;
lstServers.Location = new Point(40, 92);
lstServers.Margin = new Padding(6, 7, 6, 7);
lstServers.Name = "lstServers";
lstServers.Size = new Size(876, 364);
lstServers.TabIndex = 1;
lstServers.DoubleClick += lstServers_DoubleClick;
lstServers.KeyDown += lstServers_KeyDown;
//
// btnConnect
//
this.btnConnect.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnConnect.Location = new System.Drawing.Point(20, 240);
this.btnConnect.Name = "btnConnect";
this.btnConnect.Size = new System.Drawing.Size(210, 40);
this.btnConnect.TabIndex = 2;
this.btnConnect.Text = "Connect";
this.btnConnect.UseVisualStyleBackColor = true;
this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
btnConnect.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Point, 0);
btnConnect.Location = new Point(40, 554);
btnConnect.Margin = new Padding(6, 7, 6, 7);
btnConnect.Name = "btnConnect";
btnConnect.Size = new Size(420, 92);
btnConnect.TabIndex = 2;
btnConnect.Text = "Connect";
btnConnect.UseVisualStyleBackColor = true;
btnConnect.Click += btnConnect_Click;
//
// btnSwitchMode
//
this.btnSwitchMode.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnSwitchMode.Location = new System.Drawing.Point(250, 240);
this.btnSwitchMode.Name = "btnSwitchMode";
this.btnSwitchMode.Size = new System.Drawing.Size(210, 40);
this.btnSwitchMode.TabIndex = 3;
this.btnSwitchMode.Text = "Switch to Server Mode";
this.btnSwitchMode.UseVisualStyleBackColor = true;
this.btnSwitchMode.Click += new System.EventHandler(this.btnSwitchMode_Click);
btnSwitchMode.Font = new Font("Arial", 10F, FontStyle.Regular, GraphicsUnit.Point, 0);
btnSwitchMode.Location = new Point(500, 554);
btnSwitchMode.Margin = new Padding(6, 7, 6, 7);
btnSwitchMode.Name = "btnSwitchMode";
btnSwitchMode.Size = new Size(420, 92);
btnSwitchMode.TabIndex = 3;
btnSwitchMode.Text = "Switch to Server Mode";
btnSwitchMode.UseVisualStyleBackColor = true;
btnSwitchMode.Click += btnSwitchMode_Click;
//
// chkLogging
//
chkLogging.AutoSize = true;
chkLogging.Location = new Point(40, 485);
chkLogging.Margin = new Padding(6, 7, 6, 7);
chkLogging.Name = "chkLogging";
chkLogging.Size = new Size(182, 34);
chkLogging.TabIndex = 4;
chkLogging.Text = "Enable Logging";
chkLogging.UseVisualStyleBackColor = true;
chkLogging.CheckedChanged += chkLogging_CheckedChanged;
//
// updateTimer
//
this.updateTimer.Interval = 1000;
this.updateTimer.Tick += new System.EventHandler(this.updateTimer_Tick);
updateTimer.Interval = 1000;
updateTimer.Tick += updateTimer_Tick;
//
// ClientForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(484, 311);
this.Controls.Add(this.chkLogging);
this.Controls.Add(this.btnSwitchMode);
this.Controls.Add(this.btnConnect);
this.Controls.Add(this.lstServers);
this.Controls.Add(this.lblServers);
this.Name = "ClientForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Stream Client (Viewer)";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ClientForm_FormClosing);
this.Load += new System.EventHandler(this.ClientForm_Load);
this.ResumeLayout(false);
this.PerformLayout();
AutoScaleDimensions = new SizeF(12F, 30F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(968, 718);
Controls.Add(chkLogging);
Controls.Add(btnSwitchMode);
Controls.Add(btnConnect);
Controls.Add(lstServers);
Controls.Add(lblServers);
Icon = (Icon)resources.GetObject("$this.Icon");
Margin = new Padding(6, 7, 6, 7);
Name = "ClientForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Stream Client (Viewer)";
FormClosing += ClientForm_FormClosing;
Load += ClientForm_Load;
ResumeLayout(false);
PerformLayout();
}
File diff suppressed because it is too large Load Diff
+5
View File
@@ -8,8 +8,13 @@
<ImplicitUsings>enable</ImplicitUsings>
<Platforms>AnyCPU;x64</Platforms>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<ApplicationIcon>displayStreamerIcon-NoBackground.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Content Include="displayStreamerIcon-NoBackground.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="SharpDX" Version="4.2.0" />
<PackageReference Include="SharpDX.Direct3D11" Version="4.2.0" />
+134 -123
View File
@@ -30,162 +30,173 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lblAdapters = new System.Windows.Forms.Label();
this.clbAdapters = new System.Windows.Forms.CheckedListBox();
this.lblDisplays = new System.Windows.Forms.Label();
this.clbDisplays = new System.Windows.Forms.CheckedListBox();
this.btnStart = new System.Windows.Forms.Button();
this.btnSwitchMode = new System.Windows.Forms.Button();
this.lblStatus = new System.Windows.Forms.Label();
this.chkLogging = new System.Windows.Forms.CheckBox();
this.txtLog = new System.Windows.Forms.TextBox();
this.trayIcon = new System.Windows.Forms.NotifyIcon(this.components);
this.trayMenu = new System.Windows.Forms.ContextMenuStrip(this.components);
this.menuShow = new System.Windows.Forms.ToolStripMenuItem();
this.menuExit = new System.Windows.Forms.ToolStripMenuItem();
this.trayMenu.SuspendLayout();
this.SuspendLayout();
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ServerForm));
lblAdapters = new Label();
clbAdapters = new CheckedListBox();
lblDisplays = new Label();
clbDisplays = new CheckedListBox();
btnStart = new Button();
btnSwitchMode = new Button();
lblStatus = new Label();
chkLogging = new CheckBox();
txtLog = new TextBox();
trayIcon = new NotifyIcon(components);
trayMenu = new ContextMenuStrip(components);
menuShow = new ToolStripMenuItem();
menuExit = new ToolStripMenuItem();
trayMenu.SuspendLayout();
SuspendLayout();
//
// lblAdapters
//
this.lblAdapters.AutoSize = true;
this.lblAdapters.Location = new System.Drawing.Point(20, 20);
this.lblAdapters.Name = "lblAdapters";
this.lblAdapters.Size = new System.Drawing.Size(205, 13);
this.lblAdapters.TabIndex = 0;
this.lblAdapters.Text = "Select Network Adapters to Broadcast on:";
lblAdapters.AutoSize = true;
lblAdapters.Location = new Point(40, 46);
lblAdapters.Margin = new Padding(6, 0, 6, 0);
lblAdapters.Name = "lblAdapters";
lblAdapters.Size = new Size(398, 30);
lblAdapters.TabIndex = 0;
lblAdapters.Text = "Select Network Adapters to Broadcast on:";
//
// clbAdapters
//
this.clbAdapters.FormattingEnabled = true;
this.clbAdapters.Location = new System.Drawing.Point(20, 40);
this.clbAdapters.Name = "clbAdapters";
this.clbAdapters.Size = new System.Drawing.Size(440, 94);
this.clbAdapters.TabIndex = 1;
clbAdapters.FormattingEnabled = true;
clbAdapters.Location = new Point(40, 92);
clbAdapters.Margin = new Padding(6, 7, 6, 7);
clbAdapters.Name = "clbAdapters";
clbAdapters.Size = new Size(876, 196);
clbAdapters.TabIndex = 1;
//
// lblDisplays
//
this.lblDisplays.AutoSize = true;
this.lblDisplays.Location = new System.Drawing.Point(20, 150);
this.lblDisplays.Name = "lblDisplays";
this.lblDisplays.Size = new System.Drawing.Size(278, 13);
this.lblDisplays.TabIndex = 2;
this.lblDisplays.Text = "Select Displays to Capture (Will downscale 4K to 1080p):";
lblDisplays.AutoSize = true;
lblDisplays.Location = new Point(40, 346);
lblDisplays.Margin = new Padding(6, 0, 6, 0);
lblDisplays.Name = "lblDisplays";
lblDisplays.Size = new Size(531, 30);
lblDisplays.TabIndex = 2;
lblDisplays.Text = "Select Displays to Capture (Will downscale 4K to 1080p):";
//
// clbDisplays
//
this.clbDisplays.FormattingEnabled = true;
this.clbDisplays.Location = new System.Drawing.Point(20, 170);
this.clbDisplays.Name = "clbDisplays";
this.clbDisplays.Size = new System.Drawing.Size(440, 94);
this.clbDisplays.TabIndex = 3;
clbDisplays.FormattingEnabled = true;
clbDisplays.Location = new Point(40, 392);
clbDisplays.Margin = new Padding(6, 7, 6, 7);
clbDisplays.Name = "clbDisplays";
clbDisplays.Size = new Size(876, 196);
clbDisplays.TabIndex = 3;
//
// btnStart
//
this.btnStart.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnStart.Location = new System.Drawing.Point(20, 290);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(210, 40);
this.btnStart.TabIndex = 4;
this.btnStart.Text = "Start Streaming";
this.btnStart.UseVisualStyleBackColor = true;
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
btnStart.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Point, 0);
btnStart.Location = new Point(40, 669);
btnStart.Margin = new Padding(6, 7, 6, 7);
btnStart.Name = "btnStart";
btnStart.Size = new Size(420, 92);
btnStart.TabIndex = 4;
btnStart.Text = "Start Streaming";
btnStart.UseVisualStyleBackColor = true;
btnStart.Click += btnStart_Click;
//
// btnSwitchMode
//
this.btnSwitchMode.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btnSwitchMode.Location = new System.Drawing.Point(250, 290);
this.btnSwitchMode.Name = "btnSwitchMode";
this.btnSwitchMode.Size = new System.Drawing.Size(210, 40);
this.btnSwitchMode.TabIndex = 7;
this.btnSwitchMode.Text = "Switch to Client Mode";
this.btnSwitchMode.UseVisualStyleBackColor = true;
this.btnSwitchMode.Click += new System.EventHandler(this.btnSwitchMode_Click);
btnSwitchMode.Font = new Font("Arial", 10F, FontStyle.Regular, GraphicsUnit.Point, 0);
btnSwitchMode.Location = new Point(500, 669);
btnSwitchMode.Margin = new Padding(6, 7, 6, 7);
btnSwitchMode.Name = "btnSwitchMode";
btnSwitchMode.Size = new Size(420, 92);
btnSwitchMode.TabIndex = 7;
btnSwitchMode.Text = "Switch to Client Mode";
btnSwitchMode.UseVisualStyleBackColor = true;
btnSwitchMode.Click += btnSwitchMode_Click;
//
// lblStatus
//
this.lblStatus.AutoSize = true;
this.lblStatus.ForeColor = System.Drawing.Color.Gray;
this.lblStatus.Location = new System.Drawing.Point(20, 340);
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(63, 13);
this.lblStatus.TabIndex = 5;
this.lblStatus.Text = "Status: Idle";
lblStatus.AutoSize = true;
lblStatus.ForeColor = Color.Gray;
lblStatus.Location = new Point(40, 785);
lblStatus.Margin = new Padding(6, 0, 6, 0);
lblStatus.Name = "lblStatus";
lblStatus.Size = new Size(114, 30);
lblStatus.TabIndex = 5;
lblStatus.Text = "Status: Idle";
//
// chkLogging
//
this.chkLogging.AutoSize = true;
this.chkLogging.Location = new System.Drawing.Point(350, 340);
this.chkLogging.Name = "chkLogging";
this.chkLogging.Size = new System.Drawing.Size(100, 17);
this.chkLogging.TabIndex = 8;
this.chkLogging.Text = "Enable Logging";
this.chkLogging.UseVisualStyleBackColor = true;
this.chkLogging.CheckedChanged += new System.EventHandler(this.chkLogging_CheckedChanged);
chkLogging.AutoSize = true;
chkLogging.Location = new Point(700, 785);
chkLogging.Margin = new Padding(6, 7, 6, 7);
chkLogging.Name = "chkLogging";
chkLogging.Size = new Size(182, 34);
chkLogging.TabIndex = 8;
chkLogging.Text = "Enable Logging";
chkLogging.UseVisualStyleBackColor = true;
chkLogging.CheckedChanged += chkLogging_CheckedChanged;
//
// txtLog
//
this.txtLog.Location = new System.Drawing.Point(20, 370);
this.txtLog.Multiline = true;
this.txtLog.Name = "txtLog";
this.txtLog.ReadOnly = true;
this.txtLog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtLog.Size = new System.Drawing.Size(440, 210);
this.txtLog.TabIndex = 6;
//
// trayMenu
//
this.trayMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.menuShow,
this.menuExit});
this.trayMenu.Name = "trayMenu";
this.trayMenu.Size = new System.Drawing.Size(104, 48);
//
// menuShow
//
this.menuShow.Name = "menuShow";
this.menuShow.Size = new System.Drawing.Size(103, 22);
this.menuShow.Text = "Show";
this.menuShow.Click += new System.EventHandler(this.menuShow_Click);
//
// menuExit
//
this.menuExit.Name = "menuExit";
this.menuExit.Size = new System.Drawing.Size(103, 22);
this.menuExit.Text = "Exit";
this.menuExit.Click += new System.EventHandler(this.menuExit_Click);
txtLog.Location = new Point(40, 854);
txtLog.Margin = new Padding(6, 7, 6, 7);
txtLog.Multiline = true;
txtLog.Name = "txtLog";
txtLog.ReadOnly = true;
txtLog.ScrollBars = ScrollBars.Vertical;
txtLog.Size = new Size(876, 479);
txtLog.TabIndex = 6;
//
// trayIcon
//
this.trayIcon.ContextMenuStrip = this.trayMenu;
this.trayIcon.Icon = System.Drawing.SystemIcons.Application;
this.trayIcon.Text = "Display Streamer Server";
this.trayIcon.DoubleClick += new System.EventHandler(this.trayIcon_DoubleClick);
trayIcon.ContextMenuStrip = trayMenu;
trayIcon.Icon = (Icon)resources.GetObject("trayIcon.Icon");
trayIcon.Text = "Display Streamer Server";
trayIcon.DoubleClick += trayIcon_DoubleClick;
//
// trayMenu
//
trayMenu.ImageScalingSize = new Size(28, 28);
trayMenu.Items.AddRange(new ToolStripItem[] { menuShow, menuExit });
trayMenu.Name = "trayMenu";
trayMenu.Size = new Size(137, 76);
//
// menuShow
//
menuShow.Name = "menuShow";
menuShow.Size = new Size(136, 36);
menuShow.Text = "Show";
menuShow.Click += menuShow_Click;
//
// menuExit
//
menuExit.Name = "menuExit";
menuExit.Size = new Size(136, 36);
menuExit.Text = "Exit";
menuExit.Click += menuExit_Click;
//
// ServerForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(484, 600);
this.Controls.Add(this.chkLogging);
this.Controls.Add(this.btnSwitchMode);
this.Controls.Add(this.txtLog);
this.Controls.Add(this.lblStatus);
this.Controls.Add(this.btnStart);
this.Controls.Add(this.clbDisplays);
this.Controls.Add(this.lblDisplays);
this.Controls.Add(this.clbAdapters);
this.Controls.Add(this.lblAdapters);
this.Name = "ServerForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Stream Server (DX12 / H.265)";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ServerForm_FormClosing);
this.Load += new System.EventHandler(this.ServerForm_Load);
this.Resize += new System.EventHandler(this.ServerForm_Resize);
this.trayMenu.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
AutoScaleDimensions = new SizeF(12F, 30F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(968, 1385);
Controls.Add(chkLogging);
Controls.Add(btnSwitchMode);
Controls.Add(txtLog);
Controls.Add(lblStatus);
Controls.Add(btnStart);
Controls.Add(clbDisplays);
Controls.Add(lblDisplays);
Controls.Add(clbAdapters);
Controls.Add(lblAdapters);
Icon = (Icon)resources.GetObject("$this.Icon");
Margin = new Padding(6, 7, 6, 7);
Name = "ServerForm";
StartPosition = FormStartPosition.CenterScreen;
Text = "Stream Server (DX12 / H.265)";
FormClosing += ServerForm_FormClosing;
Load += ServerForm_Load;
Resize += ServerForm_Resize;
trayMenu.ResumeLayout(false);
ResumeLayout(false);
PerformLayout();
}
File diff suppressed because it is too large Load Diff
+2
View File
@@ -21,6 +21,7 @@
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ViewerForm));
lblEsc = new Label();
lblMetrics = new Label();
hideLabelTimer = new System.Windows.Forms.Timer(components);
@@ -66,6 +67,7 @@
Controls.Add(lblMetrics);
Controls.Add(lblEsc);
FormBorderStyle = FormBorderStyle.None;
Icon = (Icon)resources.GetObject("$this.Icon");
KeyPreview = true;
Margin = new Padding(6, 7, 6, 7);
Name = "ViewerForm";
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

+52
View File
@@ -0,0 +1,52 @@
<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
<defs>
<!-- Vibrant Blue to Cyan Gradient for the background -->
<linearGradient id="bgGradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#00C6FF" />
<stop offset="100%" stop-color="#0072FF" />
</linearGradient>
<!-- Subtle drop shadow to give the window depth -->
<filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
<feDropShadow dx="0" dy="12" stdDeviation="12" flood-color="#000000" flood-opacity="0.25" />
</filter>
</defs>
<!-- Background Squircle -->
<rect width="512" height="512" rx="112" fill="url(#bgGradient)" />
<!-- Group containing the Window and Cast Waves -->
<g filter="url(#shadow)">
<!--
Outer Shell:
Draws the top, right, and bottom of the window,
then arcs into the largest casting wave in the bottom-left.
-->
<path d="M 64 256
L 64 112
A 48 48 0 0 1 112 64
L 400 64
A 48 48 0 0 1 448 112
L 448 400
A 48 48 0 0 1 400 448
L 256 448
A 192 192 0 0 0 64 256 Z"
fill="none" stroke="#FFFFFF" stroke-width="32" stroke-linecap="round" stroke-linejoin="round" />
<!-- Window Top Bar Separator -->
<path d="M 80 160 L 432 160" stroke="#FFFFFF" stroke-width="32" stroke-linecap="round" />
<!-- Window Control Dots -->
<circle cx="120" cy="112" r="12" fill="#FFFFFF" />
<circle cx="168" cy="112" r="12" fill="#FFFFFF" />
<circle cx="216" cy="112" r="12" fill="#FFFFFF" />
<!-- Inner Casting Wave -->
<path d="M 64 352 A 96 96 0 0 1 160 448" fill="none" stroke="#FFFFFF" stroke-width="32" stroke-linecap="round" />
<!-- Casting Origin Anchor Dot -->
<circle cx="64" cy="448" r="16" fill="#FFFFFF" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB