| Index: Source/core/rendering/RenderMultiColumnSet.cpp
|
| diff --git a/Source/core/rendering/RenderMultiColumnSet.cpp b/Source/core/rendering/RenderMultiColumnSet.cpp
|
| index e9687251ebba5c0bd55dea1a271d82d6e1c2e57c..340ac12de4819575d09f9dd8af05b09acb439c9b 100644
|
| --- a/Source/core/rendering/RenderMultiColumnSet.cpp
|
| +++ b/Source/core/rendering/RenderMultiColumnSet.cpp
|
| @@ -429,14 +429,25 @@ void RenderMultiColumnSet::repaintFlowThreadContent(const LayoutRect& repaintRec
|
|
|
| void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, const LayoutRect& layerBoundingBox, const LayoutRect& dirtyRect)
|
| {
|
| - // Put the layer bounds into flow thread-local coordinates by flipping it first.
|
| + // The two rectangles passed to this method are physical, except that we pretend that there's
|
| + // only one long column (that's how a flow thread works).
|
| + //
|
| + // Then there's the output from this method - the stuff we put into the list of fragments. The
|
| + // fragment.paginationOffset point is the actual physical translation required to get from a
|
| + // location in the flow thread to a location in a given column. The fragment.paginationClip
|
| + // rectangle, on the other hand, is in the same coordinate system as the two rectangles passed
|
| + // to this method (flow thread coordinates).
|
| + //
|
| + // All other rectangles in this method are sized physically, and the inline direction coordinate
|
| + // is physical too, but the block direction coordinate is "logical top". This is the same as
|
| + // e.g. RenderBox::frameRect(). These rectangles also pretend that there's only one long column,
|
| + // i.e. they are for the flow thread.
|
| +
|
| + // Put the layer bounds into flow thread-local coordinates by flipping it first. Since we're in
|
| + // a renderer, most rectangles are represented this way.
|
| LayoutRect layerBoundsInFlowThread(layerBoundingBox);
|
| flowThread()->flipForWritingMode(layerBoundsInFlowThread);
|
|
|
| - // Do the same for the dirty rect.
|
| - LayoutRect dirtyRectInFlowThread(dirtyRect);
|
| - flowThread()->flipForWritingMode(dirtyRectInFlowThread);
|
| -
|
| // Now we can compare with the flow thread portions owned by each column. First let's
|
| // see if the rect intersects our flow thread portion at all.
|
| LayoutRect clippedRect(layerBoundsInFlowThread);
|
| @@ -488,11 +499,11 @@ void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons
|
| // multicolumn block as well. This won't be an issue until we start creating multiple multicolumn sets.
|
|
|
| // Shift the dirty rect to be in flow thread coordinates with this translation applied.
|
| - LayoutRect translatedDirtyRect(dirtyRectInFlowThread);
|
| + LayoutRect translatedDirtyRect(dirtyRect);
|
| translatedDirtyRect.moveBy(-translationOffset);
|
|
|
| // See if we intersect the dirty rect.
|
| - clippedRect = layerBoundsInFlowThread;
|
| + clippedRect = layerBoundingBox;
|
| clippedRect.intersect(translatedDirtyRect);
|
| if (clippedRect.isEmpty())
|
| continue;
|
| @@ -503,7 +514,8 @@ void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons
|
| fragment.paginationOffset = translationOffset;
|
|
|
| LayoutRect flippedFlowThreadOverflowPortion(flowThreadOverflowPortion);
|
| - flipForWritingMode(flippedFlowThreadOverflowPortion);
|
| + // Flip it into more a physical (RenderLayer-style) rectangle.
|
| + flowThread()->flipForWritingMode(flippedFlowThreadOverflowPortion);
|
| fragment.paginationClip = flippedFlowThreadOverflowPortion;
|
| fragments.append(fragment);
|
| }
|
|
|