Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(220)

Unified Diff: ui/base/touch/selection_bound.cc

Issue 759433002: Reland: Move TouchSelectionController from content to ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for ios build and some typos Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..3f4cc2db09eb9cc2150c0d4b78929507b971699f
--- /dev/null
+++ b/ui/base/touch/selection_bound.cc
@@ -0,0 +1,94 @@
+// 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 "ui/base/touch/selection_bound.h"
+#include "ui/gfx/geometry/point_conversions.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) {
+ SetEdgeTop(bound.edge_top);
jdduke (slow) 2014/12/01 20:38:04 Let's skip these setters if the bound is empty, as
mohsen 2014/12/02 05:17:02 Done.
+ SetEdgeBottom(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);
+}
+
+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) {
+ int all_x[] = {
+ b1.edge_top_rounded().x(),
jdduke (slow) 2014/12/01 20:38:04 Hmm, it may not be any better, but what about: gf
mohsen 2014/12/02 05:17:02 Done, although, I wish we could do this: return gf
+ b2.edge_top_rounded().x(),
+ b1.edge_bottom_rounded().x(),
+ b2.edge_bottom_rounded().x()
+ };
+ int all_y[] = {
+ b1.edge_top_rounded().y(),
+ b2.edge_top_rounded().y(),
+ b1.edge_bottom_rounded().y(),
+ b2.edge_bottom_rounded().y()
+ };
+ const int num_elements = arraysize(all_x);
+ COMPILE_ASSERT(arraysize(all_y) == num_elements, array_size_mismatch);
+
+ int left = *std::min_element(all_x, all_x + num_elements);
+ int top = *std::min_element(all_y, all_y + num_elements);
+ int right = *std::max_element(all_x, all_x + num_elements);
+ int bottom = *std::max_element(all_y, all_y + num_elements);
+
+ return gfx::Rect(left, top, right - left, bottom - top);
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698