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