diff --git a/Metaballs.xcodeproj/project.pbxproj b/Metaballs.xcodeproj/project.pbxproj index 86b4b1d..e088bf5 100644 --- a/Metaballs.xcodeproj/project.pbxproj +++ b/Metaballs.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ C03904B31F43CF3F00C74022 /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C03904B11F43CF3700C74022 /* PreferencesWindowController.swift */; }; C09161701F3F5AE6009C4263 /* PreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C091616F1F3F5AE6009C4263 /* PreferencesViewController.swift */; }; + C0B906D51F45432700B5F89B /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B906D41F45432700B5F89B /* Preferences.swift */; }; C0BBE36B1F2E816500E68524 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0BBE36A1F2E816500E68524 /* AppDelegate.swift */; }; C0BBE36D1F2E816500E68524 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0BBE36C1F2E816500E68524 /* ViewController.swift */; }; C0BBE36F1F2E816500E68524 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C0BBE36E1F2E816500E68524 /* Assets.xcassets */; }; @@ -47,6 +48,7 @@ /* Begin PBXFileReference section */ C03904B11F43CF3700C74022 /* PreferencesWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesWindowController.swift; sourceTree = ""; }; C091616F1F3F5AE6009C4263 /* PreferencesViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesViewController.swift; sourceTree = ""; }; + C0B906D41F45432700B5F89B /* Preferences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = ""; }; C0BBE3671F2E816500E68524 /* Metaballs.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Metaballs.app; sourceTree = BUILT_PRODUCTS_DIR; }; C0BBE36A1F2E816500E68524 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; C0BBE36C1F2E816500E68524 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; @@ -160,8 +162,9 @@ C0BBE3A31F2E81C700E68524 /* Metaballs.swift */, C0CE7BFF1F362C3F001516B6 /* Geometry.swift */, C0DF1D781F3789DC0038B0A0 /* Memory.swift */, - C03904B11F43CF3700C74022 /* PreferencesWindowController.swift */, + C0B906D41F45432700B5F89B /* Preferences.swift */, C091616F1F3F5AE6009C4263 /* PreferencesViewController.swift */, + C03904B11F43CF3700C74022 /* PreferencesWindowController.swift */, ); path = MetaballsKit; sourceTree = ""; @@ -382,6 +385,7 @@ files = ( C03904B31F43CF3F00C74022 /* PreferencesWindowController.swift in Sources */, C0DF1D791F3789DC0038B0A0 /* Memory.swift in Sources */, + C0B906D51F45432700B5F89B /* Preferences.swift in Sources */, C0BBE3A41F2E81C700E68524 /* Metaballs.swift in Sources */, C0CE7C001F362C3F001516B6 /* Geometry.swift in Sources */, C09161701F3F5AE6009C4263 /* PreferencesViewController.swift in Sources */, diff --git a/MetaballsKit/Preferences.swift b/MetaballsKit/Preferences.swift index e1536d6..439af3d 100644 --- a/MetaballsKit/Preferences.swift +++ b/MetaballsKit/Preferences.swift @@ -8,8 +8,51 @@ import Cocoa -class PreferencesWindowController: NSWindowController { - override func prepare(for segue: NSStoryboardSegue, sender: Any?) { - print("prepare for segue:\(segue), sender:\(String(describing: sender))") +extension UserDefaults { + var color0: Float4? { + get { + return float4(forKey: "color0") + } + set { + set(newValue, forKey: "color0") + } + } + + var color1: Float4? { + get { + return float4(forKey: "color1") + } + set { + set(newValue, forKey: "color1") + } + } + + var color2: Float4? { + get { + return float4(forKey: "color2") + } + set { + set(newValue, forKey: "color2") + } + } + + var color3: Float4? { + get { + return float4(forKey: "color3") + } + set { + set(newValue, forKey: "color3") + } + } + + func float4(forKey key: String) -> Float4? { + guard let values = array(forKey: key) as? [Float], values.count >= 4 else { + return nil + } + return Float4(values[0], values[1], values[2], values[3]) + } + + func set(value: Float4, forKey key: String) { + set([Float](float4: value), forKey: key) } }