Skip to content

Commit f9085e0

Browse files
Merge pull request #4 from PSPDFKit/render-option-improvements
Improve render option API
2 parents 6c469cb + 87f3455 commit f9085e0

File tree

2 files changed

+74
-72
lines changed

2 files changed

+74
-72
lines changed

Sources/PSPDFKitSwift/PSPDFDocument.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,9 @@ extension PSPDFDocument {
214214
* white/gray hairlines at document borders.
215215
*/
216216
public func setRenderOptionsTyped(_ options: [RenderOption] = [], type: RenderType) {
217-
let optionsDict = options.map({ $0.rawValue }).reduce([:]) { $0.merging($1) { _, new in new } }
217+
let optionsDict = options.reduce(into: [:]) { result, option in
218+
result[option.rawValue.renderOption] = option.rawValue.value
219+
}
218220
self.setRenderOptions(optionsDict, type: type)
219221
}
220222

@@ -225,7 +227,9 @@ extension PSPDFDocument {
225227
* @param type The type you want to change.
226228
*/
227229
public func updateRenderOptions(_ options: [RenderOption] = [], type: RenderType) {
228-
let optionsDict = options.map({ $0.rawValue }).reduce([:]) { $0.merging($1) { _, new in new } }
230+
let optionsDict = options.reduce(into: [:]) { result, option in
231+
result[option.rawValue.renderOption] = option.rawValue.value
232+
}
229233
self.updateRenderOptions(optionsDict, type: type)
230234
}
231235

@@ -239,9 +243,9 @@ extension PSPDFDocument {
239243
* @return The render dictionary. Guaranteed to always return a dictionary.
240244
*/
241245
public func renderOptionsTyped(for type: RenderType, context: Any?) -> [RenderOption] {
242-
return self.renderOptions(for: type, context: context).compactMap({ (entry) -> RenderOption? in
243-
RenderOption(rawValue: [entry.key: entry.value])
244-
})
246+
return self.renderOptions(for: type, context: context).map { entry in
247+
RenderOption(rawValue: (entry.key, entry.value))
248+
}
245249
}
246250

247251
}

Sources/PSPDFKitSwift/PSPDFRenderRequest.swift

Lines changed: 65 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public typealias RenderDrawHandler = PDFRenderDrawBlock
1919

2020
/// Rendering options. Parameters of how an image should be rendered.
2121
public enum RenderOption: RawRepresentable, Equatable {
22-
public typealias RawValue = [PSPDFRenderOption: Any]
22+
public typealias RawValue = (renderOption: PSPDFRenderOption, value: Any)
2323

2424
/// Changes the rendering to preserve the aspect ratio of the image.
2525
case preserveAspectRatio(Bool)
@@ -75,96 +75,94 @@ public enum RenderOption: RawRepresentable, Equatable {
7575
#endif
7676

7777
// swiftlint:disable:next function_body_length cyclomatic_complexity
78-
public init?(rawValue: RawValue) {
79-
for (key, value) in rawValue {
80-
switch key {
81-
case .preserveAspectRatioKey:
82-
self = .preserveAspectRatio((value as? NSNumber)?.boolValue ?? false)
83-
case .ignoreDisplaySettingsKey:
84-
self = .ignoreDisplaySettings((value as? NSNumber)?.boolValue ?? false)
85-
case .pageColorKey:
86-
self = .pageColor(value as? UIColor ?? .white)
87-
case .invertedKey:
88-
self = .inverted((value as? NSNumber)?.boolValue ?? false)
89-
case .filtersKey:
90-
let rawValue = (value as? NSNumber)?.uintValue ?? .init(bitPattern: 0)
91-
self = .filters(RenderFilter(rawValue: rawValue))
92-
case .interpolationQualityKey:
93-
let qualityValue = CGInterpolationQuality(rawValue: (value as? NSNumber)?.int32Value ?? CGInterpolationQuality.default.rawValue)
94-
self = .interpolationQuality(qualityValue ?? CGInterpolationQuality.default)
95-
case .skipPageContentKey:
96-
self = .skipPageContent((value as? NSNumber)?.boolValue ?? false)
97-
case .overlayAnnotationsKey:
98-
self = .overlayAnnotations((value as? NSNumber)?.boolValue ?? false)
99-
case .skipAnnotationArrayKey:
100-
self = .skipAnnotations(value as? [PDFAnnotation] ?? [])
101-
case .ignorePageClipKey:
102-
self = .ignorePageClip((value as? NSNumber)?.boolValue ?? false)
103-
case .allowAntiAliasingKey:
104-
self = .allowAntiAliasing((value as? NSNumber)?.boolValue ?? false)
105-
case .backgroundFillColorKey:
106-
self = .backgroundFillColor(value as? UIColor ?? .black)
107-
case .textRenderingUseCoreGraphicsKey:
108-
self = .textRenderingUseCoreGraphics((value as? NSNumber)?.boolValue ?? false)
109-
case .textRenderingClearTypeEnabledKey:
110-
self = .textRenderingClearTypeEnabled((value as? NSNumber)?.boolValue ?? false)
111-
case .interactiveFormFillColorKey:
112-
self = .interactiveFormFillColor(value as? UIColor ?? .black)
113-
case .drawBlockKey:
114-
let closure: PDFRenderDrawBlock = unsafeBitCast(value, to: PSPDFRenderDrawBlock.self)
115-
self = .draw(closure)
116-
case .drawSignHereOverlay:
117-
self = .drawSignHereOverlay((value as? NSNumber)?.boolValue ?? false)
118-
#if PSPDF_SUPPORTS_CIFILTER
119-
case .ciFilterKey:
120-
self = .ciFilters(value as? [CIFilter] ?? [])
121-
#endif
122-
default:
123-
fatalError("Unknown option")
124-
}
78+
public init(rawValue: RawValue) {
79+
let (renderOption, value) = rawValue
80+
switch renderOption {
81+
case .preserveAspectRatioKey:
82+
self = .preserveAspectRatio((value as? NSNumber)?.boolValue ?? false)
83+
case .ignoreDisplaySettingsKey:
84+
self = .ignoreDisplaySettings((value as? NSNumber)?.boolValue ?? false)
85+
case .pageColorKey:
86+
self = .pageColor(value as? UIColor ?? .white)
87+
case .invertedKey:
88+
self = .inverted((value as? NSNumber)?.boolValue ?? false)
89+
case .filtersKey:
90+
let rawValue = (value as? NSNumber)?.uintValue ?? .init(bitPattern: 0)
91+
self = .filters(RenderFilter(rawValue: rawValue))
92+
case .interpolationQualityKey:
93+
let qualityValue = CGInterpolationQuality(rawValue: (value as? NSNumber)?.int32Value ?? CGInterpolationQuality.default.rawValue)
94+
self = .interpolationQuality(qualityValue ?? CGInterpolationQuality.default)
95+
case .skipPageContentKey:
96+
self = .skipPageContent((value as? NSNumber)?.boolValue ?? false)
97+
case .overlayAnnotationsKey:
98+
self = .overlayAnnotations((value as? NSNumber)?.boolValue ?? false)
99+
case .skipAnnotationArrayKey:
100+
self = .skipAnnotations(value as? [PDFAnnotation] ?? [])
101+
case .ignorePageClipKey:
102+
self = .ignorePageClip((value as? NSNumber)?.boolValue ?? false)
103+
case .allowAntiAliasingKey:
104+
self = .allowAntiAliasing((value as? NSNumber)?.boolValue ?? false)
105+
case .backgroundFillColorKey:
106+
self = .backgroundFillColor(value as? UIColor ?? .black)
107+
case .textRenderingUseCoreGraphicsKey:
108+
self = .textRenderingUseCoreGraphics((value as? NSNumber)?.boolValue ?? false)
109+
case .textRenderingClearTypeEnabledKey:
110+
self = .textRenderingClearTypeEnabled((value as? NSNumber)?.boolValue ?? false)
111+
case .interactiveFormFillColorKey:
112+
self = .interactiveFormFillColor(value as? UIColor ?? .black)
113+
case .drawBlockKey:
114+
let closure: RenderDrawHandler = unsafeBitCast(value as AnyObject, to: RenderDrawHandler.self)
115+
self = .draw(closure)
116+
case .drawSignHereOverlay:
117+
self = .drawSignHereOverlay((value as? NSNumber)?.boolValue ?? false)
118+
#if PSPDF_SUPPORTS_CIFILTER
119+
case .ciFilterKey:
120+
self = .ciFilters(value as? [CIFilter] ?? [])
121+
#endif
122+
default:
123+
fatalError("Unknown option")
125124
}
126-
return nil
127125
}
128126

129127
public var rawValue: RawValue {
130128
switch self {
131129
case .preserveAspectRatio(let value):
132-
return [.preserveAspectRatioKey: NSNumber(value: value)]
130+
return (.preserveAspectRatioKey, NSNumber(value: value))
133131
case .ignoreDisplaySettings(let value):
134-
return [.ignoreDisplaySettingsKey: NSNumber(value: value)]
132+
return (.ignoreDisplaySettingsKey, NSNumber(value: value))
135133
case .pageColor(let value):
136-
return [.pageColorKey: value]
134+
return (.pageColorKey, value)
137135
case .inverted(let value):
138-
return [.invertedKey: NSNumber(value: value)]
136+
return (.invertedKey, NSNumber(value: value))
139137
case .filters(let filters):
140-
return [.filtersKey: NSNumber(value: filters.rawValue)]
138+
return (.filtersKey, NSNumber(value: filters.rawValue))
141139
case .interpolationQuality(let value):
142-
return [.interpolationQualityKey: value.rawValue]
140+
return (.interpolationQualityKey, value.rawValue)
143141
case .skipPageContent(let value):
144-
return [.skipPageContentKey: NSNumber(value: value)]
142+
return (.skipPageContentKey, NSNumber(value: value))
145143
case .overlayAnnotations(let value):
146-
return [.overlayAnnotationsKey: NSNumber(value: value)]
144+
return (.overlayAnnotationsKey, NSNumber(value: value))
147145
case .skipAnnotations(let annotations):
148-
return [.skipAnnotationArrayKey: annotations]
146+
return (.skipAnnotationArrayKey, annotations)
149147
case .ignorePageClip(let value):
150-
return [.ignorePageClipKey: NSNumber(value: value)]
148+
return (.ignorePageClipKey, NSNumber(value: value))
151149
case .allowAntiAliasing(let value):
152-
return [.skipPageContentKey: NSNumber(value: value)]
150+
return (.skipPageContentKey, NSNumber(value: value))
153151
case .backgroundFillColor(let color):
154-
return [.backgroundFillColorKey: color]
152+
return (.backgroundFillColorKey, color)
155153
case .textRenderingUseCoreGraphics(let value):
156-
return [.skipPageContentKey: NSNumber(value: value)]
154+
return (.skipPageContentKey, NSNumber(value: value))
157155
case .textRenderingClearTypeEnabled(let value):
158-
return [.textRenderingClearTypeEnabledKey: NSNumber(value: value)]
156+
return (.textRenderingClearTypeEnabledKey, NSNumber(value: value))
159157
case .interactiveFormFillColor(let color):
160-
return [.interactiveFormFillColorKey: color]
158+
return (.interactiveFormFillColorKey, color)
161159
case .draw(let closure):
162-
return [.drawBlockKey: unsafeBitCast(closure, to: AnyObject.self)]
160+
return (.drawBlockKey, unsafeBitCast(closure, to: AnyObject.self))
163161
case .drawSignHereOverlay(let value):
164-
return [.drawSignHereOverlay: NSNumber(value: value)]
162+
return (.drawSignHereOverlay, NSNumber(value: value))
165163
#if PSPDF_SUPPORTS_CIFILTER
166164
case .ciFilters(let filters):
167-
return [.ciFilterKey: filters]
165+
return (.ciFilterKey, filters)
168166
#endif
169167
}
170168
}

0 commit comments

Comments
 (0)