| Index: content/browser/renderer_host/input/touch_handle.cc
|
| diff --git a/content/browser/renderer_host/input/touch_handle.cc b/content/browser/renderer_host/input/touch_handle.cc
|
| deleted file mode 100644
|
| index 2e247e6cdde9259cad4d185d4d44f06eaf0d1a98..0000000000000000000000000000000000000000
|
| --- a/content/browser/renderer_host/input/touch_handle.cc
|
| +++ /dev/null
|
| @@ -1,264 +0,0 @@
|
| -// 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 "content/browser/renderer_host/input/touch_handle.h"
|
| -
|
| -#include <cmath>
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -// Maximum duration of a fade sequence.
|
| -const double kFadeDurationMs = 200;
|
| -
|
| -// Maximum amount of travel for a fade sequence. This avoids handle "ghosting"
|
| -// when the handle is moving rapidly while the fade is active.
|
| -const double kFadeDistanceSquared = 20.f * 20.f;
|
| -
|
| -// Avoid using an empty touch rect, as it may fail the intersection test event
|
| -// if it lies within the other rect's bounds.
|
| -const float kMinTouchMajorForHitTesting = 1.f;
|
| -
|
| -// The maximum touch size to use when computing whether a touch point is
|
| -// targetting a touch handle. This is necessary for devices that misreport
|
| -// touch radii, preventing inappropriately largely touch sizes from completely
|
| -// breaking handle dragging behavior.
|
| -const float kMaxTouchMajorForHitTesting = 36.f;
|
| -
|
| -} // namespace
|
| -
|
| -// Responsible for rendering a selection or insertion handle for text editing.
|
| -TouchHandle::TouchHandle(TouchHandleClient* client,
|
| - TouchHandleOrientation orientation)
|
| - : drawable_(client->CreateDrawable()),
|
| - client_(client),
|
| - orientation_(orientation),
|
| - deferred_orientation_(TOUCH_HANDLE_ORIENTATION_UNDEFINED),
|
| - alpha_(0.f),
|
| - animate_deferred_fade_(false),
|
| - enabled_(true),
|
| - is_visible_(false),
|
| - is_dragging_(false),
|
| - is_drag_within_tap_region_(false) {
|
| - DCHECK_NE(orientation, TOUCH_HANDLE_ORIENTATION_UNDEFINED);
|
| - drawable_->SetEnabled(enabled_);
|
| - drawable_->SetOrientation(orientation_);
|
| - drawable_->SetAlpha(alpha_);
|
| - drawable_->SetFocus(position_);
|
| -}
|
| -
|
| -TouchHandle::~TouchHandle() {
|
| -}
|
| -
|
| -void TouchHandle::SetEnabled(bool enabled) {
|
| - if (enabled_ == enabled)
|
| - return;
|
| - if (!enabled) {
|
| - EndDrag();
|
| - EndFade();
|
| - }
|
| - enabled_ = enabled;
|
| - drawable_->SetEnabled(enabled);
|
| -}
|
| -
|
| -void TouchHandle::SetVisible(bool visible, AnimationStyle animation_style) {
|
| - DCHECK(enabled_);
|
| - if (is_visible_ == visible)
|
| - return;
|
| -
|
| - is_visible_ = visible;
|
| -
|
| - // Handle repositioning may have been deferred while previously invisible.
|
| - if (visible)
|
| - drawable_->SetFocus(position_);
|
| -
|
| - bool animate = animation_style != ANIMATION_NONE;
|
| - if (is_dragging_) {
|
| - animate_deferred_fade_ = animate;
|
| - return;
|
| - }
|
| -
|
| - if (animate)
|
| - BeginFade();
|
| - else
|
| - EndFade();
|
| -}
|
| -
|
| -void TouchHandle::SetPosition(const gfx::PointF& position) {
|
| - DCHECK(enabled_);
|
| - if (position_ == position)
|
| - return;
|
| - position_ = position;
|
| - // Suppress repositioning a handle while invisible or fading out to prevent it
|
| - // from "ghosting" outside the visible bounds. The position will be pushed to
|
| - // the drawable when the handle regains visibility (see |SetVisible()|).
|
| - if (is_visible_)
|
| - drawable_->SetFocus(position_);
|
| -}
|
| -
|
| -void TouchHandle::SetOrientation(TouchHandleOrientation orientation) {
|
| - DCHECK(enabled_);
|
| - DCHECK_NE(orientation, TOUCH_HANDLE_ORIENTATION_UNDEFINED);
|
| - if (is_dragging_) {
|
| - deferred_orientation_ = orientation;
|
| - return;
|
| - }
|
| - DCHECK_EQ(deferred_orientation_, TOUCH_HANDLE_ORIENTATION_UNDEFINED);
|
| - if (orientation_ == orientation)
|
| - return;
|
| -
|
| - orientation_ = orientation;
|
| - drawable_->SetOrientation(orientation);
|
| -}
|
| -
|
| -bool TouchHandle::WillHandleTouchEvent(const ui::MotionEvent& event) {
|
| - if (!enabled_)
|
| - return false;
|
| -
|
| - if (!is_dragging_ && event.GetAction() != ui::MotionEvent::ACTION_DOWN)
|
| - return false;
|
| -
|
| - switch (event.GetAction()) {
|
| - case ui::MotionEvent::ACTION_DOWN: {
|
| - if (!is_visible_)
|
| - return false;
|
| - const float touch_size = std::max(
|
| - kMinTouchMajorForHitTesting,
|
| - std::min(kMaxTouchMajorForHitTesting, event.GetTouchMajor()));
|
| - const gfx::RectF touch_rect(event.GetX() - touch_size * .5f,
|
| - event.GetY() - touch_size * .5f,
|
| - touch_size,
|
| - touch_size);
|
| - if (!drawable_->IntersectsWith(touch_rect))
|
| - return false;
|
| - touch_down_position_ = gfx::PointF(event.GetX(), event.GetY());
|
| - touch_to_focus_offset_ = position_ - touch_down_position_;
|
| - touch_down_time_ = event.GetEventTime();
|
| - BeginDrag();
|
| - } break;
|
| -
|
| - case ui::MotionEvent::ACTION_MOVE: {
|
| - gfx::PointF touch_move_position(event.GetX(), event.GetY());
|
| - if (is_drag_within_tap_region_) {
|
| - const float tap_slop = client_->GetTapSlop();
|
| - is_drag_within_tap_region_ =
|
| - (touch_move_position - touch_down_position_).LengthSquared() <
|
| - tap_slop * tap_slop;
|
| - }
|
| -
|
| - // Note that we signal drag update even if we're inside the tap region,
|
| - // as there are cases where characters are narrower than the slop length.
|
| - client_->OnHandleDragUpdate(*this,
|
| - touch_move_position + touch_to_focus_offset_);
|
| - } break;
|
| -
|
| - case ui::MotionEvent::ACTION_UP: {
|
| - if (is_drag_within_tap_region_ &&
|
| - (event.GetEventTime() - touch_down_time_) <
|
| - client_->GetTapTimeout()) {
|
| - client_->OnHandleTapped(*this);
|
| - }
|
| -
|
| - EndDrag();
|
| - } break;
|
| -
|
| - case ui::MotionEvent::ACTION_CANCEL:
|
| - EndDrag();
|
| - break;
|
| -
|
| - default:
|
| - break;
|
| - };
|
| - return true;
|
| -}
|
| -
|
| -bool TouchHandle::Animate(base::TimeTicks frame_time) {
|
| - if (fade_end_time_ == base::TimeTicks())
|
| - return false;
|
| -
|
| - DCHECK(enabled_);
|
| -
|
| - float time_u =
|
| - 1.f - (fade_end_time_ - frame_time).InMillisecondsF() / kFadeDurationMs;
|
| - float position_u =
|
| - (position_ - fade_start_position_).LengthSquared() / kFadeDistanceSquared;
|
| - float u = std::max(time_u, position_u);
|
| - SetAlpha(is_visible_ ? u : 1.f - u);
|
| -
|
| - if (u >= 1.f) {
|
| - EndFade();
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -void TouchHandle::BeginDrag() {
|
| - DCHECK(enabled_);
|
| - if (is_dragging_)
|
| - return;
|
| - EndFade();
|
| - is_dragging_ = true;
|
| - is_drag_within_tap_region_ = true;
|
| - client_->OnHandleDragBegin(*this);
|
| -}
|
| -
|
| -void TouchHandle::EndDrag() {
|
| - DCHECK(enabled_);
|
| - if (!is_dragging_)
|
| - return;
|
| -
|
| - is_dragging_ = false;
|
| - is_drag_within_tap_region_ = false;
|
| - client_->OnHandleDragEnd(*this);
|
| -
|
| - if (deferred_orientation_ != TOUCH_HANDLE_ORIENTATION_UNDEFINED) {
|
| - TouchHandleOrientation deferred_orientation = deferred_orientation_;
|
| - deferred_orientation_ = TOUCH_HANDLE_ORIENTATION_UNDEFINED;
|
| - SetOrientation(deferred_orientation);
|
| - }
|
| -
|
| - if (animate_deferred_fade_) {
|
| - BeginFade();
|
| - } else {
|
| - // As drawable visibility assignment is deferred while dragging, push the
|
| - // change by forcing fade completion.
|
| - EndFade();
|
| - }
|
| -}
|
| -
|
| -void TouchHandle::BeginFade() {
|
| - DCHECK(enabled_);
|
| - DCHECK(!is_dragging_);
|
| - animate_deferred_fade_ = false;
|
| - const float target_alpha = is_visible_ ? 1.f : 0.f;
|
| - if (target_alpha == alpha_) {
|
| - EndFade();
|
| - return;
|
| - }
|
| -
|
| - fade_end_time_ = base::TimeTicks::Now() +
|
| - base::TimeDelta::FromMillisecondsD(
|
| - kFadeDurationMs * std::abs(target_alpha - alpha_));
|
| - fade_start_position_ = position_;
|
| - client_->SetNeedsAnimate();
|
| -}
|
| -
|
| -void TouchHandle::EndFade() {
|
| - DCHECK(enabled_);
|
| - animate_deferred_fade_ = false;
|
| - fade_end_time_ = base::TimeTicks();
|
| - SetAlpha(is_visible_ ? 1.f : 0.f);
|
| -}
|
| -
|
| -void TouchHandle::SetAlpha(float alpha) {
|
| - alpha = std::max(0.f, std::min(1.f, alpha));
|
| - if (alpha_ == alpha)
|
| - return;
|
| - alpha_ = alpha;
|
| - drawable_->SetAlpha(alpha);
|
| -}
|
| -
|
| -} // namespace content
|
|
|