| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2012 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 LayoutUnit ruleTop = isHorizontalWritingMode() ? paintOffset.y() + b
orderTop() + paddingTop() : paintOffset.y() + ruleLogicalLeft - ruleThickness /
2 + ruleAdd; | 482 LayoutUnit ruleTop = isHorizontalWritingMode() ? paintOffset.y() + b
orderTop() + paddingTop() : paintOffset.y() + ruleLogicalLeft - ruleThickness /
2 + ruleAdd; |
| 483 LayoutUnit ruleBottom = isHorizontalWritingMode() ? ruleTop + conten
tHeight() : ruleTop + ruleThickness; | 483 LayoutUnit ruleBottom = isHorizontalWritingMode() ? ruleTop + conten
tHeight() : ruleTop + ruleThickness; |
| 484 IntRect pixelSnappedRuleRect = pixelSnappedIntRectFromEdges(ruleLeft
, ruleTop, ruleRight, ruleBottom); | 484 IntRect pixelSnappedRuleRect = pixelSnappedIntRectFromEdges(ruleLeft
, ruleTop, ruleRight, ruleBottom); |
| 485 drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixe
lSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(),
boxSide, ruleColor, ruleStyle, 0, 0, antialias); | 485 drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixe
lSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(),
boxSide, ruleColor, ruleStyle, 0, 0, antialias); |
| 486 } | 486 } |
| 487 | 487 |
| 488 ruleLogicalLeft = currLogicalLeftOffset; | 488 ruleLogicalLeft = currLogicalLeftOffset; |
| 489 } | 489 } |
| 490 } | 490 } |
| 491 | 491 |
| 492 void RenderMultiColumnSet::repaintFlowThreadContent(const LayoutRect& repaintRec
t) const | 492 void RenderMultiColumnSet::paintInvalidationForFlowThreadContent(const LayoutRec
t& paintInvalidationRect) const |
| 493 { | 493 { |
| 494 // Figure out the start and end columns and only check within that range so
that we don't walk the | 494 // Figure out the start and end columns and only check within that range so
that we don't walk the |
| 495 // entire column set. Put the repaint rect into flow thread coordinates by f
lipping it first. | 495 // entire column set. Put the paint invalidation rect into flow thread coord
inates by flipping it first. |
| 496 LayoutRect flowThreadRepaintRect(repaintRect); | 496 LayoutRect flowThreadPaintInvalidationRect(paintInvalidationRect); |
| 497 flowThread()->flipForWritingMode(flowThreadRepaintRect); | 497 flowThread()->flipForWritingMode(flowThreadPaintInvalidationRect); |
| 498 | 498 |
| 499 // Now we can compare this rect with the flow thread portions owned by each
column. First let's | 499 // Now we can compare this rect with the flow thread portions owned by each
column. First let's |
| 500 // just see if the repaint rect intersects our flow thread portion at all. | 500 // just see if the paint invalidation rect intersects our flow thread portio
n at all. |
| 501 LayoutRect clippedRect(flowThreadRepaintRect); | 501 LayoutRect clippedRect(flowThreadPaintInvalidationRect); |
| 502 clippedRect.intersect(RenderRegion::flowThreadPortionOverflowRect()); | 502 clippedRect.intersect(RenderRegion::flowThreadPortionOverflowRect()); |
| 503 if (clippedRect.isEmpty()) | 503 if (clippedRect.isEmpty()) |
| 504 return; | 504 return; |
| 505 | 505 |
| 506 // Now we know we intersect at least one column. Let's figure out the logica
l top and logical | 506 // Now we know we intersect at least one column. Let's figure out the logica
l top and logical |
| 507 // bottom of the area we're repainting. | 507 // bottom of the area in which we're issuing paint invalidations. |
| 508 LayoutUnit repaintLogicalTop = isHorizontalWritingMode() ? flowThreadRepaint
Rect.y() : flowThreadRepaintRect.x(); | 508 LayoutUnit paintInvalidationLogicalTop = isHorizontalWritingMode() ? flowThr
eadPaintInvalidationRect.y() : flowThreadPaintInvalidationRect.x(); |
| 509 LayoutUnit repaintLogicalBottom = (isHorizontalWritingMode() ? flowThreadRep
aintRect.maxY() : flowThreadRepaintRect.maxX()) - 1; | 509 LayoutUnit paintInvalidationLogicalBottom = (isHorizontalWritingMode() ? flo
wThreadPaintInvalidationRect.maxY() : flowThreadPaintInvalidationRect.maxX()) -
1; |
| 510 | 510 |
| 511 unsigned startColumn = columnIndexAtOffset(repaintLogicalTop); | 511 unsigned startColumn = columnIndexAtOffset(paintInvalidationLogicalTop); |
| 512 unsigned endColumn = columnIndexAtOffset(repaintLogicalBottom); | 512 unsigned endColumn = columnIndexAtOffset(paintInvalidationLogicalBottom); |
| 513 | 513 |
| 514 LayoutUnit colGap = columnGap(); | 514 LayoutUnit colGap = columnGap(); |
| 515 unsigned colCount = actualColumnCount(); | 515 unsigned colCount = actualColumnCount(); |
| 516 for (unsigned i = startColumn; i <= endColumn; i++) { | 516 for (unsigned i = startColumn; i <= endColumn; i++) { |
| 517 LayoutRect colRect = columnRectAt(i); | 517 LayoutRect colRect = columnRectAt(i); |
| 518 | 518 |
| 519 // Get the portion of the flow thread that corresponds to this column. | 519 // Get the portion of the flow thread that corresponds to this column. |
| 520 LayoutRect flowThreadPortion = flowThreadPortionRectAt(i); | 520 LayoutRect flowThreadPortion = flowThreadPortionRectAt(i); |
| 521 | 521 |
| 522 // Now get the overflow rect that corresponds to the column. | 522 // Now get the overflow rect that corresponds to the column. |
| 523 LayoutRect flowThreadOverflowPortion = flowThreadPortionOverflowRect(flo
wThreadPortion, i, colCount, colGap); | 523 LayoutRect flowThreadOverflowPortion = flowThreadPortionOverflowRect(flo
wThreadPortion, i, colCount, colGap); |
| 524 | 524 |
| 525 // Do a repaint for this specific column. | 525 // Do a paint invalidation for this specific column. |
| 526 repaintFlowThreadContentRectangle(repaintRect, flowThreadPortion, flowTh
readOverflowPortion, colRect.location()); | 526 paintInvalidaitonOfFlowThreadContentRectangle(paintInvalidationRect, flo
wThreadPortion, flowThreadOverflowPortion, colRect.location()); |
| 527 } | 527 } |
| 528 } | 528 } |
| 529 | 529 |
| 530 void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons
t LayoutRect& layerBoundingBox, const LayoutRect& dirtyRect) | 530 void RenderMultiColumnSet::collectLayerFragments(LayerFragments& fragments, cons
t LayoutRect& layerBoundingBox, const LayoutRect& dirtyRect) |
| 531 { | 531 { |
| 532 // The two rectangles passed to this method are physical, except that we pre
tend that there's | 532 // The two rectangles passed to this method are physical, except that we pre
tend that there's |
| 533 // only one long column (that's how a flow thread works). | 533 // only one long column (that's how a flow thread works). |
| 534 // | 534 // |
| 535 // Then there's the output from this method - the stuff we put into the list
of fragments. The | 535 // Then there's the output from this method - the stuff we put into the list
of fragments. The |
| 536 // fragment.paginationOffset point is the actual physical translation requir
ed to get from a | 536 // fragment.paginationOffset point is the actual physical translation requir
ed to get from a |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 | 684 |
| 685 void RenderMultiColumnSet::detachRegion() | 685 void RenderMultiColumnSet::detachRegion() |
| 686 { | 686 { |
| 687 if (m_flowThread) { | 687 if (m_flowThread) { |
| 688 m_flowThread->removeRegionFromThread(this); | 688 m_flowThread->removeRegionFromThread(this); |
| 689 m_flowThread = 0; | 689 m_flowThread = 0; |
| 690 } | 690 } |
| 691 } | 691 } |
| 692 | 692 |
| 693 } | 693 } |
| OLD | NEW |