65 lines
2.6 KiB
Swift
65 lines
2.6 KiB
Swift
import UIKit
|
|
|
|
public protocol RDEPUBReaderDisplayEnvironment: AnyObject {
|
|
var currentBrightness: CGFloat { get set }
|
|
var fallbackViewportSize: CGSize { get }
|
|
}
|
|
|
|
public final class RDEPUBUIScreenEnvironment: RDEPUBReaderDisplayEnvironment {
|
|
public init() {}
|
|
|
|
public var currentBrightness: CGFloat {
|
|
get { CGFloat(UIScreen.main.brightness) }
|
|
set { UIScreen.main.brightness = newValue }
|
|
}
|
|
|
|
public var fallbackViewportSize: CGSize {
|
|
UIScreen.main.bounds.size
|
|
}
|
|
}
|
|
|
|
public struct RDEPUBReaderDependencies {
|
|
public var environment: any RDEPUBReaderDisplayEnvironment
|
|
public var makeParser: () -> RDEPUBParser
|
|
public var makePaginator: () -> RDEPUBPaginator
|
|
public var makeTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder
|
|
public var makePlainTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder
|
|
public var makeTextRenderer: (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
|
|
|
|
public init(
|
|
environment: any RDEPUBReaderDisplayEnvironment,
|
|
makeParser: @escaping () -> RDEPUBParser,
|
|
makePaginator: @escaping () -> RDEPUBPaginator,
|
|
makeTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder,
|
|
makePlainTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder,
|
|
makeTextRenderer: @escaping (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
|
|
) {
|
|
self.environment = environment
|
|
self.makeParser = makeParser
|
|
self.makePaginator = makePaginator
|
|
self.makeTextBookBuilder = makeTextBookBuilder
|
|
self.makePlainTextBookBuilder = makePlainTextBookBuilder
|
|
self.makeTextRenderer = makeTextRenderer
|
|
}
|
|
|
|
public static var live: RDEPUBReaderDependencies {
|
|
RDEPUBReaderDependencies(
|
|
environment: RDEPUBUIScreenEnvironment(),
|
|
makeParser: { RDEPUBParser() },
|
|
makePaginator: { RDEPUBPaginator() },
|
|
makeTextBookBuilder: { renderer, cache, layoutConfig in
|
|
RDEPUBTextBookBuilder(renderer: renderer, cache: cache, layoutConfig: layoutConfig)
|
|
},
|
|
makePlainTextBookBuilder: { renderer, layoutConfig in
|
|
RDPlainTextBookBuilder(renderer: renderer, layoutConfig: layoutConfig)
|
|
},
|
|
makeTextRenderer: { engine in
|
|
switch engine {
|
|
case .dtCoreText:
|
|
return RDEPUBDTCoreTextRenderer()
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|