| Index: athena/wm/title_drag_controller.cc
|
| diff --git a/athena/wm/title_drag_controller.cc b/athena/wm/title_drag_controller.cc
|
| deleted file mode 100644
|
| index a0301e101a224c4c14b0b2f33ee70e52335950a3..0000000000000000000000000000000000000000
|
| --- a/athena/wm/title_drag_controller.cc
|
| +++ /dev/null
|
| @@ -1,144 +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 "athena/wm/title_drag_controller.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/aura/window_delegate.h"
|
| -#include "ui/base/hit_test.h"
|
| -#include "ui/compositor/closure_animation_observer.h"
|
| -#include "ui/compositor/layer.h"
|
| -#include "ui/compositor/scoped_layer_animation_settings.h"
|
| -#include "ui/wm/core/shadow.h"
|
| -#include "ui/wm/core/window_util.h"
|
| -
|
| -namespace {
|
| -
|
| -// The minimum amount to drag to confirm a window switch at the end of the
|
| -// non-fling gesture.
|
| -const int kMinDragDistanceForSwitch = 300;
|
| -// The minimum velocity to confirm a window switch for a fling (only applicable
|
| -// if the amount dragged was not sufficient, i.e. smaller than
|
| -// kMinDragDistanceForSwitch).
|
| -const int kMinDragVelocityForSwitch = 5000;
|
| -
|
| -}
|
| -
|
| -namespace athena {
|
| -
|
| -TitleDragController::TitleDragController(aura::Window* container,
|
| - TitleDragControllerDelegate* delegate)
|
| - : container_(container),
|
| - delegate_(delegate),
|
| - weak_ptr_(this) {
|
| - CHECK(container_);
|
| - CHECK(delegate_);
|
| - container_->AddPreTargetHandler(this);
|
| -}
|
| -
|
| -TitleDragController::~TitleDragController() {
|
| - container_->RemovePreTargetHandler(this);
|
| -}
|
| -
|
| -void TitleDragController::EndTransition(aura::Window* window, bool complete) {
|
| - ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
|
| - settings.SetPreemptionStrategy(
|
| - ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
|
| - settings.AddObserver(new ui::ClosureAnimationObserver(
|
| - base::Bind(&TitleDragController::OnTransitionEnd,
|
| - weak_ptr_.GetWeakPtr(),
|
| - window,
|
| - complete)));
|
| - gfx::Transform transform;
|
| - transform.Translate(0, complete ? window->bounds().height() : 0);
|
| - window->SetTransform(transform);
|
| -}
|
| -
|
| -void TitleDragController::OnTransitionEnd(aura::Window* window, bool complete) {
|
| - weak_ptr_.InvalidateWeakPtrs();
|
| - if (!tracker_.Contains(window))
|
| - window = nullptr;
|
| - shadow_.reset();
|
| - if (window) {
|
| - window->SetTransform(gfx::Transform());
|
| - tracker_.Remove(window);
|
| - }
|
| - if (complete && window && wm::IsActiveWindow(window))
|
| - delegate_->OnTitleDragCompleted(window);
|
| - else
|
| - delegate_->OnTitleDragCanceled(window);
|
| -}
|
| -
|
| -void TitleDragController::OnGestureEvent(ui::GestureEvent* gesture) {
|
| - // Do not process any gesture events if an animation is still in progress from
|
| - // a previous drag.
|
| - if (weak_ptr_.HasWeakPtrs())
|
| - return;
|
| -
|
| - if (gesture->type() == ui::ET_GESTURE_TAP_DOWN) {
|
| - // It is possible to start a gesture sequence on a second window while a
|
| - // drag is already in progress (e.g. the user starts interacting with the
|
| - // window that is being revealed by the title-drag). Ignore these gesture
|
| - // sequences.
|
| - if (!tracker_.windows().empty())
|
| - return;
|
| - aura::Window* window = static_cast<aura::Window*>(gesture->target());
|
| - if (!window || !window->delegate())
|
| - return;
|
| - int component =
|
| - window->delegate()->GetNonClientComponent(gesture->location());
|
| - if (component != HTCAPTION)
|
| - return;
|
| - if (!delegate_->GetWindowBehind(window))
|
| - return;
|
| - tracker_.Add(window);
|
| - drag_start_location_ = gesture->root_location();
|
| - return;
|
| - }
|
| -
|
| - // If this gesture is for a different window, then ignore.
|
| - aura::Window* window = static_cast<aura::Window*>(gesture->target());
|
| - if (!tracker_.Contains(window))
|
| - return;
|
| -
|
| - if (gesture->type() == ui::ET_GESTURE_SCROLL_BEGIN) {
|
| - delegate_->OnTitleDragStarted(window);
|
| - shadow_.reset(new wm::Shadow());
|
| - shadow_->Init(wm::Shadow::STYLE_ACTIVE);
|
| - shadow_->SetContentBounds(gfx::Rect(window->bounds().size()));
|
| - window->layer()->Add(shadow_->layer());
|
| - gesture->SetHandled();
|
| - return;
|
| - }
|
| -
|
| - if (gesture->type() == ui::ET_GESTURE_SCROLL_UPDATE) {
|
| - gfx::Vector2dF distance = gesture->root_location() - drag_start_location_;
|
| - gfx::Transform transform;
|
| - transform.Translate(0, std::max(0.f, distance.y()));
|
| - window->SetTransform(transform);
|
| - gesture->SetHandled();
|
| - return;
|
| - }
|
| -
|
| - if (gesture->type() == ui::ET_GESTURE_SCROLL_END) {
|
| - gfx::Vector2dF distance = gesture->root_location() - drag_start_location_;
|
| - EndTransition(window, distance.y() >= kMinDragDistanceForSwitch);
|
| - gesture->SetHandled();
|
| - return;
|
| - }
|
| -
|
| - if (gesture->type() == ui::ET_SCROLL_FLING_START) {
|
| - gfx::Vector2dF distance = gesture->root_location() - drag_start_location_;
|
| - bool swipe_downwards = gesture->details().velocity_y() > 0;
|
| - EndTransition(
|
| - window,
|
| - swipe_downwards &&
|
| - (distance.y() >= kMinDragDistanceForSwitch ||
|
| - gesture->details().velocity_y() >= kMinDragVelocityForSwitch));
|
| - gesture->SetHandled();
|
| - }
|
| -}
|
| -
|
| -} // namespace athena
|
|
|