From 20b612f9e09644b4b42ad1a2fd7fb098eb6cdbc0 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Sat, 23 Jun 2018 10:24:09 -0700 Subject: [PATCH] Add seemingly functional Markdown link support - Issue MatterHackers/MCCentral#3726 --- Submodules/agg-sharp | 2 +- .../Inlines/AggLinkInlineRenderer.cs | 42 ++++++++++++++++--- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index b22228763..f38d68ae2 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit b22228763c87cb90dab2055a1f0a42b9f1597fc5 +Subproject commit f38d68ae2c71343c909b43c7a497ed8bf1a7d23a diff --git a/Utilities/MarkdigAgg/Inlines/AggLinkInlineRenderer.cs b/Utilities/MarkdigAgg/Inlines/AggLinkInlineRenderer.cs index 1b949f757..5f0c89edb 100644 --- a/Utilities/MarkdigAgg/Inlines/AggLinkInlineRenderer.cs +++ b/Utilities/MarkdigAgg/Inlines/AggLinkInlineRenderer.cs @@ -18,14 +18,43 @@ namespace Markdig.Renderers.Agg.Inlines { public class TextLinkX : FlowLayoutWidget { - public TextLinkX() + private LinkInline linkInline; + + public TextLinkX(LinkInline linkInline) { - HAnchor = HAnchor.Fit; - VAnchor = VAnchor.Fit; + this.HAnchor = HAnchor.Fit; + this.VAnchor = VAnchor.Fit; + this.Cursor = Cursors.Hand; + this.linkInline = linkInline; + + } + + public override void OnClick(MouseEventArgs mouseEvent) + { + if (linkInline.Url.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + { + ApplicationController.Instance.LaunchBrowser(linkInline.Url); + } + else + { + // Inline link? + Debugger.Break(); + } + + base.OnClick(mouseEvent); } public override void AddChild(GuiWidget childToAdd, int indexInChildrenList = -1) { + if (childToAdd is TextWidget textWidget) + { + // Mark with underline if any character data exists + textWidget.Underline = textWidget.Text.Trim().Length > 0; + } + + // Allow link parent to own mouse events + childToAdd.Selectable = false; + base.AddChild(childToAdd, indexInChildrenList); } } @@ -36,8 +65,9 @@ namespace Markdig.Renderers.Agg.Inlines public ImageLinkSimpleX(string url) { - HAnchor = HAnchor.Fit; - VAnchor = VAnchor.Fit; + this.HAnchor = HAnchor.Fit; + this.VAnchor = VAnchor.Fit; + this.Selectable = false; var imageBuffer = new ImageBuffer(icon); var imageWidget = new ImageWidget(imageBuffer); @@ -154,7 +184,7 @@ namespace Markdig.Renderers.Agg.Inlines } else { - renderer.Push(new TextLinkX()); // hyperlink); + renderer.Push(new TextLinkX(link)); // hyperlink); renderer.WriteChildren(link); renderer.Pop(); }