1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_THEMES_THEME_PROPERTIES_H_ 6 #define CHROME_BROWSER_THEMES_THEME_PROPERTIES_H_ 7 8 #include <set> 9 #include <string> 10 11 #include "base/basictypes.h" 12 #include "third_party/skia/include/core/SkColor.h" 13 #include "ui/gfx/color_utils.h" 14 15 // Static only class for querying which properties / images are themeable and 16 // the defaults of these properties. 17 // All methods are thread safe unless indicated otherwise. 18 class ThemeProperties { 19 public: 20 // --------------------------------------------------------------------------- 21 // The int values of OverwritableByUserThemeProperties, Alignment, and Tiling 22 // are used as a key to store the property in the browser theme pack. If you 23 // modify any of these enums, increment the version number in 24 // browser_theme_pack.h 25 26 enum OverwritableByUserThemeProperty { 27 COLOR_FRAME, 28 COLOR_FRAME_INACTIVE, 29 COLOR_FRAME_INCOGNITO, 30 COLOR_FRAME_INCOGNITO_INACTIVE, 31 COLOR_TOOLBAR, 32 COLOR_TAB_TEXT, 33 COLOR_BACKGROUND_TAB_TEXT, 34 COLOR_BOOKMARK_TEXT, 35 COLOR_NTP_BACKGROUND, 36 COLOR_NTP_TEXT, 37 COLOR_NTP_LINK, 38 COLOR_NTP_LINK_UNDERLINE, 39 COLOR_NTP_HEADER, 40 COLOR_NTP_SECTION, 41 COLOR_NTP_SECTION_TEXT, 42 COLOR_NTP_SECTION_LINK, 43 COLOR_NTP_SECTION_LINK_UNDERLINE, 44 COLOR_BUTTON_BACKGROUND, 45 46 TINT_BUTTONS, 47 TINT_FRAME, 48 TINT_FRAME_INACTIVE, 49 TINT_FRAME_INCOGNITO, 50 TINT_FRAME_INCOGNITO_INACTIVE, 51 TINT_BACKGROUND_TAB, 52 53 NTP_BACKGROUND_ALIGNMENT, 54 NTP_BACKGROUND_TILING, 55 NTP_LOGO_ALTERNATE 56 }; 57 58 // A bitfield mask for alignments. 59 enum Alignment { 60 ALIGN_CENTER = 0, 61 ALIGN_LEFT = 1 << 0, 62 ALIGN_TOP = 1 << 1, 63 ALIGN_RIGHT = 1 << 2, 64 ALIGN_BOTTOM = 1 << 3, 65 }; 66 67 // Background tiling choices. 68 enum Tiling { 69 NO_REPEAT = 0, 70 REPEAT_X = 1, 71 REPEAT_Y = 2, 72 REPEAT = 3 73 }; 74 75 // -------------------------------------------------------------------------- 76 // The int value of the properties in NotOverwritableByUserThemeProperties 77 // has no special meaning. Modify the enum to your heart's content. 78 // The enum takes on values >= 1000 as not to overlap with 79 // OverwritableByUserThemeProperties. 80 enum NotOverwritableByUserThemeProperty { 81 COLOR_CONTROL_BACKGROUND = 1000, 82 COLOR_TOOLBAR_SEPARATOR, 83 84 // These colors don't have constant default values. They are derived from 85 // the runtime value of other colors. 86 COLOR_NTP_SECTION_HEADER_TEXT, 87 COLOR_NTP_SECTION_HEADER_TEXT_HOVER, 88 COLOR_NTP_SECTION_HEADER_RULE, 89 COLOR_NTP_SECTION_HEADER_RULE_LIGHT, 90 COLOR_NTP_TEXT_LIGHT, 91 COLOR_MANAGED_USER_LABEL, 92 COLOR_MANAGED_USER_LABEL_BACKGROUND, 93 COLOR_MANAGED_USER_LABEL_BORDER, 94 95 COLOR_STATUS_BAR_TEXT, 96 97 #if defined(OS_MACOSX) 98 COLOR_TOOLBAR_BEZEL, 99 COLOR_TOOLBAR_STROKE, 100 COLOR_TOOLBAR_STROKE_INACTIVE, 101 COLOR_TOOLBAR_BUTTON_STROKE, 102 COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE, 103 GRADIENT_FRAME_INCOGNITO, 104 GRADIENT_FRAME_INCOGNITO_INACTIVE, 105 GRADIENT_TOOLBAR, 106 GRADIENT_TOOLBAR_INACTIVE, 107 GRADIENT_TOOLBAR_BUTTON, 108 GRADIENT_TOOLBAR_BUTTON_INACTIVE, 109 GRADIENT_TOOLBAR_BUTTON_PRESSED, 110 GRADIENT_TOOLBAR_BUTTON_PRESSED_INACTIVE 111 #endif // OS_MACOSX 112 }; 113 114 // Used by the browser theme pack to parse alignments from something like 115 // "top left" into a bitmask of Alignment. 116 static int StringToAlignment(const std::string& alignment); 117 118 // Used by the browser theme pack to parse alignments from something like 119 // "no-repeat" into a Tiling value. 120 static int StringToTiling(const std::string& tiling); 121 122 // Converts a bitmask of Alignment into a string like "top left". The result 123 // is used to generate a CSS value. 124 static std::string AlignmentToString(int alignment); 125 126 // Converts a Tiling into a string like "no-repeat". The result is used to 127 // generate a CSS value. 128 static std::string TilingToString(int tiling); 129 130 // Returns true if the image is themeable. 131 static bool IsThemeableImage(int resource_id); 132 133 // Returns the set of IDR_* resources that should be tinted. 134 // This method is not thread safe. 135 static const std::set<int>& GetTintableToolbarButtons(); 136 137 // Returns the default tint for the given tint |id| TINT_* enum value. 138 // Returns an HSL value of {-1, -1, -1} if |id| is invalid. 139 static color_utils::HSL GetDefaultTint(int id); 140 141 // Returns the default color for the given color |id| COLOR_* enum value. 142 // Returns SK_ColorRED if |id| is invalid. 143 static SkColor GetDefaultColor(int id); 144 145 // Returns the default value for the given property |id|. Returns -1 if |id| 146 // is invalid. 147 static int GetDefaultDisplayProperty(int id); 148 149 private: 150 DISALLOW_IMPLICIT_CONSTRUCTORS(ThemeProperties); 151 }; 152 153 #endif // CHROME_BROWSER_THEMES_THEME_PROPERTIES_H_ 154