mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-03-21 17:09:21 +01:00
refactor: clean up
This commit is contained in:
@@ -19,7 +19,7 @@ final class Canvas: ObservableObject, Identifiable, @unchecked Sendable {
|
||||
let viewPortContext = ViewPortContext()
|
||||
|
||||
let maximumZoomScale: CGFloat = 35
|
||||
let minimumZoomScale: CGFloat = 5
|
||||
let minimumZoomScale: CGFloat = 8
|
||||
let defaultZoomScale: CGFloat = 20
|
||||
|
||||
var transform: simd_float4x4 = .init()
|
||||
|
||||
@@ -45,7 +45,11 @@ enum Element: Equatable, Comparable {
|
||||
switch self {
|
||||
case .stroke(let anyStroke):
|
||||
switch anyStroke.value.style {
|
||||
case .marker: return .stroke
|
||||
case .marker:
|
||||
guard let penStroke = anyStroke.stroke(as: PenStroke.self) else {
|
||||
return .stroke(penStyle: .marker, color: [0, 0, 0, 0])
|
||||
}
|
||||
return .stroke(penStyle: penStroke.penStyle, color: penStroke.color)
|
||||
case .eraser: return .eraser
|
||||
}
|
||||
case .photo:
|
||||
|
||||
@@ -28,15 +28,15 @@ class ElementGroup {
|
||||
}
|
||||
|
||||
func getPenStyle() -> PenStyle? {
|
||||
if let last = elements.last, case let .stroke(anyStroke) = last {
|
||||
return anyStroke.value.penStyle
|
||||
if case let .stroke(penStyle, _) = type {
|
||||
return penStyle
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getPenColor() -> [CGFloat]? {
|
||||
if let last = elements.last, case let .stroke(anyStroke) = last {
|
||||
return anyStroke.value.color
|
||||
if case let .stroke(_, color) = type {
|
||||
return color
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -44,7 +44,7 @@ class ElementGroup {
|
||||
|
||||
extension ElementGroup {
|
||||
enum ElementGroupType {
|
||||
case stroke
|
||||
case stroke(penStyle: PenStyle, color: [CGFloat])
|
||||
case eraser
|
||||
case photo
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
import MetalKit
|
||||
import Foundation
|
||||
|
||||
protocol Stroke: AnyObject, Drawable, Hashable, Equatable {
|
||||
protocol Stroke: AnyObject, Hashable, Equatable {
|
||||
var id: UUID { get set }
|
||||
var bounds: [CGFloat] { get set }
|
||||
var color: [CGFloat] { get set }
|
||||
@@ -80,31 +80,6 @@ extension Stroke {
|
||||
}
|
||||
}
|
||||
|
||||
extension Stroke {
|
||||
func prepare(device: MTLDevice) {
|
||||
guard texture == nil else { return }
|
||||
if penStyle.textureName != nil {
|
||||
texture = penStyle.loadTexture(on: device)
|
||||
}
|
||||
}
|
||||
|
||||
func draw(device: MTLDevice, renderEncoder: MTLRenderCommandEncoder) {
|
||||
guard !isEmpty, let indexBuffer else { return }
|
||||
prepare(device: device)
|
||||
if penStyle.textureName != nil {
|
||||
renderEncoder.setFragmentTexture(texture, index: 0)
|
||||
}
|
||||
renderEncoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
|
||||
renderEncoder.drawIndexedPrimitives(
|
||||
type: .triangle,
|
||||
indexCount: quads.endIndex * 6,
|
||||
indexType: .uint32,
|
||||
indexBuffer: indexBuffer,
|
||||
indexBufferOffset: 0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension Stroke {
|
||||
static func == (lhs: Self, rhs: Self) -> Bool {
|
||||
lhs.id == rhs.id
|
||||
|
||||
@@ -152,20 +152,4 @@ final class PenStroke: Stroke, @unchecked Sendable {
|
||||
func getAllErasedQuads() -> [Quad] {
|
||||
eraserStrokes.flatMap { $0.quads }
|
||||
}
|
||||
|
||||
func erase(device: MTLDevice, renderEncoder: MTLRenderCommandEncoder) {
|
||||
guard !isEmptyErasedQuads, let erasedIndexBuffer else {
|
||||
return
|
||||
}
|
||||
prepare(device: device)
|
||||
renderEncoder.setFragmentTexture(texture, index: 0)
|
||||
renderEncoder.setVertexBuffer(erasedVertexBuffer, offset: 0, index: 0)
|
||||
renderEncoder.drawIndexedPrimitives(
|
||||
type: .triangle,
|
||||
indexCount: erasedQuadCount * 6,
|
||||
indexType: .uint32,
|
||||
indexBuffer: erasedIndexBuffer,
|
||||
indexBufferOffset: 0
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ class DrawingView: UIView {
|
||||
}
|
||||
|
||||
func updateDrawableSize(with size: CGSize) {
|
||||
renderView.drawableSize = size.multiply(by: 2.6)
|
||||
renderView.drawableSize = size.multiply(by: 2)
|
||||
}
|
||||
|
||||
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
|
||||
|
||||
Reference in New Issue
Block a user