Index: content/renderer/disambiguation_popup_helper.cc |
diff --git a/content/renderer/disambiguation_popup_helper.cc b/content/renderer/disambiguation_popup_helper.cc |
deleted file mode 100644 |
index 246877a904304db39304b492a63acf96e32940b7..0000000000000000000000000000000000000000 |
--- a/content/renderer/disambiguation_popup_helper.cc |
+++ /dev/null |
@@ -1,114 +0,0 @@ |
-// Copyright (c) 2012 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 "content/renderer/disambiguation_popup_helper.h" |
- |
-#include <stddef.h> |
- |
-#include "third_party/WebKit/public/platform/WebRect.h" |
-#include "ui/gfx/geometry/size_conversions.h" |
- |
-using blink::WebRect; |
-using blink::WebVector; |
- |
-namespace { |
- |
-// The amount of padding to add to the disambiguation popup to show |
-// content around the possible elements, adding some context. |
-const int kDisambiguationPopupPadding = 8; |
- |
-// Constants used for fitting the disambiguation popup inside the bounds of |
-// the view. Note that there are mirror constants in PopupZoomer.java. |
-const int kDisambiguationPopupBoundsMargin = 25; |
- |
-// The smallest allowable touch target used for disambiguation popup. |
-// This value is used to determine the minimum amount we need to scale to |
-// make all targets touchable. |
-const int kDisambiguationPopupMinimumTouchSize = 40; |
-const float kDisambiguationPopupMaxScale = 5.0; |
-const float kDisambiguationPopupMinScale = 2.0; |
- |
-// Compute the scaling factor to ensure the smallest touch candidate reaches |
-// a certain clickable size after zooming |
-float FindOptimalScaleFactor(const WebVector<WebRect>& target_rects, |
- float total_scale) { |
- using std::min; |
- using std::max; |
- if (!target_rects.size()) // shall never reach |
- return kDisambiguationPopupMinScale; |
- float smallest_target = min(target_rects[0].width * total_scale, |
- target_rects[0].height * total_scale); |
- for (size_t i = 1; i < target_rects.size(); i++) { |
- smallest_target = min(smallest_target, target_rects[i].width * total_scale); |
- smallest_target = min(smallest_target, |
- target_rects[i].height * total_scale); |
- } |
- smallest_target = max(smallest_target, 1.0f); |
- return min(kDisambiguationPopupMaxScale, max(kDisambiguationPopupMinScale, |
- kDisambiguationPopupMinimumTouchSize / smallest_target)) * total_scale; |
-} |
- |
-void TrimEdges(int *e1, int *e2, int max_combined) { |
- if (*e1 + *e2 <= max_combined) |
- return; |
- |
- if (std::min(*e1, *e2) * 2 >= max_combined) |
- *e1 = *e2 = max_combined / 2; |
- else if (*e1 > *e2) |
- *e1 = max_combined - *e2; |
- else |
- *e2 = max_combined - *e1; |
-} |
- |
-// Ensure the disambiguation popup fits inside the screen, |
-// clip the edges farthest to the touch point if needed. |
-gfx::Rect CropZoomArea(const gfx::Rect& zoom_rect, |
- const gfx::Size& viewport_size, |
- const gfx::Point& touch_point, |
- float scale) { |
- gfx::Size max_size = viewport_size; |
- max_size.Enlarge(-2 * kDisambiguationPopupBoundsMargin, |
- -2 * kDisambiguationPopupBoundsMargin); |
- max_size = gfx::ScaleToCeiledSize(max_size, 1.0 / scale); |
- |
- int left = touch_point.x() - zoom_rect.x(); |
- int right = zoom_rect.right() - touch_point.x(); |
- int top = touch_point.y() - zoom_rect.y(); |
- int bottom = zoom_rect.bottom() - touch_point.y(); |
- TrimEdges(&left, &right, max_size.width()); |
- TrimEdges(&top, &bottom, max_size.height()); |
- |
- return gfx::Rect(touch_point.x() - left, |
- touch_point.y() - top, |
- left + right, |
- top + bottom); |
-} |
- |
-} // namespace |
- |
-namespace content { |
- |
-float DisambiguationPopupHelper::ComputeZoomAreaAndScaleFactor( |
- const gfx::Rect& tap_rect, |
- const WebVector<WebRect>& target_rects, |
- const gfx::Size& screen_size, |
- const gfx::Size& visible_content_size, |
- float total_scale, |
- gfx::Rect* zoom_rect) { |
- *zoom_rect = tap_rect; |
- for (size_t i = 0; i < target_rects.size(); i++) |
- zoom_rect->Union(gfx::Rect(target_rects[i])); |
- zoom_rect->Inset(-kDisambiguationPopupPadding, -kDisambiguationPopupPadding); |
- |
- zoom_rect->Intersect(gfx::Rect(visible_content_size)); |
- |
- float new_total_scale = |
- FindOptimalScaleFactor(target_rects, total_scale); |
- *zoom_rect = CropZoomArea( |
- *zoom_rect, screen_size, tap_rect.CenterPoint(), new_total_scale); |
- |
- return new_total_scale; |
-} |
- |
-} // namespace content |