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 13namespace gfx{ 14class Canvas; 15class Size; 16} 17 18namespace views { 19 20class Painter; 21class 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 39class TextButtonBorder; 40 41class 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