|
|
@@ -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()
|