From 05b158e92f56d5965bfe833d73b6c23e99cd1f94 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 3 Dec 2017 12:38:44 -0800 Subject: [PATCH] Show a visual effect view, with behind-window-blending, when there is no selected Article. Fix #214. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After I check this in I’m going to reverse it, because it’s just too obtrusive. But this way there’s a record of having tried it, plus code. --- .../Detail/DetailViewController.swift | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/Evergreen/MainWindow/Detail/DetailViewController.swift b/Evergreen/MainWindow/Detail/DetailViewController.swift index 157320e54..bf5a3fdf3 100644 --- a/Evergreen/MainWindow/Detail/DetailViewController.swift +++ b/Evergreen/MainWindow/Detail/DetailViewController.swift @@ -15,10 +15,12 @@ import RSWeb class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDelegate { var webview: WKWebView! - + var visualEffectView: NSVisualEffectView! + var article: Article? { didSet { reloadHTML() + showOrHideWebView() } } @@ -54,11 +56,14 @@ class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDelegate webview.customUserAgent = userAgent } + visualEffectView = NSVisualEffectView(frame: self.view.bounds) + visualEffectView.material = .appearanceBased + visualEffectView.blendingMode = .behindWindow + let boxView = self.view as! DetailBox - boxView.contentView = webview - boxView.rs_addFullSizeConstraints(forSubview: webview) - boxView.viewController = self + + showOrHideWebView() } // MARK: Notifications @@ -93,7 +98,27 @@ class DetailViewController: NSViewController, WKNavigationDelegate, WKUIDelegate webview.loadHTMLString("", baseURL: nil) } } - + + private func showOrHideWebView() { + + if let _ = article { + switchToView(webview) + } + else { + switchToView(visualEffectView) + } + } + + private func switchToView(_ view: NSView) { + + let boxView = self.view as! DetailBox + if boxView.contentView == view { + return + } + boxView.contentView = view + boxView.rs_addFullSizeConstraints(forSubview: view) + } + // MARK: WKNavigationDelegate public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {