From d4af2d3ef5b05995ea43724c57af30cffb5f93ce Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Wed, 9 Apr 2025 22:03:24 +0800 Subject: [PATCH] feat: also add sans-serif CJK fonts (#853) --- .../app/reader/components/settings/FontPanel.tsx | 15 ++++++++++----- apps/readest-app/src/services/constants.ts | 6 ++++-- apps/readest-app/src/utils/style.ts | 7 ++++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/apps/readest-app/src/app/reader/components/settings/FontPanel.tsx b/apps/readest-app/src/app/reader/components/settings/FontPanel.tsx index 47aae971..f38d3d2f 100644 --- a/apps/readest-app/src/app/reader/components/settings/FontPanel.tsx +++ b/apps/readest-app/src/app/reader/components/settings/FontPanel.tsx @@ -5,6 +5,8 @@ import { ANDROID_FONTS, CJK_FONTS_PATTENS, CJK_NAMES_PATTENS, + CJK_SANS_SERIF_FONTS, + CJK_SERIF_FONTS, IOS_FONTS, LINUX_FONTS, MACOS_FONTS, @@ -111,6 +113,11 @@ const FontPanel: React.FC<{ bookKey: string }> = ({ bookKey }) => { const [sansSerifFont, setSansSerifFont] = useState(viewSettings.sansSerifFont!); const [monospaceFont, setMonospaceFont] = useState(viewSettings.monospaceFont!); const [fontWeight, setFontWeight] = useState(viewSettings.fontWeight!); + const [CJKFonts] = useState(() => { + return Array.from(new Set([...sysFonts, ...CJK_SERIF_FONTS, ...CJK_SANS_SERIF_FONTS])) + .filter((font) => CJK_FONTS_PATTENS.test(font) || CJK_NAMES_PATTENS.test(font)) + .sort((a, b) => a.localeCompare(b)); + }); useEffect(() => { if (isTauriAppPlatform() && appService?.hasSysFontsList) { @@ -238,9 +245,7 @@ const FontPanel: React.FC<{ bookKey: string }> = ({ bookKey }) => { className='config-item-top' family='serif' label={_('CJK Font')} - options={sysFonts.filter( - (font) => CJK_FONTS_PATTENS.test(font) || CJK_NAMES_PATTENS.test(font), - )} + options={CJKFonts} selected={defaultCJKFont} onSelect={setDefaultCJKFont} /> @@ -267,7 +272,7 @@ const FontPanel: React.FC<{ bookKey: string }> = ({ bookKey }) => { className='config-item-top' family='serif' label={_('Serif Font')} - options={SERIF_FONTS} + options={[...SERIF_FONTS, ...CJK_SERIF_FONTS]} moreOptions={sysFonts} selected={serifFont} onSelect={setSerifFont} @@ -275,7 +280,7 @@ const FontPanel: React.FC<{ bookKey: string }> = ({ bookKey }) => { { const { fg, primary } = themeCode; - const lastSerifFonts = ['LXGW WenKai GB Screen', 'LXGW WenKai TC', 'Georgia', 'Times New Roman']; + const lastSerifFonts = ['Georgia', 'Times New Roman']; const serifFonts = [ serif, ...SERIF_FONTS.filter( (font) => font !== serif && font !== defaultCJKFont && !lastSerifFonts.includes(font), ), ...(defaultCJKFont !== serif ? [defaultCJKFont] : []), + ...CJK_SERIF_FONTS.filter((font) => font !== serif && font !== defaultCJKFont), ...lastSerifFonts.filter( (font) => SERIF_FONTS.includes(font) && !lastSerifFonts.includes(defaultCJKFont), ), @@ -45,6 +48,7 @@ const getFontStyles = ( sansSerif, ...SANS_SERIF_FONTS.filter((font) => font !== sansSerif && font !== defaultCJKFont), ...(defaultCJKFont !== sansSerif ? [defaultCJKFont] : []), + ...CJK_SANS_SERIF_FONTS.filter((font) => font !== sansSerif && font !== defaultCJKFont), ...FALLBACK_FONTS, ]; const monospaceFonts = [monospace, ...MONOSPACE_FONTS.filter((font) => font !== monospace)]; @@ -107,6 +111,7 @@ const getAdditionalFontLinks = () => ` + `;