- 实现EPUB阅读器搜索功能及选中注释功能 - 优化CFI模块,修复代码审查发现的11个问题 - 实现大书远距目录跳转与后台补全优化方案 - 优化设置面板与章节运行时联动 - 重构及大量改进优化
161 lines
4.1 KiB
Swift
161 lines
4.1 KiB
Swift
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 fontChoice: RDEPUBReaderFontChoice?
|
|
|
|
public var lineHeightMultiple: CGFloat?
|
|
|
|
public var numberOfColumns: Int?
|
|
|
|
public var displayMode: RDEPUBReaderDisplayMode?
|
|
|
|
public var themePreset: RDEPUBReaderThemePreset?
|
|
|
|
public init(
|
|
brightness: CGFloat? = nil,
|
|
fontSize: CGFloat? = nil,
|
|
fontChoice: RDEPUBReaderFontChoice? = nil,
|
|
lineHeightMultiple: CGFloat? = nil,
|
|
numberOfColumns: Int? = nil,
|
|
displayMode: RDEPUBReaderDisplayMode? = nil,
|
|
themePreset: RDEPUBReaderThemePreset? = nil
|
|
) {
|
|
self.brightness = brightness
|
|
self.fontSize = fontSize
|
|
self.fontChoice = fontChoice
|
|
self.lineHeightMultiple = lineHeightMultiple
|
|
self.numberOfColumns = numberOfColumns
|
|
self.displayMode = displayMode
|
|
self.themePreset = themePreset
|
|
}
|
|
|
|
public func applying(to configuration: RDEPUBReaderConfiguration) -> RDEPUBReaderConfiguration {
|
|
var resolvedConfiguration = configuration
|
|
|
|
if let fontSize {
|
|
resolvedConfiguration.fontSize = fontSize
|
|
}
|
|
if let fontChoice {
|
|
resolvedConfiguration.fontChoice = fontChoice
|
|
}
|
|
if let lineHeightMultiple {
|
|
resolvedConfiguration.lineHeightMultiple = lineHeightMultiple
|
|
}
|
|
if let numberOfColumns {
|
|
resolvedConfiguration.numberOfColumns = max(1, numberOfColumns)
|
|
}
|
|
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,
|
|
fontChoice: configuration.fontChoice,
|
|
lineHeightMultiple: configuration.lineHeightMultiple,
|
|
numberOfColumns: configuration.numberOfColumns,
|
|
displayMode: RDEPUBReaderDisplayMode(displayType: configuration.displayType),
|
|
themePreset: RDEPUBReaderThemePreset(theme: configuration.theme)
|
|
)
|
|
}
|
|
}
|