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

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: Explicit enable on creation 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 gfx::Vector2dF ZeroSmallComponents(gfx::Vector2dF vector) { 68 gfx::Vector2dF ZeroSmallComponents(gfx::Vector2dF vector) {
69 if (IsApproxZero(vector.x())) 69 if (IsApproxZero(vector.x()))
70 vector.set_x(0); 70 vector.set_x(0);
71 if (IsApproxZero(vector.y())) 71 if (IsApproxZero(vector.y()))
72 vector.set_y(0); 72 vector.set_y(0);
73 return vector; 73 return vector;
74 } 74 }
75 75
76 } // namespace 76 } // namespace
77 77
78 scoped_ptr<OverscrollGlow> OverscrollGlow::Create() { 78 scoped_ptr<OverscrollGlow> OverscrollGlow::Create(bool enabled) {
79 const SkBitmap& edge = g_overscroll_resources.Get().edge_bitmap(); 79 const SkBitmap& edge = g_overscroll_resources.Get().edge_bitmap();
80 const SkBitmap& glow = g_overscroll_resources.Get().glow_bitmap(); 80 const SkBitmap& glow = g_overscroll_resources.Get().glow_bitmap();
81 if (edge.isNull() || glow.isNull()) 81 if (edge.isNull() || glow.isNull())
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(enabled, 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(bool enabled,
92 : horizontal_overscroll_enabled_(true), 92 const SkBitmap& edge,
93 const SkBitmap& glow)
94 : enabled_(enabled),
95 horizontal_overscroll_enabled_(true),
93 vertical_overscroll_enabled_(true), 96 vertical_overscroll_enabled_(true),
94 root_layer_(cc::Layer::Create()) { 97 root_layer_(cc::Layer::Create()) {
95 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 98 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
96 scoped_refptr<cc::Layer> edge_layer = CreateImageLayer(edge); 99 scoped_refptr<cc::Layer> edge_layer = CreateImageLayer(edge);
97 scoped_refptr<cc::Layer> glow_layer = CreateImageLayer(glow); 100 scoped_refptr<cc::Layer> glow_layer = CreateImageLayer(glow);
98 root_layer_->AddChild(edge_layer); 101 root_layer_->AddChild(edge_layer);
99 root_layer_->AddChild(glow_layer); 102 root_layer_->AddChild(glow_layer);
100 edge_effects_[i] = make_scoped_ptr(new EdgeEffect(edge_layer, glow_layer)); 103 edge_effects_[i] = make_scoped_ptr(new EdgeEffect(edge_layer, glow_layer));
101 } 104 }
102 } 105 }
103 106
104 OverscrollGlow::~OverscrollGlow() { 107 OverscrollGlow::~OverscrollGlow() {
105 root_layer_->RemoveFromParent(); 108 root_layer_->RemoveFromParent();
106 } 109 }
107 110
108 void OverscrollGlow::OnOverscrolled(base::TimeTicks current_time, 111 void OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
109 gfx::Vector2dF overscroll, 112 gfx::Vector2dF overscroll,
110 gfx::Vector2dF velocity) { 113 gfx::Vector2dF velocity) {
114 if (!enabled_)
115 return;
116
111 // The size of the glow determines the relative effect of the inputs; an 117 // The size of the glow determines the relative effect of the inputs; an
112 // empty-sized effect is effectively disabled. 118 // empty-sized effect is effectively disabled.
113 if (size_.IsEmpty()) 119 if (size_.IsEmpty())
114 return; 120 return;
115 121
116 if (!horizontal_overscroll_enabled_) { 122 if (!horizontal_overscroll_enabled_) {
117 overscroll.set_x(0); 123 overscroll.set_x(0);
118 velocity.set_x(0); 124 velocity.set_x(0);
119 } 125 }
120 if (!vertical_overscroll_enabled_) { 126 if (!vertical_overscroll_enabled_) {
(...skipping 28 matching lines...) Expand all
149 Release(AXIS_Y, current_time); 155 Release(AXIS_Y, current_time);
150 156
151 Pull(current_time, overscroll - old_overscroll_); 157 Pull(current_time, overscroll - old_overscroll_);
152 } 158 }
153 159
154 old_velocity_ = velocity; 160 old_velocity_ = velocity;
155 old_overscroll_ = overscroll; 161 old_overscroll_ = overscroll;
156 } 162 }
157 163
158 bool OverscrollGlow::Animate(base::TimeTicks current_time) { 164 bool OverscrollGlow::Animate(base::TimeTicks current_time) {
159 if (!IsActive()) 165 if (!NeedsAnimate())
160 return false; 166 return false;
161 167
162 const gfx::SizeF sizes[EdgeEffect::EDGE_COUNT] = { 168 const gfx::SizeF sizes[EdgeEffect::EDGE_COUNT] = {
163 size_, gfx::SizeF(size_.height(), size_.width()), 169 size_, gfx::SizeF(size_.height(), size_.width()),
164 size_, gfx::SizeF(size_.height(), size_.width()) 170 size_, gfx::SizeF(size_.height(), size_.width())
165 }; 171 };
166 172
167 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 173 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
168 if (edge_effects_[i]->Update(current_time)) { 174 if (edge_effects_[i]->Update(current_time)) {
169 edge_effects_[i]->ApplyToLayers(sizes[i], 175 edge_effects_[i]->ApplyToLayers(sizes[i],
170 static_cast<EdgeEffect::Edge>(i)); 176 static_cast<EdgeEffect::Edge>(i));
171 } 177 }
172 } 178 }
173 179
174 return IsActive(); 180 return NeedsAnimate();
175 } 181 }
176 182
177 bool OverscrollGlow::IsActive() const { 183 void OverscrollGlow::SetEnabled(bool enabled) {
184 if (enabled_ == enabled)
185 return;
186 enabled_ = enabled;
187 if (!enabled_) {
188 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i)
189 edge_effects_[i]->Finish();
190 }
191 }
192
193 bool OverscrollGlow::NeedsAnimate() const {
194 if (!enabled_)
195 return false;
178 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 196 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
179 if (!edge_effects_[i]->IsFinished()) 197 if (!edge_effects_[i]->IsFinished())
180 return true; 198 return true;
181 } 199 }
182 return false; 200 return false;
183 } 201 }
184 202
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, 203 void OverscrollGlow::Pull(base::TimeTicks current_time,
191 gfx::Vector2dF overscroll_delta) { 204 gfx::Vector2dF overscroll_delta) {
192 overscroll_delta = ZeroSmallComponents(overscroll_delta); 205 overscroll_delta = ZeroSmallComponents(overscroll_delta);
193 if (overscroll_delta.IsZero()) 206 if (overscroll_delta.IsZero())
194 return; 207 return;
195 208
196 gfx::Vector2dF overscroll_pull = gfx::ScaleVector2d(overscroll_delta, 209 gfx::Vector2dF overscroll_pull = gfx::ScaleVector2d(overscroll_delta,
197 1.f / size_.width(), 210 1.f / size_.width(),
198 1.f / size_.height()); 211 1.f / size_.height());
199 float edge_overscroll_pull[EdgeEffect::EDGE_COUNT] = { 212 float edge_overscroll_pull[EdgeEffect::EDGE_COUNT] = {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 break; 272 break;
260 }; 273 };
261 } 274 }
262 275
263 EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) { 276 EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) {
264 return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get(); 277 return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get();
265 } 278 }
266 279
267 } // namespace content 280 } // namespace content
268 281
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