Document Controls: adds dark mode button
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
protocol AutocompleteViewControllerDelegate: class {
|
||||
protocol AutocompleteViewControllerDelegate: AnyObject {
|
||||
func autocompleteController(_: AutocompleteViewController, didSelectHistoryItem: HistoryItem)
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,14 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
|
||||
private var commandKeyHeld: Bool = false
|
||||
|
||||
private var darkModeEnabled: Bool {
|
||||
get { tab.bridge.darkModeEnabled }
|
||||
set {
|
||||
tab.bridge.darkModeEnabled = newValue
|
||||
toolbarController.darkModeEnabled = newValue
|
||||
}
|
||||
}
|
||||
|
||||
override var preferredStatusBarStyle: UIStatusBarStyle { .lightContent }
|
||||
|
||||
init() {
|
||||
@@ -124,8 +132,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
|
||||
// Dark mode button
|
||||
toolbarController.darkModeButton.addAction(UIAction(handler: { [unowned self] _ in
|
||||
self.tab.bridge.darkModeEnabled = !self.tab.bridge.darkModeEnabled
|
||||
self.toolbarController.darkModeEnabled = self.tab.bridge.darkModeEnabled
|
||||
self.darkModeEnabled = !self.darkModeEnabled
|
||||
}), for: .touchUpInside)
|
||||
|
||||
// Tabs button
|
||||
@@ -192,7 +199,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
|
||||
// Font size adjust
|
||||
toolbarController.urlBar.documentButton.addAction(UIAction(handler: { [unowned self] _ in
|
||||
let documentControls = DocumentControlViewController()
|
||||
let documentControls = DocumentControlViewController(darkModeEnabled: tab.bridge.darkModeEnabled)
|
||||
documentControls.modalPresentationStyle = .popover
|
||||
documentControls.popoverPresentationController?.permittedArrowDirections = [ .down, .up ]
|
||||
documentControls.popoverPresentationController?.sourceView = toolbarController.urlBar.documentButton
|
||||
@@ -257,6 +264,12 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
}
|
||||
}, for: .touchUpInside)
|
||||
|
||||
// Dark mode
|
||||
documentControls.darkModeView.addAction(UIAction { [unowned self] _ in
|
||||
self.darkModeEnabled = !self.darkModeEnabled
|
||||
documentControls.dismiss(animated: true, completion: nil)
|
||||
}, for: .touchUpInside)
|
||||
|
||||
present(documentControls, animated: true, completion: nil)
|
||||
}), for: .touchUpInside)
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ class DocumentControlView: UIControl
|
||||
let imageSize: CGFloat = 24.0
|
||||
let bounds = self.bounds.inset(by: layoutMargins)
|
||||
imageView.frame = CGRect(
|
||||
x: bounds.minX, y: 0.0,
|
||||
x: bounds.minX + 6.0, y: 0.0,
|
||||
width: imageSize, height: imageSize
|
||||
).centeredY(inRect: self.bounds)
|
||||
|
||||
|
||||
@@ -15,13 +15,14 @@ class DocumentControlViewController: UIViewController
|
||||
let navigationControlView = NavigationControlsView()
|
||||
let settingsView = DocumentControlView()
|
||||
let readabilityView = DocumentControlView()
|
||||
let darkModeView = DocumentControlView()
|
||||
|
||||
var observations: [NSKeyValueObservation] = []
|
||||
|
||||
static public let preferredWidth = CGFloat(200.0)
|
||||
|
||||
convenience init() {
|
||||
self.init(nibName: nil, bundle: nil)
|
||||
init(darkModeEnabled: Bool) {
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
|
||||
findOnPageControlView.label.text = "Find On Page"
|
||||
findOnPageControlView.imageView.image = UIImage(systemName: "magnifyingglass")
|
||||
@@ -32,10 +33,20 @@ class DocumentControlViewController: UIViewController
|
||||
readabilityView.label.text = "Reader Mode"
|
||||
readabilityView.imageView.image = UIImage(systemName: "doc.richtext")
|
||||
|
||||
if darkModeEnabled {
|
||||
darkModeView.label.text = "Disable Dark Mode"
|
||||
} else {
|
||||
darkModeView.label.text = "Enable Dark Mode"
|
||||
}
|
||||
|
||||
darkModeView.imageView.image = DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled)
|
||||
|
||||
documentControlView.addArrangedSubview(navigationControlView)
|
||||
documentControlView.addArrangedSubview(fontSizeAdjustView)
|
||||
documentControlView.addArrangedSubview(findOnPageControlView)
|
||||
documentControlView.addArrangedSubview(darkModeView)
|
||||
documentControlView.addArrangedSubview(readabilityView)
|
||||
|
||||
documentControlView.addArrangedSubview(settingsView)
|
||||
|
||||
for (i, view) in documentControlView.arrangedSubviews.enumerated() {
|
||||
@@ -43,6 +54,10 @@ class DocumentControlViewController: UIViewController
|
||||
}
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
override func loadView() {
|
||||
self.view = documentControlView
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
import UIKit
|
||||
|
||||
@objc
|
||||
protocol ShortcutResponder: class {
|
||||
protocol ShortcutResponder: AnyObject {
|
||||
@objc
|
||||
optional func focusURLBar(_ sender: Any?)
|
||||
|
||||
|
||||
@@ -23,11 +23,8 @@ class ReaderViewController: UIViewController
|
||||
|
||||
private let bridge = ProcessBundleBridge(webViewConfiguration: nil)
|
||||
|
||||
private let darkModeDisabledImage = UIImage(systemName: "moon.circle")
|
||||
private let darkModeEnabledImage = UIImage(systemName: "moon.circle.fill")
|
||||
|
||||
private lazy var darkModeButton: UIBarButtonItem = {
|
||||
UIBarButtonItem(image: darkModeEnabledImage, style: .plain, target: self, action: #selector(self.didTapDarkModeButton))
|
||||
UIBarButtonItem(image: nil, style: .plain, target: self, action: #selector(self.didTapDarkModeButton))
|
||||
}()
|
||||
|
||||
init(readableHTMLString: String, baseURL: URL?) {
|
||||
@@ -53,11 +50,7 @@ class ReaderViewController: UIViewController
|
||||
}
|
||||
|
||||
private func updateDarkModeButton() {
|
||||
if darkModeEnabled {
|
||||
darkModeButton.image = darkModeEnabledImage
|
||||
} else {
|
||||
darkModeButton.image = darkModeDisabledImage
|
||||
}
|
||||
darkModeButton.image = DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled)
|
||||
}
|
||||
|
||||
@objc
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol TabDelegate: class
|
||||
protocol TabDelegate: AnyObject
|
||||
{
|
||||
func didBlockScriptOrigin(_ origin: String, forTab: Tab)
|
||||
}
|
||||
|
||||
@@ -7,6 +7,17 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
public struct DarkModeControls
|
||||
{
|
||||
public static func buttonImage(forDarkModeState enabled: Bool) -> UIImage {
|
||||
if enabled {
|
||||
return UIImage(systemName: "moon.circle.fill")!
|
||||
} else {
|
||||
return UIImage(systemName: "moon.circle")!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ToolbarViewController: UIViewController
|
||||
{
|
||||
let urlBar = URLBar()
|
||||
@@ -24,16 +35,9 @@ class ToolbarViewController: UIViewController
|
||||
|
||||
var darkModeEnabled: Bool = false {
|
||||
didSet {
|
||||
if darkModeEnabled {
|
||||
darkModeButton.setImage(darkModeEnabledImage, for: .normal)
|
||||
} else {
|
||||
darkModeButton.setImage(darkModeDisabledImage, for: .normal)
|
||||
darkModeButton.setImage(DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled), for: .normal)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private let darkModeDisabledImage = UIImage(systemName: "moon.circle")
|
||||
private let darkModeEnabledImage = UIImage(systemName: "moon.circle.fill")
|
||||
|
||||
init() {
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
@@ -41,7 +45,7 @@ class ToolbarViewController: UIViewController
|
||||
toolbarView.urlBar = urlBar
|
||||
|
||||
// Dark mode button
|
||||
darkModeButton.setImage(darkModeDisabledImage, for: .normal)
|
||||
darkModeButton.setImage(DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled), for: .normal)
|
||||
|
||||
// Share button
|
||||
shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal)
|
||||
|
||||
Reference in New Issue
Block a user