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

Side by Side Diff: content/browser/android/overscroll_glow.cc

Issue 17413016: Fix overscroll glow when the FIP dialog is active (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 6 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
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/android/overscroll_glow.h" 5 #include "content/browser/android/overscroll_glow.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "cc/layers/image_layer.h" 8 #include "cc/layers/image_layer.h"
9 #include "content/browser/android/edge_effect.h" 9 #include "content/browser/android/edge_effect.h"
10 #include "skia/ext/image_operations.h" 10 #include "skia/ext/image_operations.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 return scoped_ptr<OverscrollGlow>(); 82 return scoped_ptr<OverscrollGlow>();
83 83
84 return make_scoped_ptr(new OverscrollGlow(edge, glow)); 84 return make_scoped_ptr(new OverscrollGlow(edge, glow));
85 } 85 }
86 86
87 void OverscrollGlow::EnsureResources() { 87 void OverscrollGlow::EnsureResources() {
88 g_overscroll_resources.Get(); 88 g_overscroll_resources.Get();
89 } 89 }
90 90
91 OverscrollGlow::OverscrollGlow(const SkBitmap& edge, const SkBitmap& glow) 91 OverscrollGlow::OverscrollGlow(const SkBitmap& edge, const SkBitmap& glow)
92 : horizontal_overscroll_enabled_(true), 92 : enabled_(true),
Ted C 2013/06/21 17:44:12 should this default to false?
93 horizontal_overscroll_enabled_(true),
93 vertical_overscroll_enabled_(true), 94 vertical_overscroll_enabled_(true),
94 root_layer_(cc::Layer::Create()) { 95 root_layer_(cc::Layer::Create()) {
95 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 96 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
96 scoped_refptr<cc::Layer> edge_layer = CreateImageLayer(edge); 97 scoped_refptr<cc::Layer> edge_layer = CreateImageLayer(edge);
97 scoped_refptr<cc::Layer> glow_layer = CreateImageLayer(glow); 98 scoped_refptr<cc::Layer> glow_layer = CreateImageLayer(glow);
98 root_layer_->AddChild(edge_layer); 99 root_layer_->AddChild(edge_layer);
99 root_layer_->AddChild(glow_layer); 100 root_layer_->AddChild(glow_layer);
100 edge_effects_[i] = make_scoped_ptr(new EdgeEffect(edge_layer, glow_layer)); 101 edge_effects_[i] = make_scoped_ptr(new EdgeEffect(edge_layer, glow_layer));
101 } 102 }
102 } 103 }
103 104
104 OverscrollGlow::~OverscrollGlow() { 105 OverscrollGlow::~OverscrollGlow() {
105 root_layer_->RemoveFromParent(); 106 root_layer_->RemoveFromParent();
106 } 107 }
107 108
108 void OverscrollGlow::OnOverscrolled(base::TimeTicks current_time, 109 void OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
109 gfx::Vector2dF overscroll, 110 gfx::Vector2dF overscroll,
110 gfx::Vector2dF velocity) { 111 gfx::Vector2dF velocity) {
112 if (!enabled_)
113 return;
114
111 // The size of the glow determines the relative effect of the inputs; an 115 // The size of the glow determines the relative effect of the inputs; an
112 // empty-sized effect is effectively disabled. 116 // empty-sized effect is effectively disabled.
113 if (size_.IsEmpty()) 117 if (size_.IsEmpty())
114 return; 118 return;
115 119
116 if (!horizontal_overscroll_enabled_) { 120 if (!horizontal_overscroll_enabled_) {
117 overscroll.set_x(0); 121 overscroll.set_x(0);
118 velocity.set_x(0); 122 velocity.set_x(0);
119 } 123 }
120 if (!vertical_overscroll_enabled_) { 124 if (!vertical_overscroll_enabled_) {
(...skipping 28 matching lines...) Expand all
149 Release(AXIS_Y, current_time); 153 Release(AXIS_Y, current_time);
150 154
151 Pull(current_time, overscroll - old_overscroll_); 155 Pull(current_time, overscroll - old_overscroll_);
152 } 156 }
153 157
154 old_velocity_ = velocity; 158 old_velocity_ = velocity;
155 old_overscroll_ = overscroll; 159 old_overscroll_ = overscroll;
156 } 160 }
157 161
158 bool OverscrollGlow::Animate(base::TimeTicks current_time) { 162 bool OverscrollGlow::Animate(base::TimeTicks current_time) {
159 if (!IsActive()) 163 if (!NeedsAnimate())
160 return false; 164 return false;
161 165
162 const gfx::SizeF sizes[EdgeEffect::EDGE_COUNT] = { 166 const gfx::SizeF sizes[EdgeEffect::EDGE_COUNT] = {
163 size_, gfx::SizeF(size_.height(), size_.width()), 167 size_, gfx::SizeF(size_.height(), size_.width()),
164 size_, gfx::SizeF(size_.height(), size_.width()) 168 size_, gfx::SizeF(size_.height(), size_.width())
165 }; 169 };
166 170
167 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 171 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
168 if (edge_effects_[i]->Update(current_time)) { 172 if (edge_effects_[i]->Update(current_time)) {
169 edge_effects_[i]->ApplyToLayers(sizes[i], 173 edge_effects_[i]->ApplyToLayers(sizes[i],
170 static_cast<EdgeEffect::Edge>(i)); 174 static_cast<EdgeEffect::Edge>(i));
171 } 175 }
172 } 176 }
173 177
174 return IsActive(); 178 return NeedsAnimate();
175 } 179 }
176 180
177 bool OverscrollGlow::IsActive() const { 181 void OverscrollGlow::SetEnabled(bool enabled) {
182 if (enabled_ == enabled)
183 return;
184 enabled_ = enabled;
185 if (!enabled_) {
186 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i)
187 edge_effects_[i]->Finish();
188 }
189 }
190
191 bool OverscrollGlow::NeedsAnimate() const {
192 if (!enabled_)
193 return false;
178 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 194 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
179 if (!edge_effects_[i]->IsFinished()) 195 if (!edge_effects_[i]->IsFinished())
180 return true; 196 return true;
181 } 197 }
182 return false; 198 return false;
183 } 199 }
184 200
185 void OverscrollGlow::Finish() {
186 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i)
187 edge_effects_[i]->Finish();
188 }
189
190 void OverscrollGlow::Pull(base::TimeTicks current_time, 201 void OverscrollGlow::Pull(base::TimeTicks current_time,
191 gfx::Vector2dF overscroll_delta) { 202 gfx::Vector2dF overscroll_delta) {
192 overscroll_delta = ZeroSmallComponents(overscroll_delta); 203 overscroll_delta = ZeroSmallComponents(overscroll_delta);
193 if (overscroll_delta.IsZero()) 204 if (overscroll_delta.IsZero())
194 return; 205 return;
195 206
196 gfx::Vector2dF overscroll_pull = gfx::ScaleVector2d(overscroll_delta, 207 gfx::Vector2dF overscroll_pull = gfx::ScaleVector2d(overscroll_delta,
197 1.f / size_.width(), 208 1.f / size_.width(),
198 1.f / size_.height()); 209 1.f / size_.height());
199 float edge_overscroll_pull[EdgeEffect::EDGE_COUNT] = { 210 float edge_overscroll_pull[EdgeEffect::EDGE_COUNT] = {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 break; 270 break;
260 }; 271 };
261 } 272 }
262 273
263 EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) { 274 EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) {
264 return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get(); 275 return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get();
265 } 276 }
266 277
267 } // namespace content 278 } // namespace content
268 279
OLDNEW
« no previous file with comments | « content/browser/android/overscroll_glow.h ('k') | content/browser/renderer_host/render_widget_host_view_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698