From 1ab4c071be58033d5452f69797ca8e2c32240cff Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 15 Sep 2026 16:28:57 -0300 Subject: Separate tag text geometry from physical pane grips --- src/macos/Sources/PardesView.swift | 77 ++++++++++++++++++++++++++++++++++---- src/macos/pardes.h | 3 ++ 2 files changed, 72 insertions(+), 8 deletions(-) (limited to 'src/macos') diff --git a/src/macos/Sources/PardesView.swift b/src/macos/Sources/PardesView.swift index 2d43cc38..0b16458e 100644 --- a/src/macos/Sources/PardesView.swift +++ b/src/macos/Sources/PardesView.swift @@ -911,6 +911,7 @@ final class PardesView: NSView { if !animatedPanels { presentedImages = frameImages presentedBodyLayers = snapshotBodyLayers() + presentedTagLayers = snapshotTagLayers() } presentationSerial &+= 1 let animationWoke = pardes_frame_presented(animatedPanels) @@ -1167,7 +1168,13 @@ final class PardesView: NSView { } if frozenImages == nil { drawBodyLayers(ctx, hideCursor:hideCursor) + drawTagLayers(ctx, hideCursor:hideCursor) } else { + for layer in presentedTagLayers { + layer.cells.withUnsafeBufferPointer { cells in + if let base = cells.baseAddress { drawTagLayer(ctx, values:layer.values, cells:base, hideCursor:true) } + } + } for layer in presentedBodyLayers { layer.cells.withUnsafeBufferPointer { cells in if let base = cells.baseAddress { drawBodyLayer(ctx, values:layer.values, cells:base, hideCursor:true) } @@ -1176,6 +1183,67 @@ final class PardesView: NSView { } } + private var presentedTagLayers: [FrozenBodyLayer] = [] + + private func snapshotTagLayers() -> [FrozenBodyLayer] { + var result: [FrozenBodyLayer] = [] + for index in 0.., hideCursor: Bool) { + let left = CGFloat(values[4]) * cellWidth + let y = CGFloat(values[5]) * cellHeight + taglines.top(row: values[5], canvasHeight: bounds.height) + let viewport = CGRect(x: left, y: y, width: CGFloat(values[6]) * cellWidth, height: taglines.height) + ctx.saveGState() + ctx.clip(to: viewport) + fill(ctx, viewport, UInt32(values[10]), 1) + for pass in 0...1 { + for col in 0..