mirror of
https://github.com/dscyrescotti/Memola.git
synced 2026-07-08 05:45:17 +02:00
feat: enhance vertex loading
This commit is contained in:
@@ -11,7 +11,7 @@ import CoreData
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
@objc(GraphicContext)
|
@objc(GraphicContext)
|
||||||
class GraphicContext: NSManagedObject {
|
final class GraphicContext: NSManagedObject {
|
||||||
@NSManaged var id: UUID
|
@NSManaged var id: UUID
|
||||||
@NSManaged var canvas: Canvas?
|
@NSManaged var canvas: Canvas?
|
||||||
@NSManaged var strokes: NSMutableOrderedSet
|
@NSManaged var strokes: NSMutableOrderedSet
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import MetalKit
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
@objc(Canvas)
|
@objc(Canvas)
|
||||||
class Canvas: NSManagedObject, Identifiable {
|
final class Canvas: NSManagedObject, Identifiable {
|
||||||
@NSManaged var id: UUID
|
@NSManaged var id: UUID
|
||||||
@NSManaged var width: CGFloat
|
@NSManaged var width: CGFloat
|
||||||
@NSManaged var height: CGFloat
|
@NSManaged var height: CGFloat
|
||||||
@@ -43,11 +43,23 @@ class Canvas: NSManagedObject, Identifiable {
|
|||||||
extension Canvas {
|
extension Canvas {
|
||||||
func load() {
|
func load() {
|
||||||
state = .loading
|
state = .loading
|
||||||
graphicContext.strokes.forEach { stroke in
|
let start = Date().formatted(.dateTime.minute().second().secondFraction(.fractional(5)))
|
||||||
guard let stroke = stroke as? Stroke else { return }
|
Task(priority: .high) { [start] in
|
||||||
stroke.loadVertices()
|
await withTaskGroup(of: Void.self) { taskGroup in
|
||||||
|
for stroke in graphicContext.strokes {
|
||||||
|
guard let stroke = stroke as? Stroke else { continue }
|
||||||
|
taskGroup.addTask {
|
||||||
|
stroke.loadVertices()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let end = Date().formatted(.dateTime.minute().second().secondFraction(.fractional(5)))
|
||||||
|
NSLog("[Memola] - Loaded from \(start) to \(end)")
|
||||||
|
await MainActor.run {
|
||||||
|
state = .loaded
|
||||||
|
}
|
||||||
}
|
}
|
||||||
state = .loaded
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ struct Quad: Codable {
|
|||||||
self.shape = shape
|
self.shape = shape
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateVertices(_ shape: QuadShape) -> [QuadVertex] {
|
func generateVertices() -> [QuadVertex] {
|
||||||
switch shape {
|
switch shape {
|
||||||
case .rounded:
|
case .rounded:
|
||||||
generateRoundedQuad()
|
generateRoundedQuad()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import MetalKit
|
import MetalKit
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
class StrokeQuad: NSObject, Codable {
|
final class StrokeQuad: NSObject, Codable {
|
||||||
var quad: Quad
|
var quad: Quad
|
||||||
|
|
||||||
init(quad: Quad) {
|
init(quad: Quad) {
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ struct SolidPointStrokeGenerator: StrokeGenerator {
|
|||||||
}
|
}
|
||||||
let quad = Quad(origin: point, size: stroke.thickness, color: stroke.color, rotation: rotation)
|
let quad = Quad(origin: point, size: stroke.thickness, color: stroke.color, rotation: rotation)
|
||||||
stroke._quads.append(quad)
|
stroke._quads.append(quad)
|
||||||
stroke.vertices.append(contentsOf: quad.generateVertices(quad.shape))
|
stroke.vertices.append(contentsOf: quad.generateVertices())
|
||||||
stroke.vertexCount = stroke.vertices.endIndex
|
stroke.vertexCount = stroke.vertices.endIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ struct SolidPointStrokeGenerator: StrokeGenerator {
|
|||||||
let factor: CGFloat
|
let factor: CGFloat
|
||||||
switch configuration.granularity {
|
switch configuration.granularity {
|
||||||
case .automatic:
|
case .automatic:
|
||||||
factor = min(3.5, 1 / (stroke.thickness * 10 / 300))
|
factor = min(3.5, 1 / (stroke.thickness * 1 / 10))
|
||||||
case .fixed:
|
case .fixed:
|
||||||
factor = 1 / (stroke.thickness * stroke.penStyle.anyPenStyle.stepRate)
|
factor = 1 / (stroke.thickness * stroke.penStyle.anyPenStyle.stepRate)
|
||||||
case .none:
|
case .none:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import CoreData
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
@objc(Stroke)
|
@objc(Stroke)
|
||||||
class Stroke: NSManagedObject {
|
final class Stroke: NSManagedObject {
|
||||||
@NSManaged var id: UUID
|
@NSManaged var id: UUID
|
||||||
@NSManaged var color: [CGFloat]
|
@NSManaged var color: [CGFloat]
|
||||||
@NSManaged var style: Int16
|
@NSManaged var style: Int16
|
||||||
@@ -56,11 +56,12 @@ class Stroke: NSManagedObject {
|
|||||||
func finish(at point: CGPoint) {
|
func finish(at point: CGPoint) {
|
||||||
penStyle.anyPenStyle.generator.finish(at: point, on: self)
|
penStyle.anyPenStyle.generator.finish(at: point, on: self)
|
||||||
keyPoints.removeAll()
|
keyPoints.removeAll()
|
||||||
|
NSLog("[Memola] - \(_quads.count) quads")
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadVertices() {
|
func loadVertices() {
|
||||||
vertices = strokeQuads
|
vertices = strokeQuads
|
||||||
.flatMap { $0.quad.generateVertices($0.quad.shape) }
|
.flatMap { $0.quad.generateVertices() }
|
||||||
vertexCount = vertices.endIndex
|
vertexCount = vertices.endIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,11 @@ class CanvasViewController: UIViewController {
|
|||||||
renderView.draw()
|
renderView.draw()
|
||||||
drawingView.enableUserInteraction()
|
drawingView.enableUserInteraction()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func viewDidDisappear(_ animated: Bool) {
|
||||||
|
super.viewDidDisappear(animated)
|
||||||
|
Persistence.shared.viewContext.refresh(canvas, mergeChanges: false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension CanvasViewController {
|
extension CanvasViewController {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import CoreData
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
@objc(Memo)
|
@objc(Memo)
|
||||||
class Memo: NSManagedObject {
|
final class Memo: NSManagedObject {
|
||||||
@NSManaged var id: UUID
|
@NSManaged var id: UUID
|
||||||
@NSManaged var title: String
|
@NSManaged var title: String
|
||||||
@NSManaged var data: Data
|
@NSManaged var data: Data
|
||||||
|
|||||||
@@ -31,9 +31,6 @@ struct MemosView: View {
|
|||||||
}
|
}
|
||||||
.fullScreenCover(item: $memo) { memo in
|
.fullScreenCover(item: $memo) { memo in
|
||||||
MemoView(canvas: memo.canvas)
|
MemoView(canvas: memo.canvas)
|
||||||
.onDisappear {
|
|
||||||
managedObjectContext.refreshAllObjects()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user