in printing/src/main/java/com/zachklipp/richtext/ui/printing/Paged.kt [277:310]
override fun nextPageOffsetPx(currentPageOffsetPx: Int): Int? {
if (breakpoints.isEmpty()) return null
val pageBottom = currentPageOffsetPx + pageSizePx.height
// TODO support hard breaks.
var firstBreakpoint: PageBreakpoint? = null
var lastBreakpoint: PageBreakpoint? = null
for (i in 0 until breakpoints.size - 1) {
val breakpoint = breakpoints[i]
val nextBreakpoint = breakpoints[i + 1]
if (firstBreakpoint == null && breakpoint.yPx >= currentPageOffsetPx) {
firstBreakpoint = breakpoint
}
if (nextBreakpoint.yPx > pageBottom) {
lastBreakpoint = breakpoint
break
}
}
if (firstBreakpoint == null) {
// Offset is past the last breakpoint.
return null
}
if (firstBreakpoint === lastBreakpoint) {
// Current page doesn't have a single breakpoint in it, so the page will be clipped, and the
// next page will start also clipped.
return pageBottom
}
// List is not empty, so lastBreakpoint will never be null.
return lastBreakpoint?.yPx
}