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

Side by Side Diff: content/browser/web_contents/aura/window_slider.cc

Issue 18603008: Seperate horizontal and vertical overscrolling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed broken unit test Created 7 years, 5 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « content/browser/web_contents/aura/window_slider.h ('k') | content/public/browser/overscroll_configuration.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698