From 05ecc7626853da9d9d5a1310ec2b6747bdfbe109 Mon Sep 17 00:00:00 2001 From: c30077388 Date: Thu, 26 Jun 2025 21:08:53 +0800 Subject: [PATCH] =?UTF-8?q?theme=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: c30077388 Change-Id: Ia9a0db24a7ccd5de31cc6360626d0049b340d397 --- .../declarative_frontend/engine/arkTheme.js | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/engine/arkTheme.js b/frameworks/bridge/declarative_frontend/engine/arkTheme.js index 462521accdd..e22f9e589d4 100644 --- a/frameworks/bridge/declarative_frontend/engine/arkTheme.js +++ b/frameworks/bridge/declarative_frontend/engine/arkTheme.js @@ -40,17 +40,23 @@ class ArkThemeNativeHelper { if (colorMode && colorMode !== ThemeColorMode.SYSTEM) { ArkThemeScopeManager.getInstance().onEnterLocalColorMode(colorMode); } - getUINativeModule().theme.createAndBindTheme(themeScopeId, themeId, ArkThemeNativeHelper.convertColorsToArray(theme === null || theme === void 0 ? void 0 : theme.colors), colorMode, onThemeScopeDestroy); + let useColors = theme?.colors; + if (colorMode === ThemeColorMode.DARK && theme?.colorsDark) { + useColors = theme.colorsDark; + } + getUINativeModule().theme.createAndBindTheme(themeScopeId, themeId, ArkThemeNativeHelper.convertColorsToArray(useColors), colorMode, onThemeScopeDestroy); if (colorMode && colorMode !== ThemeColorMode.SYSTEM) { ArkThemeScopeManager.getInstance().onExitLocalColorMode(); } } static setDefaultTheme(theme) { - const colorArray = ArkThemeNativeHelper.convertColorsToArray(theme === null || theme === void 0 ? void 0 : theme.colors); + // const colorArray = ArkThemeNativeHelper.convertColorsToArray(theme === null || theme === void 0 ? void 0 : theme.colors); + const colorArrayLight = ArkThemeNativeHelper.convertColorsToArray(theme?.colors); + const colorArrayDark = ArkThemeNativeHelper.convertColorsToArray(theme?.colorsDark || theme?.colors); ArkThemeScopeManager.getInstance().onEnterLocalColorMode(ThemeColorMode.LIGHT); - getUINativeModule().theme.setDefaultTheme(colorArray, false); + getUINativeModule().theme.setDefaultTheme(colorArrayLight, false); ArkThemeScopeManager.getInstance().onEnterLocalColorMode(ThemeColorMode.DARK); - getUINativeModule().theme.setDefaultTheme(colorArray, true); + getUINativeModule().theme.setDefaultTheme(colorArrayDark, true); ArkThemeScopeManager.getInstance().onExitLocalColorMode(); } static convertThemeToColorArray(theme) { @@ -276,6 +282,10 @@ class ArkThemeBase { copyTheme.colors = {}; Object.assign(copyTheme.colors, customTheme.colors); } + if (customTheme.colorsDark) { + copyTheme.colorsDark = {}; + Object.assign(copyTheme.colorsDark, customTheme.colorsDark); + } if (customTheme.shapes) { copyTheme.shapes = {}; Object.assign(copyTheme.shapes, customTheme.shapes); @@ -685,7 +695,11 @@ class ArkThemeImpl extends ArkThemeBase { super(baselineTheme.id, undefined, colorMode, new ArkColorsImpl(undefined, baselineTheme.colors), new ArkShapesImpl(undefined, baselineTheme.shapes), new ArkTypographyImpl(undefined, baselineTheme.typography)); return; } - super(baselineTheme.id, customTheme, colorMode, new ArkColorsImpl(customTheme.colors, baselineTheme.colors), new ArkShapesImpl(customTheme.shapes, baselineTheme.shapes), new ArkTypographyImpl(customTheme.typography, baselineTheme.typography)); + let useColors = customTheme.colors; + if (colorMode === ThemeColorMode.DARK && customTheme.colorsDark) { + useColors = customTheme.colorsDark; + } + super(baselineTheme.id, customTheme, colorMode, new ArkColorsImpl(useColors, baselineTheme.colors), new ArkShapesImpl(customTheme.shapes, baselineTheme.shapes), new ArkTypographyImpl(customTheme.typography, baselineTheme.typography)); } } class ArkThemeScopeItem { @@ -1013,8 +1027,13 @@ class ArkThemeScopeManager { makeTheme(customTheme, colorMode) { var _a; const baselineTheme = (_a = this.defaultTheme) !== null && _a !== void 0 ? _a : ArkThemeScopeManager.SystemTheme; - const theme = ArkThemeCache.getInstance().get(baselineTheme.id, customTheme, colorMode); - return theme ? theme : new ArkThemeImpl(customTheme, colorMode, baselineTheme); + let themeColors = customTheme?.colors; + if (colorMode === ThemeColorMode.DARK && customTheme?.colorsDark) { + themeColors = customTheme.colorsDark; + } + const realTheme = customTheme ? { ...customTheme, colors: themeColors } : undefined; + const theme = ArkThemeCache.getInstance().get(baselineTheme.id, realTheme, colorMode); + return theme ? theme : new ArkThemeImpl(realTheme, colorMode, baselineTheme); } static cloneCustomThemeWithExpand(customTheme) { const theme = ArkThemeBase.copyCustomTheme(customTheme); -- Gitee