Remove unused cc::Animation RunStates
[chromium-blink-merge.git] / ui / native_theme / native_theme.h
blob98974145570f35ee7cb957d6562bba965a1a6f70
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 // Each structure below holds extra information needed when painting a given
89 // part.
91 struct ButtonExtraParams {
92 bool checked;
93 bool indeterminate; // Whether the button state is indeterminate.
94 bool is_default; // Whether the button is default button.
95 bool is_focused;
96 bool has_border;
97 int classic_state; // Used on Windows when uxtheme is not available.
98 SkColor background_color;
101 struct InnerSpinButtonExtraParams {
102 bool spin_up;
103 bool read_only;
104 int classic_state; // Used on Windows when uxtheme is not available.
107 struct MenuArrowExtraParams {
108 bool pointing_right;
109 // Used for the disabled state to indicate if the item is both disabled and
110 // selected.
111 bool is_selected;
114 struct MenuCheckExtraParams {
115 bool is_radio;
116 // Used for the disabled state to indicate if the item is both disabled and
117 // selected.
118 bool is_selected;
121 struct MenuItemExtraParams {
122 bool is_selected;
125 struct MenuListExtraParams {
126 bool has_border;
127 bool has_border_radius;
128 int arrow_x;
129 int arrow_y;
130 SkColor background_color;
131 int classic_state; // Used on Windows when uxtheme is not available.
134 struct MenuSeparatorExtraParams {
135 bool has_gutter;
138 struct MenuBackgroundExtraParams {
139 int corner_radius;
142 struct ProgressBarExtraParams {
143 double animated_seconds;
144 bool determinate;
145 int value_rect_x;
146 int value_rect_y;
147 int value_rect_width;
148 int value_rect_height;
151 struct ScrollbarArrowExtraParams {
152 bool is_hovering;
155 struct ScrollbarTrackExtraParams {
156 bool is_upper;
157 int track_x;
158 int track_y;
159 int track_width;
160 int track_height;
161 int classic_state; // Used on Windows when uxtheme is not available.
164 struct ScrollbarThumbExtraParams {
165 bool is_hovering;
168 struct SliderExtraParams {
169 bool vertical;
170 bool in_drag;
173 struct TextFieldExtraParams {
174 bool is_text_area;
175 bool is_listbox;
176 SkColor background_color;
177 bool is_read_only;
178 bool is_focused;
179 bool fill_content_area;
180 bool draw_edges;
181 int classic_state; // Used on Windows when uxtheme is not available.
184 struct TrackbarExtraParams {
185 bool vertical;
186 int classic_state; // Used on Windows when uxtheme is not available.
189 union ExtraParams {
190 ButtonExtraParams button;
191 InnerSpinButtonExtraParams inner_spin;
192 MenuArrowExtraParams menu_arrow;
193 MenuCheckExtraParams menu_check;
194 MenuItemExtraParams menu_item;
195 MenuListExtraParams menu_list;
196 MenuSeparatorExtraParams menu_separator;
197 MenuBackgroundExtraParams menu_background;
198 ProgressBarExtraParams progress_bar;
199 ScrollbarArrowExtraParams scrollbar_arrow;
200 ScrollbarTrackExtraParams scrollbar_track;
201 ScrollbarThumbExtraParams scrollbar_thumb;
202 SliderExtraParams slider;
203 TextFieldExtraParams text_field;
204 TrackbarExtraParams trackbar;
207 // Return the size of the part.
208 virtual gfx::Size GetPartSize(Part part,
209 State state,
210 const ExtraParams& extra) const = 0;
212 // Paint the part to the canvas.
213 virtual void Paint(SkCanvas* canvas,
214 Part part,
215 State state,
216 const gfx::Rect& rect,
217 const ExtraParams& extra) const = 0;
219 // Supports theme specific colors.
220 void SetScrollbarColors(unsigned inactive_color,
221 unsigned active_color,
222 unsigned track_color);
224 // Colors for GetSystemColor().
225 enum ColorId {
226 // Windows
227 kColorId_WindowBackground,
228 // Dialogs
229 kColorId_DialogBackground,
230 // FocusableBorder
231 kColorId_FocusedBorderColor,
232 kColorId_UnfocusedBorderColor,
233 // Button
234 kColorId_ButtonBackgroundColor,
235 kColorId_ButtonEnabledColor,
236 kColorId_ButtonDisabledColor,
237 kColorId_ButtonHighlightColor,
238 kColorId_ButtonHoverColor,
239 // MenuItem
240 kColorId_EnabledMenuItemForegroundColor,
241 kColorId_DisabledMenuItemForegroundColor,
242 kColorId_SelectedMenuItemForegroundColor,
243 kColorId_FocusedMenuItemBackgroundColor,
244 kColorId_HoverMenuItemBackgroundColor,
245 kColorId_MenuSeparatorColor,
246 kColorId_MenuBackgroundColor,
247 kColorId_MenuBorderColor,
248 // MenuButton - buttons in wrench menu
249 kColorId_EnabledMenuButtonBorderColor,
250 kColorId_FocusedMenuButtonBorderColor,
251 kColorId_HoverMenuButtonBorderColor,
252 // Label
253 kColorId_LabelEnabledColor,
254 kColorId_LabelDisabledColor,
255 kColorId_LabelBackgroundColor,
256 // Textfield
257 kColorId_TextfieldDefaultColor,
258 kColorId_TextfieldDefaultBackground,
259 kColorId_TextfieldReadOnlyColor,
260 kColorId_TextfieldReadOnlyBackground,
261 kColorId_TextfieldSelectionColor,
262 kColorId_TextfieldSelectionBackgroundFocused,
263 // Tree
264 kColorId_TreeBackground,
265 kColorId_TreeText,
266 kColorId_TreeSelectedText,
267 kColorId_TreeSelectedTextUnfocused,
268 kColorId_TreeSelectionBackgroundFocused,
269 kColorId_TreeSelectionBackgroundUnfocused,
270 kColorId_TreeArrow,
271 // Table
272 kColorId_TableBackground,
273 kColorId_TableText,
274 kColorId_TableSelectedText,
275 kColorId_TableSelectedTextUnfocused,
276 kColorId_TableSelectionBackgroundFocused,
277 kColorId_TableSelectionBackgroundUnfocused,
278 kColorId_TableGroupingIndicatorColor,
279 // TODO(benrg): move other hardcoded colors here.
282 // Return a color from the system theme.
283 virtual SkColor GetSystemColor(ColorId color_id) const = 0;
285 // Returns a shared instance of the native theme.
286 // The returned object should not be deleted by the caller. This function
287 // is not thread safe and should only be called from the UI thread.
288 // Each port of NativeTheme should provide its own implementation of this
289 // function, returning the port's subclass.
290 static NativeTheme* instance();
292 protected:
293 NativeTheme();
294 virtual ~NativeTheme();
296 unsigned int thumb_inactive_color_;
297 unsigned int thumb_active_color_;
298 unsigned int track_color_;
300 DISALLOW_COPY_AND_ASSIGN(NativeTheme);
303 } // namespace ui
305 #endif // UI_NATIVE_THEME_NATIVE_THEME_H_