feat: add option to disable HardwareAcceleration

This commit is contained in:
ezequielnick 2025-08-29 11:09:46 +08:00
parent e35fa316fc
commit f7716ae448
8 changed files with 81 additions and 0 deletions

View File

@ -199,6 +199,21 @@ function getSystemLanguage(): 'zh-CN' | 'en-US' {
return locale.startsWith('zh') ? 'zh-CN' : 'en-US' return locale.startsWith('zh') ? 'zh-CN' : 'en-US'
} }
// 硬件加速设置
async function initHardwareAcceleration(): Promise<void> {
try {
await initBasic()
const { disableHardwareAcceleration = false } = await getAppConfig()
if (disableHardwareAcceleration) {
app.disableHardwareAcceleration()
}
} catch (e) {
console.warn('Failed to read hardware acceleration config:', e)
}
}
initHardwareAcceleration()
// This method will be called when Electron has finished // This method will be called when Electron has finished
// initialization and is ready to create browser windows. // initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs. // Some APIs can only be used after this event occurs.

View File

@ -22,6 +22,7 @@ export const defaultConfig: IAppConfig = {
controlDns: true, controlDns: true,
controlSniff: true, controlSniff: true,
floatingWindowCompatMode: true, floatingWindowCompatMode: true,
disableHardwareAcceleration: false,
disableLoopbackDetector: false, disableLoopbackDetector: false,
disableEmbedCA: false, disableEmbedCA: false,
disableSystemCA: false, disableSystemCA: false,

View File

@ -30,6 +30,7 @@ import { IoIosHelpCircle, IoMdCloudDownload } from 'react-icons/io'
import { MdEditDocument } from 'react-icons/md' import { MdEditDocument } from 'react-icons/md'
import CSSEditorModal from './css-editor-modal' import CSSEditorModal from './css-editor-modal'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import BaseConfirmModal from '../base/base-confirm-modal'
const GeneralConfig: React.FC = () => { const GeneralConfig: React.FC = () => {
const { t, i18n } = useTranslation() const { t, i18n } = useTranslation()
@ -39,6 +40,8 @@ const GeneralConfig: React.FC = () => {
const [openCSSEditor, setOpenCSSEditor] = useState(false) const [openCSSEditor, setOpenCSSEditor] = useState(false)
const [fetching, setFetching] = useState(false) const [fetching, setFetching] = useState(false)
const [isRelaunching, setIsRelaunching] = useState(false) const [isRelaunching, setIsRelaunching] = useState(false)
const [showHardwareAccelConfirm, setShowHardwareAccelConfirm] = useState(false)
const [pendingHardwareAccelValue, setPendingHardwareAccelValue] = useState(false)
const { setTheme } = useTheme() const { setTheme } = useTheme()
const { const {
silentStart = false, silentStart = false,
@ -49,6 +52,7 @@ const GeneralConfig: React.FC = () => {
showFloatingWindow: showFloating = false, showFloatingWindow: showFloating = false,
spinFloatingIcon = true, spinFloatingIcon = true,
floatingWindowCompatMode = true, floatingWindowCompatMode = true,
disableHardwareAcceleration = false,
useWindowFrame = false, useWindowFrame = false,
autoQuitWithoutCore = false, autoQuitWithoutCore = false,
autoQuitWithoutCoreDelay = 60, autoQuitWithoutCoreDelay = 60,
@ -78,6 +82,28 @@ const GeneralConfig: React.FC = () => {
}} }}
/> />
)} )}
{showHardwareAccelConfirm && (
<BaseConfirmModal
isOpen={showHardwareAccelConfirm}
title={t('settings.hardwareAcceleration.confirm.title')}
content={t('settings.hardwareAcceleration.confirm.content')}
onCancel={() => {
setShowHardwareAccelConfirm(false)
setPendingHardwareAccelValue(false)
}}
onConfirm={async () => {
setShowHardwareAccelConfirm(false)
setIsRelaunching(true)
try {
await patchAppConfig({ disableHardwareAcceleration: pendingHardwareAccelValue })
await relaunchApp()
} catch (e) {
alert(e)
setIsRelaunching(false)
}
}}
/>
)}
<SettingCard> <SettingCard>
<SettingItem title={t('settings.language')} divider> <SettingItem title={t('settings.language')} divider>
<Select <Select
@ -348,6 +374,28 @@ const GeneralConfig: React.FC = () => {
}, 1000)} }, 1000)}
/> />
</SettingItem> </SettingItem>
<SettingItem
title={t('settings.disableHardwareAcceleration')}
actions={
<Tooltip content={t('settings.disableHardwareAccelerationTooltip')}>
<Button isIconOnly size="sm" variant="light">
<IoIosHelpCircle className="text-lg" />
</Button>
</Tooltip>
}
divider
>
<Switch
size="sm"
isSelected={disableHardwareAcceleration}
isDisabled={isRelaunching}
onValueChange={(v) => {
if (isRelaunching) return
setPendingHardwareAccelValue(v)
setShowHardwareAccelConfirm(true)
}}
/>
</SettingItem>
<SettingItem title={t('settings.backgroundColor')} divider> <SettingItem title={t('settings.backgroundColor')} divider>
<Tabs <Tabs
size="sm" size="sm"

View File

