Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/layer_impl.h" | 5 #include "cc/layer_impl.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "cc/debug_border_draw_quad.h" | 9 #include "cc/debug_border_draw_quad.h" |
| 10 #include "cc/debug_colors.h" | 10 #include "cc/debug_colors.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 #ifndef NDEBUG | 62 #ifndef NDEBUG |
| 63 DCHECK(!m_betweenWillDrawAndDidDraw); | 63 DCHECK(!m_betweenWillDrawAndDidDraw); |
| 64 #endif | 64 #endif |
| 65 } | 65 } |
| 66 | 66 |
| 67 void LayerImpl::addChild(scoped_ptr<LayerImpl> child) | 67 void LayerImpl::addChild(scoped_ptr<LayerImpl> child) |
| 68 { | 68 { |
| 69 child->setParent(this); | 69 child->setParent(this); |
| 70 DCHECK_EQ(layerTreeHostImpl(), child->layerTreeHostImpl()); | 70 DCHECK_EQ(layerTreeHostImpl(), child->layerTreeHostImpl()); |
| 71 m_children.append(child.Pass()); | 71 m_children.append(child.Pass()); |
| 72 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 72 } | 73 } |
| 73 | 74 |
| 74 void LayerImpl::removeFromParent() | 75 void LayerImpl::removeFromParent() |
| 75 { | 76 { |
| 76 if (!m_parent) | 77 if (!m_parent) |
| 77 return; | 78 return; |
| 78 | 79 |
| 79 LayerImpl* parent = m_parent; | 80 LayerImpl* parent = m_parent; |
| 80 m_parent = 0; | 81 m_parent = 0; |
| 81 | 82 |
| 82 for (size_t i = 0; i < parent->m_children.size(); ++i) { | 83 for (size_t i = 0; i < parent->m_children.size(); ++i) { |
| 83 if (parent->m_children[i] == this) { | 84 if (parent->m_children[i] == this) { |
| 84 parent->m_children.remove(i); | 85 parent->m_children.remove(i); |
| 86 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 85 return; | 87 return; |
| 86 } | 88 } |
| 87 } | 89 } |
| 88 } | 90 } |
| 89 | 91 |
| 90 void LayerImpl::removeAllChildren() | 92 void LayerImpl::removeAllChildren() |
| 91 { | 93 { |
| 92 while (m_children.size()) | 94 while (m_children.size()) |
| 93 m_children[0]->removeFromParent(); | 95 m_children[0]->removeFromParent(); |
| 94 } | 96 } |
| 95 | 97 |
| 96 void LayerImpl::clearChildList() | 98 void LayerImpl::clearChildList() |
| 97 { | 99 { |
|
danakj
2012/12/07 23:12:49
should this early-out if m_children.empty() now?
enne (OOO)
2012/12/07 23:25:05
Done.
| |
| 98 m_children.clear(); | 100 m_children.clear(); |
| 101 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 99 } | 102 } |
| 100 | 103 |
| 101 void LayerImpl::createRenderSurface() | 104 void LayerImpl::createRenderSurface() |
| 102 { | 105 { |
| 103 DCHECK(!m_drawProperties.render_surface); | 106 DCHECK(!m_drawProperties.render_surface); |
| 104 m_drawProperties.render_surface = make_scoped_ptr(new RenderSurfaceImpl(this )); | 107 m_drawProperties.render_surface = make_scoped_ptr(new RenderSurfaceImpl(this )); |
| 105 m_drawProperties.render_target = this; | 108 m_drawProperties.render_target = this; |
| 106 } | 109 } |
| 107 | 110 |
| 108 int LayerImpl::descendantsDrawContent() | 111 int LayerImpl::descendantsDrawContent() |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 362 LayerImpl* current = this->m_parent; | 365 LayerImpl* current = this->m_parent; |
| 363 while (current && !current->m_drawProperties.render_surface) { | 366 while (current && !current->m_drawProperties.render_surface) { |
| 364 if (current->m_layerSurfacePropertyChanged) | 367 if (current->m_layerSurfacePropertyChanged) |
| 365 return true; | 368 return true; |
| 366 current = current->m_parent; | 369 current = current->m_parent; |
| 367 } | 370 } |
| 368 | 371 |
| 369 return false; | 372 return false; |
| 370 } | 373 } |
| 371 | 374 |
| 375 void LayerImpl::noteLayerSurfacePropertyChanged() | |
| 376 { | |
| 377 m_layerSurfacePropertyChanged = true; | |
| 378 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 379 } | |
| 380 | |
| 381 void LayerImpl::noteLayerPropertyChanged() | |
| 382 { | |
| 383 m_layerPropertyChanged = true; | |
| 384 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 385 } | |
| 386 | |
| 372 void LayerImpl::noteLayerPropertyChangedForSubtree() | 387 void LayerImpl::noteLayerPropertyChangedForSubtree() |
| 373 { | 388 { |
| 374 m_layerPropertyChanged = true; | 389 noteLayerPropertyChanged(); |
| 375 noteLayerPropertyChangedForDescendants(); | 390 noteLayerPropertyChangedForDescendants(); |
| 376 } | 391 } |
| 377 | 392 |
| 378 void LayerImpl::noteLayerPropertyChangedForDescendants() | 393 void LayerImpl::noteLayerPropertyChangedForDescendants() |
| 379 { | 394 { |
| 395 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 380 for (size_t i = 0; i < m_children.size(); ++i) | 396 for (size_t i = 0; i < m_children.size(); ++i) |
| 381 m_children[i]->noteLayerPropertyChangedForSubtree(); | 397 m_children[i]->noteLayerPropertyChangedForSubtree(); |
| 382 } | 398 } |
| 383 | 399 |
| 384 const char* LayerImpl::layerTypeAsString() const | 400 const char* LayerImpl::layerTypeAsString() const |
| 385 { | 401 { |
| 386 return "Layer"; | 402 return "Layer"; |
| 387 } | 403 } |
| 388 | 404 |
| 389 void LayerImpl::resetAllChangeTrackingForSubtree() | 405 void LayerImpl::resetAllChangeTrackingForSubtree() |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 419 void LayerImpl::setBounds(const gfx::Size& bounds) | 435 void LayerImpl::setBounds(const gfx::Size& bounds) |
| 420 { | 436 { |
| 421 if (m_bounds == bounds) | 437 if (m_bounds == bounds) |
| 422 return; | 438 return; |
| 423 | 439 |
| 424 m_bounds = bounds; | 440 m_bounds = bounds; |
| 425 | 441 |
| 426 if (masksToBounds()) | 442 if (masksToBounds()) |
| 427 noteLayerPropertyChangedForSubtree(); | 443 noteLayerPropertyChangedForSubtree(); |
| 428 else | 444 else |
| 429 m_layerPropertyChanged = true; | 445 noteLayerPropertyChanged(); |
| 430 } | 446 } |
| 431 | 447 |
| 432 void LayerImpl::setMaskLayer(scoped_ptr<LayerImpl> maskLayer) | 448 void LayerImpl::setMaskLayer(scoped_ptr<LayerImpl> maskLayer) |
| 433 { | 449 { |
| 434 if (maskLayer) | 450 if (maskLayer) |
| 435 DCHECK_EQ(layerTreeHostImpl(), maskLayer->layerTreeHostImpl()); | 451 DCHECK_EQ(layerTreeHostImpl(), maskLayer->layerTreeHostImpl()); |
| 436 m_maskLayer = maskLayer.Pass(); | 452 m_maskLayer = maskLayer.Pass(); |
| 437 | 453 |
| 438 int newLayerId = m_maskLayer ? m_maskLayer->id() : -1; | 454 int newLayerId = m_maskLayer ? m_maskLayer->id() : -1; |
| 439 if (newLayerId == m_maskLayerId) | 455 if (newLayerId == m_maskLayerId) |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 456 m_replicaLayerId = newLayerId; | 472 m_replicaLayerId = newLayerId; |
| 457 noteLayerPropertyChangedForSubtree(); | 473 noteLayerPropertyChangedForSubtree(); |
| 458 } | 474 } |
| 459 | 475 |
| 460 void LayerImpl::setDrawsContent(bool drawsContent) | 476 void LayerImpl::setDrawsContent(bool drawsContent) |
| 461 { | 477 { |
| 462 if (m_drawsContent == drawsContent) | 478 if (m_drawsContent == drawsContent) |
| 463 return; | 479 return; |
| 464 | 480 |
| 465 m_drawsContent = drawsContent; | 481 m_drawsContent = drawsContent; |
| 466 m_layerPropertyChanged = true; | 482 noteLayerPropertyChanged(); |
| 467 } | 483 } |
| 468 | 484 |
| 469 void LayerImpl::setAnchorPoint(const gfx::PointF& anchorPoint) | 485 void LayerImpl::setAnchorPoint(const gfx::PointF& anchorPoint) |
| 470 { | 486 { |
| 471 if (m_anchorPoint == anchorPoint) | 487 if (m_anchorPoint == anchorPoint) |
| 472 return; | 488 return; |
| 473 | 489 |
| 474 m_anchorPoint = anchorPoint; | 490 m_anchorPoint = anchorPoint; |
| 475 noteLayerPropertyChangedForSubtree(); | 491 noteLayerPropertyChangedForSubtree(); |
| 476 } | 492 } |
| 477 | 493 |
| 478 void LayerImpl::setAnchorPointZ(float anchorPointZ) | 494 void LayerImpl::setAnchorPointZ(float anchorPointZ) |
| 479 { | 495 { |
| 480 if (m_anchorPointZ == anchorPointZ) | 496 if (m_anchorPointZ == anchorPointZ) |
| 481 return; | 497 return; |
| 482 | 498 |
| 483 m_anchorPointZ = anchorPointZ; | 499 m_anchorPointZ = anchorPointZ; |
| 484 noteLayerPropertyChangedForSubtree(); | 500 noteLayerPropertyChangedForSubtree(); |
| 485 } | 501 } |
| 486 | 502 |
| 487 void LayerImpl::setBackgroundColor(SkColor backgroundColor) | 503 void LayerImpl::setBackgroundColor(SkColor backgroundColor) |
| 488 { | 504 { |
| 489 if (m_backgroundColor == backgroundColor) | 505 if (m_backgroundColor == backgroundColor) |
| 490 return; | 506 return; |
| 491 | 507 |
| 492 m_backgroundColor = backgroundColor; | 508 m_backgroundColor = backgroundColor; |
| 493 m_layerPropertyChanged = true; | 509 noteLayerPropertyChanged(); |
| 494 } | 510 } |
| 495 | 511 |
| 496 void LayerImpl::setFilters(const WebKit::WebFilterOperations& filters) | 512 void LayerImpl::setFilters(const WebKit::WebFilterOperations& filters) |
| 497 { | 513 { |
| 498 if (m_filters == filters) | 514 if (m_filters == filters) |
| 499 return; | 515 return; |
| 500 | 516 |
| 501 DCHECK(!m_filter); | 517 DCHECK(!m_filter); |
| 502 m_filters = filters; | 518 m_filters = filters; |
| 503 noteLayerPropertyChangedForSubtree(); | 519 noteLayerPropertyChangedForSubtree(); |
| 504 } | 520 } |
| 505 | 521 |
| 506 void LayerImpl::setBackgroundFilters(const WebKit::WebFilterOperations& backgrou ndFilters) | 522 void LayerImpl::setBackgroundFilters(const WebKit::WebFilterOperations& backgrou ndFilters) |
| 507 { | 523 { |
| 508 if (m_backgroundFilters == backgroundFilters) | 524 if (m_backgroundFilters == backgroundFilters) |
| 509 return; | 525 return; |
| 510 | 526 |
| 511 m_backgroundFilters = backgroundFilters; | 527 m_backgroundFilters = backgroundFilters; |
| 512 m_layerPropertyChanged = true; | 528 noteLayerPropertyChanged(); |
| 513 } | 529 } |
| 514 | 530 |
| 515 void LayerImpl::setFilter(const skia::RefPtr<SkImageFilter>& filter) | 531 void LayerImpl::setFilter(const skia::RefPtr<SkImageFilter>& filter) |
| 516 { | 532 { |
| 517 if (m_filter.get() == filter.get()) | 533 if (m_filter.get() == filter.get()) |
| 518 return; | 534 return; |
| 519 | 535 |
| 520 DCHECK(m_filters.isEmpty()); | 536 DCHECK(m_filters.isEmpty()); |
| 521 m_filter = filter; | 537 m_filter = filter; |
| 522 noteLayerPropertyChangedForSubtree(); | 538 noteLayerPropertyChangedForSubtree(); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 537 return; | 553 return; |
| 538 | 554 |
| 539 m_contentsOpaque = opaque; | 555 m_contentsOpaque = opaque; |
| 540 noteLayerPropertyChangedForSubtree(); | 556 noteLayerPropertyChangedForSubtree(); |
| 541 } | 557 } |
| 542 | 558 |
| 543 void LayerImpl::setOpacity(float opacity) | 559 void LayerImpl::setOpacity(float opacity) |
| 544 { | 560 { |
| 545 if (!m_layerAnimationController->setOpacity(opacity)) | 561 if (!m_layerAnimationController->setOpacity(opacity)) |
| 546 return; | 562 return; |
| 547 m_layerSurfacePropertyChanged = true; | 563 |
| 564 noteLayerSurfacePropertyChanged(); | |
| 548 } | 565 } |
| 549 | 566 |
| 550 float LayerImpl::opacity() const | 567 float LayerImpl::opacity() const |
| 551 { | 568 { |
| 552 return m_layerAnimationController->opacity(); | 569 return m_layerAnimationController->opacity(); |
| 553 } | 570 } |
| 554 | 571 |
| 555 bool LayerImpl::opacityIsAnimating() const | 572 bool LayerImpl::opacityIsAnimating() const |
| 556 { | 573 { |
| 557 return m_layerAnimationController->isAnimatingProperty(ActiveAnimation::Opac ity); | 574 return m_layerAnimationController->isAnimatingProperty(ActiveAnimation::Opac ity); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 582 | 599 |
| 583 m_sublayerTransform = sublayerTransform; | 600 m_sublayerTransform = sublayerTransform; |
| 584 // sublayer transform does not affect the current layer; it affects only its children. | 601 // sublayer transform does not affect the current layer; it affects only its children. |
| 585 noteLayerPropertyChangedForDescendants(); | 602 noteLayerPropertyChangedForDescendants(); |
| 586 } | 603 } |
| 587 | 604 |
| 588 void LayerImpl::setTransform(const gfx::Transform& transform) | 605 void LayerImpl::setTransform(const gfx::Transform& transform) |
| 589 { | 606 { |
| 590 if (!m_layerAnimationController->setTransform(transform)) | 607 if (!m_layerAnimationController->setTransform(transform)) |
| 591 return; | 608 return; |
| 592 m_layerSurfacePropertyChanged = true; | 609 |
| 610 noteLayerSurfacePropertyChanged(); | |
| 593 } | 611 } |
| 594 | 612 |
| 595 const gfx::Transform& LayerImpl::transform() const | 613 const gfx::Transform& LayerImpl::transform() const |
| 596 { | 614 { |
| 597 return m_layerAnimationController->transform(); | 615 return m_layerAnimationController->transform(); |
| 598 } | 616 } |
| 599 | 617 |
| 600 bool LayerImpl::transformIsAnimating() const | 618 bool LayerImpl::transformIsAnimating() const |
| 601 { | 619 { |
| 602 return m_layerAnimationController->isAnimatingProperty(ActiveAnimation::Tran sform); | 620 return m_layerAnimationController->isAnimatingProperty(ActiveAnimation::Tran sform); |
| 603 } | 621 } |
| 604 | 622 |
| 605 void LayerImpl::setContentBounds(const gfx::Size& contentBounds) | 623 void LayerImpl::setContentBounds(const gfx::Size& contentBounds) |
| 606 { | 624 { |
| 607 if (m_contentBounds == contentBounds) | 625 if (m_contentBounds == contentBounds) |
| 608 return; | 626 return; |
| 609 | 627 |
| 610 m_contentBounds = contentBounds; | 628 m_contentBounds = contentBounds; |
| 611 m_layerPropertyChanged = true; | 629 noteLayerPropertyChanged(); |
| 612 } | 630 } |
| 613 | 631 |
| 614 void LayerImpl::setContentsScale(float contentsScaleX, float contentsScaleY) | 632 void LayerImpl::setContentsScale(float contentsScaleX, float contentsScaleY) |
| 615 { | 633 { |
| 616 if (m_contentsScaleX == contentsScaleX && m_contentsScaleY == contentsScaleY ) | 634 if (m_contentsScaleX == contentsScaleX && m_contentsScaleY == contentsScaleY ) |
| 617 return; | 635 return; |
| 618 | 636 |
| 619 m_contentsScaleX = contentsScaleX; | 637 m_contentsScaleX = contentsScaleX; |
| 620 m_contentsScaleY = contentsScaleY; | 638 m_contentsScaleY = contentsScaleY; |
| 621 m_layerPropertyChanged = true; | 639 noteLayerPropertyChanged(); |
| 622 } | 640 } |
| 623 | 641 |
| 624 void LayerImpl::setScrollOffset(gfx::Vector2d scrollOffset) | 642 void LayerImpl::setScrollOffset(gfx::Vector2d scrollOffset) |
| 625 { | 643 { |
| 626 if (m_scrollOffset == scrollOffset) | 644 if (m_scrollOffset == scrollOffset) |
| 627 return; | 645 return; |
| 628 | 646 |
| 629 m_scrollOffset = scrollOffset; | 647 m_scrollOffset = scrollOffset; |
| 630 noteLayerPropertyChangedForSubtree(); | 648 noteLayerPropertyChangedForSubtree(); |
| 631 } | 649 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 663 return visibleContentRect(); | 681 return visibleContentRect(); |
| 664 return Region(); | 682 return Region(); |
| 665 } | 683 } |
| 666 | 684 |
| 667 void LayerImpl::didLoseOutputSurface() | 685 void LayerImpl::didLoseOutputSurface() |
| 668 { | 686 { |
| 669 } | 687 } |
| 670 | 688 |
| 671 void LayerImpl::setMaxScrollOffset(gfx::Vector2d maxScrollOffset) | 689 void LayerImpl::setMaxScrollOffset(gfx::Vector2d maxScrollOffset) |
| 672 { | 690 { |
| 691 if (m_maxScrollOffset == maxScrollOffset) | |
| 692 return; | |
| 673 m_maxScrollOffset = maxScrollOffset; | 693 m_maxScrollOffset = maxScrollOffset; |
| 674 | 694 |
| 695 m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); | |
| 696 | |
| 675 if (!m_scrollbarAnimationController) | 697 if (!m_scrollbarAnimationController) |
| 676 return; | 698 return; |
| 677 m_scrollbarAnimationController->updateScrollOffset(this); | 699 m_scrollbarAnimationController->updateScrollOffset(this); |
| 678 } | 700 } |
| 679 | 701 |
| 680 ScrollbarLayerImpl* LayerImpl::horizontalScrollbarLayer() | 702 ScrollbarLayerImpl* LayerImpl::horizontalScrollbarLayer() |
| 681 { | 703 { |
| 682 return m_scrollbarAnimationController ? m_scrollbarAnimationController->hori zontalScrollbarLayer() : 0; | 704 return m_scrollbarAnimationController ? m_scrollbarAnimationController->hori zontalScrollbarLayer() : 0; |
| 683 } | 705 } |
| 684 | 706 |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 707 | 729 |
| 708 void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer) | 730 void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer) |
| 709 { | 731 { |
| 710 if (!m_scrollbarAnimationController) | 732 if (!m_scrollbarAnimationController) |
| 711 m_scrollbarAnimationController = ScrollbarAnimationController::create(th is); | 733 m_scrollbarAnimationController = ScrollbarAnimationController::create(th is); |
| 712 m_scrollbarAnimationController->setVerticalScrollbarLayer(scrollbarLayer); | 734 m_scrollbarAnimationController->setVerticalScrollbarLayer(scrollbarLayer); |
| 713 m_scrollbarAnimationController->updateScrollOffset(this); | 735 m_scrollbarAnimationController->updateScrollOffset(this); |
| 714 } | 736 } |
| 715 | 737 |
| 716 } // namespace cc | 738 } // namespace cc |
| OLD | NEW |