Sfoglia il codice sorgente

Fix drawing canvas corner artifacts at rounded panel edges.

Clip and round the blank canvas fill on the left side so white no longer bleeds past the panel border.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 mese fa
parent
commit
d03f596857
1 ha cambiato i file con 29 aggiunte e 2 eliminazioni
  1. 29 2
      smart_printer/DrawPrintView.swift

+ 29 - 2
smart_printer/DrawPrintView.swift

@@ -135,7 +135,6 @@ final class DrawPrintOverlayView: NSView, AppearanceRefreshable {
         canvasContainer.wantsLayer = true
         canvasContainer.wantsLayer = true
         canvasContainer.layer?.cornerRadius = AppTheme.contentPanelCornerRadius
         canvasContainer.layer?.cornerRadius = AppTheme.contentPanelCornerRadius
         canvasContainer.layer?.borderWidth = 1.5
         canvasContainer.layer?.borderWidth = 1.5
-        canvasContainer.clipsToBounds = false
         canvasContainer.applyCardShadow()
         canvasContainer.applyCardShadow()
         canvasContainer.translatesAutoresizingMaskIntoConstraints = false
         canvasContainer.translatesAutoresizingMaskIntoConstraints = false
 
 
@@ -289,6 +288,9 @@ final class BlankCanvasView: NSView, AppearanceRefreshable {
 
 
     private func setup() {
     private func setup() {
         wantsLayer = true
         wantsLayer = true
+        layer?.cornerRadius = AppTheme.contentPanelCornerRadius
+        layer?.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]
+        layer?.masksToBounds = true
 
 
         undoButton.translatesAutoresizingMaskIntoConstraints = false
         undoButton.translatesAutoresizingMaskIntoConstraints = false
         redoButton.translatesAutoresizingMaskIntoConstraints = false
         redoButton.translatesAutoresizingMaskIntoConstraints = false
@@ -314,7 +316,7 @@ final class BlankCanvasView: NSView, AppearanceRefreshable {
 
 
     override func draw(_ dirtyRect: NSRect) {
     override func draw(_ dirtyRect: NSRect) {
         NSColor.white.setFill()
         NSColor.white.setFill()
-        bounds.fill()
+        leftRoundedFillPath().fill()
 
 
         let context = NSGraphicsContext.current?.cgContext
         let context = NSGraphicsContext.current?.cgContext
         for stroke in strokes {
         for stroke in strokes {
@@ -330,6 +332,31 @@ final class BlankCanvasView: NSView, AppearanceRefreshable {
         }
         }
     }
     }
 
 
+    private func leftRoundedFillPath() -> NSBezierPath {
+        let radius = AppTheme.contentPanelCornerRadius
+        let rect = bounds
+        let path = NSBezierPath()
+        path.move(to: NSPoint(x: rect.minX + radius, y: rect.maxY))
+        path.line(to: NSPoint(x: rect.maxX, y: rect.maxY))
+        path.line(to: NSPoint(x: rect.maxX, y: rect.minY))
+        path.line(to: NSPoint(x: rect.minX + radius, y: rect.minY))
+        path.appendArc(
+            withCenter: NSPoint(x: rect.minX + radius, y: rect.minY + radius),
+            radius: radius,
+            startAngle: 180,
+            endAngle: 270
+        )
+        path.line(to: NSPoint(x: rect.minX, y: rect.maxY - radius))
+        path.appendArc(
+            withCenter: NSPoint(x: rect.minX + radius, y: rect.maxY - radius),
+            radius: radius,
+            startAngle: 90,
+            endAngle: 180
+        )
+        path.close()
+        return path
+    }
+
     private func drawStroke(_ stroke: CanvasStroke, in context: CGContext?) {
     private func drawStroke(_ stroke: CanvasStroke, in context: CGContext?) {
         guard stroke.points.count > 1, let context else { return }
         guard stroke.points.count > 1, let context else { return }
         context.saveGState()
         context.saveGState()