public fun nextPageOffsetPx()

in printing/src/main/java/com/zachklipp/richtext/ui/printing/Paged.kt [129:176]


  public fun nextPageOffsetPx(currentPageOffsetPx: Int): Int?
}

/**
 * Divides a composable into discreet pages. The [content] is measured with unbounded height, and
 * then displayed using the current constraints, starting at [pageIndex] (the content is
 * translated up). The bottom of the [content] is clipped, but a best-effort attempt is made to
 * not cut any individual composables off in the middle. When the initial "pagination" measurement
 * is complete, [onPageLayout] is invoked with the total page count.
 * ## Pagination
 *
 * In order to calculate where to clip each page, this composable uses the Compose tooling library
 * to analyze the entire slot table. It collects all the leaf `LayoutNode`s (those without children)
 * and reports their bounds. The nodes are then sorted by their bottom bound, and nodes that are
 * overlapped are removed (the bottom-most composables are kept). The remaining nodes bounds are
 * returned as [PageBreakpoint]s in a [PageLayoutResult]. The [Modifier.keepOnSamePage] modifier
 * can be used to keep a composable's children together.
 *
 * The [PageLayoutResult] then iterates through all the breakpoints and determines the offsets of
 * the start of each page (see [PageLayoutResult.pageOffsetsPx]).
 *
 * There are some known issues with the current implementation:
 *  - Only the slot table for the current composition is analyzed. Any children which use
 *    subcomposition (e.g. `WithConstraints`, `LazyColumn`) will be considered as a "leaf"
 *    composable.
 *  - Large text blocks are treated as a single unit, individual lines will not be broken across
 *    pages.
 *  - Nested [Paged] composables are not supported (behavior is undefined).
 *
 * @param modifier A [Modifier] that will always be applied to [content].
 * @param pageIndex The index of the page to render. Valid values are between 0 and the value passed
 * to the [onPageLayout] callback.
 * @param pageModifier A [Modifier] that is applied to each page, and not affected by pagination.
 * @param clipLastBreakpoint If false, the content at the end of the current page will be clipped
 * exactly at the page bounds, not at the nearest breakpoint. True by default.
 * @param drawBreakpoints If true, horizontal lines are drawn at each breakpoint for debugging.
 * False by default.
 * @param onPageLayout Callback that will be invoked after calculating the total number of pages.
 */
@Composable public fun Paged(
  modifier: Modifier = Modifier,
  pageIndex: Int = 0,
  pageModifier: Modifier = Modifier,
  clipLastBreakpoint: Boolean = true,
  drawBreakpoints: Boolean = false,
  onPageLayout: ((pageCount: Int) -> Unit)? = null,
  content: @Composable () -> Unit
) {