* Add option to stretch small pages In case "fit page to window" is enabled, small pages can be scaled up to the available width and height, while maintaining the aspect ratio * Cleanup "imageStyle" function
143 lines
6.1 KiB
TypeScript
143 lines
6.1 KiB
TypeScript
/*
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
import { List, ListItem, ListItemText, Switch } from '@mui/material';
|
|
import Select from '@mui/material/Select';
|
|
import MenuItem from '@mui/material/MenuItem';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { AllowedMetadataValueTypes, IReaderSettings } from '@/typings';
|
|
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
|
import { isHorizontalReaderType } from '@/components/reader/Page.tsx';
|
|
|
|
interface IProps extends IReaderSettings {
|
|
setSettingValue: (key: keyof IReaderSettings, value: AllowedMetadataValueTypes) => void;
|
|
}
|
|
|
|
export function ReaderSettingsOptions({
|
|
staticNav,
|
|
loadNextOnEnding,
|
|
readerType,
|
|
showPageNumber,
|
|
skipDupChapters,
|
|
setSettingValue,
|
|
fitPageToWindow,
|
|
scalePage,
|
|
offsetFirstPage,
|
|
readerWidth,
|
|
}: IProps) {
|
|
const { t } = useTranslation();
|
|
const fitPageToWindowEligible = !isHorizontalReaderType(readerType);
|
|
return (
|
|
<List>
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.static_navigation')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={staticNav}
|
|
onChange={(e) => setSettingValue('staticNav', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.show_page_number')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={showPageNumber}
|
|
onChange={(e) => setSettingValue('showPageNumber', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.load_next_chapter')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={loadNextOnEnding}
|
|
onChange={(e) => setSettingValue('loadNextOnEnding', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.skip_dup_chapters')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={skipDupChapters}
|
|
onChange={(e) => setSettingValue('skipDupChapters', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
{fitPageToWindowEligible && (
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.fit_page_to_window')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={fitPageToWindow}
|
|
onChange={(e) => setSettingValue('fitPageToWindow', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
)}
|
|
{fitPageToWindowEligible && fitPageToWindow && (
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.scale_page')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={scalePage}
|
|
onChange={(e) => setSettingValue('scalePage', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
)}
|
|
{(readerType === 'DoubleLTR' || readerType === 'DoubleRTL') && (
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.offset_first_page')} />
|
|
<Switch
|
|
edge="end"
|
|
checked={offsetFirstPage}
|
|
onChange={(e) => setSettingValue('offsetFirstPage', e.target.checked)}
|
|
/>
|
|
</ListItem>
|
|
)}
|
|
{fitPageToWindowEligible && !fitPageToWindow && (
|
|
<NumberSetting
|
|
settingTitle={t('reader.settings.label.reader_width')}
|
|
settingValue={`${readerWidth}%`}
|
|
value={readerWidth}
|
|
minValue={10}
|
|
maxValue={100}
|
|
defaultValue={50}
|
|
valueUnit="%"
|
|
showSlider
|
|
handleUpdate={(width: number) => setSettingValue('readerWidth', width)}
|
|
listItemTextSx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}
|
|
/>
|
|
)}
|
|
<ListItem>
|
|
<ListItemText primary={t('reader.settings.label.reader_type')} />
|
|
<Select
|
|
variant="standard"
|
|
value={readerType}
|
|
onChange={(e) => setSettingValue('readerType', e.target.value)}
|
|
sx={{ p: 0 }}
|
|
>
|
|
<MenuItem value="SingleLTR">{t('reader.settings.reader_type.label.single_page_ltr')}</MenuItem>
|
|
<MenuItem value="SingleRTL">{t('reader.settings.reader_type.label.single_page_rtl')}</MenuItem>
|
|
{/* <MenuItem value="SingleVertical">
|
|
Vertical(WIP)
|
|
</MenuItem> */}
|
|
<MenuItem value="DoubleLTR">{t('reader.settings.reader_type.label.double_page_ltr')}</MenuItem>
|
|
<MenuItem value="DoubleRTL">{t('reader.settings.reader_type.label.double_page_rtl')}</MenuItem>
|
|
<MenuItem value="Webtoon">{t('reader.settings.reader_type.label.webtoon')}</MenuItem>
|
|
<MenuItem value="ContinuesVertical">
|
|
{t('reader.settings.reader_type.label.continuous_vertical')}
|
|
</MenuItem>
|
|
<MenuItem value="ContinuesHorizontalLTR">
|
|
{t('reader.settings.reader_type.label.continuous_horizontal_ltr')}
|
|
</MenuItem>
|
|
<MenuItem value="ContinuesHorizontalRTL">
|
|
{t('reader.settings.reader_type.label.continuous_horizontal_rtl')}
|
|
</MenuItem>
|
|
</Select>
|
|
</ListItem>
|
|
</List>
|
|
);
|
|
}
|