| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/web_contents/aura/window_slider.h" | 5 #include "content/browser/web_contents/aura/window_slider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 } // namespace | 51 } // namespace |
| 52 | 52 |
| 53 WindowSlider::WindowSlider(Delegate* delegate, | 53 WindowSlider::WindowSlider(Delegate* delegate, |
| 54 aura::Window* event_window, | 54 aura::Window* event_window, |
| 55 aura::Window* owner) | 55 aura::Window* owner) |
| 56 : delegate_(delegate), | 56 : delegate_(delegate), |
| 57 event_window_(event_window), | 57 event_window_(event_window), |
| 58 owner_(owner), | 58 owner_(owner), |
| 59 delta_x_(0.f), | 59 delta_x_(0.f), |
| 60 weak_factory_(this), | 60 weak_factory_(this), |
| 61 min_start_threshold_(content::GetOverscrollConfig( | 61 horiz_start_threshold_(content::GetOverscrollConfig( |
| 62 content::OVERSCROLL_CONFIG_MIN_THRESHOLD_START)), | 62 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START)), |
| 63 complete_threshold_(content::GetOverscrollConfig( | 63 complete_threshold_(content::GetOverscrollConfig( |
| 64 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE)) { | 64 content::OVERSCROLL_CONFIG_HORIZ_THRESHOLD_COMPLETE)) { |
| 65 event_window_->AddPreTargetHandler(this); | 65 event_window_->AddPreTargetHandler(this); |
| 66 | 66 |
| 67 event_window_->AddObserver(this); | 67 event_window_->AddObserver(this); |
| 68 owner_->AddObserver(this); | 68 owner_->AddObserver(this); |
| 69 } | 69 } |
| 70 | 70 |
| 71 WindowSlider::~WindowSlider() { | 71 WindowSlider::~WindowSlider() { |
| 72 if (event_window_) { | 72 if (event_window_) { |
| 73 event_window_->RemovePreTargetHandler(this); | 73 event_window_->RemovePreTargetHandler(this); |
| 74 event_window_->RemoveObserver(this); | 74 event_window_->RemoveObserver(this); |
| 75 } | 75 } |
| 76 if (owner_) | 76 if (owner_) |
| 77 owner_->RemoveObserver(this); | 77 owner_->RemoveObserver(this); |
| 78 delegate_->OnWindowSliderDestroyed(); | 78 delegate_->OnWindowSliderDestroyed(); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void WindowSlider::ChangeOwner(aura::Window* new_owner) { | 81 void WindowSlider::ChangeOwner(aura::Window* new_owner) { |
| 82 if (owner_) | 82 if (owner_) |
| 83 owner_->RemoveObserver(this); | 83 owner_->RemoveObserver(this); |
| 84 owner_ = new_owner; | 84 owner_ = new_owner; |
| 85 if (owner_) { | 85 if (owner_) { |
| 86 owner_->AddObserver(this); | 86 owner_->AddObserver(this); |
| 87 UpdateForScroll(0.f, 0.f); | 87 UpdateForScroll(0.f, 0.f); |
| 88 } | 88 } |
| 89 } | 89 } |
| 90 | 90 |
| 91 bool WindowSlider::IsSlideInProgress() const { | 91 bool WindowSlider::IsSlideInProgress() const { |
| 92 return fabs(delta_x_) >= min_start_threshold_ || slider_.get() || | 92 return fabs(delta_x_) >= horiz_start_threshold_ || slider_.get() || |
| 93 weak_factory_.HasWeakPtrs(); | 93 weak_factory_.HasWeakPtrs(); |
| 94 } | 94 } |
| 95 | 95 |
| 96 void WindowSlider::SetupSliderLayer() { | 96 void WindowSlider::SetupSliderLayer() { |
| 97 ui::Layer* parent = owner_->layer()->parent(); | 97 ui::Layer* parent = owner_->layer()->parent(); |
| 98 parent->Add(slider_.get()); | 98 parent->Add(slider_.get()); |
| 99 if (delta_x_ < 0) | 99 if (delta_x_ < 0) |
| 100 parent->StackAbove(slider_.get(), owner_->layer()); | 100 parent->StackAbove(slider_.get(), owner_->layer()); |
| 101 else | 101 else |
| 102 parent->StackBelow(slider_.get(), owner_->layer()); | 102 parent->StackBelow(slider_.get(), owner_->layer()); |
| 103 slider_->SetBounds(owner_->layer()->bounds()); | 103 slider_->SetBounds(owner_->layer()->bounds()); |
| 104 slider_->SetVisible(true); | 104 slider_->SetVisible(true); |
| 105 } | 105 } |
| 106 | 106 |
| 107 void WindowSlider::UpdateForScroll(float x_offset, float y_offset) { | 107 void WindowSlider::UpdateForScroll(float x_offset, float y_offset) { |
| 108 float old_delta = delta_x_; | 108 float old_delta = delta_x_; |
| 109 delta_x_ += x_offset; | 109 delta_x_ += x_offset; |
| 110 if (fabs(delta_x_) < min_start_threshold_ && !slider_.get()) | 110 if (fabs(delta_x_) < horiz_start_threshold_ && !slider_.get()) |
| 111 return; | 111 return; |
| 112 | 112 |
| 113 if ((old_delta < 0 && delta_x_ > 0) || | 113 if ((old_delta < 0 && delta_x_ > 0) || |
| 114 (old_delta > 0 && delta_x_ < 0)) { | 114 (old_delta > 0 && delta_x_ < 0)) { |
| 115 slider_.reset(); | 115 slider_.reset(); |
| 116 shadow_.reset(); | 116 shadow_.reset(); |
| 117 } | 117 } |
| 118 | 118 |
| 119 float translate = 0.f; | 119 float translate = 0.f; |
| 120 ui::Layer* translate_layer = NULL; | 120 ui::Layer* translate_layer = NULL; |
| 121 | 121 |
| 122 if (!slider_.get()) { | 122 if (!slider_.get()) { |
| 123 slider_.reset(delta_x_ < 0 ? delegate_->CreateFrontLayer() : | 123 slider_.reset(delta_x_ < 0 ? delegate_->CreateFrontLayer() : |
| 124 delegate_->CreateBackLayer()); | 124 delegate_->CreateBackLayer()); |
| 125 if (!slider_.get()) | 125 if (!slider_.get()) |
| 126 return; | 126 return; |
| 127 SetupSliderLayer(); | 127 SetupSliderLayer(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 if (delta_x_ <= -min_start_threshold_) { | 130 if (delta_x_ <= -horiz_start_threshold_) { |
| 131 translate = owner_->bounds().width() + | 131 translate = owner_->bounds().width() + |
| 132 std::max(delta_x_ + min_start_threshold_, | 132 std::max(delta_x_ + horiz_start_threshold_, |
| 133 static_cast<float>(-owner_->bounds().width())); | 133 static_cast<float>(-owner_->bounds().width())); |
| 134 translate_layer = slider_.get(); | 134 translate_layer = slider_.get(); |
| 135 } else if (delta_x_ >= min_start_threshold_) { | 135 } else if (delta_x_ >= horiz_start_threshold_) { |
| 136 translate = std::min(delta_x_ - min_start_threshold_, | 136 translate = std::min(delta_x_ - horiz_start_threshold_, |
| 137 static_cast<float>(owner_->bounds().width())); | 137 static_cast<float>(owner_->bounds().width())); |
| 138 translate_layer = owner_->layer(); | 138 translate_layer = owner_->layer(); |
| 139 } else { | 139 } else { |
| 140 return; | 140 return; |
| 141 } | 141 } |
| 142 | 142 |
| 143 if (!shadow_.get()) | 143 if (!shadow_.get()) |
| 144 shadow_.reset(new ShadowLayerDelegate(translate_layer)); | 144 shadow_.reset(new ShadowLayerDelegate(translate_layer)); |
| 145 | 145 |
| 146 gfx::Transform transform; | 146 gfx::Transform transform; |
| 147 transform.Translate(translate, 0); | 147 transform.Translate(translate, 0); |
| 148 translate_layer->SetTransform(transform); | 148 translate_layer->SetTransform(transform); |
| 149 } | 149 } |
| 150 | 150 |
| 151 void WindowSlider::UpdateForFling(float x_velocity, float y_velocity) { | 151 void WindowSlider::UpdateForFling(float x_velocity, float y_velocity) { |
| 152 if (!slider_.get()) | 152 if (!slider_.get()) |
| 153 return; | 153 return; |
| 154 | 154 |
| 155 int width = owner_->bounds().width(); | 155 int width = owner_->bounds().width(); |
| 156 float ratio = (fabs(delta_x_) - min_start_threshold_) / width; | 156 float ratio = (fabs(delta_x_) - horiz_start_threshold_) / width; |
| 157 if (ratio < complete_threshold_) { | 157 if (ratio < complete_threshold_) { |
| 158 ResetScroll(); | 158 ResetScroll(); |
| 159 return; | 159 return; |
| 160 } | 160 } |
| 161 | 161 |
| 162 ui::Layer* sliding = delta_x_ < 0 ? slider_.get() : owner_->layer(); | 162 ui::Layer* sliding = delta_x_ < 0 ? slider_.get() : owner_->layer(); |
| 163 ui::ScopedLayerAnimationSettings settings(sliding->GetAnimator()); | 163 ui::ScopedLayerAnimationSettings settings(sliding->GetAnimator()); |
| 164 settings.SetPreemptionStrategy( | 164 settings.SetPreemptionStrategy( |
| 165 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 165 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| 166 settings.SetTweenType(ui::Tween::EASE_OUT); | 166 settings.SetTweenType(ui::Tween::EASE_OUT); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 } else if (window == owner_) { | 294 } else if (window == owner_) { |
| 295 window->RemoveObserver(this); | 295 window->RemoveObserver(this); |
| 296 owner_ = NULL; | 296 owner_ = NULL; |
| 297 delete this; | 297 delete this; |
| 298 } else { | 298 } else { |
| 299 NOTREACHED(); | 299 NOTREACHED(); |
| 300 } | 300 } |
| 301 } | 301 } |
| 302 | 302 |
| 303 } // namespace content | 303 } // namespace content |
| OLD | NEW |