[saver] Make MetaballsSaverView public; finish implementation

This commit is contained in:
Eryn Wells 2017-08-18 09:03:33 -07:00
parent 6b663f92e8
commit eb2ea7387d

View file

@ -11,7 +11,7 @@ import MetaballsKit
import MetalKit import MetalKit
import ScreenSaver import ScreenSaver
class MetaballsSaverView: ScreenSaverView, RendererDelegate { 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
@ -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() let params = MetaballsSaverView.defaultParameters()
field = Field(parameters: params) field = Field(parameters: params)
metalView = MTKView() metalView = MTKView()
metalView.translatesAutoresizingMaskIntoConstraints = false renderer = Renderer()
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(frame: frame, isPreview: isPreview) super.init(frame: frame, isPreview: isPreview)
animationTimeInterval = 1 / 30.0
} }
required init?(coder: NSCoder) { required public init?(coder: NSCoder) {
let params = MetaballsSaverView.defaultParameters() fatalError("initWithCoder: not implemented")
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)
} }
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 // MARK: - RendererDelegate