| Index: ui/base/touch/selection_bound.cc
|
| diff --git a/ui/base/touch/selection_bound.cc b/ui/base/touch/selection_bound.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2102ef24c094becd2e83126dbed4120b637e7e2c
|
| --- /dev/null
|
| +++ b/ui/base/touch/selection_bound.cc
|
| @@ -0,0 +1,93 @@
|
| +// 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.
|
| +
|
| +#include <algorithm>
|
| +
|
| +#include "base/macros.h"
|
| +#include "cc/output/viewport_selection_bound.h"
|
| +#include "ui/base/touch/selection_bound.h"
|
| +#include "ui/gfx/geometry/point_conversions.h"
|
| +#include "ui/gfx/rect.h"
|
| +
|
| +namespace ui {
|
| +
|
| +namespace {
|
| +
|
| +SelectionBound::Type ConvertToSelectionBoundType(cc::SelectionBoundType type) {
|
| + switch (type) {
|
| + case cc::SELECTION_BOUND_LEFT:
|
| + return SelectionBound::LEFT;
|
| + case cc::SELECTION_BOUND_RIGHT:
|
| + return SelectionBound::RIGHT;
|
| + case cc::SELECTION_BOUND_CENTER:
|
| + return SelectionBound::CENTER;
|
| + case cc::SELECTION_BOUND_EMPTY:
|
| + return SelectionBound::EMPTY;
|
| + }
|
| + NOTREACHED() << "Unknown selection bound type";
|
| + return SelectionBound::EMPTY;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +SelectionBound::SelectionBound() : type_(EMPTY), visible_(false) {
|
| +}
|
| +
|
| +SelectionBound::SelectionBound(const cc::ViewportSelectionBound& bound)
|
| + : type_(ConvertToSelectionBoundType(bound.type)),
|
| + visible_(bound.visible) {
|
| + if (type_ != EMPTY)
|
| + SetEdge(bound.edge_top, bound.edge_bottom);
|
| +}
|
| +
|
| +SelectionBound::~SelectionBound() {
|
| +}
|
| +
|
| +void SelectionBound::SetEdgeTop(const gfx::PointF& value) {
|
| + edge_top_ = value;
|
| + edge_top_rounded_ = gfx::ToRoundedPoint(value);
|
| +}
|
| +
|
| +void SelectionBound::SetEdgeBottom(const gfx::PointF& value) {
|
| + edge_bottom_ = value;
|
| + edge_bottom_rounded_ = gfx::ToRoundedPoint(value);
|
| +}
|
| +
|
| +void SelectionBound::SetEdge(const gfx::PointF& top,
|
| + const gfx::PointF& bottom) {
|
| + SetEdgeTop(top);
|
| + SetEdgeBottom(bottom);
|
| +}
|
| +
|
| +int SelectionBound::GetHeight() const {
|
| + return edge_bottom_rounded_.y() - edge_top_rounded_.y();
|
| +}
|
| +
|
| +bool operator==(const SelectionBound& lhs, const SelectionBound& rhs) {
|
| + return lhs.type() == rhs.type() && lhs.visible() == rhs.visible() &&
|
| + lhs.edge_top() == rhs.edge_top() &&
|
| + lhs.edge_bottom() == rhs.edge_bottom();
|
| +}
|
| +
|
| +bool operator!=(const SelectionBound& lhs, const SelectionBound& rhs) {
|
| + return !(lhs == rhs);
|
| +}
|
| +
|
| +gfx::Rect RectBetweenSelectionBounds(const SelectionBound& b1,
|
| + const SelectionBound& b2) {
|
| + gfx::Point top_left(b1.edge_top_rounded());
|
| + top_left.SetToMin(b1.edge_bottom_rounded());
|
| + top_left.SetToMin(b2.edge_top_rounded());
|
| + top_left.SetToMin(b2.edge_bottom_rounded());
|
| +
|
| + gfx::Point bottom_right(b1.edge_top_rounded());
|
| + bottom_right.SetToMax(b1.edge_bottom_rounded());
|
| + bottom_right.SetToMax(b2.edge_top_rounded());
|
| + bottom_right.SetToMax(b2.edge_bottom_rounded());
|
| +
|
| + gfx::Vector2d diff = bottom_right - top_left;
|
| + return gfx::Rect(top_left, gfx::Size(diff.x(), diff.y()));
|
| +}
|
| +
|
| +} // namespace ui
|
|
|