text: // Copyright 2014 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef UI_GFX_SELECTION_BOUND_H_
  #define UI_GFX_SELECTION_BOUND_H_
  
  #include "ui/gfx/geometry/point.h"
  #include "ui/gfx/geometry/point_f.h"
  #include "ui/gfx/gfx_export.h"
  
  namespace gfx {
  
  class Rect;
  class RectF;
  
  // Bound of a selection end-point.
  class GFX_EXPORT SelectionBound {
   public:
    enum Type { LEFT, RIGHT, CENTER, EMPTY, LAST = EMPTY };
  
    SelectionBound();
    SelectionBound(const SelectionBound& other);
    ~SelectionBound();
  
    Type type() const { return type_; }
    void set_type(Type value) { type_ = value; }
  
    const gfx::PointF& edge_top() const { return edge_top_; }
    const gfx::Point& edge_top_rounded() const { return edge_top_rounded_; }
    void SetEdgeTop(const gfx::PointF& value);
  
    const gfx::PointF& edge_bottom() const { return edge_bottom_; }
    const gfx::Point& edge_bottom_rounded() const { return edge_bottom_rounded_; }
    void SetEdgeBottom(const gfx::PointF& value);
  
    void SetEdge(const gfx::PointF& top, const gfx::PointF& bottom);
  
    bool visible() const { return visible_; }
    void set_visible(bool value) { visible_ = value; }
  
    // Returns the vertical difference between rounded top and bottom.
    int GetHeight() const;
  
    std::string ToString() const;
  
   private:
    Type type_;
    gfx::PointF edge_top_;
    gfx::PointF edge_bottom_;
    gfx::Point edge_top_rounded_;
    gfx::Point edge_bottom_rounded_;
    bool visible_;
  };
  
  GFX_EXPORT bool operator==(const SelectionBound& lhs,
                             const SelectionBound& rhs);
  GFX_EXPORT bool operator!=(const SelectionBound& lhs,
                             const SelectionBound& rhs);
  
  GFX_EXPORT gfx::Rect RectBetweenSelectionBounds(const SelectionBound& b1,
                                                  const SelectionBound& b2);
  
  GFX_EXPORT gfx::RectF RectFBetweenSelectionBounds(const SelectionBound& b1,
                                                    const SelectionBound& b2);
  
  }  // namespace ui
  
  #endif  // UI_GFX_SELECTION_BOUND_H_
  