Fix tapzone opening previous/next chapter in continuous horizontal mode with inverted reading direction
The logic to detect if the horizontal scroll position was at the start or end of the element was not correct in case the readers reading direction was inverted compared to the browser themes reading direction. example: - theme ltr + reader ltr => worked - theme ltr + reader rtl => broken - theme rtl + reader ltr => broken - theme rtl + reader rtl => worked
This commit is contained in:
@@ -34,6 +34,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|||||||
- (**Reader**) Fix page shift when toggling the "offset double spreads" setting (currently: enable: shift to the right; disable: shift to the left – now: inverted)
|
- (**Reader**) Fix page shift when toggling the "offset double spreads" setting (currently: enable: shift to the right; disable: shift to the left – now: inverted)
|
||||||
- (**Reader**) Fix "auto webtoon mode" detection for manga source languages other than english and the current selected language
|
- (**Reader**) Fix "auto webtoon mode" detection for manga source languages other than english and the current selected language
|
||||||
- (**Reader**) Fix the reader transition page previous chapter scanlator name showing the chapter name instead of the scanlator name
|
- (**Reader**) Fix the reader transition page previous chapter scanlator name showing the chapter name instead of the scanlator name
|
||||||
|
- (**Reader**) Fix opening the previous/next chapter in the continuous horizontal mode with inverted reading direction
|
||||||
- (**Manga**) Fix dynamic manga page color theme not getting reset after leaving the manga page
|
- (**Manga**) Fix dynamic manga page color theme not getting reset after leaving the manga page
|
||||||
|
|
||||||
## [20251230.01] (r2937) - 2025-12-30
|
## [20251230.01] (r2937) - 2025-12-30
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import {
|
|||||||
getPageForMousePos,
|
getPageForMousePos,
|
||||||
getProgressBarPositionInfo,
|
getProgressBarPositionInfo,
|
||||||
} from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
} from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
||||||
import { getCurrentTheme, getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
import { ReaderService } from '@/features/reader/services/ReaderService.ts';
|
import { ReaderService } from '@/features/reader/services/ReaderService.ts';
|
||||||
import type {
|
import type {
|
||||||
PageInViewportType,
|
PageInViewportType,
|
||||||
@@ -66,19 +66,11 @@ const getScrollDirectionInvert = (
|
|||||||
): 1 | -1 => {
|
): 1 | -1 => {
|
||||||
if (scrollDirection === ScrollDirection.X) {
|
if (scrollDirection === ScrollDirection.X) {
|
||||||
if (scrollOffset === ScrollOffset.BACKWARD) {
|
if (scrollOffset === ScrollOffset.BACKWARD) {
|
||||||
if (themeDirection === 'ltr') {
|
return getOptionForDirection(-1, 1, themeDirection);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scrollOffset === ScrollOffset.FORWARD) {
|
if (scrollOffset === ScrollOffset.FORWARD) {
|
||||||
if (themeDirection === 'ltr') {
|
return getOptionForDirection(1, -1, themeDirection);
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,19 +98,16 @@ export class ReaderControls {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const themeDirectionOfReadingDirection = READING_DIRECTION_TO_THEME_DIRECTION[readingDirection];
|
const themeDirectionOfReadingDirection = READING_DIRECTION_TO_THEME_DIRECTION[readingDirection];
|
||||||
const areReadingDirectionsEqual = getCurrentTheme().direction === themeDirectionOfReadingDirection;
|
|
||||||
const isContinuousReadingModeActive = isContinuousReadingMode(readingMode);
|
const isContinuousReadingModeActive = isContinuousReadingMode(readingMode);
|
||||||
|
|
||||||
const isAtStartY = Math.abs(element.scrollTop) <= 1;
|
const isAtStartY = Math.abs(element.scrollTop) <= 1;
|
||||||
const isAtEndY =
|
const isAtEndY =
|
||||||
Math.floor(element.scrollTop) === element.scrollHeight - element.clientHeight ||
|
Math.floor(element.scrollTop) === element.scrollHeight - element.clientHeight ||
|
||||||
Math.ceil(element.scrollTop) === element.scrollHeight - element.clientHeight;
|
Math.ceil(element.scrollTop) === element.scrollHeight - element.clientHeight;
|
||||||
const isAtStartX = Math.abs(element.scrollLeft) <= 1;
|
const isAtStartX = Math.floor(Math.abs(element.scrollLeft)) === 0;
|
||||||
const isAtEndX =
|
const isAtEndX =
|
||||||
element.scrollWidth - element.clientWidth - Math.floor(Math.abs(element.scrollLeft)) <= 1 ||
|
Math.floor(Math.abs(element.scrollLeft)) === element.scrollWidth - element.clientWidth ||
|
||||||
element.scrollWidth - element.clientWidth - Math.ceil(Math.abs(element.scrollLeft)) <= 1;
|
Math.ceil(Math.abs(element.scrollLeft)) === element.scrollWidth - element.clientWidth;
|
||||||
const isAtStartXForDirection = areReadingDirectionsEqual ? isAtStartX : isAtEndX;
|
|
||||||
const isAtEndXForDirection = areReadingDirectionsEqual ? isAtEndX : isAtStartX;
|
|
||||||
|
|
||||||
const scrollAmount = scrollAmountPercentage / 100;
|
const scrollAmount = scrollAmountPercentage / 100;
|
||||||
const scrollDirection = getScrollDirectionInvert(direction, offset, themeDirectionOfReadingDirection);
|
const scrollDirection = getScrollDirectionInvert(direction, offset, themeDirectionOfReadingDirection);
|
||||||
@@ -152,7 +141,7 @@ export class ReaderControls {
|
|||||||
|
|
||||||
switch (direction) {
|
switch (direction) {
|
||||||
case ScrollDirection.X:
|
case ScrollDirection.X:
|
||||||
doScroll(isAtStartXForDirection, isAtEndXForDirection, {
|
doScroll(isAtStartX, isAtEndX, {
|
||||||
left: getNewScrollPosition(element.scrollLeft, element.clientWidth),
|
left: getNewScrollPosition(element.scrollLeft, element.clientWidth),
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user