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

Side by Side Diff: ui/compositor/layer.cc

Issue 13725015: Merge ui::Layer's concept of position with cc::Layer's (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_animation_element.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/compositor/layer.h" 5 #include "ui/compositor/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 if (!p->GetTargetTransform().IsIdentity()) 418 if (!p->GetTargetTransform().IsIdentity())
419 transform->ConcatTransform(p->GetTargetTransform()); 419 transform->ConcatTransform(p->GetTargetTransform());
420 transform->ConcatTransform(translation); 420 transform->ConcatTransform(translation);
421 } 421 }
422 return p == ancestor; 422 return p == ancestor;
423 } 423 }
424 424
425 // static 425 // static
426 gfx::Transform Layer::ConvertTransformToCCTransform( 426 gfx::Transform Layer::ConvertTransformToCCTransform(
427 const gfx::Transform& transform, 427 const gfx::Transform& transform,
428 const gfx::Rect& bounds,
429 float device_scale_factor) { 428 float device_scale_factor) {
430 gfx::Transform cc_transform; 429 gfx::Transform cc_transform;
431 cc_transform.Scale(device_scale_factor, device_scale_factor); 430 cc_transform.Scale(device_scale_factor, device_scale_factor);
432 cc_transform.Translate(bounds.x(), bounds.y());
433 cc_transform.PreconcatTransform(transform); 431 cc_transform.PreconcatTransform(transform);
434 cc_transform.Scale(1.0f / device_scale_factor, 1.0f / device_scale_factor); 432 cc_transform.Scale(1.0f / device_scale_factor, 1.0f / device_scale_factor);
435 return cc_transform; 433 return cc_transform;
436 } 434 }
437 435
438 void Layer::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) { 436 void Layer::SetFillsBoundsOpaquely(bool fills_bounds_opaquely) {
439 if (fills_bounds_opaquely_ == fills_bounds_opaquely) 437 if (fills_bounds_opaquely_ == fills_bounds_opaquely)
440 return; 438 return;
441 439
442 fills_bounds_opaquely_ = fills_bounds_opaquely; 440 fills_bounds_opaquely_ = fills_bounds_opaquely;
(...skipping 13 matching lines...) Expand all
456 // TODO(piman): delegated_renderer_layer_ cleanup. 454 // TODO(piman): delegated_renderer_layer_ cleanup.
457 455
458 cc_layer_->RemoveAllChildren(); 456 cc_layer_->RemoveAllChildren();
459 if (parent_) { 457 if (parent_) {
460 DCHECK(parent_->cc_layer_); 458 DCHECK(parent_->cc_layer_);
461 parent_->cc_layer_->ReplaceChild(cc_layer_, new_layer); 459 parent_->cc_layer_->ReplaceChild(cc_layer_, new_layer);
462 } 460 }
463 cc_layer_->RemoveLayerAnimationEventObserver(this); 461 cc_layer_->RemoveLayerAnimationEventObserver(this);
464 new_layer->SetOpacity(cc_layer_->opacity()); 462 new_layer->SetOpacity(cc_layer_->opacity());
465 new_layer->SetTransform(cc_layer_->transform()); 463 new_layer->SetTransform(cc_layer_->transform());
464 new_layer->SetPosition(cc_layer_->position());
466 465
467 cc_layer_= new_layer; 466 cc_layer_= new_layer;
468 content_layer_ = NULL; 467 content_layer_ = NULL;
469 solid_color_layer_ = NULL; 468 solid_color_layer_ = NULL;
470 texture_layer_ = NULL; 469 texture_layer_ = NULL;
471 delegated_renderer_layer_ = NULL; 470 delegated_renderer_layer_ = NULL;
472 471
473 cc_layer_->AddLayerAnimationEventObserver(this); 472 cc_layer_->AddLayerAnimationEventObserver(this);
474 for (size_t i = 0; i < children_.size(); ++i) { 473 for (size_t i = 0; i < children_.size(); ++i) {
475 DCHECK(children_[i]->cc_layer_); 474 DCHECK(children_[i]->cc_layer_);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 593
595 void Layer::OnDeviceScaleFactorChanged(float device_scale_factor) { 594 void Layer::OnDeviceScaleFactorChanged(float device_scale_factor) {
596 if (device_scale_factor_ == device_scale_factor) 595 if (device_scale_factor_ == device_scale_factor)
597 return; 596 return;
598 if (animator_) 597 if (animator_)
599 animator_->StopAnimatingProperty(LayerAnimationElement::TRANSFORM); 598 animator_->StopAnimatingProperty(LayerAnimationElement::TRANSFORM);
600 gfx::Transform transform = this->transform(); 599 gfx::Transform transform = this->transform();
601 device_scale_factor_ = device_scale_factor; 600 device_scale_factor_ = device_scale_factor;
602 RecomputeCCTransformFromTransform(transform); 601 RecomputeCCTransformFromTransform(transform);
603 RecomputeDrawsContentAndUVRect(); 602 RecomputeDrawsContentAndUVRect();
603 RecomputePosition();
604 SchedulePaint(gfx::Rect(bounds_.size())); 604 SchedulePaint(gfx::Rect(bounds_.size()));
605 if (delegate_) 605 if (delegate_)
606 delegate_->OnDeviceScaleFactorChanged(device_scale_factor); 606 delegate_->OnDeviceScaleFactorChanged(device_scale_factor);
607 for (size_t i = 0; i < children_.size(); ++i) 607 for (size_t i = 0; i < children_.size(); ++i)
608 children_[i]->OnDeviceScaleFactorChanged(device_scale_factor); 608 children_[i]->OnDeviceScaleFactorChanged(device_scale_factor);
609 if (layer_mask_) 609 if (layer_mask_)
610 layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor); 610 layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor);
611 } 611 }
612 612
613 void Layer::PaintContents(SkCanvas* sk_canvas, 613 void Layer::PaintContents(SkCanvas* sk_canvas,
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 } 697 }
698 698
699 void Layer::SetBoundsImmediately(const gfx::Rect& bounds) { 699 void Layer::SetBoundsImmediately(const gfx::Rect& bounds) {
700 if (bounds == bounds_) 700 if (bounds == bounds_)
701 return; 701 return;
702 702
703 base::Closure closure; 703 base::Closure closure;
704 if (delegate_) 704 if (delegate_)
705 closure = delegate_->PrepareForLayerBoundsChange(); 705 closure = delegate_->PrepareForLayerBoundsChange();
706 bool was_move = bounds_.size() == bounds.size(); 706 bool was_move = bounds_.size() == bounds.size();
707 gfx::Transform transform = this->transform();
708 bounds_ = bounds; 707 bounds_ = bounds;
709 708
710 RecomputeCCTransformFromTransform(transform);
711 RecomputeDrawsContentAndUVRect(); 709 RecomputeDrawsContentAndUVRect();
710 RecomputePosition();
711
712 if (!closure.is_null()) 712 if (!closure.is_null())
713 closure.Run(); 713 closure.Run();
714 714
715 if (was_move) { 715 if (was_move) {
716 // Don't schedule a draw if we're invisible. We'll schedule one 716 // Don't schedule a draw if we're invisible. We'll schedule one
717 // automatically when we get visible. 717 // automatically when we get visible.
718 if (IsDrawn()) 718 if (IsDrawn())
719 ScheduleDraw(); 719 ScheduleDraw();
720 } else { 720 } else {
721 // Always schedule a paint, even if we're invisible. 721 // Always schedule a paint, even if we're invisible.
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 solid_color_layer_ = cc::SolidColorLayer::Create(); 884 solid_color_layer_ = cc::SolidColorLayer::Create();
885 cc_layer_ = solid_color_layer_.get(); 885 cc_layer_ = solid_color_layer_.get();
886 } else { 886 } else {
887 content_layer_ = cc::ContentLayer::Create(this); 887 content_layer_ = cc::ContentLayer::Create(this);
888 cc_layer_ = content_layer_.get(); 888 cc_layer_ = content_layer_.get();
889 } 889 }
890 cc_layer_->SetAnchorPoint(gfx::PointF()); 890 cc_layer_->SetAnchorPoint(gfx::PointF());
891 cc_layer_->SetContentsOpaque(true); 891 cc_layer_->SetContentsOpaque(true);
892 cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN); 892 cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN);
893 cc_layer_->AddLayerAnimationEventObserver(this); 893 cc_layer_->AddLayerAnimationEventObserver(this);
894 RecomputePosition();
894 } 895 }
895 896
896 void Layer::RecomputeCCTransformFromTransform(const gfx::Transform& transform) { 897 void Layer::RecomputeCCTransformFromTransform(const gfx::Transform& transform) {
897 cc_layer_->SetTransform(ConvertTransformToCCTransform(transform, 898 cc_layer_->SetTransform(ConvertTransformToCCTransform(transform,
898 bounds_,
899 device_scale_factor_)); 899 device_scale_factor_));
900 } 900 }
901 901
902 gfx::Transform Layer::transform() const { 902 gfx::Transform Layer::transform() const {
903 gfx::Transform transform; 903 gfx::Transform transform;
904 transform.Translate(-bounds_.x(), -bounds_.y());
905 transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_); 904 transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_);
906 transform.PreconcatTransform(cc_layer_->transform()); 905 transform.PreconcatTransform(cc_layer_->transform());
907 transform.Scale(device_scale_factor_, device_scale_factor_); 906 transform.Scale(device_scale_factor_, device_scale_factor_);
908 return transform; 907 return transform;
909 } 908 }
910 909
911 void Layer::RecomputeDrawsContentAndUVRect() { 910 void Layer::RecomputeDrawsContentAndUVRect() {
912 DCHECK(cc_layer_); 911 DCHECK(cc_layer_);
913 gfx::Size size(bounds_.size()); 912 gfx::Size size(bounds_.size());
914 if (texture_layer_.get()) { 913 if (texture_layer_.get()) {
(...skipping 10 matching lines...) Expand all
925 static_cast<float>(size.height())/texture_size.height()); 924 static_cast<float>(size.height())/texture_size.height());
926 texture_layer_->SetUV(uv_top_left, uv_bottom_right); 925 texture_layer_->SetUV(uv_top_left, uv_bottom_right);
927 } else if (delegated_renderer_layer_.get()) { 926 } else if (delegated_renderer_layer_.get()) {
928 delegated_renderer_layer_->SetDisplaySize( 927 delegated_renderer_layer_->SetDisplaySize(
929 ConvertSizeToPixel(this, delegated_frame_size_in_dip_)); 928 ConvertSizeToPixel(this, delegated_frame_size_in_dip_));
930 size.ClampToMax(delegated_frame_size_in_dip_); 929 size.ClampToMax(delegated_frame_size_in_dip_);
931 } 930 }
932 cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); 931 cc_layer_->SetBounds(ConvertSizeToPixel(this, size));
933 } 932 }
934 933
934 void Layer::RecomputePosition() {
935 cc_layer_->SetPosition(gfx::ScalePoint(
936 gfx::PointF(bounds_.x(), bounds_.y()),
937 device_scale_factor_));
938 }
939
935 } // namespace ui 940 } // namespace ui
OLDNEW
« no previous file with comments | « ui/compositor/layer.h ('k') | ui/compositor/layer_animation_element.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698