Explorar o código

Move draw canvas tool buttons outside the canvas boundary.

Keep the tools panel beside the card so the drawing area fills the full bordered container.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 hai 1 mes
pai
achega
baec870e1a
Modificáronse 1 ficheiros con 16 adicións e 32 borrados
  1. 16 32
      smart_printer/DrawPrintView.swift

+ 16 - 32
smart_printer/DrawPrintView.swift

@@ -50,6 +50,9 @@ struct CanvasSnapshot {
 // MARK: - Overlay
 
 final class DrawPrintOverlayView: NSView, AppearanceRefreshable {
+    private static let toolsPanelWidth: CGFloat = 56
+    private static let toolsPanelGap: CGFloat = 12
+
     var onDismiss: (() -> Void)?
 
     private let backButton = DrawPrintToolbarButton(symbolName: "chevron.left", accessibilityLabel: "Back")
@@ -177,11 +180,11 @@ final class DrawPrintOverlayView: NSView, AppearanceRefreshable {
         }
 
         canvasContainer.addSubview(canvasView)
-        canvasContainer.addSubview(toolsPanel)
 
         addSubview(backButton)
         addSubview(titleLabel)
         addSubview(canvasContainer)
+        addSubview(toolsPanel)
         addSubview(printButton)
 
         NSLayoutConstraint.activate([
@@ -194,16 +197,19 @@ final class DrawPrintOverlayView: NSView, AppearanceRefreshable {
             titleLabel.centerYAnchor.constraint(equalTo: backButton.centerYAnchor),
 
             canvasContainer.leadingAnchor.constraint(equalTo: leadingAnchor, constant: AppTheme.contentPanelInset),
-            canvasContainer.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -AppTheme.contentPanelInset),
+            canvasContainer.trailingAnchor.constraint(
+                equalTo: trailingAnchor,
+                constant: -(AppTheme.contentPanelInset + Self.toolsPanelWidth + Self.toolsPanelGap)
+            ),
             canvasContainer.topAnchor.constraint(equalTo: backButton.bottomAnchor, constant: 28),
             canvasContainer.bottomAnchor.constraint(equalTo: printButton.topAnchor, constant: -28),
 
-            toolsPanel.trailingAnchor.constraint(equalTo: canvasContainer.trailingAnchor, constant: -8),
+            toolsPanel.leadingAnchor.constraint(equalTo: canvasContainer.trailingAnchor, constant: Self.toolsPanelGap),
             toolsPanel.centerYAnchor.constraint(equalTo: canvasContainer.centerYAnchor),
-            toolsPanel.widthAnchor.constraint(equalToConstant: 56),
+            toolsPanel.widthAnchor.constraint(equalToConstant: Self.toolsPanelWidth),
 
             canvasView.leadingAnchor.constraint(equalTo: canvasContainer.leadingAnchor),
-            canvasView.trailingAnchor.constraint(equalTo: toolsPanel.leadingAnchor, constant: -8),
+            canvasView.trailingAnchor.constraint(equalTo: canvasContainer.trailingAnchor),
             canvasView.topAnchor.constraint(equalTo: canvasContainer.topAnchor),
             canvasView.bottomAnchor.constraint(equalTo: canvasContainer.bottomAnchor),
 
@@ -289,7 +295,6 @@ final class BlankCanvasView: NSView, AppearanceRefreshable {
     private func setup() {
         wantsLayer = true
         layer?.cornerRadius = AppTheme.contentPanelCornerRadius
-        layer?.maskedCorners = [.layerMinXMinYCorner, .layerMinXMaxYCorner]
         layer?.masksToBounds = true
 
         undoButton.translatesAutoresizingMaskIntoConstraints = false
@@ -316,7 +321,11 @@ final class BlankCanvasView: NSView, AppearanceRefreshable {
 
     override func draw(_ dirtyRect: NSRect) {
         NSColor.white.setFill()
-        leftRoundedFillPath().fill()
+        NSBezierPath(
+            roundedRect: bounds,
+            xRadius: AppTheme.contentPanelCornerRadius,
+            yRadius: AppTheme.contentPanelCornerRadius
+        ).fill()
 
         let context = NSGraphicsContext.current?.cgContext
         for stroke in strokes {
@@ -332,31 +341,6 @@ 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?) {
         guard stroke.points.count > 1, let context else { return }
         context.saveGState()