[saver] DOES NOT BUILD, but I need to go to bed -_-
Quickly build a Swift version of a ScreenSaverView and throw some Metal at it. Having trouble getting the RendererDelegate protocol satisfied.
This commit is contained in:
parent
c226d7e72e
commit
b95dffd5a8
4 changed files with 117 additions and 2 deletions
97
MetaballsSaver/MetaballsSaverView.swift
Normal file
97
MetaballsSaver/MetaballsSaverView.swift
Normal file
|
@ -0,0 +1,97 @@
|
|||
//
|
||||
// MetaballsSaverView.swift
|
||||
// Metaballs
|
||||
//
|
||||
// Created by Eryn Wells on 8/16/17.
|
||||
// Copyright © 2017 Eryn Wells. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import MetaballsKit
|
||||
import MetalKit
|
||||
import ScreenSaver
|
||||
|
||||
class MetaballsSaverView: ScreenSaverView, RendererDelegate {
|
||||
private static func defaultParameters() -> Parameters {
|
||||
var p = Parameters()
|
||||
let defaults = UserDefaults.standard
|
||||
let style = defaults.colorStyle ?? .gradient2Horizontal
|
||||
p.colorStyle = style
|
||||
let color0 = defaults.color0 ?? Float4(0.50, 0.79, 1, 1)
|
||||
p.color0 = color0
|
||||
let color1 = defaults.color1 ?? Float4(0.88, 0.50, 1, 1)
|
||||
p.color1 = color1
|
||||
return p
|
||||
}
|
||||
|
||||
public var metalView: MTKView
|
||||
|
||||
public var field: Field {
|
||||
didSet {
|
||||
field.size = Size(size: metalView.drawableSize)
|
||||
}
|
||||
}
|
||||
|
||||
internal var renderer: RendererDelegate
|
||||
|
||||
override 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)")
|
||||
}
|
||||
|
||||
super.init(frame: frame, isPreview: isPreview)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
override func animateOneFrame() {
|
||||
|
||||
}
|
||||
|
||||
// MARK: - RendererDelegate
|
||||
|
||||
public var renderSize: Size {
|
||||
get {
|
||||
return field.size
|
||||
}
|
||||
set {
|
||||
field.size = newValue
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue