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_VIEWS_BORDER_H_ 6 #define UI_VIEWS_BORDER_H_ 7 8 #include "base/basictypes.h" 9 #include "third_party/skia/include/core/SkColor.h" 10 #include "ui/gfx/insets.h" 11 #include "ui/views/views_export.h" 12 13 namespace gfx{ 14 class Canvas; 15 class Size; 16 } 17 18 namespace views { 19 20 class Painter; 21 class View; 22 23 //////////////////////////////////////////////////////////////////////////////// 24 // 25 // Border class. 26 // 27 // The border class is used to display a border around a view. 28 // To set a border on a view, just call SetBorder on the view, for example: 29 // view->set_border(Border::CreateSolidBorder(1, SkColorSetRGB(25, 25, 112)); 30 // Once set on a view, the border is owned by the view. 31 // 32 // IMPORTANT NOTE: not all views support borders at this point. In order to 33 // support the border, views should make sure to use bounds excluding the 34 // border (by calling View::GetLocalBoundsExcludingBorder) when doing layout and 35 // painting. 36 // 37 //////////////////////////////////////////////////////////////////////////////// 38 39 class TextButtonBorder; 40 41 class VIEWS_EXPORT Border { 42 public: 43 Border(); 44 virtual ~Border(); 45 46 // Creates a border that is a simple line of the specified thickness and 47 // color. 48 static Border* CreateSolidBorder(int thickness, SkColor color); 49 50 // Creates a border for reserving space. The returned border does not 51 // paint anything. 52 static Border* CreateEmptyBorder(int top, int left, int bottom, int right); 53 54 // Creates a border of the specified color, and specified thickness on each 55 // side. 56 static Border* CreateSolidSidedBorder(int top, 57 int left, 58 int bottom, 59 int right, 60 SkColor color); 61 62 // Creates a Border from the specified Painter. The border owns the painter, 63 // thus the painter is deleted when the Border is deleted. 64 // |insets| define size of an area allocated for a Border. 65 static Border* CreateBorderPainter(Painter* painter, 66 const gfx::Insets& insets); 67 68 // Renders the border for the specified view. 69 virtual void Paint(const View& view, gfx::Canvas* canvas) = 0; 70 71 // Returns the border insets. 72 virtual gfx::Insets GetInsets() const = 0; 73 74 // Returns the minimum size this border requires. Note that this may not be 75 // the same as the insets. For example, a Border may paint images to draw 76 // some graphical border around a view, and this would return the minimum size 77 // such that these images would not be clipped or overlapping -- but the 78 // insets may be larger or smaller, depending on how the view wanted its 79 // content laid out relative to these images. 80 virtual gfx::Size GetMinimumSize() const = 0; 81 82 // Manual RTTI for text buttons. 83 virtual TextButtonBorder* AsTextButtonBorder(); 84 virtual const TextButtonBorder* AsTextButtonBorder() const; 85 86 private: 87 DISALLOW_COPY_AND_ASSIGN(Border); 88 }; 89 90 } // namespace views 91 92 #endif // UI_VIEWS_BORDER_H_ 93