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 <qohosjsmain.h>
19#include <qohosjsutils.h>
20#include <qohosqpaenums.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 textPrimary = QColor(
"#FF182431");
72 .activeWindow = activeWindow,
73 .inactiveWindow = makeInactiveOrDisabledFromColor(activeWindow),
74 .activeButtonText = activeButtonText,
75 .inactiveButtonText = makeInactiveOrDisabledFromColor(activeButtonText),
76 .activeHighlight = accentColor,
77 .inactiveHighlight = makeInactiveOrDisabledFromColor(accentColor),
78 .clickEffect = QColor(
"#1A000000"),
79 .hover = QColor(
"#0D000000"),
80 .foregroundContrary = QColor(
"#FFFFFF"),
81 .highlighted = accentColor,
82 .inactiveHighlighted = makeInactiveOrDisabledFromColor(accentColor),
83 .textPrimary = textPrimary,
84 .inactiveTextPrimary = textPrimary,
85 .disabledTextPrimary = makeInactiveOrDisabledFromColor(textPrimary),
86 .inactiveText = makeInactiveOrDisabledFromColor(textPrimary),
87 .componentNormal = QColor(
"#19182431"),
88 .componentActivated = QColor(
"#007DFF"),
89 .indicatorArrow = QColor(
"#E5182431"),
90 .scrollBarSlider = QColor(
"#182431"),
91 .switchBgOff = QColor(
"#33FFFFFF"),
92 .switchOutlineOff = QColor(
"#66182431"),
93 .window = QColor(
"#FFF1F3F5"),
99 const auto activeWindow = QColor(
"#18181A");
100 const auto activeButtonText = QColor(
"#3F97E9");
101 const auto textPrimary = QColor(
"#DBFFFFFF");
104 .activeWindow = activeWindow,
105 .inactiveWindow = makeInactiveOrDisabledFromColor(activeWindow),
106 .activeButtonText = activeButtonText,
107 .inactiveButtonText = makeInactiveOrDisabledFromColor(activeButtonText),
108 .activeHighlight = accentColor,
109 .inactiveHighlight = makeInactiveOrDisabledFromColor(accentColor),
110 .clickEffect = QColor(
"#26FFFFFF"),
111 .hover = QColor(
"#19FFFFFF"),
112 .foregroundContrary = QColor(
"#E5E5E5"),
113 .highlighted = accentColor,
114 .inactiveHighlighted = makeInactiveOrDisabledFromColor(accentColor),
115 .textPrimary = textPrimary,
116 .inactiveTextPrimary = textPrimary,
117 .disabledTextPrimary = makeInactiveOrDisabledFromColor(textPrimary),
118 .inactiveText = makeInactiveOrDisabledFromColor(textPrimary),
119 .componentNormal = QColor(
"#19FFFFFF"),
120 .componentActivated = QColor(
"#3F97E9"),
121 .indicatorArrow = QColor(
"#DBFFFFFF"),
122 .scrollBarSlider = QColor(
"#FFFFFF"),
123 .switchBgOff = QColor(
"#33000000"),
124 .switchOutlineOff = QColor(
"#66FFFFFF"),
125 .window = QColor(
"#FF000000"),
139 const auto activeButton = QColor(
"#0C182431");
142 .activeButton = activeButton,
143 .inactiveButton = makeInactiveOrDisabledFromColor(activeButton),
144 .focusedOutline = accentColor,
145 .enabledDefaultButtonText = QColor(
"#FFFFFFFF"),
151 const auto activeButton = QColor(
"#19FFFFFF");
154 .activeButton = activeButton,
155 .inactiveButton = makeInactiveOrDisabledFromColor(activeButton),
156 .focusedOutline = accentColor,
157 .enabledDefaultButtonText = QColor(
"#E5E5E5"),
169 .windowButtonBackground = QColor(
"#FFD0CFD5"),
176 .windowButtonBackground = QColor(
"#FFD0CFD5"),
191 .activeWindowFrame = QColor(
"#FFE4E4E4"),
192 .inactiveWindowFrame = QColor(
"#FFF2F3F5"),
193 .textHint = QColor(
"#99182431"),
194 .textTertiary = QColor(
"#66182431"),
201 .activeWindowFrame = QColor(
"#FF000000"),
202 .inactiveWindowFrame = QColor(
"#FF18181A"),
203 .textHint = QColor(
"#99FFFFFF"),
204 .textTertiary = QColor(
"#66FFFFFF"),
217 .listSeparator = QColor(
"#1A000000"),
218 .inactiveText = makeInactiveOrDisabledFromColor(palettes.textPrimary),
225 .listSeparator = QColor(
"#33FFFFFF"),
226 .inactiveText = makeInactiveOrDisabledFromColor(palettes.textPrimary),
239 const auto inactiveWindowText = QColor(
"#99182431");
242 .activeWindowText = accentColor,
243 .inactiveWindowText = inactiveWindowText,
244 .disabledWindowText = makeInactiveOrDisabledFromColor(inactiveWindowText),
250 const auto inactiveWindowText = QColor(
"#99FFFFFF");
253 .activeWindowText = accentColor,
254 .inactiveWindowText = inactiveWindowText,
255 .disabledWindowText = makeInactiveOrDisabledFromColor(inactiveWindowText),
267 const auto textEditBackground = QColor(
"#0C182431");
269 .textEditBackground = textEditBackground,
270 .inactiveTextEditBackground = makeInactiveOrDisabledFromColor(textEditBackground),
276 const auto textEditBackground = QColor(
"#19FFFFFF");
278 .textEditBackground = textEditBackground,
279 .inactiveTextEditBackground = makeInactiveOrDisabledFromColor(textEditBackground),
293 .background = QColor(
"#00000000"),
294 .groupBoxFrame = QColor(
"#66000000"),
295 .shadowXS = QColor(
"#19000000"),
302 .background = QColor(
"#00000000"),
303 .groupBoxFrame = QColor(
"#66FFFFFF"),
304 .shadowXS = QColor(
"#19FFFFFF"),
316 .activeButton = QColor(
"#FFFFFFFF"),
323 .activeButton = QColor(
"#FF18181A"),
336 .toolTipBorder = QColor(
"#1A000000"),
337 .toolTipBase = QColor(
"#FFFFFFFF"),
344 .toolTipBorder = QColor(
"#1AFFFFFF"),
345 .toolTipBase = QColor(
"#404040"),
365 const auto palettes = makePalettesColorsLight(accentColor);
368 .palettes = palettes,
369 .button = makeButtonPaletteColorsLight(accentColor),
370 .toolButton = makeToolButtonPaletteColorsLight(),
371 .system = makeSystemButtonPaletteColorsLight(),
372 .menu = makeMenuPaletteColorsLight(palettes),
373 .tabBar = makeTabBarPaletteColorsLight(accentColor),
374 .textLineEdit = makeTextLineEditPaletteColorsLight(),
375 .groupBox = makeGroupboxPaletteColorsLight(),
376 .header = makeHeaderPaletteColorsLight(),
377 .toolTip = makeTooltipPaletteColorsLight(),
383 const auto palettes = makePalettesColorsDark(accentColor);
386 .palettes = palettes,
387 .button = makeButtonPaletteColorsDark(accentColor),
388 .toolButton = makeToolButtonPaletteColorsDark(),
389 .system = makeSystemButtonPaletteColorsDark(),
390 .menu = makeMenuPaletteColorsDark(palettes),
391 .tabBar = makeTabBarPaletteColorsDark(accentColor),
392 .textLineEdit = makeTextLineEditPaletteColorsDark(),
393 .groupBox = makeGroupboxPaletteColorsDark(),
394 .header = makeHeaderPaletteColorsDark(),
395 .toolTip = makeTooltipPaletteColorsDark(),
402 case Qt::ColorScheme::Light:
return makeAllPalettesColorsLight(accentColor);
403 case Qt::ColorScheme::Dark:
return makeAllPalettesColorsDark(accentColor);
408 qOhosReportFatalErrorAndAbort(
409 "%s: got unsupported ColorScheme: %d", Q_FUNC_INFO,
static_cast<
int>(scheme));
416 const QPalette &basePalette, std::initializer_list<std::tuple<QPalette::ColorGroup, QPalette::ColorRole,
const QColor &>> brushEntries)
418 auto palette = basePalette;
420 for (
const auto &brushEntry : brushEntries) {
422 std::get<QPalette::ColorGroup>(brushEntry),
423 std::get<QPalette::ColorRole>(brushEntry),
424 std::get<
const QColor &>(brushEntry));
430QPalette makePalette(std::initializer_list<std::tuple<QPalette::ColorGroup, QPalette::ColorRole,
const QColor &>> brushEntries)
432 return makePalette(QPalette(), brushEntries);
439 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.componentActivated},
441 {QPalette::Active, QPalette::Button, palettesColors.button.activeButton},
442 {QPalette::Disabled, QPalette::Button, palettesColors.button.inactiveButton},
443 {QPalette::Inactive, QPalette::Button, palettesColors.button.inactiveButton},
445 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
446 {QPalette::Disabled, QPalette::ButtonText, palettesColors.palettes.inactiveButtonText},
447 {QPalette::Inactive, QPalette::ButtonText, palettesColors.palettes.inactiveButtonText},
449 {QPalette::All, QPalette::BrightText, palettesColors.button.enabledDefaultButtonText},
451 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
452 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
454 {QPalette::Active, QPalette::Highlight, palettesColors.button.focusedOutline},
455 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.indicatorArrow}
462 makeButtonPalette(palettesColors),
464 {QPalette::Active, QPalette::AlternateBase, palettesColors.toolButton.windowButtonBackground},
472 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
473 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.inactiveWindow},
474 {QPalette::Inactive, QPalette::Window, palettesColors.palettes.inactiveWindow},
476 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.textPrimary},
477 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.disabledTextPrimary},
478 {QPalette::Inactive, QPalette::WindowText, palettesColors.palettes.inactiveTextPrimary},
480 {QPalette::Active, QPalette::Text, palettesColors.palettes.textPrimary},
481 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.disabledTextPrimary},
482 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.inactiveTextPrimary},
484 {QPalette::Active, QPalette::Base, palettesColors.system.activeWindowFrame},
485 {QPalette::Disabled, QPalette::Base, palettesColors.system.inactiveWindowFrame},
486 {QPalette::Inactive, QPalette::Base, palettesColors.system.inactiveWindowFrame},
488 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.textPrimary},
490 {QPalette::Active, QPalette::Highlight, palettesColors.palettes.highlighted},
492 {QPalette::All, QPalette::PlaceholderText, palettesColors.system.textHint},
493 {QPalette::Disabled, QPalette::PlaceholderText, palettesColors.system.textTertiary},
495 {QPalette::Active, QPalette::Midlight, palettesColors.palettes.scrollBarSlider},
497 {QPalette::Active, QPalette::Mid, palettesColors.palettes.componentNormal}
505 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.switchBgOff},
506 {QPalette::Inactive, QPalette::Button, palettesColors.palettes.switchOutlineOff},
507 {QPalette::Active, QPalette::Button, palettesColors.palettes.highlighted},
508 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.highlighted},
509 {QPalette::Inactive, QPalette::WindowText, palettesColors.palettes.inactiveText},
510 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.inactiveHighlighted},
511 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
512 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
520 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.componentActivated},
521 {QPalette::All, QPalette::Base, palettesColors.palettes.window},
522 {QPalette::All, QPalette::Window, palettesColors.palettes.window},
523 {QPalette::Active, QPalette::Text, palettesColors.palettes.highlighted},
524 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveText},
525 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.inactiveHighlighted},
526 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
527 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
528 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.indicatorArrow}
536 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
537 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.switchBgOff},
538 {QPalette::Inactive, QPalette::Button, palettesColors.palettes.switchOutlineOff},
539 {QPalette::Active, QPalette::Button, palettesColors.palettes.highlighted},
541 {QPalette::Active, QPalette::Text, palettesColors.palettes.textPrimary},
542 {QPalette::Disabled, QPalette::Text, palettesColors.menu.inactiveText},
543 {QPalette::Inactive, QPalette::Text, palettesColors.menu.inactiveText},
545 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
546 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
548 {QPalette::Active, QPalette::Mid, palettesColors.menu.listSeparator}
556 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.textPrimary},
557 {QPalette::Disabled, QPalette::ButtonText, palettesColors.menu.inactiveText},
558 {QPalette::Inactive, QPalette::ButtonText, palettesColors.menu.inactiveText},
566 {QPalette::Active, QPalette::WindowText, palettesColors.tabBar.activeWindowText},
567 {QPalette::Inactive, QPalette::WindowText, palettesColors.tabBar.inactiveWindowText},
568 {QPalette::Disabled, QPalette::WindowText, palettesColors.tabBar.disabledWindowText},
570 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
571 {QPalette::Inactive, QPalette::Window, palettesColors.palettes.inactiveWindow},
572 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.inactiveWindow},
574 {QPalette::Active, QPalette::Highlight, palettesColors.palettes.activeHighlight},
575 {QPalette::Inactive, QPalette::Highlight, palettesColors.palettes.inactiveHighlight},
576 {QPalette::Disabled, QPalette::Highlight, palettesColors.palettes.inactiveHighlight},
583 makeSystemPalette(palettesColors),
585 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.componentActivated},
586 {QPalette::All, QPalette::Base, palettesColors.textLineEdit.textEditBackground},
587 {QPalette::Disabled, QPalette::Base, palettesColors.textLineEdit.inactiveTextEditBackground},
588 {QPalette::All, QPalette::Text, palettesColors.palettes.textPrimary},
589 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.disabledTextPrimary},
596 makeTextLineEditPalette(palettesColors),
598 {QPalette::All, QPalette::Base, palettesColors.palettes.activeWindow},
606 {QPalette::Active, QPalette::Button, palettesColors.palettes.highlighted},
607 {QPalette::Inactive, QPalette::Button, palettesColors.palettes.switchOutlineOff},
608 {QPalette::Active, QPalette::Base, palettesColors.system.activeWindowFrame},
609 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.switchBgOff},
610 {QPalette::Active, QPalette::AlternateBase, palettesColors.groupBox.groupBoxFrame},
611 {QPalette::Active, QPalette::Window, palettesColors.groupBox.background},
612 {QPalette::Inactive, QPalette::Window, palettesColors.groupBox.background},
613 {QPalette::Active, QPalette::Window, palettesColors.palettes.window},
614 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.window},
615 {QPalette::Active, QPalette::Text, palettesColors.palettes.highlighted},
616 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.highlighted},
617 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveHighlighted},
618 {QPalette::Current, QPalette::Text, palettesColors.palettes.highlighted},
619 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.inactiveHighlighted},
620 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.textPrimary},
621 {QPalette::Disabled, QPalette::ButtonText, palettesColors.palettes.inactiveHighlighted},
622 {QPalette::Active, QPalette::Dark, palettesColors.palettes.clickEffect},
623 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
624 {QPalette::Active, QPalette::Shadow, palettesColors.groupBox.shadowXS},
625 {QPalette::Active, QPalette::Midlight, palettesColors.palettes.scrollBarSlider},
626 {QPalette::Active, QPalette::Mid, palettesColors.palettes.componentNormal}
634 {QPalette::Active, QPalette::Button, palettesColors.header.activeButton},
635 {QPalette::Inactive, QPalette::Button, palettesColors.header.activeButton},
636 {QPalette::Disabled, QPalette::Button, palettesColors.palettes.inactiveWindow},
638 {QPalette::Current, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
639 {QPalette::Active, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
640 {QPalette::Inactive, QPalette::ButtonText, palettesColors.palettes.activeButtonText},
641 {QPalette::Disabled, QPalette::ButtonText, palettesColors.palettes.inactiveButtonText},
649 {QPalette::Active, QPalette::Base, palettesColors.palettes.window},
650 {QPalette::Inactive, QPalette::Base, palettesColors.palettes.window},
651 {QPalette::Disabled, QPalette::Base, palettesColors.palettes.window},
653 {QPalette::Active, QPalette::AlternateBase, palettesColors.palettes.activeWindow},
654 {QPalette::Inactive, QPalette::AlternateBase, palettesColors.palettes.activeWindow},
655 {QPalette::Disabled, QPalette::AlternateBase, palettesColors.palettes.inactiveWindow},
656 {QPalette::Current, QPalette::AlternateBase, palettesColors.palettes.activeWindow},
658 {QPalette::Active, QPalette::Highlight, palettesColors.palettes.activeHighlight},
659 {QPalette::Inactive, QPalette::Highlight, palettesColors.palettes.activeHighlight},
660 {QPalette::Disabled, QPalette::Highlight, palettesColors.palettes.inactiveHighlight},
662 {QPalette::Active, QPalette::Window, palettesColors.palettes.activeWindow},
663 {QPalette::Inactive, QPalette::Window, palettesColors.palettes.activeWindow},
664 {QPalette::Disabled, QPalette::Window, palettesColors.palettes.inactiveWindow},
666 {QPalette::Active, QPalette::Text, palettesColors.palettes.activeHighlight},
667 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.activeHighlight},
668 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveHighlight},
670 {QPalette::Active, QPalette::HighlightedText, palettesColors.palettes.activeWindow},
671 {QPalette::Inactive, QPalette::HighlightedText, palettesColors.palettes.activeWindow},
672 {QPalette::Disabled, QPalette::HighlightedText, palettesColors.palettes.inactiveWindow},
674 {QPalette::Active, QPalette::Dark, palettesColors.palettes.activeWindow},
675 {QPalette::Inactive, QPalette::Dark, palettesColors.palettes.activeWindow},
676 {QPalette::Disabled, QPalette::Dark, palettesColors.palettes.inactiveWindow},
677 {QPalette::Current, QPalette::Dark, palettesColors.palettes.activeWindow},
678 {QPalette::All, QPalette::Dark, palettesColors.palettes.activeWindow},
680 {QPalette::Active, QPalette::Light, palettesColors.palettes.hover},
681 {QPalette::Inactive, QPalette::Light, palettesColors.palettes.activeWindow},
682 {QPalette::Disabled, QPalette::Light, palettesColors.palettes.inactiveWindow},
684 {QPalette::Active, QPalette::Mid, palettesColors.palettes.activeWindow},
685 {QPalette::Inactive, QPalette::Mid, palettesColors.palettes.activeWindow},
686 {QPalette::Disabled, QPalette::Mid, palettesColors.palettes.inactiveWindow},
687 {QPalette::Current, QPalette::Mid, palettesColors.palettes.activeWindow},
688 {QPalette::All, QPalette::Mid, palettesColors.palettes.activeWindow},
696 {QPalette::Active, QPalette::WindowText, palettesColors.palettes.highlighted},
697 {QPalette::Inactive, QPalette::WindowText, palettesColors.palettes.inactiveText},
698 {QPalette::Disabled, QPalette::WindowText, palettesColors.palettes.inactiveHighlighted},
700 {QPalette::Active, QPalette::Text, palettesColors.palettes.highlighted},
701 {QPalette::Disabled, QPalette::Text, palettesColors.palettes.inactiveText},
702 {QPalette::Inactive, QPalette::Text, palettesColors.palettes.inactiveHighlighted},
710 {QPalette::All, QPalette::Base, palettesColors.toolTip.toolTipBorder},
711 {QPalette::All, QPalette::ToolTipBase, palettesColors.toolTip.toolTipBase},
712 {QPalette::All, QPalette::ToolTipText, palettesColors.palettes.highlighted},
718 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
719 font.setPointSize(12);
727 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
728 font.setPointSize(20);
736 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
737 font.setPointSize(16);
744 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
745 font.setPointSize(16);
752 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
753 font.setPointSize(16);
760 auto font = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->defaultFont();
761 font.setPointSize(14);
768 const AllPalletesColors palettesColors = makeAllPalettesColors(scheme, accentColor);
770 {QPlatformTheme::ButtonPalette, makeButtonPalette(palettesColors)},
771 {QPlatformTheme::CheckBoxPalette, makeCheckBoxOrRadioButtonPalette(palettesColors)},
772 {QPlatformTheme::ComboBoxPalette, makeComboBoxPalette(palettesColors)},
773 {QPlatformTheme::GroupBoxPalette, makeGroupBoxPalette(palettesColors)},
774 {QPlatformTheme::HeaderPalette, makeHeaderPalette(palettesColors)},
775 {QPlatformTheme::ItemViewPalette, makeItemViewPalette(palettesColors)},
776 {QPlatformTheme::LabelPalette, makeLabelPalette(palettesColors)},
777 {QPlatformTheme::MenuPalette, makeMenuPalette(palettesColors)},
778 {QPlatformTheme::MenuBarPalette, makeMenuBarPalette(palettesColors)},
779 {QPlatformTheme::RadioButtonPalette, makeCheckBoxOrRadioButtonPalette(palettesColors)},
780 {QPlatformTheme::SystemPalette, makeSystemPalette(palettesColors)},
781 {QPlatformTheme::TabBarPalette, makeTabBarPalette(palettesColors)},
782 {QPlatformTheme::TextEditPalette, makeTextEditPalette(palettesColors)},
783 {QPlatformTheme::TextLineEditPalette, makeTextLineEditPalette(palettesColors)},
784 {QPlatformTheme::ToolButtonPalette, makeToolButtonPalette(palettesColors)},
785 {QPlatformTheme::ToolTipPalette, makeToolTipPalette(palettesColors)},
790 Qt::ColorScheme scheme)
793 case Qt::ColorScheme::Unknown:
795 case Qt::ColorScheme::Light:
797 case Qt::ColorScheme::Dark:
804 std::optional<
bool> darkModeFlag)
806 if (darkModeFlag.has_value()) {
807 if (!darkModeFlag.value_or(
false))
808 return Qt::ColorScheme::Light;
810 return Qt::ColorScheme::Dark;
812 return Qt::ColorScheme::Unknown;
822 return optColorMode.value_or(fallbackColorMode);
828 qCWarning(QtForOhos,
"%s: cannot set a color mode in 'no UI child mode'", Q_FUNC_INFO);
832 QOhosJsThreadGateway::runAndWait(
833 [&](QOhosJsState &jsState) {
834 auto optQAbility = jsState.defaultQAbility();
836 qCWarning(QtForOhos,
"%s: cannot set a color mode without a UIAbility", Q_FUNC_INFO);
840 const auto jsColorMode = jsState.mapOhosEnumToJs(colorMode);
841 optQAbility->eval(
"context.getApplicationContext().setColorMode(*)", {jsColorMode});
847 QOhosConsumer<OhosConfigurationColorMode> valueChangedHandler)
850 [](QOhosJsState &jsState) {
851 auto optQAbility = jsState.defaultQAbility();
853 ? mapOhosConfigurationColorModeFromJs(
854 jsState, optQAbility->eval<QNapi::Number>(
"context.config.colorMode"))
855 : OhosConfigurationColorMode::COLOR_MODE_NOT_SET;
857 [](QOhosJsState &jsState,
const QNapi::Object &config) {
858 return mapOhosConfigurationColorModeFromJs(jsState, config.get<QNapi::Number>(
"colorMode"));
860 std::move(valueChangedHandler));
879 auto optQAbility = jsState.defaultQAbility();
883 const auto argb =
static_cast<uint32_t>(
884 optQAbility->eval<QNapi::Number>(
885 "context.resourceManager.getColorByNameSync(*)",
886 {
"ohos_id_color_emphasize"}));
887 return QColor::fromRgba(argb);
892 return QtOhos::makeOhosConfigValueDataSource<QColor>(
894 [](QOhosJsState &jsState,
const QNapi::Object &) {
895 return readAccentColor(jsState);
897 std::move(accentColorChangedHandler));
902 std::string undocumentedParamsPropertyName(
"params");
903 auto optParams = QNapi::getOptionalPropOrEmpty<QNapi::Value>(resource, undocumentedParamsPropertyName);
904 if (optParams.IsEmpty()) {
906 "%s: expected '%s' property not found in resource object, ignore getting pixmap",
907 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
910 if (!optParams.IsArray()) {
912 "%s: '%s' property is not an array, ignore getting pixmap",
913 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
917 auto params = QNapi::getArrayElements<std::vector<std::string>, QNapi::String>(
918 QNapi::checkedCast<QNapi::Array>(optParams));
919 if (params.empty()) {
921 "%s: '%s' property is empty, ignore getting pixmap",
922 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
926 const auto resourceIdentifier = params.front();
927 const auto lastSeparatorPosition = resourceIdentifier.rfind(
'.');
928 if (lastSeparatorPosition == std::string::npos) {
930 "%s: '%s' property has unknown resource name, ignore getting pixmap",
931 Q_FUNC_INFO, undocumentedParamsPropertyName.c_str());
935 const auto simpleName = resourceIdentifier.substr(lastSeparatorPosition + 1);
936 auto resourceContentBuffer = jsState.eval<QNapi::TypedArrayOf<std::uint8_t>>(
937 "@ohos.resourceManager.getSysResourceManager().getMediaByNameSync(*)", {simpleName});
940 bool pixmapLoadResult = pixmap.loadFromData(
941 static_cast<
const uchar *>(resourceContentBuffer.Data()), resourceContentBuffer.ByteLength());
943 if (pixmapLoadResult) {
946 qOhosPrintfWarning(
"%s: cannot load pixmap", Q_FUNC_INFO);
952 QOhosJsState &jsState,
const std::string &filenameExtension)
954 std::string ohosDotFilenameExtension =
"." + filenameExtension;
955 auto uniformDataType = jsState.eval<QNapi::String>(
956 "@ohos.data.uniformTypeDescriptor.getUniformDataTypeByFilenameExtension(*)",
957 {ohosDotFilenameExtension});
959 auto resourceValue = jsState.eval(
960 "@kit.FileManagerServiceKit.fileManagerService.getFileIconSync(*)", {uniformDataType});
961 if (resourceValue.IsObject()) {
962 return tryGetFilePixmapByResourceObject(jsState, QNapi::checkedCast<QNapi::Object>(resourceValue));
964 qOhosPrintfWarning(
"%s: got unhandled resource result type, ignore it", Q_FUNC_INFO);
985 auto fileNameSuffix = fileInfo().suffix();
986 auto optPixmap = QOhosJsThreadGateway::eval(
987 [&](QOhosJsState &jsState) {
988 return tryGetFilePixmapByFilenameExtension(jsState, fileNameSuffix.toStdString());
992 return optPixmap.has_value()
993 ? optPixmap.value().scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation)
1013 auto colorModeDataSource = makeOhosConfigColorModeDataSource(
1016 QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
1018 m_ohosConfigDarkModeFlagSupplier = [colorModeDataSource = std::move(colorModeDataSource)]() {
1019 return mapOhosConfigurationColorModeToDarkModeFlag(colorModeDataSource());
1022 m_ohosAccentColorSupplier = makeOhosAccentColorDataSource(
1023 [
this](
const auto &) {
1025 QWindowSystemInterface::handleThemeChange<QWindowSystemInterface::SynchronousDelivery>();
1033 std::optional<
bool> isDarkMode = mapOhosThemeFromColorScheme(scheme);
1034 setOhosConfigColorMode(
1035 isDarkMode.has_value()
1036 ? isDarkMode.value()
1044 return mapOhosThemeToColorScheme(m_ohosConfigDarkModeFlagSupplier());
1049 if (
const auto currentColorScheme = colorScheme(); currentColorScheme != Qt::ColorScheme::Unknown)
1050 m_themePalette = makePalettesMap(currentColorScheme, m_ohosAccentColorSupplier());
1055 auto _dbg = make_QCScopedDebug(
"QOhosPlatformTheme::createPlatformDialogHelper");
1056 return QOhosDialogs::createHelper(type);
1061 auto _dbg = make_QCScopedDebug(
"QOhosPlatformTheme::usePlatformNativeDialog");
1062 return (type == QOhosPlatformTheme::FileDialog);
1069 return QStringList(QString::fromUtf8(ohosThemeName));
1070 case MouseDoubleClickDistance:
1071 case TouchDoubleTapDistance:
1073 auto *primaryScreen = qGuiApp->primaryScreen();
1074 auto *platformScreen = primaryScreen !=
nullptr
1077 return platformScreen !=
nullptr
1078 ? QHighDpi::fromNativePixels(
1080 mouseDoubleClickDistance, platformScreen->pixelScalingCoefficient()),
1082 : mouseDoubleClickDistance;
1084 case MouseDoubleClickInterval:
1086 case WheelScrollLines:
1087 return m_wheelScrollLines;
1088 case MenuBarFocusOnAltPressRelease:
1090 case PreferFileIconFromTheme:
1093 return QPlatformTheme::themeHint(hint);
1099 if (
const auto it = m_themePalette.find(type); it != m_themePalette.end())
1101 return QPlatformTheme::palette(type);
1106 const auto fontIter = m_fonts.find(type);
1107 return fontIter != m_fonts.end()
1109 : QPlatformTheme::font(type);
1114 m_wheelScrollLines = wheelScrollLines;
1119 return makeQOhosSystemTrayIcon().release();
1124 return !fileInfo.suffix().isEmpty()
1125 ? QIcon(
new QOhosFileIconEngine(fileInfo, iconOptions))
1126 : QPlatformTheme::fileIcon(fileInfo, iconOptions);
1131 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.
AllPalletesColors makeAllPalettesColorsLight(const QColor &accentColor)
SystemPaletteColors makeSystemButtonPaletteColorsDark()
QPalette makeLabelPalette(const AllPalletesColors &palettesColors)
QPalette makeCheckBoxOrRadioButtonPalette(const AllPalletesColors &palettesColors)
QPalette makeSystemPalette(const AllPalletesColors &palettesColors)
SystemPaletteColors makeSystemButtonPaletteColorsLight()
QColor makeInactiveOrDisabledFromColor(const QColor &color)
QHash< QPlatformTheme::Palette, QPalette > makePalettesMap(Qt::ColorScheme scheme, const QColor &accentColor)
QPalette makeTextEditPalette(const AllPalletesColors &palettesColors)
QColor readAccentColor(QOhosJsState &jsState)
TooltipPaletteColors makeTooltipPaletteColorsDark()
QPalette makePalette(const QPalette &basePalette, std::initializer_list< std::tuple< QPalette::ColorGroup, QPalette::ColorRole, const QColor & > > brushEntries)
std::optional< QPixmap > tryGetFilePixmapByResourceObject(QOhosJsState &jsState, QNapi::Object resource)
PalettesColors makePalettesColorsLight(const QColor &accentColor)
AllPalletesColors makeAllPalettesColorsDark(const QColor &accentColor)
QOhosSupplier< OhosConfigurationColorMode > makeOhosConfigColorModeDataSource(QOhosConsumer< OhosConfigurationColorMode > valueChangedHandler)
void setOhosConfigColorMode(OhosConfigurationColorMode colorMode)
ButtonPaletteColors makeButtonPaletteColorsDark(const QColor &accentColor)
std::optional< bool > mapOhosConfigurationColorModeToDarkModeFlag(OhosConfigurationColorMode colorMode)
QPalette makePalette(std::initializer_list< std::tuple< QPalette::ColorGroup, QPalette::ColorRole, const QColor & > > brushEntries)
MenuPaletteColors makeMenuPaletteColorsDark(const PalettesColors &palettes)
TooltipPaletteColors makeTooltipPaletteColorsLight()
QtOhosQpa::enums::ohos::app::ability::ConfigurationConstant::ColorMode OhosConfigurationColorMode
QFont makeGroupBoxTitleFont()
ToolButtonPaletteColors makeToolButtonPaletteColorsDark()
QOhosSupplier< QColor > makeOhosAccentColorDataSource(QOhosConsumer< QColor > accentColorChangedHandler)
GroupboxPaletteColors makeGroupboxPaletteColorsDark()
std::optional< QPixmap > tryGetFilePixmapByFilenameExtension(QOhosJsState &jsState, const std::string &filenameExtension)
TabBarPaletteColors makeTabBarPaletteColorsLight(const QColor &accentColor)
QPalette makeHeaderPalette(const AllPalletesColors &palettesColors)
AllPalletesColors makeAllPalettesColors(Qt::ColorScheme scheme, const QColor &accentColor)
MenuPaletteColors makeMenuPaletteColorsLight(const PalettesColors &palettes)
OhosConfigurationColorMode mapOhosConfigurationColorModeFromJs(QOhosJsState &jsState, QNapi::Number colorModeJsEnum)
QPalette makeItemViewPalette(const AllPalletesColors &palettesColors)
constexpr int mouseDoubleClickInterval
constexpr int mouseDoubleClickDistance
Qt::ColorScheme mapOhosThemeToColorScheme(std::optional< bool > darkModeFlag)
PalettesColors makePalettesColorsDark(const QColor &accentColor)
QPalette makeTabBarPalette(const AllPalletesColors &palettesColors)
ToolButtonPaletteColors makeToolButtonPaletteColorsLight()
TextLineEditPaletteColors makeTextLineEditPaletteColorsLight()
QPalette makeMenuBarPalette(const AllPalletesColors &palettesColors)
std::optional< bool > mapOhosThemeFromColorScheme(Qt::ColorScheme scheme)
HeaderPaletteColors makeHeaderPaletteColorsDark()
TabBarPaletteColors makeTabBarPaletteColorsDark(const QColor &accentColor)
QPalette makeComboBoxPalette(const AllPalletesColors &palettesColors)
TextLineEditPaletteColors makeTextLineEditPaletteColorsDark()
ButtonPaletteColors makeButtonPaletteColorsLight(const QColor &accentColor)
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)
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