OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_VIEWS_BUBBLE_BUBBLE_BORDER_H_ | 5 #ifndef UI_VIEWS_BUBBLE_BUBBLE_BORDER_H_ |
6 #define UI_VIEWS_BUBBLE_BUBBLE_BORDER_H_ | 6 #define UI_VIEWS_BUBBLE_BUBBLE_BORDER_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "ui/gfx/image/image_skia.h" |
10 #include "ui/views/background.h" | 12 #include "ui/views/background.h" |
11 #include "ui/views/border.h" | 13 #include "ui/views/border.h" |
12 | 14 |
13 namespace gfx { | 15 namespace gfx { |
14 class ImageSkia; | |
15 class Rect; | 16 class Rect; |
16 } | 17 } |
17 | 18 |
18 namespace views { | 19 namespace views { |
| 20 class Painter; |
19 | 21 |
20 namespace internal { | 22 namespace internal { |
21 struct BorderImages; | 23 |
22 } | 24 // A helper that combines each border image-set painter with arrows and metrics. |
| 25 struct BorderImages { |
| 26 BorderImages(const int border_image_ids[], |
| 27 const int arrow_image_ids[], |
| 28 int border_interior_thickness, |
| 29 int arrow_interior_thickness, |
| 30 int corner_radius); |
| 31 virtual ~BorderImages(); |
| 32 |
| 33 scoped_ptr<Painter> border_painter; |
| 34 gfx::ImageSkia left_arrow; |
| 35 gfx::ImageSkia top_arrow; |
| 36 gfx::ImageSkia right_arrow; |
| 37 gfx::ImageSkia bottom_arrow; |
| 38 |
| 39 // The thickness of border and arrow images and their interior areas. |
| 40 // Thickness is the width of left/right and the height of top/bottom images. |
| 41 // The interior is measured without including stroke or shadow pixels. |
| 42 int border_thickness; |
| 43 int border_interior_thickness; |
| 44 int arrow_thickness; |
| 45 int arrow_interior_thickness; |
| 46 // The corner radius of the bubble's rounded-rect interior area. |
| 47 int corner_radius; |
| 48 }; |
| 49 |
| 50 } // namespace internal |
23 | 51 |
24 // Renders a border, with optional arrow, and a custom dropshadow. | 52 // Renders a border, with optional arrow, and a custom dropshadow. |
25 // This can be used to produce floating "bubble" objects with rounded corners. | 53 // This can be used to produce floating "bubble" objects with rounded corners. |
26 class VIEWS_EXPORT BubbleBorder : public Border { | 54 class VIEWS_EXPORT BubbleBorder : public Border { |
27 public: | 55 public: |
28 // Possible locations for the (optional) arrow. | 56 // Possible locations for the (optional) arrow. |
29 // 0 bit specifies left or right. | 57 // 0 bit specifies left or right. |
30 // 1 bit specifies top or bottom. | 58 // 1 bit specifies top or bottom. |
31 // 2 bit specifies horizontal or vertical. | 59 // 2 bit specifies horizontal or vertical. |
32 // 3 bit specifies whether the arrow at the center of its residing edge. | 60 // 3 bit specifies whether the arrow at the center of its residing edge. |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 | 194 |
167 // Gets the arrow offset to use. | 195 // Gets the arrow offset to use. |
168 int GetArrowOffset(const gfx::Size& border_size) const; | 196 int GetArrowOffset(const gfx::Size& border_size) const; |
169 | 197 |
170 // Overridden from Border: | 198 // Overridden from Border: |
171 virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE; | 199 virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE; |
172 virtual gfx::Insets GetInsets() const OVERRIDE; | 200 virtual gfx::Insets GetInsets() const OVERRIDE; |
173 virtual gfx::Size GetMinimumSize() const OVERRIDE; | 201 virtual gfx::Size GetMinimumSize() const OVERRIDE; |
174 | 202 |
175 private: | 203 private: |
| 204 FRIEND_TEST_ALL_PREFIXES(BubbleBorderTest, GetSizeForContentsSizeTest); |
| 205 FRIEND_TEST_ALL_PREFIXES(BubbleBorderTest, GetBoundsOriginTest); |
| 206 |
| 207 // The border and arrow stroke size used in image assets, in pixels. |
| 208 static const int kStroke; |
| 209 |
176 gfx::Size GetSizeForContentsSize(const gfx::Size& contents_size) const; | 210 gfx::Size GetSizeForContentsSize(const gfx::Size& contents_size) const; |
177 gfx::ImageSkia* GetArrowImage() const; | 211 gfx::ImageSkia* GetArrowImage() const; |
178 gfx::Rect GetArrowRect(const gfx::Rect& bounds) const; | 212 gfx::Rect GetArrowRect(const gfx::Rect& bounds) const; |
179 void DrawArrow(gfx::Canvas* canvas, const gfx::Rect& arrow_bounds) const; | 213 void DrawArrow(gfx::Canvas* canvas, const gfx::Rect& arrow_bounds) const; |
180 | 214 |
| 215 internal::BorderImages* GetImagesForTest() const; |
| 216 |
181 Arrow arrow_; | 217 Arrow arrow_; |
182 int arrow_offset_; | 218 int arrow_offset_; |
183 ArrowPaintType arrow_paint_type_; | 219 ArrowPaintType arrow_paint_type_; |
184 BubbleAlignment alignment_; | 220 BubbleAlignment alignment_; |
185 Shadow shadow_; | 221 Shadow shadow_; |
186 internal::BorderImages* images_; | 222 internal::BorderImages* images_; |
187 SkColor background_color_; | 223 SkColor background_color_; |
188 bool use_theme_background_color_; | 224 bool use_theme_background_color_; |
189 | 225 |
190 DISALLOW_COPY_AND_ASSIGN(BubbleBorder); | 226 DISALLOW_COPY_AND_ASSIGN(BubbleBorder); |
(...skipping 10 matching lines...) Expand all Loading... |
201 | 237 |
202 private: | 238 private: |
203 BubbleBorder* border_; | 239 BubbleBorder* border_; |
204 | 240 |
205 DISALLOW_COPY_AND_ASSIGN(BubbleBackground); | 241 DISALLOW_COPY_AND_ASSIGN(BubbleBackground); |
206 }; | 242 }; |
207 | 243 |
208 } // namespace views | 244 } // namespace views |
209 | 245 |
210 #endif // UI_VIEWS_BUBBLE_BUBBLE_BORDER_H_ | 246 #endif // UI_VIEWS_BUBBLE_BUBBLE_BORDER_H_ |
OLD | NEW |