SystemTheme.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Forward.h>
  8. #include <AK/String.h>
  9. #include <AK/Types.h>
  10. #include <LibCore/AnonymousBuffer.h>
  11. #include <LibGfx/Color.h>
  12. namespace Gfx {
  13. #define ENUMERATE_COLOR_ROLES(C) \
  14. C(ActiveLink) \
  15. C(ActiveWindowBorder1) \
  16. C(ActiveWindowBorder2) \
  17. C(ActiveWindowTitle) \
  18. C(ActiveWindowTitleShadow) \
  19. C(ActiveWindowTitleStripes) \
  20. C(Base) \
  21. C(BaseText) \
  22. C(Button) \
  23. C(ButtonText) \
  24. C(DesktopBackground) \
  25. C(FocusOutline) \
  26. C(Gutter) \
  27. C(GutterBorder) \
  28. C(HighlightWindowBorder1) \
  29. C(HighlightWindowBorder2) \
  30. C(HighlightWindowTitle) \
  31. C(HighlightWindowTitleShadow) \
  32. C(HighlightWindowTitleStripes) \
  33. C(HighlightSearching) \
  34. C(HighlightSearchingText) \
  35. C(HoverHighlight) \
  36. C(InactiveSelection) \
  37. C(InactiveSelectionText) \
  38. C(InactiveWindowBorder1) \
  39. C(InactiveWindowBorder2) \
  40. C(InactiveWindowTitle) \
  41. C(InactiveWindowTitleShadow) \
  42. C(InactiveWindowTitleStripes) \
  43. C(Link) \
  44. C(MenuBase) \
  45. C(MenuBaseText) \
  46. C(MenuSelection) \
  47. C(MenuSelectionText) \
  48. C(MenuStripe) \
  49. C(MovingWindowBorder1) \
  50. C(MovingWindowBorder2) \
  51. C(MovingWindowTitle) \
  52. C(MovingWindowTitleShadow) \
  53. C(MovingWindowTitleStripes) \
  54. C(PlaceholderText) \
  55. C(RubberBandBorder) \
  56. C(RubberBandFill) \
  57. C(Ruler) \
  58. C(RulerActiveText) \
  59. C(RulerBorder) \
  60. C(RulerInactiveText) \
  61. C(Selection) \
  62. C(SelectionText) \
  63. C(SyntaxComment) \
  64. C(SyntaxControlKeyword) \
  65. C(SyntaxIdentifier) \
  66. C(SyntaxKeyword) \
  67. C(SyntaxNumber) \
  68. C(SyntaxOperator) \
  69. C(SyntaxPreprocessorStatement) \
  70. C(SyntaxPreprocessorValue) \
  71. C(SyntaxPunctuation) \
  72. C(SyntaxString) \
  73. C(SyntaxType) \
  74. C(TextCursor) \
  75. C(ThreedHighlight) \
  76. C(ThreedShadow1) \
  77. C(ThreedShadow2) \
  78. C(Tooltip) \
  79. C(TooltipText) \
  80. C(Tray) \
  81. C(TrayText) \
  82. C(VisitedLink) \
  83. C(Window) \
  84. C(WindowText)
  85. enum class ColorRole {
  86. NoRole,
  87. #undef __ENUMERATE_COLOR_ROLE
  88. #define __ENUMERATE_COLOR_ROLE(role) role,
  89. ENUMERATE_COLOR_ROLES(__ENUMERATE_COLOR_ROLE)
  90. #undef __ENUMERATE_COLOR_ROLE
  91. __Count,
  92. Background = Window,
  93. DisabledText = ThreedShadow1,
  94. };
  95. inline const char* to_string(ColorRole role)
  96. {
  97. switch (role) {
  98. case ColorRole::NoRole:
  99. return "NoRole";
  100. #undef __ENUMERATE_COLOR_ROLE
  101. #define __ENUMERATE_COLOR_ROLE(role) \
  102. case ColorRole::role: \
  103. return #role;
  104. ENUMERATE_COLOR_ROLES(__ENUMERATE_COLOR_ROLE)
  105. #undef __ENUMERATE_COLOR_ROLE
  106. default:
  107. VERIFY_NOT_REACHED();
  108. }
  109. }
  110. enum class MetricRole {
  111. NoRole,
  112. TitleHeight,
  113. TitleButtonWidth,
  114. TitleButtonHeight,
  115. __Count,
  116. };
  117. enum class PathRole {
  118. NoRole,
  119. TitleButtonIcons,
  120. InactiveWindowShadow,
  121. ActiveWindowShadow,
  122. TaskbarShadow,
  123. MenuShadow,
  124. TooltipShadow,
  125. __Count,
  126. };
  127. struct SystemTheme {
  128. RGBA32 color[(int)ColorRole::__Count];
  129. int metric[(int)MetricRole::__Count];
  130. char path[(int)PathRole::__Count][256]; // TODO: PATH_MAX?
  131. };
  132. Core::AnonymousBuffer& current_system_theme_buffer();
  133. void set_system_theme(Core::AnonymousBuffer);
  134. Core::AnonymousBuffer load_system_theme(const String& path);
  135. }
  136. using Gfx::ColorRole;