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 796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
807 if (positionedParent->renderer()->hasOverflowClip()) { | 807 if (positionedParent->renderer()->hasOverflowClip()) { |
808 LayoutSize offset = positionedParent->renderBox()->scrolledContentOf
fset(); | 808 LayoutSize offset = positionedParent->renderBox()->scrolledContentOf
fset(); |
809 localPoint -= offset; | 809 localPoint -= offset; |
810 } | 810 } |
811 | 811 |
812 if (positionedParent->renderer()->isRelPositioned() && positionedParent-
>renderer()->isRenderInline()) { | 812 if (positionedParent->renderer()->isRelPositioned() && positionedParent-
>renderer()->isRenderInline()) { |
813 LayoutSize offset = toRenderInline(positionedParent->renderer())->of
fsetForInFlowPositionedInline(*toRenderBox(renderer())); | 813 LayoutSize offset = toRenderInline(positionedParent->renderer())->of
fsetForInFlowPositionedInline(*toRenderBox(renderer())); |
814 localPoint += offset; | 814 localPoint += offset; |
815 } | 815 } |
816 } else if (parent()) { | 816 } else if (parent()) { |
817 // FIXME: This code is very wrong. The compositing system doesn't | 817 // FIXME: This code is very wrong, but luckily only needed in the old/cu
rrent multicol |
818 // understand columns and we're hacking around that fact by faking | 818 // implementation. The compositing system doesn't understand columns and
we're hacking |
819 // the position of the RenderLayers when we think we'll end up being | 819 // around that fact by faking the position of the RenderLayers when we t
hink we'll end up |
820 // composited. Hopefully we'll be able to unwind this hack when we | 820 // being composited. |
821 // implement multi-column using regions. | 821 if (hasStyleDeterminedDirectCompositingReasons() && !useRegionBasedColum
ns()) { |
822 if (hasStyleDeterminedDirectCompositingReasons()) { | |
823 // FIXME: Composited layers ignore pagination, so about the best we
can do is make sure they're offset into the appropriate column. | 822 // FIXME: Composited layers ignore pagination, so about the best we
can do is make sure they're offset into the appropriate column. |
824 // They won't split across columns properly. | 823 // They won't split across columns properly. |
825 if (!parent()->renderer()->hasColumns() && parent()->renderer()->isD
ocumentElement() && renderer()->view()->hasColumns()) | 824 if (!parent()->renderer()->hasColumns() && parent()->renderer()->isD
ocumentElement() && renderer()->view()->hasColumns()) |
826 localPoint += renderer()->view()->columnOffset(localPoint); | 825 localPoint += renderer()->view()->columnOffset(localPoint); |
827 else | 826 else |
828 localPoint += parent()->renderer()->columnOffset(localPoint); | 827 localPoint += parent()->renderer()->columnOffset(localPoint); |
829 } | 828 } |
830 | 829 |
831 if (parent()->renderer()->hasOverflowClip()) { | 830 if (parent()->renderer()->hasOverflowClip()) { |
832 IntSize scrollOffset = parent()->renderBox()->scrolledContentOffset(
); | 831 IntSize scrollOffset = parent()->renderBox()->scrolledContentOffset(
); |
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1482 ClipRect backgroundRectInFlowThread; | 1481 ClipRect backgroundRectInFlowThread; |
1483 ClipRect foregroundRectInFlowThread; | 1482 ClipRect foregroundRectInFlowThread; |
1484 ClipRect outlineRectInFlowThread; | 1483 ClipRect outlineRectInFlowThread; |
1485 clipper().calculateRects(paginationClipRectsContext, PaintInfo::infiniteRect
(), layerBoundsInFlowThread, backgroundRectInFlowThread, foregroundRectInFlowThr
ead, | 1484 clipper().calculateRects(paginationClipRectsContext, PaintInfo::infiniteRect
(), layerBoundsInFlowThread, backgroundRectInFlowThread, foregroundRectInFlowThr
ead, |
1486 outlineRectInFlowThread, &offsetWithinPaginatedLayer); | 1485 outlineRectInFlowThread, &offsetWithinPaginatedLayer); |
1487 | 1486 |
1488 // Take our bounding box within the flow thread and clip it. | 1487 // Take our bounding box within the flow thread and clip it. |
1489 LayoutRect layerBoundingBoxInFlowThread = layerBoundingBox ? *layerBoundingB
ox : physicalBoundingBox(enclosingPaginationLayer(), &offsetWithinPaginatedLayer
); | 1488 LayoutRect layerBoundingBoxInFlowThread = layerBoundingBox ? *layerBoundingB
ox : physicalBoundingBox(enclosingPaginationLayer(), &offsetWithinPaginatedLayer
); |
1490 layerBoundingBoxInFlowThread.intersect(backgroundRectInFlowThread.rect()); | 1489 layerBoundingBoxInFlowThread.intersect(backgroundRectInFlowThread.rect()); |
1491 | 1490 |
1492 // Shift the dirty rect into flow thread coordinates. | 1491 // Make the dirty rect relative to the fragmentation context (multicol conta
iner, etc.). |
| 1492 RenderFlowThread* enclosingFlowThread = toRenderFlowThread(enclosingPaginati
onLayer()->renderer()); |
1493 LayoutPoint offsetOfPaginationLayerFromRoot; | 1493 LayoutPoint offsetOfPaginationLayerFromRoot; |
1494 enclosingPaginationLayer()->convertToLayerCoords(rootLayer, offsetOfPaginati
onLayerFromRoot); | 1494 // FIXME: more work needed if there are nested pagination layers. |
| 1495 if (rootLayer != enclosingPaginationLayer() && rootLayer->enclosingPaginatio
nLayer() == enclosingPaginationLayer()) { |
| 1496 // The root layer is inside the fragmentation context. So we need to loo
k inside it and find |
| 1497 // the visual offset from the fragmentation context. |
| 1498 LayoutPoint flowThreadOffset; |
| 1499 rootLayer->convertToLayerCoords(enclosingPaginationLayer(), flowThreadOf
fset); |
| 1500 offsetOfPaginationLayerFromRoot = -enclosingFlowThread->flowThreadPointT
oVisualPoint(flowThreadOffset); |
| 1501 } else { |
| 1502 enclosingPaginationLayer()->convertToLayerCoords(rootLayer, offsetOfPagi
nationLayerFromRoot); |
| 1503 } |
1495 LayoutRect dirtyRectInFlowThread(dirtyRect); | 1504 LayoutRect dirtyRectInFlowThread(dirtyRect); |
1496 dirtyRectInFlowThread.moveBy(-offsetOfPaginationLayerFromRoot); | 1505 dirtyRectInFlowThread.moveBy(-offsetOfPaginationLayerFromRoot); |
1497 | 1506 |
1498 // Tell the flow thread to collect the fragments. We pass enough information
to create a minimal number of fragments based off the pages/columns | 1507 // Tell the flow thread to collect the fragments. We pass enough information
to create a minimal number of fragments based off the pages/columns |
1499 // that intersect the actual dirtyRect as well as the pages/columns that int
ersect our layer's bounding box. | 1508 // that intersect the actual dirtyRect as well as the pages/columns that int
ersect our layer's bounding box. |
1500 RenderFlowThread* enclosingFlowThread = toRenderFlowThread(enclosingPaginati
onLayer()->renderer()); | |
1501 enclosingFlowThread->collectLayerFragments(fragments, layerBoundingBoxInFlow
Thread, dirtyRectInFlowThread); | 1509 enclosingFlowThread->collectLayerFragments(fragments, layerBoundingBoxInFlow
Thread, dirtyRectInFlowThread); |
1502 | 1510 |
1503 if (fragments.isEmpty()) | 1511 if (fragments.isEmpty()) |
1504 return; | 1512 return; |
1505 | 1513 |
1506 // Get the parent clip rects of the pagination layer, since we need to inter
sect with that when painting column contents. | 1514 // Get the parent clip rects of the pagination layer, since we need to inter
sect with that when painting column contents. |
1507 ClipRect ancestorClipRect = dirtyRect; | 1515 ClipRect ancestorClipRect = dirtyRect; |
1508 if (enclosingPaginationLayer()->parent()) { | 1516 if (enclosingPaginationLayer()->parent()) { |
1509 ClipRectsContext clipRectsContext(rootLayer, clipRectsCacheSlot, inOverl
ayScrollbarSizeRelevancy); | 1517 ClipRectsContext clipRectsContext(rootLayer, clipRectsCacheSlot, inOverl
ayScrollbarSizeRelevancy); |
1510 if (respectOverflowClip == IgnoreOverflowClip) | 1518 if (respectOverflowClip == IgnoreOverflowClip) |
(...skipping 1340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2851 } | 2859 } |
2852 } | 2860 } |
2853 | 2861 |
2854 void showLayerTree(const blink::RenderObject* renderer) | 2862 void showLayerTree(const blink::RenderObject* renderer) |
2855 { | 2863 { |
2856 if (!renderer) | 2864 if (!renderer) |
2857 return; | 2865 return; |
2858 showLayerTree(renderer->enclosingLayer()); | 2866 showLayerTree(renderer->enclosingLayer()); |
2859 } | 2867 } |
2860 #endif | 2868 #endif |
OLD | NEW |