Skip to content

Commit d2e18d1

Browse files
authored
Add rendering mode support (#232)
1 parent 3e40357 commit d2e18d1

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

Sources/SnapshotPreviewsCore/View+Snapshot.swift

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ extension View {
7575

7676
if async {
7777
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
78-
let imageResult = Self.takeSnapshot(layout: layout, renderingMode: renderingMode, rootVC: containerVC, targetView: controller.view)
78+
let imageResult = Self.takeSnapshot(layout: layout, renderingMode: renderingMode, window: window, rootVC: containerVC, targetView: controller.view)
7979
completion(SnapshotResult(image: imageResult.mapError { $0 }, precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: nil, colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot))
8080
}
8181
} else {
@@ -100,11 +100,11 @@ extension View {
100100

101101
let elements = try? a11yView.parseAccessibility(useMonochromeSnapshot: false)
102102
a11yView.sizeToFit()
103-
let result = Self.takeSnapshot(layout: .sizeThatFits, renderingMode: renderingMode, rootVC: containerVC, targetView: a11yView)
103+
let result = Self.takeSnapshot(layout: .sizeThatFits, renderingMode: renderingMode, window: window, rootVC: containerVC, targetView: a11yView)
104104
a11yView.removeFromSuperview()
105105
completion(SnapshotResult(image: result.mapError { $0 }, precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: elements, colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot))
106106
} else {
107-
let imageResult = Self.takeSnapshot(layout: layout, renderingMode: renderingMode, rootVC: containerVC, targetView: controller.view)
107+
let imageResult = Self.takeSnapshot(layout: layout, renderingMode: renderingMode, window: window, rootVC: containerVC, targetView: controller.view)
108108
completion(SnapshotResult(image: imageResult.mapError { $0 }, precision: precision, accessibilityEnabled: accessibilityEnabled, accessibilityMarkers: nil, colorScheme: _colorScheme, appStoreSnapshot: appStoreSnapshot))
109109
}
110110
}
@@ -143,10 +143,19 @@ extension View {
143143
private static func takeSnapshot(
144144
layout: PreviewLayout,
145145
renderingMode: EmergeRenderingMode?,
146+
window: UIWindow,
146147
rootVC: UIViewController,
147148
targetView: UIView,
148149
maxSize: Double = 1_000_000) -> Result<UIImage, RenderingError>
149150
{
151+
if renderingMode == EmergeRenderingMode.window {
152+
let renderer = UIGraphicsImageRenderer(size: window.bounds.size)
153+
let screenshot = renderer.image { _ in
154+
window.drawHierarchy(in: window.bounds, afterScreenUpdates: true)
155+
}
156+
return .success(screenshot)
157+
}
158+
150159
let view = targetView
151160
let drawCode: (CGContext) -> Void
152161

@@ -203,7 +212,7 @@ extension UIView {
203212
return true
204213
case .uiView:
205214
return drawHierarchy(in: CGRect(origin: .zero, size: size), afterScreenUpdates: true)
206-
case .none:
215+
case .window, .none:
207216
if !size.requiresCoreAnimationSnapshot {
208217
return drawHierarchy(in: CGRect(origin: .zero, size: size), afterScreenUpdates: true)
209218
} else {
@@ -219,7 +228,7 @@ extension EmergeRenderingMode {
219228
switch self {
220229
case .coreAnimation:
221230
return .renderLayerInContext
222-
case .uiView:
231+
case .window, .uiView:
223232
return .drawHierarchyInRect
224233
}
225234
}

Sources/SnapshotSharedModels/RenderingMode.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ public enum EmergeRenderingMode: Int {
1818

1919
/// Renders using `UIView.drawHierarchy(in:afterScreenUpdates:true)`.
2020
case uiView
21+
22+
/// Renders the entire window instead of the previewed view.
23+
/// This uses UIWindow.drawHierarchy(in: window.bounds, afterScreenUpdates: true)
24+
case window
2125
}

0 commit comments

Comments
 (0)