4#include "private/qohosplatformtheme_p.h"
11#include <QtCore/private/qcore_ohos_p.h>
12#include <QtCore/private/qohoscommon_p.h>
13#include <QtCore/private/qohoslogger_p.h>
14#include <QtGui/private/qguiapplication_p.h>
15#include <QtGui/private/qhighdpiscaling_p.h>
16#include <QtGui/private/qabstractfileiconengine_p.h>
17#include <initializer_list>
18#include <qohosenums.h>
19#include <qohosjsmain.h>
20#include <qohosjsutils.h>
21#include <qohosutils.h>
22#include <qpa/qplatformfontdatabase.h>
23#include <qpa/qplatformintegration.h>
33 auto disabledColor = color;
34 disabledColor.setAlphaF(qBound(0.0, color.alphaF() * 0.4, 1.0));
67 const auto activeWindow = QColor(
"#FFFFFFFF");
68 const auto activeButtonText = QColor(
"#0A59F7");
69 const auto activeHighlight = QColor(
"#FF007DFF");
70 const auto highlighted = QColor(
"#FF0A59F7");
71 const auto textPrimary = QColor(
"#FF182431");
74 .activeWindow = activeWindow,
75 .inactiveWindow = makeInactiveOrDisabledFromColor(activeWindow),
76 .activeButtonText = activeButtonText,
77 .inactiveButtonText = makeInactiveOrDisabledFromColor(activeButtonText),
78 .activeHighlight = activeHighlight,
79 .inactiveHighlight = makeInactiveOrDisabledFromColor(activeHighlight),
80 .clickEffect = QColor(
"#1A000000"),
81 .hover = QColor(
"#0D000000"),
82 .foregroundContrary = QColor(
"#FFFFFF"),
83 .highlighted = highlighted,
84 .inactiveHighlighted = makeInactiveOrDisabledFromColor(highlighted),
85 .textPrimary = textPrimary,
86 .inactiveTextPrimary = textPrimary,
87 .disabledTextPrimary = makeInactiveOrDisabledFromColor(textPrimary),
88 .inactiveText = makeInactiveOrDisabledFromColor(textPrimary),
89 .componentNormal = QColor(
"#19182431"),
90 .componentActivated = QColor(
"#007DFF"),
91 .indicatorArrow = QColor(
"#E5182431"),
92 .scrollBarSlider = QColor(
"#182431"),
93 .switchBgOff = QColor(
"#33FFFFFF"),
94 .switchOutlineOff = QColor(
"#66182431"),
95 .window = QColor(
"#FFF1F3F5"),
101 const auto activeWindow = QColor(
"#18181A");
102 const auto activeButtonText = QColor(
"#3F97E9");
103 const auto activeHighlight = QColor(
"#006CDE");
104 const auto highlighted = QColor(
"#3F97E9");
105 const auto textPrimary = QColor(
"#DBFFFFFF");
108 .activeWindow = activeWindow,
109 .inactiveWindow = makeInactiveOrDisabledFromColor(activeWindow),
110 .activeButtonText = activeButtonText,
111 .inactiveButtonText = makeInactiveOrDisabledFromColor(activeButtonText),
112 .activeHighlight = activeHighlight,
113 .inactiveHighlight = makeInactiveOrDisabledFromColor(activeHighlight),
114 .clickEffect = QColor(
"#26FFFFFF"),
115 .hover = QColor(
"#19FFFFFF"),
116 .foregroundContrary = QColor(
"#E5E5E5"),
117 .highlighted = highlighted,
118 .inactiveHighlighted = makeInactiveOrDisabledFromColor(highlighted),
119 .textPrimary = textPrimary,
120 .inactiveTextPrimary = textPrimary,
121 .disabledTextPrimary = makeInactiveOrDisabledFromColor(textPrimary),
122 .inactiveText = makeInactiveOrDisabledFromColor(textPrimary),
123 .componentNormal = QColor(
"#19FFFFFF"),
124 .componentActivated = QColor(
"#3F97E9"),
125 .indicatorArrow = QColor(
"#DBFFFFFF"),
126 .scrollBarSlider = QColor(
"#FFFFFF"),
127 .switchBgOff = QColor(
"#33000000"),
128 .switchOutlineOff = QColor(
"#66FFFFFF"),
129 .window = QColor(
"#FF000000"),
143 const auto activeButton = QColor(
"#0C182431");
146 .activeButton = activeButton,
147 .inactiveButton = makeInactiveOrDisabledFromColor(activeButton),
148 .focusedOutline = QColor(
"#007DFF"),
149 .enabledDefaultButtonText = QColor(
"#FFFFFFFF"),
155 const auto activeButton = QColor(
"#19FFFFFF");
158 .activeButton = activeButton,
159 .inactiveButton = makeInactiveOrDisabledFromColor(activeButton),
160 .focusedOutline = QColor(
"#3F97E9"),
161 .enabledDefaultButtonText = QColor(
"#E5E5E5"),
173 .windowButtonBackground = QColor(
"#FFD0CFD5"),
180 .windowButtonBackground = QColor(
"#FFD0CFD5"),
195 .activeWindowFrame = QColor(
"#FFE4E4E4"),
196 .inactiveWindowFrame = QColor(
"#FFF2F3F5"),
197 .textHint = QColor(
"#99182431"),
198 .textTertiary = QColor(
"#66182431"),
205 .activeWindowFrame = QColor(
"#FF000000"),
206 .inactiveWindowFrame = QColor(
"#FF18181A"),
207 .textHint = QColor(
"#99FFFFFF"),
208 .textTertiary = QColor(
"#66FFFFFF"),
221 .listSeparator = QColor(
"#1A000000"),
222 .inactiveText = makeInactiveOrDisabledFromColor(palettes.textPrimary),
229 .listSeparator = QColor(
"#33FFFFFF"),
230 .inactiveText = makeInactiveOrDisabledFromColor(palettes.textPrimary),
243 const auto inactiveWindowText = QColor(
"#99182431");
246 .activeWindowText = QColor(
"#FF007DFF"),
247 .inactiveWindowText = inactiveWindowText,
248 .disabledWindowText = makeInactiveOrDisabledFromColor(inactiveWindowText),
254 const auto inactiveWindowText = QColor(
"#99FFFFFF");
257 .activeWindowText = QColor(
"#FF3F97E9"),
258 .inactiveWindowText = inactiveWindowText,
259 .disabledWindowText = makeInactiveOrDisabledFromColor(inactiveWindowText),
271 const auto textEditBackground = QColor(
"#0C182431");
273 .textEditBackground = textEditBackground,
274 .inactiveTextEditBackground = makeInactiveOrDisabledFromColor(textEditBackground),
280 const auto textEditBackground = QColor(
"#19FFFFFF");
282 .textEditBackground = textEditBackground,
283 .inactiveTextEditBackground = makeInactiveOrDisabledFromColor(textEditBackground),
297 .background = QColor(
"#00000000"),
298 .groupBoxFrame = QColor(
"#66000000"),
299 .shadowXS = QColor(
"#19000000"),
306 .background = QColor(
"#00000000"),
307 .groupBoxFrame = QColor(
"#66FFFFFF"),
308 .shadowXS = QColor(
"#19FFFFFF"),
320 .activeButton = QColor(
"#FFFFFFFF"),
327 .activeButton = QColor(
"#FF18181A"),
340 .toolTipBorder = QColor(
"#1A000000"),
341 .toolTipBase = QColor(
"#FFFFFFFF"),
348 .toolTipBorder = QColor(
"#1AFFFFFF"),
349 .toolTipBase = QColor(
"#404040"),
372 .palettes = palettes,
390 .palettes = palettes,
412 qOhosReportFatalErrorAndAbort(
413 "%s: got unsupported ColorScheme: %d", Q_FUNC_INFO,
static_cast<
int>(scheme));
420 const QPalette &basePalette, std::initializer_list<std::tuple<QPalette::ColorGroup, QPalette::ColorRole,
const QColor &>> brushEntries)
422 auto palette = basePalette;
424 for (
const auto &brushEntry : brushEntries) {
426 std::get<QPalette::ColorGroup>(brushEntry),
427 std::get<QPalette::ColorRole>(brushEntry),
428 std::get<
const QColor &>(brushEntry));
434QPalette makePalette(std::initializer_list<std::tuple<QPalette::ColorGroup, QPalette::ColorRole,
const QColor &>> brushEntries)
436 return makePalette(QPalette(), brushEntries);
443 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.componentActivated},
445 {QPalette::Active, QPalette::Button, palettesColors.button.activeButton},
446 {QPalette::Disabled, QPalette::Button, palettesColors.button.inactiveButton},
447 {QPalette::Inactive, QPalette::Button, palettesColors.button.inactiveButton},
449 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
450 {QPalette::Disabled, QPalette::ButtonText, palettesColors.palettes.inactiveButtonText},
451 {QPalette::Inactive, QPalette::ButtonText, palettesColors.palettes.inactiveButtonText},
453 {QPalette::All, QPalette::BrightText, palettesColors.button.enabledDefaultButtonText},
455 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
456 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
458 {QPalette::Active, QPalette::Highlight, palettesColors.button.focusedOutline},
459 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.indicatorArrow}
466 makeButtonPalette(palettesColors),
468 {QPalette::Active, QPalette::AlternateBase, palettesColors.toolButton.windowButtonBackground},
476 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
477 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.inactiveWindow},
478 {QPalette::Inactive, QPalette::Window, palettesColors.palettes.inactiveWindow},
480 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.textPrimary},
481 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.disabledTextPrimary},
482 {QPalette::Inactive, QPalette::WindowText, palettesColors.palettes.inactiveTextPrimary},
484 {QPalette::Active, QPalette::Text, palettesColors.palettes.textPrimary},
485 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.disabledTextPrimary},
486 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.inactiveTextPrimary},
488 {QPalette::Active, QPalette::Base, palettesColors.system.activeWindowFrame},
489 {QPalette::Disabled, QPalette::Base, palettesColors.system.inactiveWindowFrame},
490 {QPalette::Inactive, QPalette::Base, palettesColors.system.inactiveWindowFrame},
492 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.textPrimary},
494 {QPalette::Active, QPalette::Highlight, palettesColors.palettes.highlighted},
496 {QPalette::All, QPalette::PlaceholderText, palettesColors.system.textHint},
497 {QPalette::Disabled, QPalette::PlaceholderText, palettesColors.system.textTertiary},
499 {QPalette::Active, QPalette::Midlight, palettesColors.palettes.scrollBarSlider},
501 {QPalette::Active, QPalette::Mid, palettesColors.palettes.componentNormal}
509 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.switchBgOff},
510 {QPalette::Inactive, QPalette::Button, palettesColors.palettes.switchOutlineOff},
511 {QPalette::Active, QPalette::Button, palettesColors.palettes.highlighted},
512 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.highlighted},
513 {QPalette::Inactive, QPalette::WindowText, palettesColors.palettes.inactiveText},
514 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.inactiveHighlighted},
515 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
516 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
524 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.componentActivated},
525 {QPalette::All, QPalette::Base, palettesColors.palettes.window},
526 {QPalette::All, QPalette::Window, palettesColors.palettes.window},
527 {QPalette::Active, QPalette::Text, palettesColors.palettes.highlighted},
528 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveText},
529 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.inactiveHighlighted},
530 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
531 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
532 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.indicatorArrow}
540 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
541 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.switchBgOff},
542 {QPalette::Inactive, QPalette::Button, palettesColors.palettes.switchOutlineOff},
543 {QPalette::Active, QPalette::Button, palettesColors.palettes.highlighted},
545 {QPalette::Active, QPalette::Text, palettesColors.palettes.textPrimary},
546 {QPalette::Disabled, QPalette::Text, palettesColors.menu.inactiveText},
547 {QPalette::Inactive, QPalette::Text, palettesColors.menu.inactiveText},
549 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
550 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
552 {QPalette::Active, QPalette::Mid, palettesColors.menu.listSeparator}
560 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.textPrimary},
561 {QPalette::Disabled, QPalette::ButtonText, palettesColors.menu.inactiveText},
562 {QPalette::Inactive, QPalette::ButtonText, palettesColors.menu.inactiveText},
570 {QPalette::Active, QPalette::WindowText, palettesColors.tabBar.activeWindowText},
571 {QPalette::Inactive, QPalette::WindowText, palettesColors.tabBar.inactiveWindowText},
572 {QPalette::Disabled, QPalette::WindowText, palettesColors.tabBar.disabledWindowText},
574 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
575 {QPalette::Inactive, QPalette::Window, palettesColors.palettes.inactiveWindow},
576 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.inactiveWindow},
578 {QPalette::Active, QPalette::Highlight, palettesColors.palettes.activeHighlight},
579 {QPalette::Inactive, QPalette::Highlight, palettesColors.palettes.inactiveHighlight},
580 {QPalette::Disabled, QPalette::Highlight, palettesColors.palettes.inactiveHighlight},
587 makeSystemPalette(palettesColors),
589 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.componentActivated},
590 {QPalette::All, QPalette::Base, palettesColors.textLineEdit.textEditBackground},
591 {QPalette::Disabled, QPalette::Base, palettesColors.textLineEdit.inactiveTextEditBackground},
592 {QPalette::All, QPalette::Text, palettesColors.palettes.textPrimary},
593 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.disabledTextPrimary},
600 makeTextLineEditPalette(palettesColors),
602 {QPalette::All, QPalette::Base, palettesColors.palettes.activeWindow},
610 {QPalette::Active, QPalette::Button, palettesColors.palettes.highlighted},
611 {QPalette::Inactive, QPalette::Button, palettesColors.palettes.switchOutlineOff},
612 {QPalette::Active, QPalette::Base, palettesColors.system.activeWindowFrame},
613 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.switchBgOff},
614 {QPalette::Active, QPalette::AlternateBase, palettesColors.groupBox.groupBoxFrame},
615 {QPalette::Active, QPalette::Window, palettesColors.groupBox.background},
616 {QPalette::Inactive, QPalette::Window, palettesColors.groupBox.background},
617 {QPalette::Active, QPalette::Window, palettesColors.palettes.window},
618 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.window},
619 {QPalette::Active, QPalette::Text, palettesColors.palettes.highlighted},
620 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.highlighted},
621 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveHighlighted},
622 {QPalette::Current, QPalette::Text, palettesColors.palettes.highlighted},
623 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.inactiveHighlighted},
624 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.textPrimary},
625 {QPalette::Disabled, QPalette::ButtonText, palettesColors.palettes.inactiveHighlighted},
626 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
627 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
628 {QPalette::Active, QPalette::Shadow, palettesColors.groupBox.shadowXS},
629 {QPalette::Active, QPalette::Midlight, palettesColors.palettes.scrollBarSlider},
630 {QPalette::Active, QPalette::Mid, palettesColors.palettes.componentNormal}
638 {QPalette::Active, QPalette::Button, palettesColors.header.activeButton},
639 {QPalette::Inactive, QPalette::Button, palettesColors.header.activeButton},
640 {QPalette::Disabled, QPalette::Button, palettesColors.palettes.inactiveWindow},
642 {QPalette::Current, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
643 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
644 {QPalette::Inactive, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
645 {QPalette::Disabled, QPalette::ButtonText, palettesColors.palettes.inactiveButtonText},
653 {QPalette::Active, QPalette::Base, palettesColors.palettes.window},
654 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.window},
655 {QPalette::Disabled, QPalette::Base, palettesColors.palettes.window},
657 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.activeWindow},
658 {QPalette::Inactive, QPalette::AlternateBase, palettesColors.palettes.activeWindow},
659 {QPalette::Disabled, QPalette::AlternateBase, palettesColors.palettes.inactiveWindow},
660 {QPalette::Current, QPalette::AlternateBase, palettesColors.palettes.activeWindow},
662 {QPalette::Active, QPalette::Highlight, palettesColors.palettes.activeHighlight},
663 {QPalette::Inactive, QPalette::Highlight, palettesColors.palettes.activeHighlight},
664 {QPalette::Disabled, QPalette::Highlight, palettesColors.palettes.inactiveHighlight},
666 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
667 {QPalette::Inactive, QPalette::Window, palettesColors.palettes.activeWindow},
668 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.inactiveWindow},
670 {QPalette::Active, QPalette::Text, palettesColors.palettes.activeHighlight},
671 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.activeHighlight},
672 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveHighlight},
674 {QPalette::Active, QPalette::HighlightedText, palettesColors.palettes.activeWindow},
675 {QPalette::Inactive, QPalette::HighlightedText, palettesColors.palettes.activeWindow},
676 {QPalette::Disabled, QPalette::HighlightedText, palettesColors.palettes.inactiveWindow},
678 {QPalette::Active, QPalette::Dark, palettesColors.palettes.activeWindow},
679 {QPalette::Inactive, QPalette::Dark, palettesColors.palettes.activeWindow},
680 {QPalette::Disabled, QPalette::Dark, palettesColors.palettes.inactiveWindow},
681 {QPalette::Current, QPalette::Dark, palettesColors.palettes.activeWindow},
682 {QPalette::All, QPalette::Dark, palettesColors.palettes.activeWindow},
684 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
685 {QPalette::Inactive, QPalette::Light, palettesColors.palettes.activeWindow},
686 {QPalette::Disabled, QPalette::Light, palettesColors.palettes.inactiveWindow},
688 {QPalette::Active, QPalette::Mid, palettesColors.palettes.activeWindow},
689 {QPalette::Inactive, QPalette::Mid, palettesColors.palettes.activeWindow},
690 {QPalette::Disabled, QPalette::Mid, palettesColors.palettes.inactiveWindow},
691 {QPalette::Current, QPalette::Mid, palettesColors.palettes.activeWindow},
692 {QPalette::All, QPalette::Mid, palettesColors.palettes.activeWindow},
700 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.highlighted},
701 {QPalette::Inactive, QPalette::WindowText, palettesColors.palettes.inactiveText},
702 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.inactiveHighlighted},
704 {QPalette::Active, QPalette::Text, palettesColors.palettes.highlighted},
705 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveText},
706 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.inactiveHighlighted},
714 {QPalette::All, QPalette::Base, palettesColors.toolTip.toolTipBorder},
715 {QPalette::All, QPalette::ToolTipBase, palettesColors.toolTip.toolTipBase},
716 {QPalette::All, QPalette::ToolTipText, palettesColors.palettes.highlighted},
722 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
723 font.setPointSize(12);
731 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
732 font.setPointSize(16);
739 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
740 font.setPointSize(16);
747 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
748 font.setPointSize(16);
755 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
756 font.setPointSize(14);
765 {QPlatformTheme::ButtonPalette, makeButtonPalette(palettesColors)},
766 {QPlatformTheme::CheckBoxPalette, makeCheckBoxOrRadioButtonPalette(palettesColors)},
767 {QPlatformTheme::ComboBoxPalette, makeComboBoxPalette(palettesColors)},
768 {QPlatformTheme::GroupBoxPalette, makeGroupBoxPalette(palettesColors)},
769 {QPlatformTheme::HeaderPalette, makeHeaderPalette(palettesColors)},
770 {QPlatformTheme::ItemViewPalette, makeItemViewPalette(palettesColors)},
771 {QPlatformTheme::LabelPalette, makeLabelPalette(palettesColors)},
772 {QPlatformTheme::MenuPalette, makeMenuPalette(palettesColors)},
773 {QPlatformTheme::MenuBarPalette, makeMenuBarPalette(palettesColors)},
774 {QPlatformTheme::RadioButtonPalette, makeCheckBoxOrRadioButtonPalette(palettesColors)},
775 {QPlatformTheme::SystemPalette, makeSystemPalette(palettesColors)},
776 {QPlatformTheme::TabBarPalette, makeTabBarPalette(palettesColors)},
777 {QPlatformTheme::TextEditPalette, makeTextEditPalette(palettesColors)},
778 {QPlatformTheme::TextLineEditPalette, makeTextLineEditPalette(palettesColors)},
779 {QPlatformTheme::ToolButtonPalette, makeToolButtonPalette(palettesColors)},
780 {QPlatformTheme::ToolTipPalette, makeToolTipPalette(palettesColors)},
785 Qt::ColorScheme scheme)
788 case Qt::ColorScheme::Unknown:
790 case Qt::ColorScheme::Light:
792 case Qt::ColorScheme::Dark:
799 std::optional<
bool> darkModeFlag)
801 if (darkModeFlag.has_value()) {
802 if (!darkModeFlag.value_or(
false))
803 return Qt::ColorScheme::Light;
805 return Qt::ColorScheme::Dark;
807 return Qt::ColorScheme::Unknown;
811using OhosConfigurationColorMode = QtOhos::enums::ohos::app::ability::ConfigurationConstant::ColorMode;
815 constexpr auto fallbackColorMode = OhosConfigurationColorMode::COLOR_MODE_NOT_SET;
816 auto optColorMode = jsState.tryMapOhosEnumFromJs<OhosConfigurationColorMode>(colorModeJsEnum);
817 return optColorMode.value_or(fallbackColorMode);
823 qCWarning(QtForOhos,
"%s: cannot set a color mode in 'no UI child mode'", Q_FUNC_INFO);
829 auto optQAbility = jsState.defaultQAbility();
831 qCWarning(QtForOhos,
"%s: cannot set a color mode without a UIAbility", Q_FUNC_INFO);
835 const auto jsColorMode = jsState.mapOhosEnumToJs(colorMode);
836 optQAbility->eval(
"context.getApplicationContext().setColorMode(*)", {jsColorMode});
842 QOhosConsumer<OhosConfigurationColorMode> valueChangedHandler)
844 return QtOhos::makeOhosConfigValueDataSource<OhosConfigurationColorMode>(
845 [](QtOhos::JsState &jsState) {
846 auto optQAbility = jsState.defaultQAbility();
848 ? mapOhosConfigurationColorModeFromJs(
849 jsState, optQAbility->eval<QNapi::Number>(
"context.config.colorMode"))
850 : OhosConfigurationColorMode::COLOR_MODE_NOT_SET;
852 [](QtOhos::JsState &jsState,
const QNapi::Object &config) {
853 return mapOhosConfigurationColorModeFromJs(jsState, config.get<QNapi::Number>(
"colorMode"));
855 std::move(valueChangedHandler));
861 case OhosConfigurationColorMode::COLOR_MODE_NOT_SET:
863 case OhosConfigurationColorMode::COLOR_MODE_LIGHT:
865 case OhosConfigurationColorMode::COLOR_MODE_DARK:
874 std::string undocumentedParamsPropertyName(
"params");
875 auto optParams = QNapi::getOptionalPropOrEmpty<QNapi::Value>(resource, undocumentedParamsPropertyName);
876 if (optParams.IsEmpty()) {
878 "%s: expected '%s' property not found in resource object, ignore getting pixmap",
879 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
882 if (!optParams.IsArray()) {
884 "%s: '%s' property is not an array, ignore getting pixmap",
885 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
889 auto params = QNapi::getArrayElements<std::vector<std::string>, QNapi::String>(
890 QNapi::checkedCast<QNapi::Array>(optParams));
891 if (params.empty()) {
893 "%s: '%s' property is empty, ignore getting pixmap",
894 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
898 const auto resourceIdentifier = params.front();
899 const auto lastSeparatorPosition = resourceIdentifier.rfind(
'.');
900 if (lastSeparatorPosition == std::string::npos) {
902 "%s: '%s' property has unknown resource name, ignore getting pixmap",
903 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
907 const auto simpleName = resourceIdentifier.substr(lastSeparatorPosition + 1);
908 auto resourceContentBuffer = jsState.eval<QNapi::TypedArrayOf<std::uint8_t>>(
909 "@ohos.resourceManager.getSysResourceManager().getMediaByNameSync(*)", {simpleName});
912 bool pixmapLoadResult = pixmap.loadFromData(
913 static_cast<
const uchar *>(resourceContentBuffer.Data()), resourceContentBuffer.ByteLength());
915 if (pixmapLoadResult) {
918 qOhosPrintfWarning(
"%s: cannot load pixmap", Q_FUNC_INFO);
926 std::string ohosDotFilenameExtension =
"." + filenameExtension;
927 auto uniformDataType = jsState.eval<QNapi::String>(
928 "@ohos.data.uniformTypeDescriptor.getUniformDataTypeByFilenameExtension(*)",
929 {ohosDotFilenameExtension});
931 auto resourceValue = jsState.eval(
932 "@kit.FileManagerServiceKit.fileManagerService.getFileIconSync(*)", {uniformDataType});
933 if (resourceValue.IsObject()) {
934 return tryGetFilePixmapByResourceObject(jsState, QNapi::checkedCast<QNapi::Object>(resourceValue));
936 qOhosPrintfWarning(
"%s: got unhandled resource result type, ignore it", Q_FUNC_INFO);
957 auto fileNameSuffix = fileInfo().suffix();
958 auto optPixmap =
QtOhos::evalInJsThread(
960 return tryGetFilePixmapByFilenameExtension(jsState, fileNameSuffix.toStdString());
964 return optPixmap.has_value()
965 ? optPixmap.value().scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation)
990 auto colorModeDataSource = makeOhosConfigColorModeDataSource(
992 QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
994 m_ohosConfigDarkModeFlagSupplier = [colorModeDataSource = std::move(colorModeDataSource)]() {
995 return mapOhosConfigurationColorModeToDarkModeFlag(colorModeDataSource());
1001 std::optional<
bool> isDarkMode = mapOhosThemeFromColorScheme(scheme);
1002 setOhosConfigColorMode(
1003 isDarkMode.has_value()
1004 ? isDarkMode.value()
1005 ? OhosConfigurationColorMode::COLOR_MODE_DARK
1006 : OhosConfigurationColorMode::COLOR_MODE_LIGHT
1007 : OhosConfigurationColorMode::COLOR_MODE_NOT_SET);
1012 return mapOhosThemeToColorScheme(m_ohosConfigDarkModeFlagSupplier());
1017 auto _dbg = make_QCScopedDebug(
"QOhosPlatformTheme::createPlatformDialogHelper");
1018 return QOhosDialogs::createHelper(type);
1023 auto _dbg = make_QCScopedDebug(
"QOhosPlatformTheme::usePlatformNativeDialog");
1024 return (type == QOhosPlatformTheme::FileDialog);
1031 return QStringList(QString::fromUtf8(ohosThemeName));
1032 case MouseDoubleClickDistance:
1033 case TouchDoubleTapDistance:
1035 auto *primaryScreen = qGuiApp->primaryScreen();
1036 auto *platformScreen = primaryScreen !=
nullptr
1039 return platformScreen !=
nullptr
1040 ? QHighDpi::fromNativePixels(
1042 mouseDoubleClickDistance, platformScreen->pixelScalingCoefficient()),
1044 : mouseDoubleClickDistance;
1046 case MouseDoubleClickInterval:
1048 case WheelScrollLines:
1049 return m_wheelScrollLines;
1050 case MenuBarFocusOnAltPressRelease:
1052 case PreferFileIconFromTheme:
1055 return QPlatformTheme::themeHint(hint);
1061 const auto &palettes = m_themesPalettes[colorScheme()];
1062 const auto it = palettes.find(type);
1063 if (it != palettes.end())
1066 return QPlatformTheme::palette(type);
1071 const auto fontIter = m_fonts.find(type);
1072 return fontIter != m_fonts.end()
1074 : QPlatformTheme::font(type);
1079 m_wheelScrollLines = wheelScrollLines;
1084 return makeQOhosSystemTrayIcon().release();
1089 return !fileInfo.suffix().isEmpty()
1090 ? QIcon(
new QOhosFileIconEngine(fileInfo, iconOptions))
1091 : QPlatformTheme::fileIcon(fileInfo, iconOptions);
1096 return tryCreateQOhosIconEngine(iconName);
QPixmap filePixmap(const QSize &size, QIcon::Mode mode, QIcon::State) override
QOhosFileIconEngine(const QFileInfo &info, QPlatformTheme::IconOptions opts)
Combined button and popup list for selecting options.
SystemPaletteColors makeSystemButtonPaletteColorsDark()
AllPalletesColors makeAllPalettesColorsLight()
QPalette makeLabelPalette(const AllPalletesColors &palettesColors)
QPalette makeCheckBoxOrRadioButtonPalette(const AllPalletesColors &palettesColors)
TabBarPaletteColors makeTabBarPaletteColorsDark()
QPalette makeSystemPalette(const AllPalletesColors &palettesColors)
SystemPaletteColors makeSystemButtonPaletteColorsLight()
QColor makeInactiveOrDisabledFromColor(const QColor &color)
AllPalletesColors makeAllPalettesColors(Qt::ColorScheme scheme)
QHash< QPlatformTheme::Palette, QPalette > makePalettesMap(Qt::ColorScheme scheme)
QPalette makeTextEditPalette(const AllPalletesColors &palettesColors)
TooltipPaletteColors makeTooltipPaletteColorsDark()
QPalette makePalette(const QPalette &basePalette, std::initializer_list< std::tuple< QPalette::ColorGroup, QPalette::ColorRole, const QColor & > > brushEntries)
std::optional< QPixmap > tryGetFilePixmapByFilenameExtension(QtOhos::JsState &jsState, const std::string &filenameExtension)
QOhosSupplier< OhosConfigurationColorMode > makeOhosConfigColorModeDataSource(QOhosConsumer< OhosConfigurationColorMode > valueChangedHandler)
void setOhosConfigColorMode(OhosConfigurationColorMode colorMode)
std::optional< bool > mapOhosConfigurationColorModeToDarkModeFlag(OhosConfigurationColorMode colorMode)
QPalette makePalette(std::initializer_list< std::tuple< QPalette::ColorGroup, QPalette::ColorRole, const QColor & > > brushEntries)
ButtonPaletteColors makeButtonPaletteColorsLight()
AllPalletesColors makeAllPalettesColorsDark()
std::optional< QPixmap > tryGetFilePixmapByResourceObject(QtOhos::JsState &jsState, QNapi::Object resource)
MenuPaletteColors makeMenuPaletteColorsDark(const PalettesColors &palettes)
TooltipPaletteColors makeTooltipPaletteColorsLight()
PalettesColors makePalettesColorsDark()
ToolButtonPaletteColors makeToolButtonPaletteColorsDark()
GroupboxPaletteColors makeGroupboxPaletteColorsDark()
QPalette makeHeaderPalette(const AllPalletesColors &palettesColors)
ButtonPaletteColors makeButtonPaletteColorsDark()
MenuPaletteColors makeMenuPaletteColorsLight(const PalettesColors &palettes)
QPalette makeItemViewPalette(const AllPalletesColors &palettesColors)
constexpr int mouseDoubleClickInterval
constexpr int mouseDoubleClickDistance
Qt::ColorScheme mapOhosThemeToColorScheme(std::optional< bool > darkModeFlag)
QPalette makeTabBarPalette(const AllPalletesColors &palettesColors)
ToolButtonPaletteColors makeToolButtonPaletteColorsLight()
TextLineEditPaletteColors makeTextLineEditPaletteColorsLight()
TabBarPaletteColors makeTabBarPaletteColorsLight()
QPalette makeMenuBarPalette(const AllPalletesColors &palettesColors)
std::optional< bool > mapOhosThemeFromColorScheme(Qt::ColorScheme scheme)
PalettesColors makePalettesColorsLight()
HeaderPaletteColors makeHeaderPaletteColorsDark()
QPalette makeComboBoxPalette(const AllPalletesColors &palettesColors)
TextLineEditPaletteColors makeTextLineEditPaletteColorsDark()
QPalette makeMenuPalette(const AllPalletesColors &palettesColors)
HeaderPaletteColors makeHeaderPaletteColorsLight()
QPalette makeGroupBoxPalette(const AllPalletesColors &palettesColors)
QPalette makeButtonPalette(const AllPalletesColors &palettesColors)
QPalette makeTextLineEditPalette(const AllPalletesColors &palettesColors)
QPalette makeToolTipPalette(const AllPalletesColors &palettesColors)
GroupboxPaletteColors makeGroupboxPaletteColorsLight()
QFont makePushButtonFont()
QPalette makeToolButtonPalette(const AllPalletesColors &palettesColors)
OhosConfigurationColorMode mapOhosConfigurationColorModeFromJs(QtOhos::JsState &jsState, QNapi::Number colorModeJsEnum)
void runInJsThreadAndWait(const std::function< void(JsState &)> &task, std::string callerContextName={})
bool isOhosNoUiChildMode()
SystemPaletteColors system
GroupboxPaletteColors groupBox
HeaderPaletteColors header
ToolButtonPaletteColors toolButton
ButtonPaletteColors button
TabBarPaletteColors tabBar
TooltipPaletteColors toolTip
TextLineEditPaletteColors textLineEdit
QColor inactiveTextPrimary
QColor foregroundContrary
QColor disabledTextPrimary
QColor componentActivated
QColor inactiveButtonText
QColor inactiveHighlighted
QColor inactiveWindowFrame
QColor disabledWindowText
QColor inactiveWindowText
QColor inactiveTextEditBackground
QColor textEditBackground