Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / themes / theme_properties.h
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 #if defined(ENABLE_MANAGED_USERS)
92     COLOR_SUPERVISED_USER_LABEL,
93     COLOR_SUPERVISED_USER_LABEL_BACKGROUND,
94     COLOR_SUPERVISED_USER_LABEL_BORDER,
95 #endif
96
97     COLOR_STATUS_BAR_TEXT,
98
99 #if defined(OS_MACOSX)
100     COLOR_TOOLBAR_BEZEL,
101     COLOR_TOOLBAR_STROKE,
102     COLOR_TOOLBAR_STROKE_INACTIVE,
103     COLOR_TOOLBAR_BUTTON_STROKE,
104     COLOR_TOOLBAR_BUTTON_STROKE_INACTIVE,
105     GRADIENT_FRAME_INCOGNITO,
106     GRADIENT_FRAME_INCOGNITO_INACTIVE,
107     GRADIENT_TOOLBAR,
108     GRADIENT_TOOLBAR_INACTIVE,
109     GRADIENT_TOOLBAR_BUTTON,
110     GRADIENT_TOOLBAR_BUTTON_INACTIVE,
111     GRADIENT_TOOLBAR_BUTTON_PRESSED,
112     GRADIENT_TOOLBAR_BUTTON_PRESSED_INACTIVE
113 #endif  // OS_MACOSX
114   };
115
116   // Used by the browser theme pack to parse alignments from something like
117   // "top left" into a bitmask of Alignment.
118   static int StringToAlignment(const std::string& alignment);
119
120   // Used by the browser theme pack to parse alignments from something like
121   // "no-repeat" into a Tiling value.
122   static int StringToTiling(const std::string& tiling);
123
124   // Converts a bitmask of Alignment into a string like "top left". The result
125   // is used to generate a CSS value.
126   static std::string AlignmentToString(int alignment);
127
128   // Converts a Tiling into a string like "no-repeat". The result is used to
129   // generate a CSS value.
130   static std::string TilingToString(int tiling);
131
132   // Returns true if the image is themeable.
133   static bool IsThemeableImage(int resource_id);
134
135   // Returns the set of IDR_* resources that should be tinted.
136   // This method is not thread safe.
137   static const std::set<int>& GetTintableToolbarButtons();
138
139   // Returns the default tint for the given tint |id| TINT_* enum value.
140   // Returns an HSL value of {-1, -1, -1} if |id| is invalid.
141   static color_utils::HSL GetDefaultTint(int id);
142
143   // Returns the default color for the given color |id| COLOR_* enum value.
144   // Returns SK_ColorRED if |id| is invalid.
145   static SkColor GetDefaultColor(int id);
146
147   // Returns the default value for the given property |id|. Returns -1 if |id|
148   // is invalid.
149   static int GetDefaultDisplayProperty(int id);
150
151  private:
152   DISALLOW_IMPLICIT_CONSTRUCTORS(ThemeProperties);
153 };
154
155 #endif  // CHROME_BROWSER_THEMES_THEME_PROPERTIES_H_