Don't crash when SimpleCache index is corrupt.
[chromium-blink-merge.git] / ui / native_theme / native_theme.h
blobd2408a71348357989930d9ca337b0fd49cb9ed2c
1 // Copyright (c) 2012 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.
5 #ifndef UI_NATIVE_THEME_NATIVE_THEME_H_
6 #define UI_NATIVE_THEME_NATIVE_THEME_H_
8 #include "third_party/skia/include/core/SkColor.h"
9 #include "ui/gfx/native_widget_types.h"
10 #include "ui/native_theme/native_theme_export.h"
12 class SkCanvas;
14 namespace gfx {
15 class Rect;
16 class Size;
19 namespace ui {
21 // This class supports drawing UI controls (like buttons, text fields, lists,
22 // comboboxes, etc) that look like the native UI controls of the underlying
23 // platform, such as Windows or Linux. It also supplies default colors for
24 // dialog box backgrounds, etc., which are obtained from the system theme where
25 // possible.
27 // The supported control types are listed in the Part enum. These parts can be
28 // in any state given by the State enum, where the actual definition of the
29 // state is part-specific. The supported colors are listed in the ColorId enum.
31 // Some parts require more information than simply the state in order to be
32 // drawn correctly, and this information is given to the Paint() method via the
33 // ExtraParams union. Each part that requires more information has its own
34 // field in the union.
36 // NativeTheme also supports getting the default size of a given part with
37 // the GetPartSize() method.
38 class NATIVE_THEME_EXPORT NativeTheme {
39 public:
40 // The part to be painted / sized.
41 enum Part {
42 kCheckbox,
43 kInnerSpinButton,
44 kMenuList,
45 kMenuCheck,
46 kMenuCheckBackground,
47 kMenuPopupArrow,
48 kMenuPopupBackground,
49 kMenuPopupGutter,
50 kMenuPopupSeparator,
51 kMenuItemBackground,
52 kProgressBar,
53 kPushButton,
54 kRadio,
56 // The order of the arrow enums is important, do not change without also
57 // changing the code in platform implementations.
58 kScrollbarDownArrow,
59 kScrollbarLeftArrow,
60 kScrollbarRightArrow,
61 kScrollbarUpArrow,
63 kScrollbarHorizontalThumb,
64 kScrollbarVerticalThumb,
65 kScrollbarHorizontalTrack,
66 kScrollbarVerticalTrack,
67 kScrollbarHorizontalGripper,
68 kScrollbarVerticalGripper,
69 kSliderTrack,
70 kSliderThumb,
71 kTabPanelBackground,
72 kTextField,
73 kTrackbarThumb,
74 kTrackbarTrack,
75 kWindowResizeGripper,
76 kMaxPart,
79 // The state of the part.
80 enum State {
81 kDisabled,
82 kHovered,
83 kNormal,
84 kPressed,
85 kMaxState,
88 enum MenuVariation {
89 MENU_VARIATION_NORMAL,
90 MENU_VARIATION_COMPACT_1,
91 MENU_VARIATION_COMPACT_2,
92 MENU_VARIATION_CONTRAST
95 // Each structure below holds extra information needed when painting a given
96 // part.
98 struct ButtonExtraParams {
99 bool checked;
100 bool indeterminate; // Whether the button state is indeterminate.
101 bool is_default; // Whether the button is default button.
102 bool is_focused;
103 bool has_border;
104 int classic_state; // Used on Windows when uxtheme is not available.
105 SkColor background_color;
108 struct InnerSpinButtonExtraParams {
109 bool spin_up;
110 bool read_only;
111 int classic_state; // Used on Windows when uxtheme is not available.
114 struct MenuArrowExtraParams {
115 bool pointing_right;
116 // Used for the disabled state to indicate if the item is both disabled and
117 // selected.
118 bool is_selected;
121 struct MenuCheckExtraParams {
122 bool is_radio;
123 // Used for the disabled state to indicate if the item is both disabled and
124 // selected.
125 bool is_selected;
128 struct MenuItemExtraParams {
129 bool is_selected;
132 struct MenuListExtraParams {
133 bool has_border;
134 bool has_border_radius;
135 int arrow_x;
136 int arrow_y;
137 SkColor background_color;
138 int classic_state; // Used on Windows when uxtheme is not available.
141 struct MenuSeparatorExtraParams {
142 bool has_gutter;
145 struct MenuBackgroundExtraParams {
146 int corner_radius;
149 struct ProgressBarExtraParams {
150 double animated_seconds;
151 bool determinate;
152 int value_rect_x;
153 int value_rect_y;
154 int value_rect_width;
155 int value_rect_height;
158 struct ScrollbarArrowExtraParams {
159 bool is_hovering;
162 struct ScrollbarTrackExtraParams {
163 bool is_upper;
164 int track_x;
165 int track_y;
166 int track_width;
167 int track_height;
168 int classic_state; // Used on Windows when uxtheme is not available.
171 struct ScrollbarThumbExtraParams {
172 bool is_hovering;
175 struct SliderExtraParams {
176 bool vertical;
177 bool in_drag;
180 struct TextFieldExtraParams {
181 bool is_text_area;
182 bool is_listbox;
183 SkColor background_color;
184 bool is_read_only;
185 bool is_focused;
186 bool fill_content_area;
187 bool draw_edges;
188 int classic_state; // Used on Windows when uxtheme is not available.
191 struct TrackbarExtraParams {
192 bool vertical;
193 int classic_state; // Used on Windows when uxtheme is not available.
196 union ExtraParams {
197 ButtonExtraParams button;
198 InnerSpinButtonExtraParams inner_spin;
199 MenuArrowExtraParams menu_arrow;
200 MenuCheckExtraParams menu_check;
201 MenuItemExtraParams menu_item;
202 MenuListExtraParams menu_list;
203 MenuSeparatorExtraParams menu_separator;
204 MenuBackgroundExtraParams menu_background;
205 ProgressBarExtraParams progress_bar;
206 ScrollbarArrowExtraParams scrollbar_arrow;
207 ScrollbarTrackExtraParams scrollbar_track;
208 ScrollbarThumbExtraParams scrollbar_thumb;
209 SliderExtraParams slider;
210 TextFieldExtraParams text_field;
211 TrackbarExtraParams trackbar;
214 // Return the size of the part.
215 virtual gfx::Size GetPartSize(Part part,
216 State state,
217 const ExtraParams& extra) const = 0;
219 // Paint the part to the canvas.
220 virtual void Paint(SkCanvas* canvas,
221 Part part,
222 State state,
223 const gfx::Rect& rect,
224 const ExtraParams& extra) const = 0;
226 // Supports theme specific colors.
227 void SetScrollbarColors(unsigned inactive_color,
228 unsigned active_color,
229 unsigned track_color);
231 // Colors for GetSystemColor().
232 enum ColorId {
233 // Windows
234 kColorId_WindowBackground,
235 // Dialogs
236 kColorId_DialogBackground,
237 // FocusableBorder
238 kColorId_FocusedBorderColor,
239 kColorId_UnfocusedBorderColor,
240 // Button
241 kColorId_ButtonBackgroundColor,
242 kColorId_ButtonEnabledColor,
243 kColorId_ButtonDisabledColor,
244 kColorId_ButtonHighlightColor,
245 kColorId_ButtonHoverColor,
246 // MenuItem
247 kColorId_EnabledMenuItemForegroundColor,
248 kColorId_DisabledMenuItemForegroundColor,
249 kColorId_SelectedMenuItemForegroundColor,
250 kColorId_FocusedMenuItemBackgroundColor,
251 kColorId_HoverMenuItemBackgroundColor,
252 kColorId_MenuSeparatorColor,
253 kColorId_MenuBackgroundColor,
254 kColorId_MenuBorderColor,
255 // MenuButton - buttons in wrench menu
256 kColorId_EnabledMenuButtonBorderColor,
257 kColorId_FocusedMenuButtonBorderColor,
258 kColorId_HoverMenuButtonBorderColor,
259 // Label
260 kColorId_LabelEnabledColor,
261 kColorId_LabelDisabledColor,
262 kColorId_LabelBackgroundColor,
263 // Textfield
264 kColorId_TextfieldDefaultColor,
265 kColorId_TextfieldDefaultBackground,
266 kColorId_TextfieldReadOnlyColor,
267 kColorId_TextfieldReadOnlyBackground,
268 kColorId_TextfieldSelectionColor,
269 kColorId_TextfieldSelectionBackgroundFocused,
270 kColorId_TextfieldSelectionBackgroundUnfocused,
271 // Tree
272 kColorId_TreeBackground,
273 kColorId_TreeText,
274 kColorId_TreeSelectedText,
275 kColorId_TreeSelectedTextUnfocused,
276 kColorId_TreeSelectionBackgroundFocused,
277 kColorId_TreeSelectionBackgroundUnfocused,
278 kColorId_TreeArrow,
279 // Table
280 kColorId_TableBackground,
281 kColorId_TableText,
282 kColorId_TableSelectedText,
283 kColorId_TableSelectedTextUnfocused,
284 kColorId_TableSelectionBackgroundFocused,
285 kColorId_TableSelectionBackgroundUnfocused,
286 kColorId_TableGroupingIndicatorColor,
287 // TODO(benrg): move other hardcoded colors here.
290 // Return a color from the system theme.
291 virtual SkColor GetSystemColor(ColorId color_id) const = 0;
293 // Returns a shared instance of the native theme.
294 // The returned object should not be deleted by the caller. This function
295 // is not thread safe and should only be called from the UI thread.
296 // Each port of NativeTheme should provide its own implementation of this
297 // function, returning the port's subclass.
298 static NativeTheme* instance();
300 static MenuVariation GetMenuVariation();
302 protected:
303 NativeTheme();
304 virtual ~NativeTheme();
306 unsigned int thumb_inactive_color_;
307 unsigned int thumb_active_color_;
308 unsigned int track_color_;
310 DISALLOW_COPY_AND_ASSIGN(NativeTheme);
313 } // namespace ui
315 #endif // UI_NATIVE_THEME_NATIVE_THEME_H_