Wow, the screensaver runs!

This commit is contained in:
Eryn Wells 2018-10-05 20:07:03 -07:00
parent b3a1f353b7
commit 86c07ef4f5
2 changed files with 25 additions and 23 deletions

View file

@ -415,7 +415,7 @@
PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsSaver; PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsSaver;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 3.0; SWIFT_VERSION = 4.2;
WRAPPER_EXTENSION = saver; WRAPPER_EXTENSION = saver;
}; };
name = Debug; name = Debug;
@ -434,7 +434,7 @@
MACOSX_DEPLOYMENT_TARGET = 10.12; MACOSX_DEPLOYMENT_TARGET = 10.12;
PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsSaver; PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsSaver;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0; SWIFT_VERSION = 4.2;
WRAPPER_EXTENSION = saver; WRAPPER_EXTENSION = saver;
}; };
name = Release; name = Release;
@ -588,7 +588,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsTests; PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsTests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_SWIFT3_OBJC_INFERENCE = On; SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.2; SWIFT_VERSION = 4.2;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Metaballs.app/Contents/MacOS/Metaballs"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Metaballs.app/Contents/MacOS/Metaballs";
}; };
@ -605,7 +605,7 @@
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsTests; PRODUCT_BUNDLE_IDENTIFIER = me.erynwells.MetaballsTests;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_SWIFT3_OBJC_INFERENCE = On; SWIFT_SWIFT3_OBJC_INFERENCE = Default;
SWIFT_VERSION = 4.2; SWIFT_VERSION = 4.2;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Metaballs.app/Contents/MacOS/Metaballs"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Metaballs.app/Contents/MacOS/Metaballs";
}; };

View file

@ -10,7 +10,7 @@ import Foundation
import MetalKit import MetalKit
import ScreenSaver import ScreenSaver
public class MetaballsSaverView: ScreenSaverView, RendererDelegate { @objc public class MetaballsSaverView: ScreenSaverView, RendererDelegate {
private static func defaultParameters() -> Parameters { private static func defaultParameters() -> Parameters {
var p = Parameters() var p = Parameters()
let defaults = UserDefaults.standard let defaults = UserDefaults.standard
@ -35,24 +35,18 @@ public class MetaballsSaverView: ScreenSaverView, RendererDelegate {
override public init?(frame: NSRect, isPreview: Bool) { override public init?(frame: NSRect, isPreview: Bool) {
let params = MetaballsSaverView.defaultParameters() let params = MetaballsSaverView.defaultParameters()
metalView = MetalView()
field = Field(parameters: params) field = Field(parameters: params)
field.size = Size(size: frame.size) field.size = Size(size: frame.size)
metalView = MetalView()
metalView.isPaused = true // Don't use the Metal View's internal timer.
metalView.translatesAutoresizingMaskIntoConstraints = false
renderer = Renderer() renderer = Renderer()
metalView.delegate = renderer
super.init(frame: frame, isPreview: isPreview) super.init(frame: frame, isPreview: isPreview)
animationTimeInterval = 1 / 30.0
}
required public init?(coder: NSCoder) {
fatalError("initWithCoder: not implemented")
}
override public func startAnimation() {
if metalView.superview == nil {
metalView.isPaused = true // Don't use the Metal View's internal timer.
metalView.translatesAutoresizingMaskIntoConstraints = false
addSubview(metalView) addSubview(metalView)
NSLayoutConstraint.activate([ NSLayoutConstraint.activate([
metalView.topAnchor.constraint(equalTo: topAnchor), metalView.topAnchor.constraint(equalTo: topAnchor),
@ -60,13 +54,21 @@ public class MetaballsSaverView: ScreenSaverView, RendererDelegate {
metalView.bottomAnchor.constraint(equalTo: bottomAnchor), metalView.bottomAnchor.constraint(equalTo: bottomAnchor),
metalView.rightAnchor.constraint(equalTo: rightAnchor), metalView.rightAnchor.constraint(equalTo: rightAnchor),
]) ])
renderer.delegate = self renderer.delegate = self
animationTimeInterval = 1 / 30.0
metalView.preferredFramesPerSecond = 30
} }
required public init?(coder: NSCoder) {
fatalError("initWithCoder: not implemented")
}
override public func startAnimation() {
for _ in 1...10 { for _ in 1...10 {
addBallWithRandomRadius() addBallWithRandomRadius()
} }
super.startAnimation() super.startAnimation()
} }
@ -79,14 +81,14 @@ public class MetaballsSaverView: ScreenSaverView, RendererDelegate {
} }
override public func draw(_ rect: NSRect) { override public func draw(_ rect: NSRect) {
super.draw(rect) metalView.draw()
} }
override public func hasConfigureSheet() -> Bool { override public var hasConfigureSheet: Bool {
return true return true
} }
override public func configureSheet() -> NSWindow? { override public var configureSheet: NSWindow? {
let prefs = PreferencesViewController() let prefs = PreferencesViewController()
prefs.showsCloseButton = true prefs.showsCloseButton = true
let window = NSWindow(contentViewController: prefs) let window = NSWindow(contentViewController: prefs)