blob: ca838d4944be01d42026848740ec8548c677b311 [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
danakj25c52c32016-04-12 21:51:088#include <memory>
9
[email protected]990e6222012-11-16 13:31:1810#include "base/compiler_specific.h"
bsep6e7c3082016-05-19 23:04:2611#include "base/gtest_prod_util.h"
avi9c81217b2015-12-24 23:40:0512#include "base/macros.h"
[email protected]990e6222012-11-16 13:31:1813#include "skia/ext/platform_canvas.h"
14#include "ui/native_theme/native_theme.h"
15
16namespace gfx {
[email protected]990e6222012-11-16 13:31:1817class Rect;
18class Size;
19}
20
21namespace ui {
22
23// Theme support for non-Windows toolkits.
24class NATIVE_THEME_EXPORT NativeThemeBase : public NativeTheme {
25 public:
26 // NativeTheme implementation:
dcheng08038792014-10-21 10:53:2627 gfx::Size GetPartSize(Part part,
28 State state,
29 const ExtraParams& extra) const override;
30 void Paint(SkCanvas* canvas,
31 Part part,
32 State state,
33 const gfx::Rect& rect,
34 const ExtraParams& extra) const override;
[email protected]990e6222012-11-16 13:31:1835
36 protected:
37 NativeThemeBase();
dcheng08038792014-10-21 10:53:2638 ~NativeThemeBase() override;
[email protected]990e6222012-11-16 13:31:1839
40 // Draw the arrow. Used by scrollbar and inner spin button.
41 virtual void PaintArrowButton(
42 SkCanvas* gc,
43 const gfx::Rect& rect,
44 Part direction,
45 State state) const;
46 // Paint the scrollbar track. Done before the thumb so that it can contain
47 // alpha.
48 virtual void PaintScrollbarTrack(
49 SkCanvas* canvas,
50 Part part,
51 State state,
52 const ScrollbarTrackExtraParams& extra_params,
53 const gfx::Rect& rect) const;
54 // Draw the scrollbar thumb over the track.
55 virtual void PaintScrollbarThumb(
56 SkCanvas* canvas,
57 Part part,
58 State state,
chaopeng3386732f2016-10-28 14:49:4959 const gfx::Rect& rect,
60 NativeTheme::ScrollbarOverlayColorTheme theme) const;
[email protected]990e6222012-11-16 13:31:1861
[email protected]99df47e2014-01-29 07:01:5362 virtual void PaintScrollbarCorner(SkCanvas* canvas,
63 State state,
64 const gfx::Rect& rect) const;
65
[email protected]990e6222012-11-16 13:31:1866 virtual void PaintCheckbox(
67 SkCanvas* canvas,
68 State state,
69 const gfx::Rect& rect,
70 const ButtonExtraParams& button) const;
71
72 virtual void PaintRadio(
73 SkCanvas* canvas,
74 State state,
75 const gfx::Rect& rect,
76 const ButtonExtraParams& button) const;
77
78 virtual void PaintButton(
79 SkCanvas* canvas,
80 State state,
81 const gfx::Rect& rect,
82 const ButtonExtraParams& button) const;
83
84 virtual void PaintTextField(
85 SkCanvas* canvas,
86 State state,
87 const gfx::Rect& rect,
88 const TextFieldExtraParams& text) const;
89
90 virtual void PaintMenuList(
91 SkCanvas* canvas,
92 State state,
93 const gfx::Rect& rect,
94 const MenuListExtraParams& menu_list) const;
95
[email protected]e95cacb2013-01-29 02:31:1296 virtual void PaintMenuPopupBackground(
97 SkCanvas* canvas,
98 const gfx::Size& size,
99 const MenuBackgroundExtraParams& menu_background) const;
[email protected]990e6222012-11-16 13:31:18100
101 virtual void PaintMenuItemBackground(
102 SkCanvas* canvas,
103 State state,
104 const gfx::Rect& rect,
varkhaef6637f2016-02-26 22:12:27105 const MenuItemExtraParams& menu_item) const;
[email protected]990e6222012-11-16 13:31:18106
thomasandersone3bc84e32017-01-28 06:41:57107 virtual void PaintMenuSeparator(
108 SkCanvas* canvas,
109 State state,
110 const gfx::Rect& rect,
111 const MenuSeparatorExtraParams& menu_separator) const;
112
[email protected]990e6222012-11-16 13:31:18113 virtual void PaintSliderTrack(
114 SkCanvas* canvas,
115 State state,
116 const gfx::Rect& rect,
117 const SliderExtraParams& slider) const;
118
119 virtual void PaintSliderThumb(
120 SkCanvas* canvas,
121 State state,
122 const gfx::Rect& rect,
123 const SliderExtraParams& slider) const;
124
125 virtual void PaintInnerSpinButton(
126 SkCanvas* canvas,
127 State state,
128 const gfx::Rect& rect,
129 const InnerSpinButtonExtraParams& spin_button) const;
130
131 virtual void PaintProgressBar(
132 SkCanvas* canvas,
133 State state,
134 const gfx::Rect& rect,
135 const ProgressBarExtraParams& progress_bar) const;
136
thomasanderson2bbf4302017-01-24 21:24:42137 virtual void PaintFrameTopArea(
138 SkCanvas* canvas,
139 State state,
140 const gfx::Rect& rect,
141 const FrameTopAreaExtraParams& frame_top_area) const;
142
mohsen94189532015-09-14 04:33:46143 // Shrinks checkbox/radio button rect, if necessary, to make room for padding
144 // and drop shadow.
145 // TODO(mohsen): This is needed because checkboxes/radio buttons on Android
146 // have different padding from those on desktop Chrome. Get rid of this when
147 // crbug.com/530746 is resolved.
148 virtual void AdjustCheckboxRadioRectForPadding(SkRect* rect) const;
149
bokan3d914bd2016-10-19 15:07:58150 void set_scrollbar_button_length(int length) {
[email protected]990e6222012-11-16 13:31:18151 scrollbar_button_length_ = length;
152 }
[email protected]8eaacd42014-02-10 15:58:48153 int scrollbar_button_length() const { return scrollbar_button_length_; }
[email protected]990e6222012-11-16 13:31:18154
[email protected]990e6222012-11-16 13:31:18155 SkColor SaturateAndBrighten(SkScalar* hsv,
156 SkScalar saturate_amount,
157 SkScalar brighten_amount) const;
[email protected]e2169902014-01-22 20:23:41158
159 // Paints the arrow used on the scrollbar and spinner.
160 void PaintArrow(SkCanvas* canvas,
161 const gfx::Rect& rect,
162 Part direction,
163 SkColor color) const;
164
165 // Returns the color used to draw the arrow.
166 SkColor GetArrowColor(State state) const;
167
bokan3d914bd2016-10-19 15:07:58168 int scrollbar_width_;
169
[email protected]990e6222012-11-16 13:31:18170 private:
bsep91cbc6d2016-06-14 00:51:51171 friend class NativeThemeAuraTest;
bsep6e7c3082016-05-19 23:04:26172
173 SkPath PathForArrow(const gfx::Rect& rect, Part direction) const;
bsep91cbc6d2016-06-14 00:51:51174 gfx::Rect BoundingRectForArrow(const gfx::Rect& rect) const;
bsep6e7c3082016-05-19 23:04:26175
[email protected]990e6222012-11-16 13:31:18176 void DrawVertLine(SkCanvas* canvas,
177 int x,
178 int y1,
179 int y2,
180 const SkPaint& paint) const;
181 void DrawHorizLine(SkCanvas* canvas,
182 int x1,
183 int x2,
184 int y,
185 const SkPaint& paint) const;
186 void DrawBox(SkCanvas* canvas,
187 const gfx::Rect& rect,
188 const SkPaint& paint) const;
189 SkScalar Clamp(SkScalar value,
190 SkScalar min,
191 SkScalar max) const;
192 SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const;
193
[email protected]a244f2582013-03-08 07:31:23194 // Paint the common parts of the checkboxes and radio buttons.
[email protected]990e6222012-11-16 13:31:18195 // borderRadius specifies how rounded the corners should be.
[email protected]a244f2582013-03-08 07:31:23196 SkRect PaintCheckboxRadioCommon(
[email protected]990e6222012-11-16 13:31:18197 SkCanvas* canvas,
198 State state,
199 const gfx::Rect& rect,
200 const SkScalar borderRadius) const;
201
[email protected]ae9a3412014-08-14 08:01:29202 // The length of the arrow buttons, 0 means no buttons are drawn.
bokan3d914bd2016-10-19 15:07:58203 int scrollbar_button_length_;
[email protected]990e6222012-11-16 13:31:18204
205 DISALLOW_COPY_AND_ASSIGN(NativeThemeBase);
206};
207
208} // namespace ui
209
210#endif // UI_NATIVE_THEME_NATIVE_THEME_BASE_H_