import UIKit public enum RDEPUBReaderDisplayMode: String, Codable, Equatable { case pageCurl case horizontalScroll case verticalScroll case horizontalCoverScroll init(displayType: RDReaderView.DisplayType) { switch displayType { case .pageCurl: self = .pageCurl case .horizontalScroll: self = .horizontalScroll case .verticalScroll: self = .verticalScroll } } var displayType: RDReaderView.DisplayType { switch self { case .pageCurl: return .pageCurl case .horizontalScroll, .horizontalCoverScroll: return .horizontalScroll case .verticalScroll: return .verticalScroll } } } public enum RDEPUBReaderThemePreset: String, Codable, CaseIterable, Equatable { case light case yellow case green case pink case blue case dark public var theme: RDEPUBReaderTheme { switch self { case .light: return .light case .yellow: return .yellow case .green: return .green case .pink: return .pink case .blue: return .blue case .dark: return .dark } } public init?(theme: RDEPUBReaderTheme) { switch theme { case .light: self = .light case .yellow: self = .yellow case .green: self = .green case .pink: self = .pink case .blue: self = .blue case .dark: self = .dark default: return nil } } } public struct RDEPUBReaderSettings: Codable, Equatable { public var brightness: CGFloat? public var fontSize: CGFloat? public var lineHeightMultiple: CGFloat? public var displayMode: RDEPUBReaderDisplayMode? public var themePreset: RDEPUBReaderThemePreset? public init( brightness: CGFloat? = nil, fontSize: CGFloat? = nil, lineHeightMultiple: CGFloat? = nil, displayMode: RDEPUBReaderDisplayMode? = nil, themePreset: RDEPUBReaderThemePreset? = nil ) { self.brightness = brightness self.fontSize = fontSize self.lineHeightMultiple = lineHeightMultiple self.displayMode = displayMode self.themePreset = themePreset } public func applying(to configuration: RDEPUBReaderConfiguration) -> RDEPUBReaderConfiguration { var resolvedConfiguration = configuration if let fontSize { resolvedConfiguration.fontSize = fontSize } if let lineHeightMultiple { resolvedConfiguration.lineHeightMultiple = lineHeightMultiple } if let displayMode { resolvedConfiguration.displayType = displayMode.displayType } if let themePreset { resolvedConfiguration.theme = themePreset.theme } return resolvedConfiguration } public static func capture( configuration: RDEPUBReaderConfiguration, brightness: CGFloat ) -> RDEPUBReaderSettings { RDEPUBReaderSettings( brightness: max(0, min(1, brightness)), fontSize: configuration.fontSize, lineHeightMultiple: configuration.lineHeightMultiple, displayMode: RDEPUBReaderDisplayMode(displayType: configuration.displayType), themePreset: RDEPUBReaderThemePreset(theme: configuration.theme) ) } }