[saver] Make MetaballsSaverView public; finish implementation
This commit is contained in:
parent
6b663f92e8
commit
eb2ea7387d
1 changed files with 35 additions and 40 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue