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

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

Issue 82553015: Switch the android overscroll glow to use UIResources. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor naming changes Created 7 years 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/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "cc/layers/image_layer.h" 9 #include "cc/layers/image_layer.h"
10 #include "cc/layers/ui_resource_layer.h"
10 #include "content/browser/android/edge_effect.h" 11 #include "content/browser/android/edge_effect.h"
11 #include "ui/gfx/android/java_bitmap.h" 12 #include "ui/gfx/android/java_bitmap.h"
12 13
13 using std::max; 14 using std::max;
14 using std::min; 15 using std::min;
15 16
16 namespace content { 17 namespace content {
17 18
18 namespace { 19 namespace {
19 20
20 const float kEpsilon = 1e-3f; 21 const float kEpsilon = 1e-3f;
21 22
22 class OverscrollResources {
23 public:
24 OverscrollResources() {
25 TRACE_EVENT0("browser", "OverscrollResources::Create");
26 edge_bitmap_ =
27 gfx::CreateSkBitmapFromResource("android:drawable/overscroll_edge",
28 gfx::Size(128, 12));
29 glow_bitmap_ =
30 gfx::CreateSkBitmapFromResource("android:drawable/overscroll_glow",
31 gfx::Size(128, 64));
32 }
33
34 const SkBitmap& edge_bitmap() { return edge_bitmap_; }
35 const SkBitmap& glow_bitmap() { return glow_bitmap_; }
36
37 private:
38 SkBitmap edge_bitmap_;
39 SkBitmap glow_bitmap_;
40
41 DISALLOW_COPY_AND_ASSIGN(OverscrollResources);
42 };
43
44 // Leaky to allow access from a worker thread.
45 base::LazyInstance<OverscrollResources>::Leaky g_overscroll_resources =
46 LAZY_INSTANCE_INITIALIZER;
47
48 scoped_refptr<cc::Layer> CreateImageLayer(const SkBitmap& bitmap) {
49 scoped_refptr<cc::ImageLayer> layer = cc::ImageLayer::Create();
50 layer->SetBitmap(bitmap);
51 return layer;
52 }
53
54 bool IsApproxZero(float value) { 23 bool IsApproxZero(float value) {
55 return std::abs(value) < kEpsilon; 24 return std::abs(value) < kEpsilon;
56 } 25 }
57 26
58 gfx::Vector2dF ZeroSmallComponents(gfx::Vector2dF vector) { 27 gfx::Vector2dF ZeroSmallComponents(gfx::Vector2dF vector) {
59 if (IsApproxZero(vector.x())) 28 if (IsApproxZero(vector.x()))
60 vector.set_x(0); 29 vector.set_x(0);
61 if (IsApproxZero(vector.y())) 30 if (IsApproxZero(vector.y()))
62 vector.set_y(0); 31 vector.set_y(0);
63 return vector; 32 return vector;
64 } 33 }
65 34
66 } // namespace 35 } // namespace
67 36
68 scoped_ptr<OverscrollGlow> OverscrollGlow::Create(bool enabled, 37 scoped_ptr<OverscrollGlow> OverscrollGlow::Create(bool enabled,
69 gfx::SizeF size) { 38 gfx::SizeF size) {
70 const SkBitmap& edge = g_overscroll_resources.Get().edge_bitmap(); 39 return make_scoped_ptr(new OverscrollGlow(enabled, size));
71 const SkBitmap& glow = g_overscroll_resources.Get().glow_bitmap();
72 if (edge.isNull() || glow.isNull())
73 return scoped_ptr<OverscrollGlow>();
74
75 return make_scoped_ptr(new OverscrollGlow(enabled, size, edge, glow));
76 }
77
78 void OverscrollGlow::EnsureResources() {
79 g_overscroll_resources.Get();
80 } 40 }
81 41
82 OverscrollGlow::OverscrollGlow(bool enabled, 42 OverscrollGlow::OverscrollGlow(bool enabled,
83 gfx::SizeF size, 43 gfx::SizeF size)
84 const SkBitmap& edge,
85 const SkBitmap& glow)
86 : enabled_(enabled), 44 : enabled_(enabled),
87 size_(size), 45 size_(size),
88 horizontal_overscroll_enabled_(true), 46 horizontal_overscroll_enabled_(true),
89 vertical_overscroll_enabled_(true), 47 vertical_overscroll_enabled_(true),
90 root_layer_(cc::Layer::Create()) { 48 root_layer_(cc::Layer::Create()),
49 edge_layer_(cc::UIResourceLayer::Create()),
50 glow_layer_(cc::UIResourceLayer::Create()),
51 edge_resource_id_(0),
52 glow_resource_id_(0) {
91 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { 53 for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) {
92 scoped_refptr<cc::Layer> edge_layer = CreateImageLayer(edge); 54 root_layer_->AddChild(edge_layer_);
93 scoped_refptr<cc::Layer> glow_layer = CreateImageLayer(glow); 55 root_layer_->AddChild(glow_layer_);
94 root_layer_->AddChild(edge_layer); 56 edge_effects_[i] =
95 root_layer_->AddChild(glow_layer); 57 make_scoped_ptr(new EdgeEffect(edge_layer_, glow_layer_));
jdduke (slow) 2013/11/26 01:39:54 There can potentially be >1 EdgeEffects active at
powei 2013/11/26 22:17:41 Done. My bad for not noticing what's actually goi
96 edge_effects_[i] = make_scoped_ptr(new EdgeEffect(edge_layer, glow_layer));
97 } 58 }
98 } 59 }
99 60
100 OverscrollGlow::~OverscrollGlow() { 61 OverscrollGlow::~OverscrollGlow() {
101 root_layer_->RemoveFromParent(); 62 root_layer_->RemoveFromParent();
102 } 63 }
103 64
104 void OverscrollGlow::OnOverscrolled(base::TimeTicks current_time, 65 void OverscrollGlow::OnOverscrolled(base::TimeTicks current_time,
105 gfx::Vector2dF overscroll, 66 gfx::Vector2dF overscroll,
106 gfx::Vector2dF velocity) { 67 gfx::Vector2dF velocity) {
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 old_overscroll_.set_y(0); 224 old_overscroll_.set_y(0);
264 old_velocity_.set_y(0); 225 old_velocity_.set_y(0);
265 break; 226 break;
266 }; 227 };
267 } 228 }
268 229
269 EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) { 230 EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) {
270 return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get(); 231 return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get();
271 } 232 }
272 233
234 void OverscrollGlow::AttachLayerTo(scoped_refptr<cc::Layer> layer) {
235 if (!edge_resource_id_ || !glow_resource_id_)
236 return;
237 layer->AddChild(root_layer_);
238 edge_layer_->SetUIResourceId(edge_resource_id_);
239 edge_layer_->SetBounds(edge_bitmap_size_);
240 glow_layer_->SetUIResourceId(glow_resource_id_);
241 glow_layer_->SetBounds(glow_bitmap_size_);
242 }
243
244 void OverscrollGlow::RemoveLayer() {
245 root_layer_->RemoveFromParent();
246 }
247
248 bool OverscrollGlow::IsAttached() const { return root_layer_->parent(); }
249
250 bool OverscrollGlow::SetLayerResources(cc::UIResourceId edge_resource_id,
251 cc::UIResourceId glow_resource_id,
252 gfx::Size edge_bitmap_size,
253 gfx::Size glow_bitmap_size) {
254 if (edge_resource_id_ == edge_resource_id &&
255 glow_resource_id_ == glow_resource_id)
256 return false;
257 edge_resource_id_ = edge_resource_id;
258 glow_resource_id_ = glow_resource_id;
259 edge_bitmap_size_ = edge_bitmap_size;
260 glow_bitmap_size_ = glow_bitmap_size;
261 return true;
262 }
263
273 } // namespace content 264 } // namespace content
274
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698