Skip to content

Commit

Permalink
Cosmetic changes
Browse files Browse the repository at this point in the history
  • Loading branch information
qnga committed Sep 18, 2024
1 parent b52b97d commit f93e377
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
@file:OptIn(ExperimentalReadiumApi::class)

package org.readium.navigator.web.layout

import org.readium.r2.navigator.preferences.ReadingProgression
import org.readium.r2.shared.ExperimentalReadiumApi
import org.readium.r2.shared.util.Url

internal class Layout(
val readingProgression: ReadingProgression,
val spreads: List<Spread>
) {

fun spreadIndexForPage(pageIndex: Int): Int = spreads
.indexOfFirst { pageIndex in it.pages.map { page -> page.index } }
.also { check(it != -1) }

fun pageIndexForSpread(spreadIndex: Int) =
when (val spread = spreads[spreadIndex]) {
is SingleViewportSpread ->
spread.page.index
is LeftOnlySpread ->
spread.page.index
is RightOnlySpread ->
spread.page.index
is DoubleSpread ->
when (readingProgression) {
ReadingProgression.LTR -> spread.leftPage.index
ReadingProgression.RTL -> spread.rightPage.index
}
}
}

internal data class Page(
val index: Int,
val href: Url
)

internal sealed interface Spread {

val pages: List<Page>

fun contains(href: Url): Boolean =
href in pages.map { it.href }
}

internal data class SingleViewportSpread(
val page: Page
) : Spread {

override val pages: List<Page> get() = listOfNotNull(page)
}

internal sealed class DoubleViewportSpread(
override val pages: List<Page>
) : Spread {
abstract val leftPage: Page?

abstract val rightPage: Page?

companion object {

operator fun invoke(leftPage: Page?, rightPage: Page?): Spread =
when {
leftPage != null && rightPage != null -> DoubleSpread(leftPage, rightPage)
leftPage != null -> LeftOnlySpread(leftPage)
rightPage != null -> RightOnlySpread(rightPage)
else -> throw IllegalArgumentException("Attempt to create an empty spread.")
}
}
}

internal data class LeftOnlySpread(
val page: Page
) : DoubleViewportSpread(listOf(page)) {

override val leftPage: Page = page

override val rightPage: Page? = null
}

internal data class RightOnlySpread(
val page: Page
) : DoubleViewportSpread(listOf(page)) {

override val leftPage: Page? = null

override val rightPage: Page = page
}

internal data class DoubleSpread(
override val leftPage: Page,
override val rightPage: Page
) : DoubleViewportSpread(listOf(leftPage, rightPage))
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import org.readium.r2.navigator.preferences.ReadingProgression
import org.readium.r2.shared.ExperimentalReadiumApi
import org.readium.r2.shared.publication.presentation.Presentation

@ExperimentalReadiumApi
@OptIn(ExperimentalReadiumApi::class)
internal class LayoutResolver(
private val readingOrder: ReadingOrder
) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.readium.navigator.web.layout

import org.readium.r2.shared.publication.presentation.Presentation
import org.readium.r2.shared.util.Url

internal data class ReadingOrder(
val items: List<ReadingOrderItem>
)

internal data class ReadingOrderItem(
val href: Url,
val page: Presentation.Page?
)
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ internal fun NavigatorPager(

HorizontalPager(
modifier = modifier,
// Pages must intercept all scroll gestures so the pager moves
// only through the PagerNestedScrollConnection.
userScrollEnabled = false,
state = state,
beyondViewportPageCount = beyondViewportPageCount,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:OptIn(ExperimentalReadiumApi::class)

package org.readium.navigator.web.spread

import androidx.compose.foundation.layout.BoxWithConstraints
Expand All @@ -20,7 +22,6 @@ import org.readium.r2.navigator.preferences.Fit
import org.readium.r2.shared.ExperimentalReadiumApi
import org.readium.r2.shared.util.AbsoluteUrl

@OptIn(ExperimentalReadiumApi::class)
@Composable
internal fun DoubleSpread(
state: DoubleSpreadState
Expand Down Expand Up @@ -68,7 +69,6 @@ internal fun DoubleSpread(
}
}

@OptIn(ExperimentalReadiumApi::class)
internal class DoubleSpreadState(
val htmlData: String,
val publicationBaseUrl: AbsoluteUrl,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:OptIn(ExperimentalReadiumApi::class)

package org.readium.navigator.web.spread

import androidx.compose.foundation.layout.BoxWithConstraints
Expand All @@ -20,7 +22,6 @@ import org.readium.r2.navigator.preferences.Fit
import org.readium.r2.shared.ExperimentalReadiumApi
import org.readium.r2.shared.util.AbsoluteUrl

@OptIn(ExperimentalReadiumApi::class)
@Composable
internal fun SingleSpread(
state: SingleSpreadState
Expand Down Expand Up @@ -68,7 +69,6 @@ internal fun SingleSpread(
}
}

@OptIn(ExperimentalReadiumApi::class)
internal class SingleSpreadState(
val htmlData: String,
val publicationBaseUrl: AbsoluteUrl,
Expand Down

0 comments on commit f93e377

Please sign in to comment.