Improve progress bar rendering while dragging

This commit is contained in:
schroda
2024-12-28 02:00:13 +01:00
parent 347c88f240
commit 0c6872edb3
4 changed files with 12 additions and 5 deletions

View File

@@ -190,6 +190,7 @@ const BaseReaderProgressBar = ({
page.secondary ? pageLoadStates[page.secondary.index].loaded : undefined page.secondary ? pageLoadStates[page.secondary.index].loaded : undefined
} }
createProgressBarSlot={createProgressBarSlot} createProgressBarSlot={createProgressBarSlot}
showDraggingStyle={pagesIndex === currentPagesIndex && isDragging}
/> />
))} ))}
<ProgressBarHighlightReadPages <ProgressBarHighlightReadPages

View File

@@ -36,6 +36,7 @@ export const ReaderProgressBarSlotWrapper = memo(
isLeadingPage, isLeadingPage,
isTrailingPage, isTrailingPage,
totalPages, totalPages,
showDraggingStyle,
primaryPageLoadState, primaryPageLoadState,
secondaryPageLoadState, secondaryPageLoadState,
createProgressBarSlot, createProgressBarSlot,
@@ -47,6 +48,7 @@ export const ReaderProgressBarSlotWrapper = memo(
isLeadingPage: boolean; isLeadingPage: boolean;
isTrailingPage: boolean; isTrailingPage: boolean;
totalPages: number; totalPages: number;
showDraggingStyle: boolean;
primaryPageLoadState: ReaderProgressBarProps['pageLoadStates'][number]['loaded']; primaryPageLoadState: ReaderProgressBarProps['pageLoadStates'][number]['loaded'];
secondaryPageLoadState: ReaderProgressBarProps['pageLoadStates'][number]['loaded'] | undefined; secondaryPageLoadState: ReaderProgressBarProps['pageLoadStates'][number]['loaded'] | undefined;
createProgressBarSlot: ( createProgressBarSlot: (
@@ -58,6 +60,7 @@ export const ReaderProgressBarSlotWrapper = memo(
isLeadingPage: boolean, isLeadingPage: boolean,
isTrailingPage: boolean, isTrailingPage: boolean,
totalPages: number, totalPages: number,
handleDragging: boolean,
) => ReactNode; ) => ReactNode;
} & BoxProps) => { } & BoxProps) => {
const slot = useMemo( const slot = useMemo(
@@ -71,6 +74,7 @@ export const ReaderProgressBarSlotWrapper = memo(
isLeadingPage, isLeadingPage,
isTrailingPage, isTrailingPage,
totalPages, totalPages,
showDraggingStyle,
), ),
[ [
createProgressBarSlot, createProgressBarSlot,
@@ -82,6 +86,7 @@ export const ReaderProgressBarSlotWrapper = memo(
isLeadingPage, isLeadingPage,
isTrailingPage, isTrailingPage,
totalPages, totalPages,
showDraggingStyle,
], ],
); );

View File

@@ -25,7 +25,7 @@ export const ReaderProgressBarSlotDesktop = memo(
isFirstPage, isFirstPage,
isLastPage, isLastPage,
isLeadingPage, isLeadingPage,
isDragging, showDraggingStyle,
}: Pick<IReaderSettings, 'progressBarPosition'> & { }: Pick<IReaderSettings, 'progressBarPosition'> & {
pageName: string; pageName: string;
pageUrl: string; pageUrl: string;
@@ -35,7 +35,7 @@ export const ReaderProgressBarSlotDesktop = memo(
isFirstPage: boolean; isFirstPage: boolean;
isLastPage: boolean; isLastPage: boolean;
isLeadingPage: boolean; isLeadingPage: boolean;
isDragging: boolean; showDraggingStyle: boolean;
}) => { }) => {
const theme = useTheme(); const theme = useTheme();
@@ -99,7 +99,7 @@ export const ReaderProgressBarSlotDesktop = memo(
backgroundColor: alpha(theme.palette.primary.main, 0.5), backgroundColor: alpha(theme.palette.primary.main, 0.5),
}), }),
...applyStyles(isCurrentPage, { ...applyStyles(isCurrentPage, {
cursor: isDragging ? 'grabbing' : 'grab', cursor: showDraggingStyle ? 'grabbing' : 'grab',
pointer: 'grabbing', pointer: 'grabbing',
borderRadius: 2, borderRadius: 2,
backgroundColor: 'primary.dark', backgroundColor: 'primary.dark',

View File

@@ -65,6 +65,7 @@ const BaseStandardReaderProgressBar = ({
isLeadingPage, isLeadingPage,
_, _,
totalPages_, totalPages_,
showDraggingStyle,
) => ( ) => (
<ReaderProgressBarSlotDesktop <ReaderProgressBarSlotDesktop
pageName={page.name} pageName={page.name}
@@ -76,10 +77,10 @@ const BaseStandardReaderProgressBar = ({
isFirstPage={pagesIndex === 0} isFirstPage={pagesIndex === 0}
isLastPage={pagesIndex === totalPages_ - 1} isLastPage={pagesIndex === totalPages_ - 1}
isLeadingPage={isLeadingPage} isLeadingPage={isLeadingPage}
isDragging={isDragging} showDraggingStyle={showDraggingStyle}
/> />
), ),
[progressBarPosition, isDragging], [progressBarPosition],
)} )}
slotProps={{ slotProps={{
container: { container: {