• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
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 
13 namespace gfx {
14 class ImageSkia;
15 class Rect;
16 class Size;
17 }
18 
19 namespace ui {
20 
21 // Theme support for non-Windows toolkits.
22 class 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(
90       SkCanvas* canvas,
91       const gfx::Size& size,
92       const MenuBackgroundExtraParams& menu_background) const;
93 
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:
set_scrollbar_button_length(unsigned int length)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 
164   // Paint the common parts of the checkboxes and radio buttons.
165   // borderRadius specifies how rounded the corners should be.
166   SkRect PaintCheckboxRadioCommon(
167       SkCanvas* canvas,
168       State state,
169       const gfx::Rect& rect,
170       const SkScalar borderRadius) const;
171 
172   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_
181