Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Side by Side Diff: Source/core/rendering/RenderBlockLineLayout.cpp

Issue 478733002: Rename repaint to paintInvalidation for remaining methods. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.cpp ('k') | Source/core/rendering/RenderBox.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ight reserved. 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r ight reserved.
4 * Copyright (C) 2010 Google Inc. All rights reserved. 4 * Copyright (C) 2010 Google Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 // Compute our overflow now. 710 // Compute our overflow now.
711 lineBox->computeOverflow(lineBox->lineTop(), lineBox->lineBottom(), textBoxD ataMap); 711 lineBox->computeOverflow(lineBox->lineTop(), lineBox->lineBottom(), textBoxD ataMap);
712 712
713 return lineBox; 713 return lineBox;
714 } 714 }
715 715
716 static void deleteLineRange(LineLayoutState& layoutState, RootInlineBox* startLi ne, RootInlineBox* stopLine = 0) 716 static void deleteLineRange(LineLayoutState& layoutState, RootInlineBox* startLi ne, RootInlineBox* stopLine = 0)
717 { 717 {
718 RootInlineBox* boxToDelete = startLine; 718 RootInlineBox* boxToDelete = startLine;
719 while (boxToDelete && boxToDelete != stopLine) { 719 while (boxToDelete && boxToDelete != stopLine) {
720 layoutState.updateRepaintRangeFromBox(boxToDelete); 720 layoutState.updatePaintInvalidationRangeFromBox(boxToDelete);
721 // Note: deleteLineRange(firstRootBox()) is not identical to deleteLineB oxTree(). 721 // Note: deleteLineRange(firstRootBox()) is not identical to deleteLineB oxTree().
722 // deleteLineBoxTree uses nextLineBox() instead of nextRootBox() when tr aversing. 722 // deleteLineBoxTree uses nextLineBox() instead of nextRootBox() when tr aversing.
723 RootInlineBox* next = boxToDelete->nextRootBox(); 723 RootInlineBox* next = boxToDelete->nextRootBox();
724 boxToDelete->deleteLine(); 724 boxToDelete->deleteLine();
725 boxToDelete = next; 725 boxToDelete = next;
726 } 726 }
727 } 727 }
728 728
729 void RenderBlockFlow::layoutRunsAndFloats(LineLayoutState& layoutState) 729 void RenderBlockFlow::layoutRunsAndFloats(LineLayoutState& layoutState)
730 { 730 {
731 // We want to skip ahead to the first dirty line 731 // We want to skip ahead to the first dirty line
732 InlineBidiResolver resolver; 732 InlineBidiResolver resolver;
733 RootInlineBox* startLine = determineStartPosition(layoutState, resolver); 733 RootInlineBox* startLine = determineStartPosition(layoutState, resolver);
734 734
735 if (containsFloats()) 735 if (containsFloats())
736 layoutState.setLastFloat(m_floatingObjects->set().last().get()); 736 layoutState.setLastFloat(m_floatingObjects->set().last().get());
737 737
738 // We also find the first clean line and extract these lines. We will add t hem back 738 // We also find the first clean line and extract these lines. We will add t hem back
739 // if we determine that we're able to synchronize after handling all our dir ty lines. 739 // if we determine that we're able to synchronize after handling all our dir ty lines.
740 InlineIterator cleanLineStart; 740 InlineIterator cleanLineStart;
741 BidiStatus cleanLineBidiStatus; 741 BidiStatus cleanLineBidiStatus;
742 if (!layoutState.isFullLayout() && startLine) 742 if (!layoutState.isFullLayout() && startLine)
743 determineEndPosition(layoutState, startLine, cleanLineStart, cleanLineBi diStatus); 743 determineEndPosition(layoutState, startLine, cleanLineStart, cleanLineBi diStatus);
744 744
745 if (startLine) { 745 if (startLine) {
746 if (!layoutState.usesRepaintBounds()) 746 if (!layoutState.usesPaintInvalidationBounds())
747 layoutState.setRepaintRange(logicalHeight()); 747 layoutState.setPaintInvalidationRange(logicalHeight());
748 deleteLineRange(layoutState, startLine); 748 deleteLineRange(layoutState, startLine);
749 } 749 }
750 750
751 if (!layoutState.isFullLayout() && lastRootBox() && lastRootBox()->endsWithB reak()) { 751 if (!layoutState.isFullLayout() && lastRootBox() && lastRootBox()->endsWithB reak()) {
752 // If the last line before the start line ends with a line break that cl ear floats, 752 // If the last line before the start line ends with a line break that cl ear floats,
753 // adjust the height accordingly. 753 // adjust the height accordingly.
754 // A line break can be either the first or the last object on a line, de pending on its direction. 754 // A line break can be either the first or the last object on a line, de pending on its direction.
755 if (InlineBox* lastLeafChild = lastRootBox()->lastLeafChild()) { 755 if (InlineBox* lastLeafChild = lastRootBox()->lastLeafChild()) {
756 RenderObject* lastObject = &lastLeafChild->renderer(); 756 RenderObject* lastObject = &lastLeafChild->renderer();
757 if (!lastObject->isBR()) 757 if (!lastObject->isBR())
758 lastObject = &lastRootBox()->firstLeafChild()->renderer(); 758 lastObject = &lastRootBox()->firstLeafChild()->renderer();
759 if (lastObject->isBR()) { 759 if (lastObject->isBR()) {
760 EClear clear = lastObject->style()->clear(); 760 EClear clear = lastObject->style()->clear();
761 if (clear != CNONE) 761 if (clear != CNONE)
762 clearFloats(clear); 762 clearFloats(clear);
763 } 763 }
764 } 764 }
765 } 765 }
766 766
767 layoutRunsAndFloatsInRange(layoutState, resolver, cleanLineStart, cleanLineB idiStatus); 767 layoutRunsAndFloatsInRange(layoutState, resolver, cleanLineStart, cleanLineB idiStatus);
768 linkToEndLineIfNeeded(layoutState); 768 linkToEndLineIfNeeded(layoutState);
769 repaintDirtyFloats(layoutState.floats()); 769 markDirtyFloatsForPaintInvalidation(layoutState.floats());
770 } 770 }
771 771
772 // Before restarting the layout loop with a new logicalHeight, remove all floats that were added and reset the resolver. 772 // Before restarting the layout loop with a new logicalHeight, remove all floats that were added and reset the resolver.
773 inline const InlineIterator& RenderBlockFlow::restartLayoutRunsAndFloatsInRange( LayoutUnit oldLogicalHeight, LayoutUnit newLogicalHeight, FloatingObject* lastF loatFromPreviousLine, InlineBidiResolver& resolver, const InlineIterator& oldEn d) 773 inline const InlineIterator& RenderBlockFlow::restartLayoutRunsAndFloatsInRange( LayoutUnit oldLogicalHeight, LayoutUnit newLogicalHeight, FloatingObject* lastF loatFromPreviousLine, InlineBidiResolver& resolver, const InlineIterator& oldEn d)
774 { 774 {
775 removeFloatingObjectsBelow(lastFloatFromPreviousLine, oldLogicalHeight); 775 removeFloatingObjectsBelow(lastFloatFromPreviousLine, oldLogicalHeight);
776 setLogicalHeight(newLogicalHeight); 776 setLogicalHeight(newLogicalHeight);
777 resolver.setPositionIgnoringNestedIsolates(oldEnd); 777 resolver.setPositionIgnoringNestedIsolates(oldEnd);
778 return oldEnd; 778 return oldEnd;
779 } 779 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 // inline flow boxes. 852 // inline flow boxes.
853 853
854 LayoutUnit oldLogicalHeight = logicalHeight(); 854 LayoutUnit oldLogicalHeight = logicalHeight();
855 RootInlineBox* lineBox = createLineBoxesFromBidiRuns(resolver.status ().context->level(), bidiRuns, endOfLine, layoutState.lineInfo(), verticalPositi onCache, trailingSpaceRun, wordMeasurements); 855 RootInlineBox* lineBox = createLineBoxesFromBidiRuns(resolver.status ().context->level(), bidiRuns, endOfLine, layoutState.lineInfo(), verticalPositi onCache, trailingSpaceRun, wordMeasurements);
856 856
857 bidiRuns.deleteRuns(); 857 bidiRuns.deleteRuns();
858 resolver.markCurrentRunEmpty(); // FIXME: This can probably be repla ced by an ASSERT (or just removed). 858 resolver.markCurrentRunEmpty(); // FIXME: This can probably be repla ced by an ASSERT (or just removed).
859 859
860 if (lineBox) { 860 if (lineBox) {
861 lineBox->setLineBreakInfo(endOfLine.object(), endOfLine.offset() , resolver.status()); 861 lineBox->setLineBreakInfo(endOfLine.object(), endOfLine.offset() , resolver.status());
862 if (layoutState.usesRepaintBounds()) 862 if (layoutState.usesPaintInvalidationBounds())
863 layoutState.updateRepaintRangeFromBox(lineBox); 863 layoutState.updatePaintInvalidationRangeFromBox(lineBox);
864 864
865 if (paginated) { 865 if (paginated) {
866 LayoutUnit adjustment = 0; 866 LayoutUnit adjustment = 0;
867 adjustLinePositionForPagination(lineBox, adjustment, layoutS tate.flowThread()); 867 adjustLinePositionForPagination(lineBox, adjustment, layoutS tate.flowThread());
868 if (adjustment) { 868 if (adjustment) {
869 LayoutUnit oldLineWidth = availableLogicalWidthForLine(o ldLogicalHeight, layoutState.lineInfo().isFirstLine()); 869 LayoutUnit oldLineWidth = availableLogicalWidthForLine(o ldLogicalHeight, layoutState.lineInfo().isFirstLine());
870 lineBox->adjustBlockDirectionPosition(adjustment.toFloat ()); 870 lineBox->adjustBlockDirectionPosition(adjustment.toFloat ());
871 if (layoutState.usesRepaintBounds()) 871 if (layoutState.usesPaintInvalidationBounds())
872 layoutState.updateRepaintRangeFromBox(lineBox); 872 layoutState.updatePaintInvalidationRangeFromBox(line Box);
873 873
874 if (availableLogicalWidthForLine(oldLogicalHeight + adju stment, layoutState.lineInfo().isFirstLine()) != oldLineWidth) { 874 if (availableLogicalWidthForLine(oldLogicalHeight + adju stment, layoutState.lineInfo().isFirstLine()) != oldLineWidth) {
875 // We have to delete this line, remove all floats th at got added, and let line layout re-run. 875 // We have to delete this line, remove all floats th at got added, and let line layout re-run.
876 lineBox->deleteLine(); 876 lineBox->deleteLine();
877 endOfLine = restartLayoutRunsAndFloatsInRange(oldLog icalHeight, oldLogicalHeight + adjustment, lastFloatFromPreviousLine, resolver, previousEndofLine); 877 endOfLine = restartLayoutRunsAndFloatsInRange(oldLog icalHeight, oldLogicalHeight + adjustment, lastFloatFromPreviousLine, resolver, previousEndofLine);
878 continue; 878 continue;
879 } 879 }
880 880
881 setLogicalHeight(lineBox->lineBottomWithLeading()); 881 setLogicalHeight(lineBox->lineBottomWithLeading());
882 } 882 }
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
988 bool paginated = view()->layoutState() && view()->layoutState()->isP aginated(); 988 bool paginated = view()->layoutState() && view()->layoutState()->isP aginated();
989 // Attach all the remaining lines, and then adjust their y-positions as needed. 989 // Attach all the remaining lines, and then adjust their y-positions as needed.
990 LayoutUnit delta = logicalHeight() - layoutState.endLineLogicalTop() ; 990 LayoutUnit delta = logicalHeight() - layoutState.endLineLogicalTop() ;
991 for (RootInlineBox* line = layoutState.endLine(); line; line = line- >nextRootBox()) { 991 for (RootInlineBox* line = layoutState.endLine(); line; line = line- >nextRootBox()) {
992 line->attachLine(); 992 line->attachLine();
993 if (paginated) { 993 if (paginated) {
994 delta -= line->paginationStrut(); 994 delta -= line->paginationStrut();
995 adjustLinePositionForPagination(line, delta, layoutState.flo wThread()); 995 adjustLinePositionForPagination(line, delta, layoutState.flo wThread());
996 } 996 }
997 if (delta) { 997 if (delta) {
998 layoutState.updateRepaintRangeFromBox(line, delta); 998 layoutState.updatePaintInvalidationRangeFromBox(line, delta) ;
999 line->adjustBlockDirectionPosition(delta.toFloat()); 999 line->adjustBlockDirectionPosition(delta.toFloat());
1000 } 1000 }
1001 if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) { 1001 if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) {
1002 Vector<RenderBox*>::iterator end = cleanLineFloats->end(); 1002 Vector<RenderBox*>::iterator end = cleanLineFloats->end();
1003 for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin (); f != end; ++f) { 1003 for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin (); f != end; ++f) {
1004 FloatingObject* floatingObject = insertFloatingObject(*f ); 1004 FloatingObject* floatingObject = insertFloatingObject(*f );
1005 ASSERT(!floatingObject->originatingLine()); 1005 ASSERT(!floatingObject->originatingLine());
1006 floatingObject->setOriginatingLine(line); 1006 floatingObject->setOriginatingLine(line);
1007 setLogicalHeight(logicalTopForChild(*f) - marginBeforeFo rChild(*f) + delta); 1007 setLogicalHeight(logicalTopForChild(*f) - marginBeforeFo rChild(*f) + delta);
1008 positionNewFloats(); 1008 positionNewFloats();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 ASSERT(lastFloatIterator != end); 1045 ASSERT(lastFloatIterator != end);
1046 ++lastFloatIterator; 1046 ++lastFloatIterator;
1047 it = lastFloatIterator; 1047 it = lastFloatIterator;
1048 } 1048 }
1049 for (; it != end; ++it) 1049 for (; it != end; ++it)
1050 appendFloatingObjectToLastLine(it->get()); 1050 appendFloatingObjectToLastLine(it->get());
1051 layoutState.setLastFloat(!floatingObjectSet.isEmpty() ? floatingObjectSe t.last().get() : 0); 1051 layoutState.setLastFloat(!floatingObjectSet.isEmpty() ? floatingObjectSe t.last().get() : 0);
1052 } 1052 }
1053 } 1053 }
1054 1054
1055 void RenderBlockFlow::repaintDirtyFloats(Vector<FloatWithRect>& floats) 1055 void RenderBlockFlow::markDirtyFloatsForPaintInvalidation(Vector<FloatWithRect>& floats)
1056 { 1056 {
1057 size_t floatCount = floats.size(); 1057 size_t floatCount = floats.size();
1058 // Floats that did not have layout did not paint invalidations when we laid them out. They would have 1058 // Floats that did not have layout did not paint invalidations when we laid them out. They would have
1059 // painted by now if they had moved, but if they stayed at (0, 0), they stil l need to be 1059 // painted by now if they had moved, but if they stayed at (0, 0), they stil l need to be
1060 // painted. 1060 // painted.
1061 for (size_t i = 0; i < floatCount; ++i) { 1061 for (size_t i = 0; i < floatCount; ++i) {
1062 if (!floats[i].everHadLayout) { 1062 if (!floats[i].everHadLayout) {
1063 RenderBox* f = floats[i].object; 1063 RenderBox* f = floats[i].object;
1064 if (!f->x() && !f->y() && f->checkForPaintInvalidation()) { 1064 if (!f->x() && !f->y() && f->checkForPaintInvalidation()) {
1065 f->setShouldDoFullPaintInvalidation(true); 1065 f->setShouldDoFullPaintInvalidation(true);
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 oldAutoWrap = autoWrap; 1489 oldAutoWrap = autoWrap;
1490 } 1490 }
1491 1491
1492 if (styleToUse->collapseWhiteSpace()) 1492 if (styleToUse->collapseWhiteSpace())
1493 stripTrailingSpace(inlineMax, inlineMin, trailingSpaceChild); 1493 stripTrailingSpace(inlineMax, inlineMin, trailingSpaceChild);
1494 1494
1495 updatePreferredWidth(minLogicalWidth, inlineMin); 1495 updatePreferredWidth(minLogicalWidth, inlineMin);
1496 updatePreferredWidth(maxLogicalWidth, inlineMax); 1496 updatePreferredWidth(maxLogicalWidth, inlineMax);
1497 } 1497 }
1498 1498
1499 void RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& re paintLogicalTop, LayoutUnit& repaintLogicalBottom, LayoutUnit afterEdge) 1499 void RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& pa intInvalidationLogicalTop, LayoutUnit& paintInvalidationLogicalBottom, LayoutUni t afterEdge)
1500 { 1500 {
1501 RenderFlowThread* flowThread = flowThreadContainingBlock(); 1501 RenderFlowThread* flowThread = flowThreadContainingBlock();
1502 bool clearLinesForPagination = firstLineBox() && flowThread && !flowThread-> hasRegions(); 1502 bool clearLinesForPagination = firstLineBox() && flowThread && !flowThread-> hasRegions();
1503 1503
1504 // Figure out if we should clear out our line boxes. 1504 // Figure out if we should clear out our line boxes.
1505 // FIXME: Handle resize eventually! 1505 // FIXME: Handle resize eventually!
1506 bool isFullLayout = !firstLineBox() || selfNeedsLayout() || relayoutChildren || clearLinesForPagination; 1506 bool isFullLayout = !firstLineBox() || selfNeedsLayout() || relayoutChildren || clearLinesForPagination;
1507 LineLayoutState layoutState(isFullLayout, repaintLogicalTop, repaintLogicalB ottom, flowThread); 1507 LineLayoutState layoutState(isFullLayout, paintInvalidationLogicalTop, paint InvalidationLogicalBottom, flowThread);
1508 1508
1509 if (isFullLayout) { 1509 if (isFullLayout) {
1510 // Ensure the old line boxes will be erased. 1510 // Ensure the old line boxes will be erased.
1511 if (firstLineBox()) 1511 if (firstLineBox())
1512 setShouldDoFullPaintInvalidation(true); 1512 setShouldDoFullPaintInvalidation(true);
1513 lineBoxes()->deleteLineBoxes(); 1513 lineBoxes()->deleteLineBoxes();
1514 } 1514 }
1515 1515
1516 // Text truncation kicks in in two cases: 1516 // Text truncation kicks in in two cases:
1517 // 1) If your overflow isn't visible and your text-overflow-mode isn't c lip. 1517 // 1) If your overflow isn't visible and your text-overflow-mode isn't c lip.
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 if (paginated) { 1646 if (paginated) {
1647 paginationDelta -= curr->paginationStrut(); 1647 paginationDelta -= curr->paginationStrut();
1648 adjustLinePositionForPagination(curr, paginationDelta, layoutSta te.flowThread()); 1648 adjustLinePositionForPagination(curr, paginationDelta, layoutSta te.flowThread());
1649 if (paginationDelta) { 1649 if (paginationDelta) {
1650 if (containsFloats() || !layoutState.floats().isEmpty()) { 1650 if (containsFloats() || !layoutState.floats().isEmpty()) {
1651 // FIXME: Do better eventually. For now if we ever shif t because of pagination and floats are present just go to a full layout. 1651 // FIXME: Do better eventually. For now if we ever shif t because of pagination and floats are present just go to a full layout.
1652 layoutState.markForFullLayout(); 1652 layoutState.markForFullLayout();
1653 break; 1653 break;
1654 } 1654 }
1655 1655
1656 layoutState.updateRepaintRangeFromBox(curr, paginationDelta) ; 1656 layoutState.updatePaintInvalidationRangeFromBox(curr, pagina tionDelta);
1657 curr->adjustBlockDirectionPosition(paginationDelta.toFloat() ); 1657 curr->adjustBlockDirectionPosition(paginationDelta.toFloat() );
1658 } 1658 }
1659 } 1659 }
1660 1660
1661 // If a new float has been inserted before this line or before its l ast known float, just do a full layout. 1661 // If a new float has been inserted before this line or before its l ast known float, just do a full layout.
1662 bool encounteredNewFloat = false; 1662 bool encounteredNewFloat = false;
1663 checkFloatsInCleanLine(curr, layoutState.floats(), floatIndex, encou nteredNewFloat, dirtiedByFloat); 1663 checkFloatsInCleanLine(curr, layoutState.floats(), floatIndex, encou nteredNewFloat, dirtiedByFloat);
1664 if (encounteredNewFloat) 1664 if (encounteredNewFloat)
1665 layoutState.markForFullLayout(); 1665 layoutState.markForFullLayout();
1666 1666
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
2033 float logicalLeft = logicalLeftOffsetForLine(logicalHeight(), false).toFloat (); 2033 float logicalLeft = logicalLeftOffsetForLine(logicalHeight(), false).toFloat ();
2034 float availableLogicalWidth = logicalRightOffsetForLine(logicalHeight(), fal se) - logicalLeft; 2034 float availableLogicalWidth = logicalRightOffsetForLine(logicalHeight(), fal se) - logicalLeft;
2035 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid th, availableLogicalWidth, 0); 2035 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid th, availableLogicalWidth, 0);
2036 2036
2037 if (!style()->isLeftToRightDirection()) 2037 if (!style()->isLeftToRightDirection())
2038 return logicalWidth() - logicalLeft; 2038 return logicalWidth() - logicalLeft;
2039 return logicalLeft; 2039 return logicalLeft;
2040 } 2040 }
2041 2041
2042 } 2042 }
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.cpp ('k') | Source/core/rendering/RenderBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698