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

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

Issue 20231002: Replace RenderArena with PartitionAlloc (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase. Created 7 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/RenderBlock.cpp ('k') | Source/core/rendering/RenderBox.cpp » ('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 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 // Adding a pair of midpoints before a character will split it out into a new li ne box. 420 // Adding a pair of midpoints before a character will split it out into a new li ne box.
421 static inline void ensureCharacterGetsLineBox(LineMidpointState& lineMidpointSta te, InlineIterator& textParagraphSeparator) 421 static inline void ensureCharacterGetsLineBox(LineMidpointState& lineMidpointSta te, InlineIterator& textParagraphSeparator)
422 { 422 {
423 InlineIterator midpoint(0, textParagraphSeparator.m_obj, textParagraphSepara tor.m_pos); 423 InlineIterator midpoint(0, textParagraphSeparator.m_obj, textParagraphSepara tor.m_pos);
424 startIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSepara tor.m_obj, textParagraphSeparator.m_pos - 1)); 424 startIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSepara tor.m_obj, textParagraphSeparator.m_pos - 1));
425 stopIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSeparat or.m_obj, textParagraphSeparator.m_pos)); 425 stopIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSeparat or.m_obj, textParagraphSeparator.m_pos));
426 } 426 }
427 427
428 static inline BidiRun* createRun(int start, int end, RenderObject* obj, InlineBi diResolver& resolver) 428 static inline BidiRun* createRun(int start, int end, RenderObject* obj, InlineBi diResolver& resolver)
429 { 429 {
430 return new (obj->renderArena()) BidiRun(start, end, obj, resolver.context(), resolver.dir()); 430 return new BidiRun(start, end, obj, resolver.context(), resolver.dir());
431 } 431 }
432 432
433 void RenderBlock::appendRunsForObject(BidiRunList<BidiRun>& runs, int start, int end, RenderObject* obj, InlineBidiResolver& resolver) 433 void RenderBlock::appendRunsForObject(BidiRunList<BidiRun>& runs, int start, int end, RenderObject* obj, InlineBidiResolver& resolver)
434 { 434 {
435 if (start > end || shouldSkipCreatingRunsForObject(obj)) 435 if (start > end || shouldSkipCreatingRunsForObject(obj))
436 return; 436 return;
437 437
438 LineMidpointState& lineMidpointState = resolver.midpointState(); 438 LineMidpointState& lineMidpointState = resolver.midpointState();
439 bool haveNextMidpoint = (lineMidpointState.currentMidpoint < lineMidpointSta te.numMidpoints); 439 bool haveNextMidpoint = (lineMidpointState.currentMidpoint < lineMidpointSta te.numMidpoints);
440 InlineIterator nextMidpoint; 440 InlineIterator nextMidpoint;
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 if (firstSpace == trailingSpaceRun->stop()) 1196 if (firstSpace == trailingSpaceRun->stop())
1197 return 0; 1197 return 0;
1198 1198
1199 TextDirection direction = style()->direction(); 1199 TextDirection direction = style()->direction();
1200 bool shouldReorder = trailingSpaceRun != (direction == LTR ? bidiRuns.lastRu n() : bidiRuns.firstRun()); 1200 bool shouldReorder = trailingSpaceRun != (direction == LTR ? bidiRuns.lastRu n() : bidiRuns.firstRun());
1201 if (firstSpace != trailingSpaceRun->start()) { 1201 if (firstSpace != trailingSpaceRun->start()) {
1202 BidiContext* baseContext = currentContext; 1202 BidiContext* baseContext = currentContext;
1203 while (BidiContext* parent = baseContext->parent()) 1203 while (BidiContext* parent = baseContext->parent())
1204 baseContext = parent; 1204 baseContext = parent;
1205 1205
1206 BidiRun* newTrailingRun = new (renderArena()) BidiRun(firstSpace, traili ngSpaceRun->m_stop, trailingSpaceRun->m_object, baseContext, OtherNeutral); 1206 BidiRun* newTrailingRun = new BidiRun(firstSpace, trailingSpaceRun->m_st op, trailingSpaceRun->m_object, baseContext, OtherNeutral);
1207 trailingSpaceRun->m_stop = firstSpace; 1207 trailingSpaceRun->m_stop = firstSpace;
1208 if (direction == LTR) 1208 if (direction == LTR)
1209 bidiRuns.addRun(newTrailingRun); 1209 bidiRuns.addRun(newTrailingRun);
1210 else 1210 else
1211 bidiRuns.prependRun(newTrailingRun); 1211 bidiRuns.prependRun(newTrailingRun);
1212 trailingSpaceRun = newTrailingRun; 1212 trailingSpaceRun = newTrailingRun;
1213 return trailingSpaceRun; 1213 return trailingSpaceRun;
1214 } 1214 }
1215 if (!shouldReorder) 1215 if (!shouldReorder)
1216 return trailingSpaceRun; 1216 return trailingSpaceRun;
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1474 LayoutUnit& m_repaintLogicalTop; 1474 LayoutUnit& m_repaintLogicalTop;
1475 LayoutUnit& m_repaintLogicalBottom; 1475 LayoutUnit& m_repaintLogicalBottom;
1476 1476
1477 LayoutUnit m_adjustedLogicalLineTop; 1477 LayoutUnit m_adjustedLogicalLineTop;
1478 1478
1479 bool m_usesRepaintBounds; 1479 bool m_usesRepaintBounds;
1480 1480
1481 RenderFlowThread* m_flowThread; 1481 RenderFlowThread* m_flowThread;
1482 }; 1482 };
1483 1483
1484 static void deleteLineRange(LineLayoutState& layoutState, RenderArena* arena, Ro otInlineBox* startLine, RootInlineBox* stopLine = 0) 1484 static void deleteLineRange(LineLayoutState& layoutState, RootInlineBox* startLi ne, RootInlineBox* stopLine = 0)
1485 { 1485 {
1486 RootInlineBox* boxToDelete = startLine; 1486 RootInlineBox* boxToDelete = startLine;
1487 while (boxToDelete && boxToDelete != stopLine) { 1487 while (boxToDelete && boxToDelete != stopLine) {
1488 layoutState.updateRepaintRangeFromBox(boxToDelete); 1488 layoutState.updateRepaintRangeFromBox(boxToDelete);
1489 // Note: deleteLineRange(renderArena(), firstRootBox()) is not identical to deleteLineBoxTree(). 1489 // Note: deleteLineRange(firstRootBox()) is not identical to deleteLineB oxTree().
1490 // deleteLineBoxTree uses nextLineBox() instead of nextRootBox() when tr aversing. 1490 // deleteLineBoxTree uses nextLineBox() instead of nextRootBox() when tr aversing.
1491 RootInlineBox* next = boxToDelete->nextRootBox(); 1491 RootInlineBox* next = boxToDelete->nextRootBox();
1492 boxToDelete->deleteLine(arena); 1492 boxToDelete->deleteLine();
1493 boxToDelete = next; 1493 boxToDelete = next;
1494 } 1494 }
1495 } 1495 }
1496 1496
1497 void RenderBlock::layoutRunsAndFloats(LineLayoutState& layoutState, bool hasInli neChild) 1497 void RenderBlock::layoutRunsAndFloats(LineLayoutState& layoutState, bool hasInli neChild)
1498 { 1498 {
1499 // We want to skip ahead to the first dirty line 1499 // We want to skip ahead to the first dirty line
1500 InlineBidiResolver resolver; 1500 InlineBidiResolver resolver;
1501 RootInlineBox* startLine = determineStartPosition(layoutState, resolver); 1501 RootInlineBox* startLine = determineStartPosition(layoutState, resolver);
1502 1502
(...skipping 24 matching lines...) Expand all
1527 // We also find the first clean line and extract these lines. We will add t hem back 1527 // We also find the first clean line and extract these lines. We will add t hem back
1528 // if we determine that we're able to synchronize after handling all our dir ty lines. 1528 // if we determine that we're able to synchronize after handling all our dir ty lines.
1529 InlineIterator cleanLineStart; 1529 InlineIterator cleanLineStart;
1530 BidiStatus cleanLineBidiStatus; 1530 BidiStatus cleanLineBidiStatus;
1531 if (!layoutState.isFullLayout() && startLine) 1531 if (!layoutState.isFullLayout() && startLine)
1532 determineEndPosition(layoutState, startLine, cleanLineStart, cleanLineBi diStatus); 1532 determineEndPosition(layoutState, startLine, cleanLineStart, cleanLineBi diStatus);
1533 1533
1534 if (startLine) { 1534 if (startLine) {
1535 if (!layoutState.usesRepaintBounds()) 1535 if (!layoutState.usesRepaintBounds())
1536 layoutState.setRepaintRange(logicalHeight()); 1536 layoutState.setRepaintRange(logicalHeight());
1537 deleteLineRange(layoutState, renderArena(), startLine); 1537 deleteLineRange(layoutState, startLine);
1538 } 1538 }
1539 1539
1540 if (!layoutState.isFullLayout() && lastRootBox() && lastRootBox()->endsWithB reak()) { 1540 if (!layoutState.isFullLayout() && lastRootBox() && lastRootBox()->endsWithB reak()) {
1541 // If the last line before the start line ends with a line break that cl ear floats, 1541 // If the last line before the start line ends with a line break that cl ear floats,
1542 // adjust the height accordingly. 1542 // adjust the height accordingly.
1543 // A line break can be either the first or the last object on a line, de pending on its direction. 1543 // A line break can be either the first or the last object on a line, de pending on its direction.
1544 if (InlineBox* lastLeafChild = lastRootBox()->lastLeafChild()) { 1544 if (InlineBox* lastLeafChild = lastRootBox()->lastLeafChild()) {
1545 RenderObject* lastObject = lastLeafChild->renderer(); 1545 RenderObject* lastObject = lastLeafChild->renderer();
1546 if (!lastObject->isBR()) 1546 if (!lastObject->isBR())
1547 lastObject = lastRootBox()->firstLeafChild()->renderer(); 1547 lastObject = lastRootBox()->firstLeafChild()->renderer();
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 LayoutUnit adjustment = 0; 1840 LayoutUnit adjustment = 0;
1841 adjustLinePositionForPagination(lineBox, adjustment, layoutS tate.flowThread()); 1841 adjustLinePositionForPagination(lineBox, adjustment, layoutS tate.flowThread());
1842 if (adjustment) { 1842 if (adjustment) {
1843 LayoutUnit oldLineWidth = availableLogicalWidthForLine(o ldLogicalHeight, layoutState.lineInfo().isFirstLine()); 1843 LayoutUnit oldLineWidth = availableLogicalWidthForLine(o ldLogicalHeight, layoutState.lineInfo().isFirstLine());
1844 lineBox->adjustBlockDirectionPosition(adjustment); 1844 lineBox->adjustBlockDirectionPosition(adjustment);
1845 if (layoutState.usesRepaintBounds()) 1845 if (layoutState.usesRepaintBounds())
1846 layoutState.updateRepaintRangeFromBox(lineBox); 1846 layoutState.updateRepaintRangeFromBox(lineBox);
1847 1847
1848 if (availableLogicalWidthForLine(oldLogicalHeight + adju stment, layoutState.lineInfo().isFirstLine()) != oldLineWidth) { 1848 if (availableLogicalWidthForLine(oldLogicalHeight + adju stment, layoutState.lineInfo().isFirstLine()) != oldLineWidth) {
1849 // We have to delete this line, remove all floats th at got added, and let line layout re-run. 1849 // We have to delete this line, remove all floats th at got added, and let line layout re-run.
1850 lineBox->deleteLine(renderArena()); 1850 lineBox->deleteLine();
1851 end = restartLayoutRunsAndFloatsInRange(oldLogicalHe ight, oldLogicalHeight + adjustment, lastFloatFromPreviousLine, resolver, oldEnd ); 1851 end = restartLayoutRunsAndFloatsInRange(oldLogicalHe ight, oldLogicalHeight + adjustment, lastFloatFromPreviousLine, resolver, oldEnd );
1852 continue; 1852 continue;
1853 } 1853 }
1854 1854
1855 setLogicalHeight(lineBox->lineBottomWithLeading()); 1855 setLogicalHeight(lineBox->lineBottomWithLeading());
1856 } 1856 }
1857 1857
1858 if (layoutState.flowThread()) 1858 if (layoutState.flowThread())
1859 lineBox->setContainingRegion(regionAtBlockOffset(lineBox ->lineTopWithLeading())); 1859 lineBox->setContainingRegion(regionAtBlockOffset(lineBox ->lineTopWithLeading()));
1860 } 1860 }
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1980 ASSERT(!floatingObject->m_originatingLine); 1980 ASSERT(!floatingObject->m_originatingLine);
1981 floatingObject->m_originatingLine = line; 1981 floatingObject->m_originatingLine = line;
1982 setLogicalHeight(logicalTopForChild(*f) - marginBeforeFo rChild(*f) + delta); 1982 setLogicalHeight(logicalTopForChild(*f) - marginBeforeFo rChild(*f) + delta);
1983 positionNewFloats(); 1983 positionNewFloats();
1984 } 1984 }
1985 } 1985 }
1986 } 1986 }
1987 setLogicalHeight(lastRootBox()->lineBottomWithLeading()); 1987 setLogicalHeight(lastRootBox()->lineBottomWithLeading());
1988 } else { 1988 } else {
1989 // Delete all the remaining lines. 1989 // Delete all the remaining lines.
1990 deleteLineRange(layoutState, renderArena(), layoutState.endLine()); 1990 deleteLineRange(layoutState, layoutState.endLine());
1991 } 1991 }
1992 } 1992 }
1993 1993
1994 if (floatingObjects() && (layoutState.checkForFloatsFromLastLine() || positi onNewFloats()) && lastRootBox()) { 1994 if (floatingObjects() && (layoutState.checkForFloatsFromLastLine() || positi onNewFloats()) && lastRootBox()) {
1995 // In case we have a float on the last line, it might not be positioned up to now. 1995 // In case we have a float on the last line, it might not be positioned up to now.
1996 // This has to be done before adding in the bottom border/padding, or th e float will 1996 // This has to be done before adding in the bottom border/padding, or th e float will
1997 // include the padding incorrectly. -dwh 1997 // include the padding incorrectly. -dwh
1998 if (layoutState.checkForFloatsFromLastLine()) { 1998 if (layoutState.checkForFloatsFromLastLine()) {
1999 LayoutUnit bottomVisualOverflow = lastRootBox()->logicalBottomVisual Overflow(); 1999 LayoutUnit bottomVisualOverflow = lastRootBox()->logicalBottomVisual Overflow();
2000 LayoutUnit bottomLayoutOverflow = lastRootBox()->logicalBottomLayout Overflow(); 2000 LayoutUnit bottomLayoutOverflow = lastRootBox()->logicalBottomLayout Overflow();
2001 TrailingFloatsRootInlineBox* trailingFloatsLineBox = new (renderAren a()) TrailingFloatsRootInlineBox(this); 2001 TrailingFloatsRootInlineBox* trailingFloatsLineBox = new TrailingFlo atsRootInlineBox(this);
2002 m_lineBoxes.appendLineBox(trailingFloatsLineBox); 2002 m_lineBoxes.appendLineBox(trailingFloatsLineBox);
2003 trailingFloatsLineBox->setConstructed(); 2003 trailingFloatsLineBox->setConstructed();
2004 GlyphOverflowAndFallbackFontsMap textBoxDataMap; 2004 GlyphOverflowAndFallbackFontsMap textBoxDataMap;
2005 VerticalPositionCache verticalPositionCache; 2005 VerticalPositionCache verticalPositionCache;
2006 LayoutUnit blockLogicalHeight = logicalHeight(); 2006 LayoutUnit blockLogicalHeight = logicalHeight();
2007 trailingFloatsLineBox->alignBoxesInBlockDirection(blockLogicalHeight , textBoxDataMap, verticalPositionCache); 2007 trailingFloatsLineBox->alignBoxesInBlockDirection(blockLogicalHeight , textBoxDataMap, verticalPositionCache);
2008 trailingFloatsLineBox->setLineTopBottomPositions(blockLogicalHeight, blockLogicalHeight, blockLogicalHeight, blockLogicalHeight); 2008 trailingFloatsLineBox->setLineTopBottomPositions(blockLogicalHeight, blockLogicalHeight, blockLogicalHeight, blockLogicalHeight);
2009 trailingFloatsLineBox->setPaginatedLineWidth(availableLogicalWidthFo rContent(blockLogicalHeight)); 2009 trailingFloatsLineBox->setPaginatedLineWidth(availableLogicalWidthFo rContent(blockLogicalHeight));
2010 LayoutRect logicalLayoutOverflow(0, blockLogicalHeight, 1, bottomLay outOverflow - blockLogicalHeight); 2010 LayoutRect logicalLayoutOverflow(0, blockLogicalHeight, 1, bottomLay outOverflow - blockLogicalHeight);
2011 LayoutRect logicalVisualOverflow(0, blockLogicalHeight, 1, bottomVis ualOverflow - blockLogicalHeight); 2011 LayoutRect logicalVisualOverflow(0, blockLogicalHeight, 1, bottomVis ualOverflow - blockLogicalHeight);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 2054
2055 RenderFlowThread* flowThread = flowThreadContainingBlock(); 2055 RenderFlowThread* flowThread = flowThreadContainingBlock();
2056 bool clearLinesForPagination = firstLineBox() && flowThread && !flowThread-> hasRegions(); 2056 bool clearLinesForPagination = firstLineBox() && flowThread && !flowThread-> hasRegions();
2057 2057
2058 // Figure out if we should clear out our line boxes. 2058 // Figure out if we should clear out our line boxes.
2059 // FIXME: Handle resize eventually! 2059 // FIXME: Handle resize eventually!
2060 bool isFullLayout = !firstLineBox() || selfNeedsLayout() || relayoutChildren || clearLinesForPagination; 2060 bool isFullLayout = !firstLineBox() || selfNeedsLayout() || relayoutChildren || clearLinesForPagination;
2061 LineLayoutState layoutState(isFullLayout, repaintLogicalTop, repaintLogicalB ottom, flowThread); 2061 LineLayoutState layoutState(isFullLayout, repaintLogicalTop, repaintLogicalB ottom, flowThread);
2062 2062
2063 if (isFullLayout) 2063 if (isFullLayout)
2064 lineBoxes()->deleteLineBoxes(renderArena()); 2064 lineBoxes()->deleteLineBoxes();
2065 2065
2066 // Text truncation kicks in in two cases: 2066 // Text truncation kicks in in two cases:
2067 // 1) If your overflow isn't visible and your text-overflow-mode isn't c lip. 2067 // 1) If your overflow isn't visible and your text-overflow-mode isn't c lip.
2068 // 2) If you're an anonymous block with a block parent that satisfies #1 . 2068 // 2) If you're an anonymous block with a block parent that satisfies #1 .
2069 // FIXME: CSS3 says that descendants that are clipped must also know how to truncate. This is insanely 2069 // FIXME: CSS3 says that descendants that are clipped must also know how to truncate. This is insanely
2070 // difficult to figure out in general (especially in the middle of doing lay out), so we only handle the 2070 // difficult to figure out in general (especially in the middle of doing lay out), so we only handle the
2071 // simple case of an anonymous block truncating when it's parent is clipped. 2071 // simple case of an anonymous block truncating when it's parent is clipped.
2072 bool hasTextOverflow = (style()->textOverflow() && hasOverflowClip()) 2072 bool hasTextOverflow = (style()->textOverflow() && hasOverflowClip())
2073 || (isAnonymousBlock() && parent() && parent()->isRenderBlock() && paren t()->style()->textOverflow() && parent()->hasOverflowClip()); 2073 || (isAnonymousBlock() && parent() && parent()->isRenderBlock() && paren t()->style()->textOverflow() && parent()->hasOverflowClip());
2074 2074
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 break; 2222 break;
2223 } 2223 }
2224 // Check if a new float has been inserted after the last known float. 2224 // Check if a new float has been inserted after the last known float.
2225 if (!curr && floatIndex < layoutState.floats().size()) 2225 if (!curr && floatIndex < layoutState.floats().size())
2226 layoutState.markForFullLayout(); 2226 layoutState.markForFullLayout();
2227 } 2227 }
2228 2228
2229 if (layoutState.isFullLayout()) { 2229 if (layoutState.isFullLayout()) {
2230 // FIXME: This should just call deleteLineBoxTree, but that causes 2230 // FIXME: This should just call deleteLineBoxTree, but that causes
2231 // crashes for fast/repaint tests. 2231 // crashes for fast/repaint tests.
2232 RenderArena* arena = renderArena();
2233 curr = firstRootBox(); 2232 curr = firstRootBox();
2234 while (curr) { 2233 while (curr) {
2235 // Note: This uses nextRootBox() insted of nextLineBox() like delete LineBoxTree does. 2234 // Note: This uses nextRootBox() insted of nextLineBox() like delete LineBoxTree does.
2236 RootInlineBox* next = curr->nextRootBox(); 2235 RootInlineBox* next = curr->nextRootBox();
2237 curr->deleteLine(arena); 2236 curr->deleteLine();
2238 curr = next; 2237 curr = next;
2239 } 2238 }
2240 ASSERT(!firstLineBox() && !lastLineBox()); 2239 ASSERT(!firstLineBox() && !lastLineBox());
2241 } else { 2240 } else {
2242 if (curr) { 2241 if (curr) {
2243 // We have a dirty line. 2242 // We have a dirty line.
2244 if (RootInlineBox* prevRootBox = curr->prevRootBox()) { 2243 if (RootInlineBox* prevRootBox = curr->prevRootBox()) {
2245 // We have a previous line. 2244 // We have a previous line.
2246 if (!dirtiedByFloat && (!prevRootBox->endsWithBreak() || !prevRo otBox->lineBreakObj() || (prevRootBox->lineBreakObj()->isText() && prevRootBox-> lineBreakPos() >= toRenderText(prevRootBox->lineBreakObj())->textLength()))) 2245 if (!dirtiedByFloat && (!prevRootBox->endsWithBreak() || !prevRo otBox->lineBreakObj() || (prevRootBox->lineBreakObj()->isText() && prevRootBox-> lineBreakPos() >= toRenderText(prevRootBox->lineBreakObj())->textLength())))
2247 // The previous line didn't break cleanly or broke at a newl ine 2246 // The previous line didn't break cleanly or broke at a newl ine
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2406 2405
2407 bool matched = false; 2406 bool matched = false;
2408 RootInlineBox* result = line->nextRootBox(); 2407 RootInlineBox* result = line->nextRootBox();
2409 layoutState.setEndLine(result); 2408 layoutState.setEndLine(result);
2410 if (result) { 2409 if (result) {
2411 layoutState.setEndLineLogicalTop(line->lineBottomWithLeading()); 2410 layoutState.setEndLineLogicalTop(line->lineBottomWithLeading());
2412 matched = checkPaginationAndFloatsAtEndLine(layoutState); 2411 matched = checkPaginationAndFloatsAtEndLine(layoutState);
2413 } 2412 }
2414 2413
2415 // Now delete the lines that we failed to sync. 2414 // Now delete the lines that we failed to sync.
2416 deleteLineRange(layoutState, renderArena(), originalEndLine, result) ; 2415 deleteLineRange(layoutState, originalEndLine, result);
2417 return matched; 2416 return matched;
2418 } 2417 }
2419 } 2418 }
2420 2419
2421 return false; 2420 return false;
2422 } 2421 }
2423 2422
2424 enum WhitespacePosition { LeadingWhitespace, TrailingWhitespace }; 2423 enum WhitespacePosition { LeadingWhitespace, TrailingWhitespace };
2425 static inline bool shouldCollapseWhiteSpace(const RenderStyle* style, const Line Info& lineInfo, WhitespacePosition whitespacePosition) 2424 static inline bool shouldCollapseWhiteSpace(const RenderStyle* style, const Line Info& lineInfo, WhitespacePosition whitespacePosition)
2426 { 2425 {
(...skipping 1118 matching lines...) Expand 10 before | Expand all | Expand 10 after
3545 3544
3546 void RenderBlock::layoutLineGridBox() 3545 void RenderBlock::layoutLineGridBox()
3547 { 3546 {
3548 if (style()->lineGrid() == RenderStyle::initialLineGrid()) { 3547 if (style()->lineGrid() == RenderStyle::initialLineGrid()) {
3549 setLineGridBox(0); 3548 setLineGridBox(0);
3550 return; 3549 return;
3551 } 3550 }
3552 3551
3553 setLineGridBox(0); 3552 setLineGridBox(0);
3554 3553
3555 RootInlineBox* lineGridBox = new (renderArena()) RootInlineBox(this); 3554 RootInlineBox* lineGridBox = new RootInlineBox(this);
3556 lineGridBox->setHasTextChildren(); // Needed to make the line ascent/descent actually be honored in quirks mode. 3555 lineGridBox->setHasTextChildren(); // Needed to make the line ascent/descent actually be honored in quirks mode.
3557 lineGridBox->setConstructed(); 3556 lineGridBox->setConstructed();
3558 GlyphOverflowAndFallbackFontsMap textBoxDataMap; 3557 GlyphOverflowAndFallbackFontsMap textBoxDataMap;
3559 VerticalPositionCache verticalPositionCache; 3558 VerticalPositionCache verticalPositionCache;
3560 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver ticalPositionCache); 3559 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver ticalPositionCache);
3561 3560
3562 setLineGridBox(lineGridBox); 3561 setLineGridBox(lineGridBox);
3563 3562
3564 // FIXME: If any of the characteristics of the box change compared to the ol d one, then we need to do a deep dirtying 3563 // FIXME: If any of the characteristics of the box change compared to the ol d one, then we need to do a deep dirtying
3565 // (similar to what happens when the page height changes). Ideally, though, we only do this if someone is actually snapping 3564 // (similar to what happens when the page height changes). Ideally, though, we only do this if someone is actually snapping
3566 // to this grid. 3565 // to this grid.
3567 } 3566 }
3568 3567
3569 } 3568 }
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBlock.cpp ('k') | Source/core/rendering/RenderBox.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698