blob: 0705665057a67c62e9c1f65c7b09f8c76ce1957c [file] [log] [blame]
[email protected]990e6222012-11-16 13:31:181// 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.
4
5#ifndef UI_NATIVE_THEME_NATIVE_THEME_BASE_H_
6#define UI_NATIVE_THEME_NATIVE_THEME_BASE_H_
7
8#include "base/basictypes.h"
9#include "base/compiler_specific.h"
10#include "skia/ext/platform_canvas.h"
11#include "ui/native_theme/native_theme.h"
12
13namespace gfx {
14class ImageSkia;
15class Rect;
16class Size;
17}
18
19namespace ui {
20
21// Theme support for non-Windows toolkits.
22class NATIVE_THEME_EXPORT NativeThemeBase : public NativeTheme {
23 public:
24 // NativeTheme implementation:
25 virtual gfx::Size GetPartSize(Part part,
26 State state,
27 const ExtraParams& extra) const OVERRIDE;
28 virtual void Paint(SkCanvas* canvas,
29 Part part,
30 State state,
31 const gfx::Rect& rect,
32 const ExtraParams& extra) const OVERRIDE;
33
34 protected:
35 NativeThemeBase();
36 virtual ~NativeThemeBase();
37
38 // Draw the arrow. Used by scrollbar and inner spin button.
39 virtual void PaintArrowButton(
40 SkCanvas* gc,
41 const gfx::Rect& rect,
42 Part direction,
43 State state) const;
44 // Paint the scrollbar track. Done before the thumb so that it can contain
45 // alpha.
46 virtual void PaintScrollbarTrack(
47 SkCanvas* canvas,
48 Part part,
49 State state,
50 const ScrollbarTrackExtraParams& extra_params,
51 const gfx::Rect& rect) const;
52 // Draw the scrollbar thumb over the track.
53 virtual void PaintScrollbarThumb(
54 SkCanvas* canvas,
55 Part part,
56 State state,
57 const gfx::Rect& rect) const;
58
59 virtual void PaintCheckbox(
60 SkCanvas* canvas,
61 State state,
62 const gfx::Rect& rect,
63 const ButtonExtraParams& button) const;
64
65 virtual void PaintRadio(
66 SkCanvas* canvas,
67 State state,
68 const gfx::Rect& rect,
69 const ButtonExtraParams& button) const;
70
71 virtual void PaintButton(
72 SkCanvas* canvas,
73 State state,
74 const gfx::Rect& rect,
75 const ButtonExtraParams& button) const;
76
77 virtual void PaintTextField(
78 SkCanvas* canvas,
79 State state,
80 const gfx::Rect& rect,
81 const TextFieldExtraParams& text) const;
82
83 virtual void PaintMenuList(
84 SkCanvas* canvas,
85 State state,
86 const gfx::Rect& rect,
87 const MenuListExtraParams& menu_list) const;
88
89 virtual void PaintMenuPopupBackground(SkCanvas* canvas,
90 const gfx::Size& size) const;
91
92 virtual void PaintMenuItemBackground(
93 SkCanvas* canvas,
94 State state,
95 const gfx::Rect& rect,
96 const MenuListExtraParams& menu_list) const;
97
98 virtual void PaintSliderTrack(
99 SkCanvas* canvas,
100 State state,
101 const gfx::Rect& rect,
102 const SliderExtraParams& slider) const;
103
104 virtual void PaintSliderThumb(
105 SkCanvas* canvas,
106 State state,
107 const gfx::Rect& rect,
108 const SliderExtraParams& slider) const;
109
110 virtual void PaintInnerSpinButton(
111 SkCanvas* canvas,
112 State state,
113 const gfx::Rect& rect,
114 const InnerSpinButtonExtraParams& spin_button) const;
115
116 virtual void PaintProgressBar(
117 SkCanvas* canvas,
118 State state,
119 const gfx::Rect& rect,
120 const ProgressBarExtraParams& progress_bar) const;
121
122 protected:
123 void set_scrollbar_button_length(unsigned int length) {
124 scrollbar_button_length_ = length;
125 }
126
127 bool IntersectsClipRectInt(SkCanvas* canvas,
128 int x, int y, int w, int h) const;
129
130 void DrawImageInt(SkCanvas* canvas, const gfx::ImageSkia& image,
131 int src_x, int src_y, int src_w, int src_h,
132 int dest_x, int dest_y, int dest_w, int dest_h) const;
133
134 void DrawTiledImage(SkCanvas* canvas,
135 const gfx::ImageSkia& image,
136 int src_x, int src_y,
137 float tile_scale_x, float tile_scale_y,
138 int dest_x, int dest_y, int w, int h) const;
139
140 SkColor SaturateAndBrighten(SkScalar* hsv,
141 SkScalar saturate_amount,
142 SkScalar brighten_amount) const;
143 private:
144 void DrawVertLine(SkCanvas* canvas,
145 int x,
146 int y1,
147 int y2,
148 const SkPaint& paint) const;
149 void DrawHorizLine(SkCanvas* canvas,
150 int x1,
151 int x2,
152 int y,
153 const SkPaint& paint) const;
154 void DrawBox(SkCanvas* canvas,
155 const gfx::Rect& rect,
156 const SkPaint& paint) const;
157 SkScalar Clamp(SkScalar value,
158 SkScalar min,
159 SkScalar max) const;
160 SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const;
161
162 // Returns whether the new vector-graphics based checkbox and radio button
163 // style is enabled.
164 bool IsNewCheckboxStyleEnabled(SkCanvas* canvas) const;
165
166 // Paint the common parts of the new (experimental) checkboxes and radio
167 // buttons.
168 // borderRadius specifies how rounded the corners should be.
169 SkRect PaintCheckboxRadioNewCommon(
170 SkCanvas* canvas,
171 State state,
172 const gfx::Rect& rect,
173 const SkScalar borderRadius) const;
174
175 // Paint an (experimental) vector-graphics based checkbox on the supplied
176 // canvas at the specified co-ordinates.
177 void PaintCheckboxNew(
178 SkCanvas* canvas,
179 State state,
180 const gfx::Rect& rect,
181 const ButtonExtraParams& button) const;
182
183 // Paint an (experimental) vector-graphics based radio button on the
184 // supplied canbas at the specified co-ordinates.
185 void PaintRadioNew(
186 SkCanvas* canvas,
187 State state,
188 const gfx::Rect& rect,
189 const ButtonExtraParams& button) const;
190
191 unsigned int scrollbar_width_;
192 unsigned int scrollbar_button_length_;
193
194 DISALLOW_COPY_AND_ASSIGN(NativeThemeBase);
195};
196
197} // namespace ui
198
199#endif // UI_NATIVE_THEME_NATIVE_THEME_BASE_H_