refactor: split reader architecture and chrome handling

This commit is contained in:
shen
2026-05-31 21:47:54 +08:00
parent ea21c6a831
commit 44202357c0
80 changed files with 10635 additions and 8522 deletions
@@ -0,0 +1,59 @@
import UIKit
/// UIPageViewController
///
/// RDReaderView pageCurl
struct RDReaderPagingController {
/// pageCurl
struct PageTransitionRequest: Equatable {
let pageNum: Int
let animated: Bool
}
/// pageCurl
var pendingTransitionRequest: PageTransitionRequest?
///
var isTransitioning: Bool = false
/// UI
var didBuildUI = false
// MARK: - PageViewController
/// spine UIPageViewController
static func createPageViewController(isDualPage: Bool) -> UIPageViewController {
let options: [UIPageViewController.OptionsKey: Any]?
if isDualPage {
options = [.spineLocation: NSNumber(value: UIPageViewController.SpineLocation.mid.rawValue)]
} else {
options = nil
}
let pageVC = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: options)
pageVC.isDoubleSided = isDualPage
return pageVC
}
// MARK: -
/// pageCurl
mutating func shouldQueuePageTransition(_ request: PageTransitionRequest, currentDisplayType: RDReaderView.DisplayType) -> Bool {
guard currentDisplayType == .pageCurl, isTransitioning else { return false }
pendingTransitionRequest = request
return true
}
/// pageCurl
mutating func finishPageCurlTransition() -> PageTransitionRequest? {
isTransitioning = false
guard let pending = pendingTransitionRequest else { return nil }
pendingTransitionRequest = nil
return pending
}
///
mutating func resetPendingState() {
isTransitioning = false
pendingTransitionRequest = nil
}
}