From eb2ea7387dadc8c3c0a91a5de8069e9d78c0ee64 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Fri, 18 Aug 2017 09:03:33 -0700 Subject: [PATCH] [saver] Make MetaballsSaverView public; finish implementation --- MetaballsSaver/MetaballsSaverView.swift | 75 ++++++++++++------------- 1 file changed, 35 insertions(+), 40 deletions(-) diff --git a/MetaballsSaver/MetaballsSaverView.swift b/MetaballsSaver/MetaballsSaverView.swift index 2ba7537..962caa5 100644 --- a/MetaballsSaver/MetaballsSaverView.swift +++ b/MetaballsSaver/MetaballsSaverView.swift @@ -11,7 +11,7 @@ import MetaballsKit import MetalKit import ScreenSaver -class MetaballsSaverView: ScreenSaverView, RendererDelegate { +public class MetaballsSaverView: ScreenSaverView, RendererDelegate { private static func defaultParameters() -> Parameters { var p = Parameters() let defaults = UserDefaults.standard @@ -32,56 +32,51 @@ class MetaballsSaverView: ScreenSaverView, RendererDelegate { } } - internal var renderer: RendererDelegate + internal var renderer: Renderer - override init?(frame: NSRect, isPreview: Bool) { + override public init?(frame: NSRect, isPreview: Bool) { let params = MetaballsSaverView.defaultParameters() field = Field(parameters: params) - metalView = MTKView() - metalView.translatesAutoresizingMaskIntoConstraints = false - addSubview(metalView) - NSLayoutConstraint.activate([ - metalView.topAnchor.constraint(equalTo: topAnchor), - metalView.leftAnchor.constraint(equalTo: leftAnchor), - metalView.bottomAnchor.constraint(equalTo: bottomAnchor), - metalView.rightAnchor.constraint(equalTo: rightAnchor), - ]) - - do { - renderer = try Renderer(delegate: self) - } catch let e { - fatalError("\(e)") - } + renderer = Renderer() super.init(frame: frame, isPreview: isPreview) + + animationTimeInterval = 1 / 30.0 } - required init?(coder: NSCoder) { - let params = MetaballsSaverView.defaultParameters() - field = Field(parameters: params) - - metalView = MTKView() - metalView.translatesAutoresizingMaskIntoConstraints = false - addSubview(metalView) - NSLayoutConstraint.activate([ - metalView.topAnchor.constraint(equalTo: topAnchor), - metalView.leftAnchor.constraint(equalTo: leftAnchor), - metalView.bottomAnchor.constraint(equalTo: bottomAnchor), - metalView.rightAnchor.constraint(equalTo: rightAnchor), - ]) - - do { - renderer = try Renderer(delegate: self) - } catch let e { - fatalError("\(e)") - } - - super.init(coder: coder) + required public init?(coder: NSCoder) { + fatalError("initWithCoder: not implemented") } - override func animateOneFrame() { + 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) + NSLayoutConstraint.activate([ + metalView.topAnchor.constraint(equalTo: topAnchor), + metalView.leftAnchor.constraint(equalTo: leftAnchor), + metalView.bottomAnchor.constraint(equalTo: bottomAnchor), + metalView.rightAnchor.constraint(equalTo: rightAnchor), + ]) + renderer.delegate = self + } + super.startAnimation() + } + override public func animateOneFrame() { + metalView.draw() + } + + override public func hasConfigureSheet() -> Bool { + return true + } + + override public func configureSheet() -> NSWindow? { + let preferencesViewController = PreferencesViewController() + let window = NSWindow(contentViewController: preferencesViewController) + return window } // MARK: - RendererDelegate