Home | History | Annotate | Download | only in views
      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