diff --git a/Shared/Database.swift b/Shared/Database.swift index 3b54b52..cd90098 100644 --- a/Shared/Database.swift +++ b/Shared/Database.swift @@ -13,12 +13,14 @@ import SpriteKit extension SKColor { static let defaultHandColor = SKColor(hue: 0, saturation: 0, brightness: 0.90, alpha: 1) static let defaultDialColor = SKColor(hue: 0, saturation: 0, brightness: 0.05, alpha: 1) + static let defaultBackgroundColor = SKColor(hue: 0, saturation: 0, brightness: 0, alpha: 1) } struct Database { fileprivate enum Key { static let handColor = "multiClockHandColor" static let dialColor = "multiClockDialColor" + static let backgroundColor = "multiClockBackgroundColor" static let handDesign = "multiClockHandDesign" static let dialDesign = "multiClockDialDesign" } @@ -32,6 +34,7 @@ struct Database { database.register(defaults: [ Key.handColor: archiveData(SKColor.defaultHandColor), Key.dialColor: archiveData(SKColor.defaultDialColor), + Key.backgroundColor: archiveData(SKColor.defaultBackgroundColor), Key.dialDesign: DialDesign.ringThin.rawValue, Key.handDesign: HandDesign.modern.rawValue ]) @@ -52,6 +55,10 @@ extension UserDefaults { return unarchiveColor(data(forKey: Database.Key.dialColor)!) } + var backgroundColor: SKColor { + return unarchiveColor(data(forKey: Database.Key.backgroundColor)!) + } + var handDesign: HandDesign { return HandDesign(rawValue: string(forKey: Database.Key.handDesign)!) ?? .modern } @@ -70,6 +77,10 @@ extension UserDefaults { set(archiveData(dialColor), for: Database.Key.dialColor) } + func set(backgroundColor: SKColor) { + set(archiveData(backgroundColor), for: Database.Key.backgroundColor) + } + func set(handDesign: HandDesign) { set(handDesign.rawValue, for: Database.Key.handDesign) } diff --git a/Shared/Manager.swift b/Shared/Manager.swift index 6026888..e8f25b8 100644 --- a/Shared/Manager.swift +++ b/Shared/Manager.swift @@ -19,12 +19,14 @@ final class Manager { private(set) var handColor: SKColor private(set) var dialColor: SKColor + private(set) var backgroundColor: SKColor private(set) var handDesign: HandDesign private(set) var dialDesign: DialDesign init() { handColor = Database.standard.handColor dialColor = Database.standard.dialColor + backgroundColor = Database.standard.backgroundColor handDesign = Database.standard.handDesign dialDesign = Database.standard.dialDesign } @@ -41,6 +43,11 @@ final class Manager { delegate?.updatedSettings() } + func setBackgroundColor(_ color: SKColor) { + Database.standard.set(backgroundColor: color) + delegate?.updatedSettings() + } + func setHandDesign(_ handDesign: HandDesign) { Database.standard.set(handDesign: handDesign) delegate?.updatedSettings() diff --git a/Shared/Scene/ClockScene.swift b/Shared/Scene/ClockScene.swift index f6135f1..7119365 100644 --- a/Shared/Scene/ClockScene.swift +++ b/Shared/Scene/ClockScene.swift @@ -17,7 +17,7 @@ class ClockScene: SKScene, ManagerDelegate { private var backgroundNode: SKShapeNode? override func sceneDidLoad() { - backgroundColor = .black + backgroundColor = Database.standard.backgroundColor controller = ClockController(size: frame.size) controller?.scene = self diff --git a/macOS Screensaver/ConfigureSheet/ClockPreviewScene.swift b/macOS Screensaver/ConfigureSheet/ClockPreviewScene.swift index bfcd2d3..b5aee38 100644 --- a/macOS Screensaver/ConfigureSheet/ClockPreviewScene.swift +++ b/macOS Screensaver/ConfigureSheet/ClockPreviewScene.swift @@ -12,17 +12,17 @@ import SpriteKit class ClockPreviewScene: SKScene, ManagerDelegate { - let clockNode = ClockNode(size: CGSize(width: 150, height: 150)) + let clockNode = ClockNode(size: CGSize(width: 240, height: 240)) override func sceneDidLoad() { - backgroundColor = .black + backgroundColor = Database.standard.backgroundColor clockNode.minuteHandNode.color = Database.standard.handColor clockNode.hourHandNode.color = Database.standard.handColor addChild(clockNode) - clockNode.position = CGPoint(x: 75, y: 75) + clockNode.position = CGPoint(x: 120, y: 120) let rotation: CGFloat = -360 clockNode.minuteHandNode.run(SKAction.repeatForever( @@ -38,6 +38,8 @@ class ClockPreviewScene: SKScene, ManagerDelegate { clockNode.hourHandNode.color = Database.standard.handColor clockNode.clockFaceNode.color = Database.standard.dialColor + backgroundColor = Database.standard.backgroundColor + clockNode.minuteHandNode.texture = handTextures[Database.standard.handDesign]?.minuteHandTexture clockNode.hourHandNode.texture = handTextures[Database.standard.handDesign]?.hourHandTexture diff --git a/macOS Screensaver/ConfigureSheet/ConfigureSheet.xib b/macOS Screensaver/ConfigureSheet/ConfigureSheet.xib index 74c7640..0029872 100644 --- a/macOS Screensaver/ConfigureSheet/ConfigureSheet.xib +++ b/macOS Screensaver/ConfigureSheet/ConfigureSheet.xib @@ -1,12 +1,14 @@ + + @@ -17,17 +19,17 @@ - + - + - + - + @@ -48,7 +50,7 @@ DQ - + - + - + @@ -84,7 +86,7 @@ DQ - + @@ -139,7 +141,7 @@ DQ - + @@ -193,7 +195,7 @@ DQ - + @@ -231,33 +233,61 @@ DQ - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - + @@ -268,16 +298,18 @@ DQ - - + + + + @@ -290,11 +322,13 @@ DQ - + + + @@ -302,19 +336,23 @@ DQ + + + + - + diff --git a/macOS Screensaver/ConfigureSheet/ConfigureSheetController.swift b/macOS Screensaver/ConfigureSheet/ConfigureSheetController.swift index 642f477..c45b789 100644 --- a/macOS Screensaver/ConfigureSheet/ConfigureSheetController.swift +++ b/macOS Screensaver/ConfigureSheet/ConfigureSheetController.swift @@ -93,6 +93,17 @@ final class ConfigureSheetController: NSObject { } } + @IBOutlet weak var backgroundColorWell: NSColorWell! + + @IBAction func backgroundColorWellAction(_ sender: NSColorWell) { + let color = sender.color as NSColor + // Ensure color is in the right colorspace + if let normalizedCGColor = color.cgColor.converted(to: CGColorSpaceCreateDeviceRGB(), intent: .defaultIntent, options: nil), + let normalizedSKColor = SKColor(cgColor: normalizedCGColor) { + manager.setBackgroundColor(normalizedSKColor) + } + } + // MARK: - View Setup override init() { @@ -112,6 +123,7 @@ final class ConfigureSheetController: NSObject { fileprivate func loadSettings() { handColorWell.color = manager.handColor dialColorWell.color = manager.dialColor + backgroundColorWell.color = manager.backgroundColor switch manager.dialDesign { case .ringThin: diff --git a/macOS/ViewController.swift b/macOS/ViewController.swift index 1d67c47..8f3e662 100644 --- a/macOS/ViewController.swift +++ b/macOS/ViewController.swift @@ -22,7 +22,7 @@ class ViewController: NSViewController { if let view = self.skView { let scene = ClockScene(size: view.frame.size) view.presentScene(scene) - scene.controller?.mode = .manual + scene.controller?.mode = .automatic scene.controller?.start() } }