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