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

Unified Diff: ui/compositor/layer.cc

Issue 11896017: Thread ui opacity animations (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix ash_unittests Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_animation_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/layer.cc
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc
index 6c7e0752b79e9d30518ed3d0735217bbe2dee335..b73419a2992adbb9d1ffed37fa47e3b26b48aba6 100644
--- a/ui/compositor/layer.cc
+++ b/ui/compositor/layer.cc
@@ -47,7 +47,6 @@ Layer::Layer()
force_render_surface_(false),
fills_bounds_opaquely_(true),
layer_updated_externally_(false),
- opacity_(1.0f),
background_blur_radius_(0),
layer_saturation_(0.0f),
layer_brightness_(0.0f),
@@ -75,7 +74,6 @@ Layer::Layer(LayerType type)
force_render_surface_(false),
fills_bounds_opaquely_(true),
layer_updated_externally_(false),
- opacity_(1.0f),
background_blur_radius_(0),
layer_saturation_(0.0f),
layer_brightness_(0.0f),
@@ -110,6 +108,7 @@ Layer::~Layer() {
layer_mask_back_link_->SetMaskLayer(NULL);
for (size_t i = 0; i < children_.size(); ++i)
children_[i]->parent_ = NULL;
+ cc_layer_->removeLayerAnimationEventObserver(this);
cc_layer_->removeFromParent();
}
@@ -117,6 +116,10 @@ Compositor* Layer::GetCompositor() {
return GetRoot(this)->compositor_;
}
+float Layer::opacity() const {
+ return cc_layer_->opacity();
+}
+
void Layer::SetCompositor(Compositor* compositor) {
// This function must only be called to set the compositor on the root layer,
// or to reset it.
@@ -225,10 +228,10 @@ void Layer::SetOpacity(float opacity) {
}
float Layer::GetCombinedOpacity() const {
- float opacity = opacity_;
+ float opacity = this->opacity();
Layer* current = this->parent_;
while (current) {
- opacity *= current->opacity_;
+ opacity *= current->opacity();
current = current->parent_;
}
return opacity;
@@ -355,7 +358,7 @@ float Layer::GetTargetOpacity() const {
if (animator_.get() && animator_->IsAnimatingProperty(
LayerAnimationElement::OPACITY))
return animator_->GetTargetOpacity();
- return opacity_;
+ return opacity();
}
void Layer::SetVisible(bool visible) {
@@ -444,7 +447,10 @@ void Layer::SetExternalTexture(Texture* texture) {
DCHECK(parent_->cc_layer_);
parent_->cc_layer_->replaceChild(cc_layer_, new_layer);
}
+ cc_layer_->removeLayerAnimationEventObserver(this);
+ new_layer->setOpacity(cc_layer_->opacity());
cc_layer_= new_layer;
+ cc_layer_->addLayerAnimationEventObserver(this);
cc_layer_is_accelerated_ = layer_updated_externally_;
for (size_t i = 0; i < children_.size(); ++i) {
DCHECK(children_[i]->cc_layer_);
@@ -452,7 +458,6 @@ void Layer::SetExternalTexture(Texture* texture) {
}
cc_layer_->setAnchorPoint(gfx::PointF());
cc_layer_->setContentsOpaque(fills_bounds_opaquely_);
- cc_layer_->setOpacity(opacity_);
cc_layer_->setForceRenderSurface(force_render_surface_);
cc_layer_->setIsDrawable(IsDrawn());
RecomputeTransform();
@@ -564,6 +569,11 @@ void Layer::SetForceRenderSurface(bool force) {
cc_layer_->setForceRenderSurface(force_render_surface_);
}
+void Layer::OnAnimationStarted(const cc::AnimationEvent& event) {
+ if (animator_)
+ animator_->OnThreadedAnimationStarted(event);
+}
+
void Layer::StackRelativeTo(Layer* child, Layer* other, bool above) {
DCHECK_NE(child, other);
DCHECK_EQ(this, child->parent());
@@ -656,8 +666,6 @@ void Layer::SetTransformImmediately(const gfx::Transform& transform) {
}
void Layer::SetOpacityImmediately(float opacity) {
- opacity_ = opacity;
-
cc_layer_->setOpacity(opacity);
ScheduleDraw();
}
@@ -751,6 +759,16 @@ SkColor Layer::GetColorForAnimation() const {
solid_color_layer_->backgroundColor() : SK_ColorBLACK;
}
+void Layer::AddThreadedAnimation(scoped_ptr<cc::Animation> animation) {
+ DCHECK(cc_layer_);
+ cc_layer_->addAnimation(animation.Pass());
+}
+
+void Layer::RemoveThreadedAnimation(int animation_id) {
+ DCHECK(cc_layer_);
+ cc_layer_->removeAnimation(animation_id);
+}
+
void Layer::CreateWebLayer() {
if (type_ == LAYER_SOLID_COLOR) {
solid_color_layer_ = cc::SolidColorLayer::create();
@@ -763,6 +781,7 @@ void Layer::CreateWebLayer() {
cc_layer_->setAnchorPoint(gfx::PointF());
cc_layer_->setContentsOpaque(true);
cc_layer_->setIsDrawable(type_ != LAYER_NOT_DRAWN);
+ cc_layer_->addLayerAnimationEventObserver(this);
}
void Layer::RecomputeTransform() {
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_animation_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698