Visual tweaks

This commit is contained in:
James Magahern
2020-07-29 19:24:05 -07:00
parent c96cafd1ca
commit bba9efbbb6
4 changed files with 52 additions and 7 deletions

View File

@@ -93,8 +93,7 @@ class BrowserView: UIView
webViewContentInset.bottom += toolbarView.frame.height webViewContentInset.bottom += toolbarView.frame.height
} else { } else {
// Regular: toolbar is at the top // Regular: toolbar is at the top
toolbarView.bounds = CGRect(origin: .zero, size: toolbarSize) toolbarView.frame = CGRect(origin: CGPoint(x: 0.0, y: titlebarView.frame.maxY), size: toolbarSize)
toolbarView.center = CGPoint(x: bounds.center.x, y: titlebarView.center.y + titlebarView.frame.height)
webViewContentInset.top += toolbarView.frame.height webViewContentInset.top += toolbarView.frame.height
} }
} }

View File

@@ -9,7 +9,8 @@ import UIKit
class BrowserViewController: UIViewController, class BrowserViewController: UIViewController,
SBRProcessBundleBridgeDelegate, WKNavigationDelegate, SBRProcessBundleBridgeDelegate, WKNavigationDelegate,
UITextFieldDelegate, ScriptPolicyViewControllerDelegate UITextFieldDelegate, ScriptPolicyViewControllerDelegate,
UIPopoverPresentationControllerDelegate
{ {
let bridge = SBRProcessBundleBridge() let bridge = SBRProcessBundleBridge()
let browserView = BrowserView() let browserView = BrowserView()
@@ -37,6 +38,8 @@ class BrowserViewController: UIViewController,
bridge.delegate = self bridge.delegate = self
bridge.policyDataSource = policyManager bridge.policyDataSource = policyManager
addChild(toolbarController)
let webView = bridge.webView let webView = bridge.webView
webView.allowsBackForwardNavigationGestures = true webView.allowsBackForwardNavigationGestures = true
webView.navigationDelegate = self webView.navigationDelegate = self
@@ -66,6 +69,7 @@ class BrowserViewController: UIViewController,
let navController = UINavigationController(rootViewController: scriptViewController) let navController = UINavigationController(rootViewController: scriptViewController)
navController.modalPresentationStyle = .popover navController.modalPresentationStyle = .popover
navController.popoverPresentationController?.sourceView = self.toolbarController.scriptControllerIconView navController.popoverPresentationController?.sourceView = self.toolbarController.scriptControllerIconView
navController.popoverPresentationController?.delegate = self
self.present(navController, animated: true, completion: nil) self.present(navController, animated: true, completion: nil)
}), for: .touchUpInside) }), for: .touchUpInside)
@@ -114,6 +118,13 @@ class BrowserViewController: UIViewController,
bridge.webView.load(request) bridge.webView.load(request)
} }
// MARK: UIPopoverPresentationControllerDelegate
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
// Forces popovers to present on iPhone
return .none
}
// MARK: SBRProcessBundleBridgeDelegate // MARK: SBRProcessBundleBridgeDelegate
func webProcess(_ bridge: SBRProcessBundleBridge, didAllowScriptResourceFromOrigin origin: String) { func webProcess(_ bridge: SBRProcessBundleBridge, didAllowScriptResourceFromOrigin origin: String) {

View File

@@ -49,7 +49,7 @@ class TitlebarView: UIView
super.layoutSubviews() super.layoutSubviews()
backgroundImageView.frame = bounds backgroundImageView.frame = bounds
titleLabelView.frame = bounds.avoiding(verticalInsets: safeAreaInsets).insetBy(dx: 8.0, dy: 0.0) titleLabelView.frame = bounds.avoiding(verticalInsets: safeAreaInsets).insetBy(dx: 8.0 + layoutMargins.left, dy: 0.0)
if let image = backgroundImageView.image, image.size == bounds.size { if let image = backgroundImageView.image, image.size == bounds.size {
// No op // No op

View File

@@ -18,6 +18,12 @@ class ToolbarButtonView: UIView
setNeedsLayout() setNeedsLayout()
} }
func removeAllButtonViews() {
buttonViews.forEach { $0.removeFromSuperview() }
buttonViews.removeAll()
setNeedsLayout()
}
override func sizeThatFits(_ size: CGSize) -> CGSize { override func sizeThatFits(_ size: CGSize) -> CGSize {
let width: CGFloat = buttonViews.reduce(0.0) { (result, button) -> CGFloat in let width: CGFloat = buttonViews.reduce(0.0) { (result, button) -> CGFloat in
return result + button.sizeThatFits(size).width + buttonPadding return result + button.sizeThatFits(size).width + buttonPadding
@@ -61,6 +67,12 @@ class ToolbarView: UIView
cancelButton.setTitle("Cancel", for: .normal) cancelButton.setTitle("Cancel", for: .normal)
containerView.addSubview(cancelButton) containerView.addSubview(cancelButton)
layer.masksToBounds = false
layer.shadowColor = UIColor.black.cgColor
layer.shadowOpacity = 0.2
layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
layer.shadowRadius = 1.5
} }
override func sizeThatFits(_ size: CGSize) -> CGSize override func sizeThatFits(_ size: CGSize) -> CGSize
@@ -115,6 +127,7 @@ class ToolbarViewController: UIViewController
let scriptControllerIconView = ScriptControllerIconView() let scriptControllerIconView = ScriptControllerIconView()
let shareButton = UIButton(frame: .zero) let shareButton = UIButton(frame: .zero)
let darkModeButton = UIButton(frame: .zero) let darkModeButton = UIButton(frame: .zero)
let windowButton = UIButton(frame: .zero)
var darkModeEnabled: Bool = false { var darkModeEnabled: Bool = false {
didSet { didSet {
@@ -134,12 +147,14 @@ class ToolbarViewController: UIViewController
toolbarView.urlBar = urlBar toolbarView.urlBar = urlBar
// Dark mode button
darkModeButton.setImage(darkModeDisabledImage, for: .normal) darkModeButton.setImage(darkModeDisabledImage, for: .normal)
toolbarView.buttonsView.addButtonView(darkModeButton)
// Share button
shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal) shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal)
toolbarView.buttonsView.addButtonView(shareButton)
toolbarView.buttonsView.addButtonView(scriptControllerIconView) // Window button
windowButton.setImage(UIImage(systemName: "rectangle.on.rectangle"), for: .normal)
let toolbarAnimationDuration: TimeInterval = 0.3 let toolbarAnimationDuration: TimeInterval = 0.3
urlBar.textField.addAction(.init(handler: { _ in urlBar.textField.addAction(.init(handler: { _ in
@@ -151,6 +166,26 @@ class ToolbarViewController: UIViewController
toolbarView.cancelButton.addAction(.init(handler: { action in toolbarView.cancelButton.addAction(.init(handler: { action in
self.urlBar.textField.resignFirstResponder() self.urlBar.textField.resignFirstResponder()
}), for: .touchUpInside) }), for: .touchUpInside)
traitCollectionDidChange(nil)
}
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
toolbarView.buttonsView.removeAllButtonViews()
// Setup toolbar based on trait collection
if traitCollection.horizontalSizeClass == .compact {
toolbarView.buttonsView.addButtonView(darkModeButton)
toolbarView.buttonsView.addButtonView(scriptControllerIconView)
toolbarView.buttonsView.addButtonView(windowButton)
} else {
toolbarView.buttonsView.addButtonView(darkModeButton)
toolbarView.buttonsView.addButtonView(shareButton)
toolbarView.buttonsView.addButtonView(scriptControllerIconView)
toolbarView.buttonsView.addButtonView(windowButton)
}
} }
override func loadView() { override func loadView() {