diff --git a/packages/common/infra/src/atom/settings.ts b/packages/common/infra/src/atom/settings.ts index 8ff46461d..404cf443c 100644 --- a/packages/common/infra/src/atom/settings.ts +++ b/packages/common/infra/src/atom/settings.ts @@ -17,6 +17,7 @@ export type AppSetting = { autoDownloadUpdate: boolean; enableTelemetry: boolean; showLinkedDocInSidebar: boolean; + disableImageAntialiasing: boolean; }; export const windowFrameStyleOptions: AppSetting['windowFrameStyle'][] = [ 'frameless', @@ -35,6 +36,7 @@ const appSettingBaseAtom = atomWithStorage( autoDownloadUpdate: true, enableTelemetry: true, showLinkedDocInSidebar: true, + disableImageAntialiasing: false, }, undefined, { diff --git a/packages/frontend/apps/electron-renderer/src/shell/app.tsx b/packages/frontend/apps/electron-renderer/src/shell/app.tsx index 57f9da723..24eb8d07e 100644 --- a/packages/frontend/apps/electron-renderer/src/shell/app.tsx +++ b/packages/frontend/apps/electron-renderer/src/shell/app.tsx @@ -32,6 +32,7 @@ export function App() { BUILD_CONFIG.isElectron && environment.isMacOs && appSettings.enableBlurBackground; + return ( diff --git a/packages/frontend/component/src/theme/global.css b/packages/frontend/component/src/theme/global.css index 7a1f3155c..249e3ec88 100644 --- a/packages/frontend/component/src/theme/global.css +++ b/packages/frontend/component/src/theme/global.css @@ -322,3 +322,7 @@ math { .ai-block-diff-deleted .affine-block-component { margin: 0 !important; } + +html[data-image-antialiasing='off'] img { + image-rendering: pixelated; +} diff --git a/packages/frontend/core/src/components/context/index.tsx b/packages/frontend/core/src/components/context/index.tsx index 2e9bec4ff..e4c64fe56 100644 --- a/packages/frontend/core/src/components/context/index.tsx +++ b/packages/frontend/core/src/components/context/index.tsx @@ -6,11 +6,14 @@ import { Provider } from 'jotai'; import type { PropsWithChildren } from 'react'; import { useMemo } from 'react'; +import { useImageAntialiasing } from '../hooks/use-image-antialiasing'; + export type AffineContextProps = PropsWithChildren<{ store?: ReturnType; }>; export function AffineContext(props: AffineContextProps) { + useImageAntialiasing(); return ( { + document.documentElement.dataset.imageAntialiasing = + appSettings.disableImageAntialiasing ? 'off' : 'on'; + }, [appSettings.disableImageAntialiasing]); +} diff --git a/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx b/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx index d7575a540..c7016e01c 100644 --- a/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx +++ b/packages/frontend/core/src/desktop/dialogs/setting/general-setting/appearance/index.tsx @@ -197,6 +197,23 @@ export const AppearanceSettings = () => { {enableThemeEditor ? : null} + + + + updateSettings('disableImageAntialiasing', !checked) + } + /> + + + {BUILD_CONFIG.isWeb && !environment.isMobile ? (