From 80fcfd3b917b5f08e5f0f468ffabb6499342b999 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Wed, 15 Jul 2020 22:52:15 -0400 Subject: [PATCH] Add link hover state and tooltip --- GeminiRenderer/RenderingBlockView.swift | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/GeminiRenderer/RenderingBlockView.swift b/GeminiRenderer/RenderingBlockView.swift index 230b319..571f1d0 100644 --- a/GeminiRenderer/RenderingBlockView.swift +++ b/GeminiRenderer/RenderingBlockView.swift @@ -11,6 +11,7 @@ import GeminiFormat struct RenderingBlockView: View { let block: RenderingBlock let changeURL: ((URL) -> Void)? + @State var hovering = false init(block: RenderingBlock, changeURL: ((URL) -> Void)? = nil) { self.block = block @@ -43,15 +44,25 @@ struct RenderingBlockView: View { private func link(_ url: URL, text: String?) -> some View { let text = text ?? url.absoluteString - return Button { + let button: some View = Button { self.changeURL?(url) } label: { Text(verbatim: text) .font(.documentBody) - .foregroundColor(.blue) + .foregroundColor(hovering ? .blue : Color.blue.opacity(0.8)) .underline() .frame(maxWidth: .infinity, alignment: .leading) - }.buttonStyle(LinkButtonStyle()) + } + .buttonStyle(LinkButtonStyle()) + .onHover { hovering in + self.hovering = hovering + } + + if #available(macOS 10.16, iOS 14.0, *) { + return AnyView(button.help(url.absoluteString)) + } else { + return AnyView(button) + } } private func preformatted(_ text: String) -> some View {