Index: content/browser/android/overscroll_glow.cc |
diff --git a/content/browser/android/overscroll_glow.cc b/content/browser/android/overscroll_glow.cc |
index d8e8c775756f968ea46b664deb81e92b1dbe408a..490cfced82cbfc10003b5f88e39ba4c790bbfc92 100644 |
--- a/content/browser/android/overscroll_glow.cc |
+++ b/content/browser/android/overscroll_glow.cc |
@@ -7,6 +7,7 @@ |
#include "base/debug/trace_event.h" |
#include "base/lazy_instance.h" |
#include "cc/layers/image_layer.h" |
+#include "cc/layers/ui_resource_layer.h" |
#include "content/browser/android/edge_effect.h" |
#include "ui/gfx/android/java_bitmap.h" |
@@ -19,38 +20,6 @@ namespace { |
const float kEpsilon = 1e-3f; |
-class OverscrollResources { |
- public: |
- OverscrollResources() { |
- TRACE_EVENT0("browser", "OverscrollResources::Create"); |
- edge_bitmap_ = |
- gfx::CreateSkBitmapFromResource("android:drawable/overscroll_edge", |
- gfx::Size(128, 12)); |
- glow_bitmap_ = |
- gfx::CreateSkBitmapFromResource("android:drawable/overscroll_glow", |
- gfx::Size(128, 64)); |
- } |
- |
- const SkBitmap& edge_bitmap() { return edge_bitmap_; } |
- const SkBitmap& glow_bitmap() { return glow_bitmap_; } |
- |
- private: |
- SkBitmap edge_bitmap_; |
- SkBitmap glow_bitmap_; |
- |
- DISALLOW_COPY_AND_ASSIGN(OverscrollResources); |
-}; |
- |
-// Leaky to allow access from a worker thread. |
-base::LazyInstance<OverscrollResources>::Leaky g_overscroll_resources = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-scoped_refptr<cc::Layer> CreateImageLayer(const SkBitmap& bitmap) { |
- scoped_refptr<cc::ImageLayer> layer = cc::ImageLayer::Create(); |
- layer->SetBitmap(bitmap); |
- return layer; |
-} |
- |
bool IsApproxZero(float value) { |
return std::abs(value) < kEpsilon; |
} |
@@ -67,33 +36,25 @@ gfx::Vector2dF ZeroSmallComponents(gfx::Vector2dF vector) { |
scoped_ptr<OverscrollGlow> OverscrollGlow::Create(bool enabled, |
gfx::SizeF size) { |
- const SkBitmap& edge = g_overscroll_resources.Get().edge_bitmap(); |
- const SkBitmap& glow = g_overscroll_resources.Get().glow_bitmap(); |
- if (edge.isNull() || glow.isNull()) |
- return scoped_ptr<OverscrollGlow>(); |
- |
- return make_scoped_ptr(new OverscrollGlow(enabled, size, edge, glow)); |
-} |
- |
-void OverscrollGlow::EnsureResources() { |
- g_overscroll_resources.Get(); |
+ return make_scoped_ptr(new OverscrollGlow(enabled, size)); |
} |
OverscrollGlow::OverscrollGlow(bool enabled, |
- gfx::SizeF size, |
- const SkBitmap& edge, |
- const SkBitmap& glow) |
+ gfx::SizeF size) |
: enabled_(enabled), |
size_(size), |
horizontal_overscroll_enabled_(true), |
vertical_overscroll_enabled_(true), |
- root_layer_(cc::Layer::Create()) { |
+ root_layer_(cc::Layer::Create()), |
+ edge_layer_(cc::UIResourceLayer::Create()), |
+ glow_layer_(cc::UIResourceLayer::Create()), |
+ edge_resource_id_(0), |
+ glow_resource_id_(0) { |
for (size_t i = 0; i < EdgeEffect::EDGE_COUNT; ++i) { |
- scoped_refptr<cc::Layer> edge_layer = CreateImageLayer(edge); |
- scoped_refptr<cc::Layer> glow_layer = CreateImageLayer(glow); |
- root_layer_->AddChild(edge_layer); |
- root_layer_->AddChild(glow_layer); |
- edge_effects_[i] = make_scoped_ptr(new EdgeEffect(edge_layer, glow_layer)); |
+ root_layer_->AddChild(edge_layer_); |
+ root_layer_->AddChild(glow_layer_); |
+ edge_effects_[i] = |
+ 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
|
} |
} |
@@ -270,5 +231,34 @@ EdgeEffect* OverscrollGlow::GetOppositeEdge(int edge_index) { |
return edge_effects_[(edge_index + 2) % EdgeEffect::EDGE_COUNT].get(); |
} |
-} // namespace content |
+void OverscrollGlow::AttachLayerTo(scoped_refptr<cc::Layer> layer) { |
+ if (!edge_resource_id_ || !glow_resource_id_) |
+ return; |
+ layer->AddChild(root_layer_); |
+ edge_layer_->SetUIResourceId(edge_resource_id_); |
+ edge_layer_->SetBounds(edge_bitmap_size_); |
+ glow_layer_->SetUIResourceId(glow_resource_id_); |
+ glow_layer_->SetBounds(glow_bitmap_size_); |
+} |
+ |
+void OverscrollGlow::RemoveLayer() { |
+ root_layer_->RemoveFromParent(); |
+} |
+bool OverscrollGlow::IsAttached() const { return root_layer_->parent(); } |
+ |
+bool OverscrollGlow::SetLayerResources(cc::UIResourceId edge_resource_id, |
+ cc::UIResourceId glow_resource_id, |
+ gfx::Size edge_bitmap_size, |
+ gfx::Size glow_bitmap_size) { |
+ if (edge_resource_id_ == edge_resource_id && |
+ glow_resource_id_ == glow_resource_id) |
+ return false; |
+ edge_resource_id_ = edge_resource_id; |
+ glow_resource_id_ = glow_resource_id; |
+ edge_bitmap_size_ = edge_bitmap_size; |
+ glow_bitmap_size_ = glow_bitmap_size; |
+ return true; |
+} |
+ |
+} // namespace content |