refactor: rename RDReaderView -> RDEpubReaderView, update pod config and docs
- Rename source module from RDReaderView to RDEpubReaderView - Move all source files from Sources/RDReaderView/ to Sources/RDEpubReaderView/ - Update podspec: RDReaderView.podspec -> RDEpubReaderView.podspec - Update Podfile, demo project, and CocoaPods config for new pod name - Delete old RDReaderView pod support files from ReadViewDemo/Pods - Add new RDEpubReaderView pod support files - Update documentation (API ref, architecture, UML, conventions, etc.) - Add FixedLayoutRotationTests - Update .gitignore: exclude .DS_Store, manual unpack backups, _ssoft-output
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct RDEpubReaderSpreadResolver {
|
||||
|
||||
func isFullScreenPage(
|
||||
_ pageNum: Int,
|
||||
landscapeDualPageEnabled: Bool,
|
||||
isLandscape: Bool,
|
||||
coverPageIndex: Int?
|
||||
) -> Bool {
|
||||
guard landscapeDualPageEnabled, isLandscape, let coverIndex = coverPageIndex else { return false }
|
||||
return pageNum == coverIndex
|
||||
}
|
||||
|
||||
func dualPagePair(
|
||||
for pageNum: Int,
|
||||
totalPages: Int,
|
||||
coverPageIndex: Int?
|
||||
) -> (left: Int, right: Int?) {
|
||||
if let coverIndex = coverPageIndex {
|
||||
if pageNum == coverIndex {
|
||||
return (coverIndex, nil)
|
||||
}
|
||||
let adjustedIndex = pageNum - (coverIndex + 1)
|
||||
let pairStart = coverIndex + 1 + (adjustedIndex / 2) * 2
|
||||
let left = pairStart
|
||||
let right = pairStart + 1 < totalPages ? pairStart + 1 : nil
|
||||
return (left, right)
|
||||
}
|
||||
|
||||
let left = (pageNum / 2) * 2
|
||||
let right = left + 1 < totalPages ? left + 1 : nil
|
||||
return (left, right)
|
||||
}
|
||||
|
||||
func adjacentDualPage(
|
||||
from pageNum: Int,
|
||||
totalPages: Int,
|
||||
coverPageIndex: Int?,
|
||||
forward: Bool
|
||||
) -> Int? {
|
||||
let pair = dualPagePair(for: pageNum, totalPages: totalPages, coverPageIndex: coverPageIndex)
|
||||
if forward {
|
||||
let nextStart = (pair.right ?? pair.left) + 1
|
||||
return nextStart < totalPages ? nextStart : nil
|
||||
}
|
||||
|
||||
let prevEnd = pair.left - 1
|
||||
guard prevEnd >= 0 else { return nil }
|
||||
return dualPagePair(for: prevEnd, totalPages: totalPages, coverPageIndex: coverPageIndex).left
|
||||
}
|
||||
|
||||
func nextPage(
|
||||
from currentPage: Int,
|
||||
totalPages: Int,
|
||||
pagesPerScreen: Int,
|
||||
coverPageIndex: Int?,
|
||||
forward: Bool
|
||||
) -> Int? {
|
||||
if pagesPerScreen > 1 {
|
||||
return adjacentDualPage(
|
||||
from: currentPage,
|
||||
totalPages: totalPages,
|
||||
coverPageIndex: coverPageIndex,
|
||||
forward: forward
|
||||
)
|
||||
}
|
||||
|
||||
let target = currentPage + (forward ? 1 : -1)
|
||||
guard target >= 0, target < totalPages else { return nil }
|
||||
return target
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user