blob: 9e314c333d6bf23329f272f5ad7a011c61c1ca45 [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
[email protected]e95cacb2013-01-29 02:31:1289 virtual void PaintMenuPopupBackground(
90 SkCanvas* canvas,
91 const gfx::Size& size,
92 const MenuBackgroundExtraParams& menu_background) const;
[email protected]990e6222012-11-16 13:31:1893
94 virtual void PaintMenuItemBackground(
95 SkCanvas* canvas,
96 State state,
97 const gfx::Rect& rect,
98 const MenuListExtraParams& menu_list) const;
99
100 virtual void PaintSliderTrack(
101 SkCanvas* canvas,
102 State state,
103 const gfx::Rect& rect,
104 const SliderExtraParams& slider) const;
105
106 virtual void PaintSliderThumb(
107 SkCanvas* canvas,
108 State state,
109 const gfx::Rect& rect,
110 const SliderExtraParams& slider) const;
111
112 virtual void PaintInnerSpinButton(
113 SkCanvas* canvas,
114 State state,
115 const gfx::Rect& rect,
116 const InnerSpinButtonExtraParams& spin_button) const;
117
118 virtual void PaintProgressBar(
119 SkCanvas* canvas,
120 State state,
121 const gfx::Rect& rect,
122 const ProgressBarExtraParams& progress_bar) const;
123
124 protected:
125 void set_scrollbar_button_length(unsigned int length) {
126 scrollbar_button_length_ = length;
127 }
128
129 bool IntersectsClipRectInt(SkCanvas* canvas,
130 int x, int y, int w, int h) const;
131
132 void DrawImageInt(SkCanvas* canvas, const gfx::ImageSkia& image,
133 int src_x, int src_y, int src_w, int src_h,
134 int dest_x, int dest_y, int dest_w, int dest_h) const;
135
136 void DrawTiledImage(SkCanvas* canvas,
137 const gfx::ImageSkia& image,
138 int src_x, int src_y,
139 float tile_scale_x, float tile_scale_y,
140 int dest_x, int dest_y, int w, int h) const;
141
142 SkColor SaturateAndBrighten(SkScalar* hsv,
143 SkScalar saturate_amount,
144 SkScalar brighten_amount) const;
145 private:
146 void DrawVertLine(SkCanvas* canvas,
147 int x,
148 int y1,
149 int y2,
150 const SkPaint& paint) const;
151 void DrawHorizLine(SkCanvas* canvas,
152 int x1,
153 int x2,
154 int y,
155 const SkPaint& paint) const;
156 void DrawBox(SkCanvas* canvas,
157 const gfx::Rect& rect,
158 const SkPaint& paint) const;
159 SkScalar Clamp(SkScalar value,
160 SkScalar min,
161 SkScalar max) const;
162 SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const;
163
[email protected]a244f2582013-03-08 07:31:23164 // Paint the common parts of the checkboxes and radio buttons.
[email protected]990e6222012-11-16 13:31:18165 // borderRadius specifies how rounded the corners should be.
[email protected]a244f2582013-03-08 07:31:23166 SkRect PaintCheckboxRadioCommon(
[email protected]990e6222012-11-16 13:31:18167 SkCanvas* canvas,
168 State state,
169 const gfx::Rect& rect,
170 const SkScalar borderRadius) const;
171
[email protected]990e6222012-11-16 13:31:18172 unsigned int scrollbar_width_;
173 unsigned int scrollbar_button_length_;
174
175 DISALLOW_COPY_AND_ASSIGN(NativeThemeBase);
176};
177
178} // namespace ui
179
180#endif // UI_NATIVE_THEME_NATIVE_THEME_BASE_H_