diff --git a/src/components/reader/ReaderViewer.tsx b/src/components/reader/ReaderViewer.tsx index 44d568e93..78d4e53eb 100644 --- a/src/components/reader/ReaderViewer.tsx +++ b/src/components/reader/ReaderViewer.tsx @@ -20,6 +20,7 @@ import { pageGapState, optimizeContrastState, maxPageWidthState, + pageWidthMetricState, } from '../../state/settingStates'; import ExtensionImage from '../general/ExtensionImage'; @@ -46,6 +47,7 @@ const ReaderViewer: React.FC = (props: Props) => { const hideScrollbar = useRecoilValue(hideScrollbarState); const pageGap = useRecoilValue(pageGapState); const maxPageWidth = useRecoilValue(maxPageWidthState); + const pageWidthMetric = useRecoilValue(pageWidthMetricState); const optimizeContrast = useRecoilValue(optimizeContrastState); const viewerContainerClickHandler = (e: React.MouseEvent) => { @@ -263,7 +265,7 @@ const ReaderViewer: React.FC = (props: Props) => { className={` ${styles.container} ${hideScrollbar ? styles.noScrollbar : ''}`} - style={{ ['--USER-MAX-PAGE-WIDTH' as string]: `${maxPageWidth}%` }} + style={{ ['--USER-MAX-PAGE-WIDTH' as string]: `${maxPageWidth}${pageWidthMetric}` }} onClick={(e) => viewerContainerClickHandler(e)} > {pageStyle === PageStyle.LongStrip ? getSeparatePageContainers() : getSinglePageContainer()} diff --git a/src/components/settings/ReaderSettings.tsx b/src/components/settings/ReaderSettings.tsx index 4708ae513..9adf8eb2a 100644 --- a/src/components/settings/ReaderSettings.tsx +++ b/src/components/settings/ReaderSettings.tsx @@ -12,6 +12,7 @@ import { Group, Radio, Slider, + Menu, } from '@mantine/core'; import { IconArrowBigLeft, @@ -48,6 +49,7 @@ import { pageGapState, offsetPagesState, maxPageWidthState, + pageWidthMetricState, optimizeContrastState, keyToggleOffsetDoubleSpreadsState, keyToggleFullscreenState, @@ -88,8 +90,27 @@ const ReaderSettings: React.FC = (props: Props) => { const [pageGap, setPageGap] = useRecoilState(pageGapState); const [offsetPages, setOffsetPages] = useRecoilState(offsetPagesState); const [maxPageWidth, setMaxPageWidth] = useRecoilState(maxPageWidthState); + const [pageWidthMetric, setPageWidthMetric] = useRecoilState(pageWidthMetricState); const [optimizeContrast, setOptimizeContrast] = useRecoilState(optimizeContrastState); + const buttonStyles = (theme: MantineTheme) => ({ + root: { + height: 24, + fontSize: 12, + color: theme.colors.gray[4], + backgroundColor: theme.colors.dark[7], + '&:hover': { + backgroundColor: theme.colors.dark[4], + }, + }, + leftIcon: { + marginRight: 4, + }, + rightIcon: { + marginLeft: 0, + }, + }); + const updateReaderSetting = (readerSetting: ReaderSetting, value: any) => { switch (readerSetting) { case ReaderSetting.ReadingDirection: @@ -158,6 +179,9 @@ const ReaderSettings: React.FC = (props: Props) => { case ReaderSetting.MaxPageWidth: setMaxPageWidth(value); break; + case ReaderSetting.PageWidthMetric: + setPageWidthMetric(value); + break; case ReaderSetting.OptimizeContrast: setOptimizeContrast(value); break; @@ -306,24 +330,44 @@ const ReaderSettings: React.FC = (props: Props) => { checked={fitStretch} onChange={(e) => updateReaderSetting(ReaderSetting.FitStretch, e.target.checked)} /> - - Max page width - + + + + Max page width + + + + + + + {updateReaderSetting(ReaderSetting.PageWidthMetric, '%')}}> + % + + {updateReaderSetting(ReaderSetting.PageWidthMetric, 'px')}}> + px + + + + + (k + 1) * 10).map((i: number) => ({ - value: i, - }))} - styles={{ markLabel: { display: 'none' } }} - maw={400} - disabled={!fitContainToWidth} - defaultValue={maxPageWidth} - onChange={(value) => updateReaderSetting(ReaderSetting.MaxPageWidth, value)} - /> + label={`${maxPageWidth}${pageWidthMetric}`} + mx="sm" + min={10} + max={pageWidthMetric === '%' ? 100 : window.innerWidth} + step={10} + styles={{ markLabel: { display: 'none' } }} + maw={400} + marks={pageWidthMetric === '%' ? Array.from({ length: 10 }, (_v, k) => (k + 1) * 10).map((i: number) => ({ + value: i, + })) : []} + disabled={!fitContainToWidth} + defaultValue={maxPageWidth} + onChange={(value) => updateReaderSetting(ReaderSetting.MaxPageWidth, value)} + /> + Rendering (ReaderSetting.KeyExit); export const keyCloseOrBackState = atomFromSetting(ReaderSetting.KeyCloseOrBack); export const pageGapState = atomFromSetting(ReaderSetting.PageGap); export const maxPageWidthState = atomFromSetting(ReaderSetting.MaxPageWidth); +export const pageWidthMetricState = atomFromSetting(ReaderSetting.PageWidthMetric); export const offsetPagesState = atomFromSetting(ReaderSetting.OffsetPages); export const optimizeContrastState = atomFromSetting(ReaderSetting.OptimizeContrast);