diff --git a/CHANGELOG.md b/CHANGELOG.md index cd77898213..d7d4379065 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ All notable changes to this project will be documented in this file. Take a look * Fixed turning pages of an EPUB reflowable resource with an odd number of columns. A virtual blank trailing column is appended to the resource when displayed as two columns. * EPUB: Fallback on `reflowable` if the `presentation.layout` hint is missing from a manifest. +* EPUB: Offset of the current selection's `rect` to take into account the vertical padding. ## [2.1.1] diff --git a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt index 7d3ffaa0ab..5bbc89071e 100644 --- a/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt +++ b/readium/navigator/src/main/java/org/readium/r2/navigator/epub/EpubNavigatorFragment.kt @@ -366,11 +366,14 @@ class EpubNavigatorFragment private constructor( ?.let { tryOrLog { JSONObject(it) } } ?: return null + val rect = json.optRectF("rect") + ?.apply { adjustToViewport() } + return Selection( locator = currentLocator.value.copy( text = Locator.Text.fromJSON(json.optJSONObject("text")) ), - rect = json.optRectF("rect") + rect = rect ) } @@ -378,6 +381,18 @@ class EpubNavigatorFragment private constructor( run(viewModel.clearSelection()) } + private fun PointF.adjustToViewport() { + currentFragment?.paddingTop?.let { top -> + y += top + } + } + + private fun RectF.adjustToViewport() { + currentFragment?.paddingTop?.let { top -> + this.top += top + } + } + // DecorableNavigator override fun supportsDecorationStyle(style: KClass): Boolean = @@ -452,14 +467,13 @@ class EpubNavigatorFragment private constructor( } override fun onTap(point: PointF): Boolean { + point.adjustToViewport() return listener?.onTap(point) ?: false } override fun onDecorationActivated(id: DecorationId, group: String, rect: RectF, point: PointF): Boolean { - currentFragment?.paddingTop?.let { top -> - rect.top += top - point.y += top - } + rect.adjustToViewport() + point.adjustToViewport() return viewModel.onDecorationActivated(id, group, rect, point) }