@ -65,6 +65,10 @@
"settings.showTraffic_mac": "Show Network Speed in Status Bar", "settings.showTraffic_mac": "Show Network Speed in Status Bar",
"settings.showDockIcon": "Show Dock Icon", "settings.showDockIcon": "Show Dock Icon",
"settings.useWindowFrame": "Use System Title Bar", "settings.useWindowFrame": "Use System Title Bar",
"settings.disableHardwareAcceleration": "Disable Hardware Acceleration",
"settings.disableHardwareAccelerationTooltip": "Disabling hardware acceleration can resolve rendering issues or crashes caused by graphics driver problems, but may reduce performance. Requires app restart to take effect",
"settings.hardwareAcceleration.confirm.title": "Confirm App Restart",
"settings.hardwareAcceleration.confirm.content": "Changing hardware acceleration settings requires an app restart to take effect. Restart now?",
"settings.backgroundColor": "Background Color", "settings.backgroundColor": "Background Color",
"settings.backgroundAuto": "Auto", "settings.backgroundAuto": "Auto",
"settings.backgroundDark": "Dark", "settings.backgroundDark": "Dark",

View File

@ -62,6 +62,10 @@
"settings.showTraffic_mac": "نمایش سرعت شبکه در نوار وضعیت", "settings.showTraffic_mac": "نمایش سرعت شبکه در نوار وضعیت",
"settings.showDockIcon": "نمایش آیکون Dock", "settings.showDockIcon": "نمایش آیکون Dock",
"settings.useWindowFrame": "استفاده از نوار عنوان سیستم", "settings.useWindowFrame": "استفاده از نوار عنوان سیستم",
"settings.disableHardwareAcceleration": "غیرفعال کردن شتاب سخت‌افزاری",
"settings.disableHardwareAccelerationTooltip": "غیرفعال کردن شتاب سخت‌افزاری می‌تواند مشکلات رندرینگ یا کرش ناشی از مشکلات درایور گرافیک را حل کند، اما ممکن است عملکرد را کاهش دهد. نیاز به راه‌اندازی مجدد برنامه دارد",
"settings.hardwareAcceleration.confirm.title": "تایید راه‌اندازی مجدد برنامه",
"settings.hardwareAcceleration.confirm.content": "تغییر تنظیمات شتاب سخت‌افزاری نیاز به راه‌اندازی مجدد برنامه دارد. اکنون راه‌اندازی مجدد شود؟",
"settings.backgroundColor": "رنگ پس‌زمینه", "settings.backgroundColor": "رنگ پس‌زمینه",
"settings.backgroundAuto": "خودکار", "settings.backgroundAuto": "خودکار",
"settings.backgroundDark": "تیره", "settings.backgroundDark": "تیره",

View File

@ -62,6 +62,10 @@
"settings.showTraffic_mac": "Показывать скорость в строке состояния", "settings.showTraffic_mac": "Показывать скорость в строке состояния",
"settings.showDockIcon": "Показывать значок в доке", "settings.showDockIcon": "Показывать значок в доке",
"settings.useWindowFrame": "Использовать системную рамку окна", "settings.useWindowFrame": "Использовать системную рамку окна",
"settings.disableHardwareAcceleration": "Отключить аппаратное ускорение",
"settings.disableHardwareAccelerationTooltip": "Отключение аппаратного ускорения может решить проблемы с рендерингом или сбоями, вызванными проблемами драйверов графики, но может снизить производительность. Требует перезапуска приложения",
"settings.hardwareAcceleration.confirm.title": "Подтверждение перезапуска приложения",
"settings.hardwareAcceleration.confirm.content": "Изменение настроек аппаратного ускорения требует перезапуска приложения. Перезапустить сейчас?",
"settings.backgroundColor": "Цвет фона", "settings.backgroundColor": "Цвет фона",
"settings.backgroundAuto": "Авто", "settings.backgroundAuto": "Авто",
"settings.backgroundDark": "Тёмный", "settings.backgroundDark": "Тёмный",

View File

@ -65,6 +65,10 @@
"settings.showTraffic_mac": "在状态栏显示网速", "settings.showTraffic_mac": "在状态栏显示网速",
"settings.showDockIcon": "显示 Dock 图标", "settings.showDockIcon": "显示 Dock 图标",
"settings.useWindowFrame": "使用系统标题栏", "settings.useWindowFrame": "使用系统标题栏",
"settings.disableHardwareAcceleration": "禁用硬件加速",
"settings.disableHardwareAccelerationTooltip": "禁用硬件加速可以解决某些显卡驱动问题导致的渲染异常或崩溃,但可能会降低性能。修改后需要重启应用生效",
"settings.hardwareAcceleration.confirm.title": "确认重启应用",
"settings.hardwareAcceleration.confirm.content": "修改硬件加速设置需要重启应用才能生效。是否立即重启?",
"settings.backgroundColor": "背景颜色", "settings.backgroundColor": "背景颜色",
"settings.backgroundAuto": "自动", "settings.backgroundAuto": "自动",
"settings.backgroundDark": "深色", "settings.backgroundDark": "深色",

View File

@ -237,6 +237,7 @@ interface IAppConfig {
disableTray?: boolean disableTray?: boolean
showFloatingWindow?: boolean showFloatingWindow?: boolean
floatingWindowCompatMode?: boolean floatingWindowCompatMode?: boolean
disableHardwareAcceleration?: boolean
connectionCardStatus?: CardStatus connectionCardStatus?: CardStatus
dnsCardStatus?: CardStatus dnsCardStatus?: CardStatus
logCardStatus?: CardStatus logCardStatus?: CardStatus