Fix page shift when toggling "offset double spreads" setting

The pages should get shifted to
- the left when enabling
- the right when disabling
the setting.

Currently, the "page push" is inverted.
This can cause the page that is most likely being read to get pushed out of the screen. Which then requires the user to change the page.

Example:

Active page: 1+2
Enable setting: -> 2 (currently) instead of -> 1
This commit is contained in:
schroda
2026-02-21 14:57:00 +01:00
parent ec49cd1ad9
commit 4da2f67b75
8 changed files with 74 additions and 11 deletions

View File

@@ -50,6 +50,7 @@ const BaseReaderChapterViewer = ({
currentPageIndex,
setPages: setContextPages,
setPageUrls: setContextPageUrls,
setPageSpreadStates: setContextPageSpreadStates,
setPageLoadStates: setContextPageLoadStates,
setTotalPages: setContextTotalPages,
setCurrentPageIndex: setContextCurrentPageIndex,
@@ -93,6 +94,7 @@ const BaseReaderChapterViewer = ({
| 'currentPageIndex'
| 'setPages'
| 'setPageUrls'
| 'setPageSpreadStates'
| 'setPageLoadStates'
| 'setTotalPages'
| 'setCurrentPageIndex'
@@ -140,7 +142,7 @@ const BaseReaderChapterViewer = ({
READER_DEFAULT_PAGES_STATE.pageLoadStates,
);
const [pagesToSpreadState, setPagesToSpreadState] = useState<ReaderPageSpreadState[]>(
pageLoadStates.map(({ url }) => ({ url, isSpread: false })),
READER_DEFAULT_PAGES_STATE.pageSpreadStates,
);
const ref = useRef<HTMLDivElement>(null);
@@ -201,7 +203,13 @@ const BaseReaderChapterViewer = ({
() =>
createUpdateReaderPageLoadState(
actualPages,
setPagesToSpreadState,
(value) => {
if (isCurrentChapterRef.current) {
setContextPageSpreadStates(value);
}
setPagesToSpreadState(value);
},
(value) => {
if (isCurrentChapterRef.current) {
setContextPageLoadStates(value);
@@ -270,7 +278,7 @@ const BaseReaderChapterViewer = ({
(value) => updateState(value, setPages, setContextPages),
(value) => updateState(value, setPageUrls, setContextPageUrls),
(value) => updateState(value, setPageLoadStates, setContextPageLoadStates),
(value) => updateState(value, setPagesToSpreadState, noOp),
(value) => updateState(value, setPagesToSpreadState, setContextPageSpreadStates),
(value) => updateState(value, noOp, setContextCurrentPageIndex),
(value) => {
if ((isInitialChapter && !arePagesFetched) || scrollIntoView) {