@@ -4,6 +4,14 @@ import Foundation
44import QuartzCore
55import RsnapHostBridge
66
7+ private struct ChromeRefreshTelemetryKey : Equatable {
8+ let targetHz : Int
9+ let hudGlassEnabled : Bool
10+ let hudGlassMode : String
11+ let liquidGlassStyle : String
12+ let liquidGlassAvailable : Bool
13+ }
14+
715@MainActor
816final class CaptureHostView : NSView {
917 static let liveDragIntentThreshold : CGFloat = 3
@@ -26,20 +34,20 @@ final class CaptureHostView: NSView {
2634 private( set) var chrome = CaptureChromeState ( )
2735 private( set) var settings = NativeHostSettings . defaults
2836 private var trackingAreaRef : NSTrackingArea ?
29- var annotationStyleWheelGate = CaptureHostAnnotationStyleWheelGate ( )
37+ var annotationStyleWheelGate = AnnotationStyleWheelGate ( )
3038 var lastCursorPresentation : CaptureHostCursorPresentation ?
3139 let cursorOwner = CaptureHostCursorOwner ( )
32- var livePrimaryInteraction = CaptureHostLivePrimaryInteractionState ( )
33- let mouseReleaseRecovery = CaptureHostMouseReleaseRecovery ( )
34- let livePointerPreview = CaptureHostLivePointerPreviewState ( )
40+ var livePrimaryInteraction = PrimaryInteractionState ( )
41+ let mouseReleaseRecovery = MouseReleaseRecovery ( )
42+ let livePointerPreview = LivePointerPreviewState ( )
3543 var liveHighlightedWindowPreview : WindowSnapshot ?
3644 var sampleUpdatedLiveChromeRenderInProgress = false
37- var frozenFirstDisplayHandoff = CaptureHostFrozenFirstDisplayHandoffState ( )
45+ var frozenFirstDisplayHandoff = DisplayHandoffState ( )
3846 var lastLivePreviewSnapshot : LivePreviewSnapshot ?
39- var liveSampleCache = CaptureHostLiveSampleCache ( )
40- lazy var frozenToolbar = CaptureHostFrozenToolbarCoordinator ( hostView: self )
41- private lazy var materialViews = CaptureHostMaterialViewCoordinator ( hostView: self )
42- lazy var pointerDispatchQueue = CaptureHostPointerDispatchQueue (
47+ var liveSampleCache = LiveSampleCache ( )
48+ lazy var frozenToolbar = FrozenToolbarCoordinator ( hostView: self )
49+ private lazy var materialViews = MaterialViewCoordinator ( hostView: self )
50+ lazy var pointerDispatchQueue = PointerDispatchQueue (
4351 targetInterval: { [ weak self] in
4452 guard let self else {
4553 return NativeHostDisplayRefresh . frameInterval (
@@ -55,12 +63,12 @@ final class CaptureHostView: NSView {
5563 lazy var liveRenderer = LiveOverlayRenderer ( hostView: self )
5664 private var liveRendererInstalled = false
5765 private var deferredLiveShutdownWorkItem : DispatchWorkItem ?
58- private var loggedLiveRefreshTarget : LiveChromeRefreshTelemetryKey ?
59- let liveInputTelemetry = CaptureHostLiveInputTelemetry ( )
66+ private var loggedLiveRefreshTarget : ChromeRefreshTelemetryKey ?
67+ let liveInputTelemetry = LiveInputTelemetry ( )
6068
6169 override var acceptsFirstResponder : Bool { true }
6270 override var isOpaque : Bool { false }
63- var toolbarHoverState : CaptureHostToolbarHoverState { frozenToolbar. hoverState }
71+ var toolbarHoverState : ToolbarHoverState { frozenToolbar. hoverState }
6472
6573 override func hitTest( _ point: NSPoint ) -> NSView ? {
6674 guard scene. mode == . frozen, chrome. scrollMinimapPreview != nil ,
@@ -127,7 +135,7 @@ final class CaptureHostView: NSView {
127135 self . chrome = chrome
128136 self . settings = settings
129137 if hostLocalFrozenSelectingEnded {
130- clearLivePrimaryInteractionState ( rendersImmediately: false )
138+ clearPrimaryInteractionState ( rendersImmediately: false )
131139 }
132140 if previousMode != scene. mode {
133141 window? . acceptsMouseMovedEvents = true
@@ -147,7 +155,7 @@ final class CaptureHostView: NSView {
147155 liveHighlightedWindowPreview = scene. highlightedWindow
148156 }
149157 } else {
150- clearLivePrimaryInteractionState ( rendersImmediately: false )
158+ clearPrimaryInteractionState ( rendersImmediately: false )
151159 if scene. mode == . hidden {
152160 livePrimaryInteraction. clearHoverChromeSuppression ( )
153161 frozenFirstDisplayHandoff. reset ( )
@@ -399,7 +407,7 @@ final class CaptureHostView: NSView {
399407 seedLivePointerPreview ( scene. pointer, recordsInputLatency: false )
400408 liveHighlightedWindowPreview = scene. highlightedWindow
401409 } else {
402- clearLivePrimaryInteractionState ( rendersImmediately: false )
410+ clearPrimaryInteractionState ( rendersImmediately: false )
403411 resetLivePointerPreview ( )
404412 liveHighlightedWindowPreview = nil
405413 }
@@ -466,7 +474,7 @@ final class CaptureHostView: NSView {
466474 now: ProcessInfo . processInfo. systemUptime
467475 )
468476 lastLivePreviewSnapshot = retainedLivePreview
469- clearLivePrimaryInteractionState ( rendersImmediately: false )
477+ clearPrimaryInteractionState ( rendersImmediately: false )
470478 resetLivePointerPreview ( )
471479 liveHighlightedWindowPreview = nil
472480 frozenToolbar. clearHoveredAction ( )
@@ -585,13 +593,13 @@ final class CaptureHostView: NSView {
585593 return
586594 }
587595 if let selection = localFrozenSelectionRect ( ) . map ( {
588- CaptureHostFrozenPresentationRenderer . pixelAlignedSelectionRect (
596+ FrozenSurfaceRenderer . pixelAlignedSelectionRect (
589597 $0,
590598 backingScaleFactor: window? . screen? . backingScaleFactor ?? 1
591599 )
592600 } ) {
593601 let toolbarLayout = toolbarLayout ( for: selection)
594- CaptureHostFrozenPresentationRenderer . render (
602+ FrozenSurfaceRenderer . render (
595603 selection: selection,
596604 bounds: bounds,
597605 backingScaleFactor: window? . screen? . backingScaleFactor ?? 1 ,
@@ -600,7 +608,7 @@ final class CaptureHostView: NSView {
600608 chrome: chrome,
601609 toolbarLayout: toolbarLayout,
602610 toolbarHoverState: toolbarHoverState,
603- materialState: CaptureHostFrozenPresentationMaterialState (
611+ materialState: FrozenSurfaceMaterialState (
604612 toolbarLiquidGlassVisible: materialViews. isFrozenToolbarLiquidGlassVisible,
605613 toolbarLiquidGlassContentDrawn: materialViews
606614 . isFrozenToolbarLiquidGlassContentDrawn,
@@ -821,7 +829,7 @@ final class CaptureHostView: NSView {
821829 deferredLiveShutdownWorkItem? . cancel ( )
822830 deferredLiveShutdownWorkItem = nil
823831 let displayTargetHz = currentDisplayTargetFramesPerSecond ( )
824- let refreshTarget = LiveChromeRefreshTelemetryKey (
832+ let refreshTarget = ChromeRefreshTelemetryKey (
825833 targetHz: displayTargetHz,
826834 hudGlassEnabled: settings. hudGlassEnabled,
827835 hudGlassMode: settings. resolvedHudGlassMode. rawValue,
0 commit comments