OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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 "cc/layers/layer.h" | 5 #include "cc/layers/layer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "cc/animation/animation.h" | 10 #include "cc/animation/animation.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 parent_(NULL), | 35 parent_(NULL), |
36 layer_tree_host_(NULL), | 36 layer_tree_host_(NULL), |
37 scrollable_(false), | 37 scrollable_(false), |
38 should_scroll_on_main_thread_(false), | 38 should_scroll_on_main_thread_(false), |
39 have_wheel_event_handlers_(false), | 39 have_wheel_event_handlers_(false), |
40 anchor_point_(0.5f, 0.5f), | 40 anchor_point_(0.5f, 0.5f), |
41 background_color_(0), | 41 background_color_(0), |
42 opacity_(1.f), | 42 opacity_(1.f), |
43 anchor_point_z_(0.f), | 43 anchor_point_z_(0.f), |
44 is_container_for_fixed_position_layers_(false), | 44 is_container_for_fixed_position_layers_(false), |
45 fixed_to_container_layer_(false), | |
46 is_drawable_(false), | 45 is_drawable_(false), |
47 masks_to_bounds_(false), | 46 masks_to_bounds_(false), |
48 contents_opaque_(false), | 47 contents_opaque_(false), |
49 double_sided_(true), | 48 double_sided_(true), |
50 preserves_3d_(false), | 49 preserves_3d_(false), |
51 use_parent_backface_visibility_(false), | 50 use_parent_backface_visibility_(false), |
52 draw_checkerboard_for_missing_tiles_(false), | 51 draw_checkerboard_for_missing_tiles_(false), |
53 force_render_surface_(false), | 52 force_render_surface_(false), |
54 replica_layer_(NULL), | 53 replica_layer_(NULL), |
55 raster_scale_(1.f), | 54 raster_scale_(1.f), |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 SetNeedsCommit(); | 408 SetNeedsCommit(); |
410 } | 409 } |
411 | 410 |
412 void Layer::SetPosition(gfx::PointF position) { | 411 void Layer::SetPosition(gfx::PointF position) { |
413 if (position_ == position) | 412 if (position_ == position) |
414 return; | 413 return; |
415 position_ = position; | 414 position_ = position; |
416 SetNeedsCommit(); | 415 SetNeedsCommit(); |
417 } | 416 } |
418 | 417 |
| 418 bool Layer::IsContainerForFixedPositionLayers() const { |
| 419 if (!transform_.IsIdentityOrTranslation()) |
| 420 return true; |
| 421 if (parent_ && !parent_->sublayer_transform_.IsIdentityOrTranslation()) |
| 422 return true; |
| 423 return is_container_for_fixed_position_layers_; |
| 424 } |
| 425 |
419 void Layer::SetSublayerTransform(const gfx::Transform& sublayer_transform) { | 426 void Layer::SetSublayerTransform(const gfx::Transform& sublayer_transform) { |
420 if (sublayer_transform_ == sublayer_transform) | 427 if (sublayer_transform_ == sublayer_transform) |
421 return; | 428 return; |
422 sublayer_transform_ = sublayer_transform; | 429 sublayer_transform_ = sublayer_transform; |
423 SetNeedsCommit(); | 430 SetNeedsCommit(); |
424 } | 431 } |
425 | 432 |
426 void Layer::SetTransform(const gfx::Transform& transform) { | 433 void Layer::SetTransform(const gfx::Transform& transform) { |
427 if (transform_ == transform) | 434 if (transform_ == transform) |
428 return; | 435 return; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 | 533 |
527 // Simply mark the contents as dirty. For non-root layers, the call to | 534 // Simply mark the contents as dirty. For non-root layers, the call to |
528 // SetNeedsCommit will schedule a fresh compositing pass. | 535 // SetNeedsCommit will schedule a fresh compositing pass. |
529 // For the root layer, SetNeedsCommit has no effect. | 536 // For the root layer, SetNeedsCommit has no effect. |
530 if (DrawsContent() && !update_rect_.IsEmpty()) | 537 if (DrawsContent() && !update_rect_.IsEmpty()) |
531 SetNeedsCommit(); | 538 SetNeedsCommit(); |
532 } | 539 } |
533 | 540 |
534 bool Layer::DescendantIsFixedToContainerLayer() const { | 541 bool Layer::DescendantIsFixedToContainerLayer() const { |
535 for (size_t i = 0; i < children_.size(); ++i) { | 542 for (size_t i = 0; i < children_.size(); ++i) { |
536 if (children_[i]->fixed_to_container_layer() || | 543 if (children_[i]->position_constraint_.is_fixed_position() || |
537 children_[i]->DescendantIsFixedToContainerLayer()) | 544 children_[i]->DescendantIsFixedToContainerLayer()) |
538 return true; | 545 return true; |
539 } | 546 } |
540 return false; | 547 return false; |
541 } | 548 } |
542 | 549 |
543 void Layer::SetIsContainerForFixedPositionLayers(bool container) { | 550 void Layer::SetIsContainerForFixedPositionLayers(bool container) { |
544 if (is_container_for_fixed_position_layers_ == container) | 551 if (is_container_for_fixed_position_layers_ == container) |
545 return; | 552 return; |
546 is_container_for_fixed_position_layers_ = container; | 553 is_container_for_fixed_position_layers_ = container; |
547 | 554 |
548 if (layer_tree_host_ && layer_tree_host_->CommitRequested()) | 555 if (layer_tree_host_ && layer_tree_host_->CommitRequested()) |
549 return; | 556 return; |
550 | 557 |
551 // Only request a commit if we have a fixed positioned descendant. | 558 // Only request a commit if we have a fixed positioned descendant. |
552 if (DescendantIsFixedToContainerLayer()) | 559 if (DescendantIsFixedToContainerLayer()) |
553 SetNeedsCommit(); | 560 SetNeedsCommit(); |
554 } | 561 } |
555 | 562 |
556 void Layer::SetFixedToContainerLayer(bool fixed_to_container_layer) { | 563 void Layer::SetPositionConstraint(const LayerPositionConstraint& constraint) { |
557 if (fixed_to_container_layer_ == fixed_to_container_layer) | 564 if (position_constraint_ == constraint) |
558 return; | 565 return; |
559 fixed_to_container_layer_ = fixed_to_container_layer; | 566 position_constraint_ = constraint; |
560 SetNeedsCommit(); | 567 SetNeedsCommit(); |
561 } | 568 } |
562 | 569 |
563 void Layer::PushPropertiesTo(LayerImpl* layer) { | 570 void Layer::PushPropertiesTo(LayerImpl* layer) { |
564 layer->SetAnchorPoint(anchor_point_); | 571 layer->SetAnchorPoint(anchor_point_); |
565 layer->SetAnchorPointZ(anchor_point_z_); | 572 layer->SetAnchorPointZ(anchor_point_z_); |
566 layer->SetBackgroundColor(background_color_); | 573 layer->SetBackgroundColor(background_color_); |
567 layer->SetBounds(bounds_); | 574 layer->SetBounds(bounds_); |
568 layer->SetContentBounds(content_bounds()); | 575 layer->SetContentBounds(content_bounds()); |
569 layer->SetContentsScale(contents_scale_x(), contents_scale_y()); | 576 layer->SetContentsScale(contents_scale_x(), contents_scale_y()); |
570 layer->SetDebugName(debug_name_); | 577 layer->SetDebugName(debug_name_); |
571 layer->SetDoubleSided(double_sided_); | 578 layer->SetDoubleSided(double_sided_); |
572 layer->SetDrawCheckerboardForMissingTiles( | 579 layer->SetDrawCheckerboardForMissingTiles( |
573 draw_checkerboard_for_missing_tiles_); | 580 draw_checkerboard_for_missing_tiles_); |
574 layer->SetForceRenderSurface(force_render_surface_); | 581 layer->SetForceRenderSurface(force_render_surface_); |
575 layer->SetDrawsContent(DrawsContent()); | 582 layer->SetDrawsContent(DrawsContent()); |
576 layer->SetFilters(filters()); | 583 layer->SetFilters(filters()); |
577 layer->SetFilter(filter()); | 584 layer->SetFilter(filter()); |
578 layer->SetBackgroundFilters(background_filters()); | 585 layer->SetBackgroundFilters(background_filters()); |
579 layer->SetMasksToBounds(masks_to_bounds_); | 586 layer->SetMasksToBounds(masks_to_bounds_); |
580 layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_); | 587 layer->SetShouldScrollOnMainThread(should_scroll_on_main_thread_); |
581 layer->SetHaveWheelEventHandlers(have_wheel_event_handlers_); | 588 layer->SetHaveWheelEventHandlers(have_wheel_event_handlers_); |
582 layer->SetNonFastScrollableRegion(non_fast_scrollable_region_); | 589 layer->SetNonFastScrollableRegion(non_fast_scrollable_region_); |
583 layer->SetTouchEventHandlerRegion(touch_event_handler_region_); | 590 layer->SetTouchEventHandlerRegion(touch_event_handler_region_); |
584 layer->SetContentsOpaque(contents_opaque_); | 591 layer->SetContentsOpaque(contents_opaque_); |
585 if (!layer->OpacityIsAnimatingOnImplOnly() && !OpacityIsAnimating()) | 592 if (!layer->OpacityIsAnimatingOnImplOnly() && !OpacityIsAnimating()) |
586 layer->SetOpacity(opacity_); | 593 layer->SetOpacity(opacity_); |
587 DCHECK(!(OpacityIsAnimating() && layer->OpacityIsAnimatingOnImplOnly())); | 594 DCHECK(!(OpacityIsAnimating() && layer->OpacityIsAnimatingOnImplOnly())); |
588 layer->SetPosition(position_); | 595 layer->SetPosition(position_); |
589 layer->SetIsContainerForFixedPositionLayers( | 596 layer->SetIsContainerForFixedPositionLayers( |
590 is_container_for_fixed_position_layers_); | 597 IsContainerForFixedPositionLayers()); |
591 layer->SetFixedToContainerLayer(fixed_to_container_layer_); | 598 layer->SetFixedContainerSizeDelta(gfx::Vector2dF()); |
| 599 layer->SetPositionConstraint(position_constraint_); |
592 layer->SetPreserves3d(preserves_3d()); | 600 layer->SetPreserves3d(preserves_3d()); |
593 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); | 601 layer->SetUseParentBackfaceVisibility(use_parent_backface_visibility_); |
594 layer->SetSublayerTransform(sublayer_transform_); | 602 layer->SetSublayerTransform(sublayer_transform_); |
595 if (!layer->TransformIsAnimatingOnImplOnly() && !TransformIsAnimating()) | 603 if (!layer->TransformIsAnimatingOnImplOnly() && !TransformIsAnimating()) |
596 layer->SetTransform(transform_); | 604 layer->SetTransform(transform_); |
597 DCHECK(!(TransformIsAnimating() && layer->TransformIsAnimatingOnImplOnly())); | 605 DCHECK(!(TransformIsAnimating() && layer->TransformIsAnimatingOnImplOnly())); |
598 | 606 |
599 layer->SetScrollable(scrollable_); | 607 layer->SetScrollable(scrollable_); |
600 layer->SetScrollOffset(scroll_offset_); | 608 layer->SetScrollOffset(scroll_offset_); |
601 layer->SetMaxScrollOffset(max_scroll_offset_); | 609 layer->SetMaxScrollOffset(max_scroll_offset_); |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
820 | 828 |
821 ScrollbarLayer* Layer::ToScrollbarLayer() { | 829 ScrollbarLayer* Layer::ToScrollbarLayer() { |
822 return NULL; | 830 return NULL; |
823 } | 831 } |
824 | 832 |
825 RenderingStatsInstrumentation* Layer::rendering_stats_instrumentation() const { | 833 RenderingStatsInstrumentation* Layer::rendering_stats_instrumentation() const { |
826 return layer_tree_host_->rendering_stats_instrumentation(); | 834 return layer_tree_host_->rendering_stats_instrumentation(); |
827 } | 835 } |
828 | 836 |
829 } // namespace cc | 837 } // namespace cc |
OLD | NEW |