| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. |
| 3 * | 3 * |
| 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
| 5 * | 5 * |
| 6 * Other contributors: | 6 * Other contributors: |
| 7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
| 8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
| 9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
| 10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 for (RenderLayer* curr = parent(); curr; curr = curr->parent()) { | 553 for (RenderLayer* curr = parent(); curr; curr = curr->parent()) { |
| 554 if (curr->renderer()->hasColumns()) { | 554 if (curr->renderer()->hasColumns()) { |
| 555 m_isPaginated = checkContainingBlockChainForPagination(renderer(), c
urr->renderBox()); | 555 m_isPaginated = checkContainingBlockChainForPagination(renderer(), c
urr->renderBox()); |
| 556 return; | 556 return; |
| 557 } | 557 } |
| 558 if (curr->stackingNode() == ancestorStackingContextNode) | 558 if (curr->stackingNode() == ancestorStackingContextNode) |
| 559 return; | 559 return; |
| 560 } | 560 } |
| 561 } | 561 } |
| 562 | 562 |
| 563 LayoutPoint RenderLayer::positionFromPaintInvalidationContainer(const RenderObje
ct* renderObject, const RenderLayerModelObject* paintInvalidationContainer) | 563 LayoutPoint RenderLayer::positionFromPaintInvalidationContainer(const RenderObje
ct* renderObject, const RenderLayerModelObject* paintInvalidationContainer, cons
t InvalidationTreeWalkState* invalidationTreeWalkState) |
| 564 { | 564 { |
| 565 if (!paintInvalidationContainer || !paintInvalidationContainer->layer()->gro
upedMapping()) | 565 if (!paintInvalidationContainer || !paintInvalidationContainer->layer()->gro
upedMapping()) |
| 566 return renderObject->positionFromPaintInvalidationContainer(paintInvalid
ationContainer); | 566 return renderObject->positionFromPaintInvalidationContainer(paintInvalid
ationContainer, invalidationTreeWalkState); |
| 567 | 567 |
| 568 RenderLayerModelObject* transformedAncestor = paintInvalidationContainer->la
yer()->enclosingTransformedAncestor()->renderer(); | 568 RenderLayerModelObject* transformedAncestor = paintInvalidationContainer->la
yer()->enclosingTransformedAncestor()->renderer(); |
| 569 if (!transformedAncestor) | 569 if (!transformedAncestor) |
| 570 return renderObject->positionFromPaintInvalidationContainer(paintInvalid
ationContainer); | 570 return renderObject->positionFromPaintInvalidationContainer(paintInvalid
ationContainer, invalidationTreeWalkState); |
| 571 | 571 |
| 572 // If the transformedAncestor is actually the RenderView, we might get | 572 // If the transformedAncestor is actually the RenderView, we might get |
| 573 // confused and think that we can use LayoutState. Ideally, we'd made | 573 // confused and think that we can use LayoutState. Ideally, we'd made |
| 574 // LayoutState work for all composited layers as well, but until then | 574 // LayoutState work for all composited layers as well, but until then |
| 575 // we need to disable LayoutState for squashed layers. | 575 // we need to disable LayoutState for squashed layers. |
| 576 ForceHorriblySlowRectMapping slowRectMapping(*transformedAncestor); | 576 ForceHorriblySlowRectMapping slowRectMapping(invalidationTreeWalkState); |
| 577 | 577 |
| 578 LayoutPoint point = renderObject->positionFromPaintInvalidationContainer(tra
nsformedAncestor); | 578 LayoutPoint point = renderObject->positionFromPaintInvalidationContainer(tra
nsformedAncestor, invalidationTreeWalkState); |
| 579 point.moveBy(-paintInvalidationContainer->layer()->groupedMapping()->squashi
ngOffsetFromTransformedAncestor()); | 579 point.moveBy(-paintInvalidationContainer->layer()->groupedMapping()->squashi
ngOffsetFromTransformedAncestor()); |
| 580 return point; | 580 return point; |
| 581 } | 581 } |
| 582 | 582 |
| 583 void RenderLayer::mapRectToPaintBackingCoordinates(const RenderLayerModelObject*
paintInvalidationContainer, LayoutRect& rect) | 583 void RenderLayer::mapRectToPaintBackingCoordinates(const RenderLayerModelObject*
paintInvalidationContainer, LayoutRect& rect) |
| 584 { | 584 { |
| 585 | |
| 586 RenderLayer* paintInvalidationLayer = paintInvalidationContainer->layer(); | 585 RenderLayer* paintInvalidationLayer = paintInvalidationContainer->layer(); |
| 587 if (!paintInvalidationLayer->groupedMapping()) { | 586 if (!paintInvalidationLayer->groupedMapping()) { |
| 588 rect.move(paintInvalidationLayer->compositedLayerMapping()->contentOffse
tInCompositingLayer()); | 587 rect.move(paintInvalidationLayer->compositedLayerMapping()->contentOffse
tInCompositingLayer()); |
| 589 return; | 588 return; |
| 590 } | 589 } |
| 591 | 590 |
| 592 RenderLayerModelObject* transformedAncestor = paintInvalidationLayer->enclos
ingTransformedAncestor()->renderer(); | 591 RenderLayerModelObject* transformedAncestor = paintInvalidationLayer->enclos
ingTransformedAncestor()->renderer(); |
| 593 if (!transformedAncestor) | 592 if (!transformedAncestor) |
| 594 return; | 593 return; |
| 595 | 594 |
| 596 // If the transformedAncestor is actually the RenderView, we might get | |
| 597 // confused and think that we can use LayoutState. Ideally, we'd made | |
| 598 // LayoutState work for all composited layers as well, but until then | |
| 599 // we need to disable LayoutState for squashed layers. | |
| 600 ForceHorriblySlowRectMapping slowRectMapping(*transformedAncestor); | |
| 601 | |
| 602 // |repaintContainer| may have a local 2D transform on it, so take that into
account when mapping into the space of the | 595 // |repaintContainer| may have a local 2D transform on it, so take that into
account when mapping into the space of the |
| 603 // transformed ancestor. | 596 // transformed ancestor. |
| 604 rect = LayoutRect(paintInvalidationContainer->localToContainerQuad(FloatRect
(rect), transformedAncestor).boundingBox()); | 597 rect = LayoutRect(paintInvalidationContainer->localToContainerQuad(FloatRect
(rect), transformedAncestor).boundingBox()); |
| 605 | 598 |
| 606 rect.moveBy(-paintInvalidationLayer->groupedMapping()->squashingOffsetFromTr
ansformedAncestor()); | 599 rect.moveBy(-paintInvalidationLayer->groupedMapping()->squashingOffsetFromTr
ansformedAncestor()); |
| 607 } | 600 } |
| 608 | 601 |
| 609 void RenderLayer::mapRectToPaintInvalidationBacking(const RenderObject* renderOb
ject, const RenderLayerModelObject* paintInvalidationContainer, LayoutRect& rect
) | 602 void RenderLayer::mapRectToPaintInvalidationBacking(const RenderObject* renderOb
ject, const RenderLayerModelObject* paintInvalidationContainer, LayoutRect& rect
, const InvalidationTreeWalkState* invalidationTreeWalkState) |
| 610 { | 603 { |
| 611 if (!paintInvalidationContainer->layer()->groupedMapping()) { | 604 if (!paintInvalidationContainer->layer()->groupedMapping()) { |
| 612 renderObject->mapRectToPaintInvalidationBacking(paintInvalidationContain
er, rect); | 605 renderObject->mapRectToPaintInvalidationBacking(paintInvalidationContain
er, rect, invalidationTreeWalkState); |
| 613 return; | 606 return; |
| 614 } | 607 } |
| 615 | 608 |
| 616 // This code adjusts the repaint rectangle to be in the space of the transfo
rmed ancestor of the grouped (i.e. squashed) | 609 // This code adjusts the repaint rectangle to be in the space of the transfo
rmed ancestor of the grouped (i.e. squashed) |
| 617 // layer. This is because all layers that squash together need to repaint w.
r.t. a single container that is | 610 // layer. This is because all layers that squash together need to repaint w.
r.t. a single container that is |
| 618 // an ancestor of all of them, in order to properly take into account any lo
cal transforms etc. | 611 // an ancestor of all of them, in order to properly take into account any lo
cal transforms etc. |
| 619 // FIXME: remove this special-case code that works around the repainting cod
e structure. | 612 // FIXME: remove this special-case code that works around the repainting cod
e structure. |
| 620 renderObject->mapRectToPaintInvalidationBacking(paintInvalidationContainer,
rect); | 613 renderObject->mapRectToPaintInvalidationBacking(paintInvalidationContainer,
rect, invalidationTreeWalkState); |
| 621 | 614 |
| 622 RenderLayer::mapRectToPaintBackingCoordinates(paintInvalidationContainer, re
ct); | 615 RenderLayer::mapRectToPaintBackingCoordinates(paintInvalidationContainer, re
ct); |
| 623 } | 616 } |
| 624 | 617 |
| 625 LayoutRect RenderLayer::computePaintInvalidationRect(const RenderObject* renderO
bject, const RenderLayer* paintInvalidationContainer) | 618 LayoutRect RenderLayer::computePaintInvalidationRect(const RenderObject* renderO
bject, const RenderLayer* paintInvalidationContainer, const InvalidationTreeWalk
State* invalidationTreeWalkState) |
| 626 { | 619 { |
| 627 if (!paintInvalidationContainer->groupedMapping()) | 620 if (!paintInvalidationContainer->groupedMapping()) |
| 628 return renderObject->computePaintInvalidationRect(paintInvalidationConta
iner->renderer()); | 621 return renderObject->computePaintInvalidationRect(paintInvalidationConta
iner->renderer()); |
| 629 LayoutRect rect = renderObject->clippedOverflowRectForPaintInvalidation(pain
tInvalidationContainer->renderer()); | 622 LayoutRect rect = renderObject->clippedOverflowRectForPaintInvalidation(pain
tInvalidationContainer->renderer()); |
| 630 mapRectToPaintInvalidationBacking(paintInvalidationContainer->renderer(), pa
intInvalidationContainer->renderer(), rect); | 623 mapRectToPaintInvalidationBacking(paintInvalidationContainer->renderer(), pa
intInvalidationContainer->renderer(), rect, invalidationTreeWalkState); |
| 631 return rect; | 624 return rect; |
| 632 } | 625 } |
| 633 | 626 |
| 634 void RenderLayer::setHasVisibleContent() | 627 void RenderLayer::setHasVisibleContent() |
| 635 { | 628 { |
| 636 if (m_hasVisibleContent && !m_visibleContentStatusDirty) { | 629 if (m_hasVisibleContent && !m_visibleContentStatusDirty) { |
| 637 ASSERT(!parent() || parent()->hasVisibleDescendant()); | 630 ASSERT(!parent() || parent()->hasVisibleDescendant()); |
| 638 return; | 631 return; |
| 639 } | 632 } |
| 640 | 633 |
| (...skipping 3107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3748 } | 3741 } |
| 3749 } | 3742 } |
| 3750 | 3743 |
| 3751 void showLayerTree(const WebCore::RenderObject* renderer) | 3744 void showLayerTree(const WebCore::RenderObject* renderer) |
| 3752 { | 3745 { |
| 3753 if (!renderer) | 3746 if (!renderer) |
| 3754 return; | 3747 return; |
| 3755 showLayerTree(renderer->enclosingLayer()); | 3748 showLayerTree(renderer->enclosingLayer()); |
| 3756 } | 3749 } |
| 3757 #endif | 3750 #endif |
| OLD | NEW |