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

Unified 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, 1 month 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698