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

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

Issue 23819007: Have Node::document() return a reference instead of a pointer (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 7 years, 3 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.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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 using namespace WTF; 49 using namespace WTF;
50 using namespace Unicode; 50 using namespace Unicode;
51 51
52 namespace WebCore { 52 namespace WebCore {
53 53
54 // We don't let our line box tree for a single line get any deeper than this. 54 // We don't let our line box tree for a single line get any deeper than this.
55 const unsigned cMaxLineDepth = 200; 55 const unsigned cMaxLineDepth = 200;
56 56
57 static LayoutUnit logicalHeightForLine(const RenderBlock* block, bool isFirstLin e, LayoutUnit replacedHeight = 0) 57 static LayoutUnit logicalHeightForLine(const RenderBlock* block, bool isFirstLin e, LayoutUnit replacedHeight = 0)
58 { 58 {
59 if (!block->document()->inNoQuirksMode() && replacedHeight) 59 if (!block->document().inNoQuirksMode() && replacedHeight)
60 return replacedHeight; 60 return replacedHeight;
61 61
62 if (!(block->style(isFirstLine)->lineBoxContain() & LineBoxContainBlock)) 62 if (!(block->style(isFirstLine)->lineBoxContain() & LineBoxContainBlock))
63 return 0; 63 return 0;
64 64
65 return max<LayoutUnit>(replacedHeight, block->lineHeight(isFirstLine, block- >isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLi neBoxes)); 65 return max<LayoutUnit>(replacedHeight, block->lineHeight(isFirstLine, block- >isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLi neBoxes));
66 } 66 }
67 67
68 ShapeInsideInfo* RenderBlock::layoutShapeInsideInfo() const 68 ShapeInsideInfo* RenderBlock::layoutShapeInsideInfo() const
69 { 69 {
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 static inline InlineBox* createInlineBoxForRenderer(RenderObject* obj, bool isRo otLineBox, bool isOnlyRun = false) 522 static inline InlineBox* createInlineBoxForRenderer(RenderObject* obj, bool isRo otLineBox, bool isOnlyRun = false)
523 { 523 {
524 if (isRootLineBox) 524 if (isRootLineBox)
525 return toRenderBlock(obj)->createAndAppendRootInlineBox(); 525 return toRenderBlock(obj)->createAndAppendRootInlineBox();
526 526
527 if (obj->isText()) { 527 if (obj->isText()) {
528 InlineTextBox* textBox = toRenderText(obj)->createInlineTextBox(); 528 InlineTextBox* textBox = toRenderText(obj)->createInlineTextBox();
529 // We only treat a box as text for a <br> if we are on a line by ourself or in strict mode 529 // We only treat a box as text for a <br> if we are on a line by ourself or in strict mode
530 // (Note the use of strict mode. In "almost strict" mode, we don't trea t the box for <br> as text.) 530 // (Note the use of strict mode. In "almost strict" mode, we don't trea t the box for <br> as text.)
531 if (obj->isBR()) 531 if (obj->isBR())
532 textBox->setIsText(isOnlyRun || obj->document()->inNoQuirksMode()); 532 textBox->setIsText(isOnlyRun || obj->document().inNoQuirksMode());
533 return textBox; 533 return textBox;
534 } 534 }
535 535
536 if (obj->isBox()) 536 if (obj->isBox())
537 return toRenderBox(obj)->createInlineBox(); 537 return toRenderBox(obj)->createInlineBox();
538 538
539 return toRenderInline(obj)->createAndAppendInlineFlowBox(); 539 return toRenderInline(obj)->createAndAppendInlineFlowBox();
540 } 540 }
541 541
542 // FIXME: Don't let counters mark themselves as needing pref width recalcs durin g layout 542 // FIXME: Don't let counters mark themselves as needing pref width recalcs durin g layout
(...skipping 1926 matching lines...) Expand 10 before | Expand all | Expand 10 after
2469 // If a space (U+0020) at the beginning of a line has 'white-space' set to ' normal', 'nowrap', or 'pre-line', it is removed. 2469 // If a space (U+0020) at the beginning of a line has 'white-space' set to ' normal', 'nowrap', or 'pre-line', it is removed.
2470 // If a space (U+0020) at the end of a line has 'white-space' set to 'normal ', 'nowrap', or 'pre-line', it is also removed. 2470 // If a space (U+0020) at the end of a line has 'white-space' set to 'normal ', 'nowrap', or 'pre-line', it is also removed.
2471 // If spaces (U+0020) or tabs (U+0009) at the end of a line have 'white-spac e' set to 'pre-wrap', UAs may visually collapse them. 2471 // If spaces (U+0020) or tabs (U+0009) at the end of a line have 'white-spac e' set to 'pre-wrap', UAs may visually collapse them.
2472 return style->collapseWhiteSpace() 2472 return style->collapseWhiteSpace()
2473 || (whitespacePosition == TrailingWhitespace && style->whiteSpace() == P RE_WRAP && (!lineInfo.isEmpty() || !lineInfo.previousLineBrokeCleanly())); 2473 || (whitespacePosition == TrailingWhitespace && style->whiteSpace() == P RE_WRAP && (!lineInfo.isEmpty() || !lineInfo.previousLineBrokeCleanly()));
2474 } 2474 }
2475 2475
2476 static bool requiresLineBoxForContent(RenderInline* flow, const LineInfo& lineIn fo) 2476 static bool requiresLineBoxForContent(RenderInline* flow, const LineInfo& lineIn fo)
2477 { 2477 {
2478 RenderObject* parent = flow->parent(); 2478 RenderObject* parent = flow->parent();
2479 if (flow->document()->inNoQuirksMode() 2479 if (flow->document().inNoQuirksMode()
2480 && (flow->style(lineInfo.isFirstLine())->lineHeight() != parent->style(l ineInfo.isFirstLine())->lineHeight() 2480 && (flow->style(lineInfo.isFirstLine())->lineHeight() != parent->style(l ineInfo.isFirstLine())->lineHeight()
2481 || flow->style()->verticalAlign() != parent->style()->verticalAlign() 2481 || flow->style()->verticalAlign() != parent->style()->verticalAlign()
2482 || !parent->style()->font().fontMetrics().hasIdenticalAscentDescentAndLi neGap(flow->style()->font().fontMetrics()))) 2482 || !parent->style()->font().fontMetrics().hasIdenticalAscentDescentAndLi neGap(flow->style()->font().fontMetrics())))
2483 return true; 2483 return true;
2484 return false; 2484 return false;
2485 } 2485 }
2486 2486
2487 static bool alwaysRequiresLineBox(RenderObject* flow) 2487 static bool alwaysRequiresLineBox(RenderObject* flow)
2488 { 2488 {
2489 // FIXME: Right now, we only allow line boxes for inlines that are truly emp ty. 2489 // FIXME: Right now, we only allow line boxes for inlines that are truly emp ty.
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
2792 bool startingNewParagraph = lineInfo.previousLineBrokeCleanly(); 2792 bool startingNewParagraph = lineInfo.previousLineBrokeCleanly();
2793 lineInfo.setPreviousLineBrokeCleanly(false); 2793 lineInfo.setPreviousLineBrokeCleanly(false);
2794 2794
2795 bool autoWrapWasEverTrueOnLine = false; 2795 bool autoWrapWasEverTrueOnLine = false;
2796 bool floatsFitOnLine = true; 2796 bool floatsFitOnLine = true;
2797 2797
2798 // Firefox and Opera will allow a table cell to grow to fit an image inside it under 2798 // Firefox and Opera will allow a table cell to grow to fit an image inside it under
2799 // very specific circumstances (in order to match common WinIE renderings). 2799 // very specific circumstances (in order to match common WinIE renderings).
2800 // Not supporting the quirk has caused us to mis-render some real sites. (Se e Bugzilla 10517.) 2800 // Not supporting the quirk has caused us to mis-render some real sites. (Se e Bugzilla 10517.)
2801 RenderStyle* blockStyle = m_block->style(); 2801 RenderStyle* blockStyle = m_block->style();
2802 bool allowImagesToBreak = !m_block->document()->inQuirksMode() || !m_block-> isTableCell() || !blockStyle->logicalWidth().isIntrinsicOrAuto(); 2802 bool allowImagesToBreak = !m_block->document().inQuirksMode() || !m_block->i sTableCell() || !blockStyle->logicalWidth().isIntrinsicOrAuto();
2803 2803
2804 EWhiteSpace currWS = blockStyle->whiteSpace(); 2804 EWhiteSpace currWS = blockStyle->whiteSpace();
2805 EWhiteSpace lastWS = currWS; 2805 EWhiteSpace lastWS = currWS;
2806 while (current.m_obj) { 2806 while (current.m_obj) {
2807 RenderStyle* currentStyle = current.m_obj->style(); 2807 RenderStyle* currentStyle = current.m_obj->style();
2808 RenderObject* next = bidiNextSkippingEmptyInlines(m_block, current.m_obj ); 2808 RenderObject* next = bidiNextSkippingEmptyInlines(m_block, current.m_obj );
2809 if (next && next->parent() && !next->parent()->isDescendantOf(current.m_ obj->parent())) 2809 if (next && next->parent() && !next->parent()->isDescendantOf(current.m_ obj->parent()))
2810 includeEndWidth = true; 2810 includeEndWidth = true;
2811 2811
2812 currWS = current.m_obj->isReplaced() ? current.m_obj->parent()->style()- >whiteSpace() : currentStyle->whiteSpace(); 2812 currWS = current.m_obj->isReplaced() ? current.m_obj->parent()->style()- >whiteSpace() : currentStyle->whiteSpace();
(...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
3525 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver ticalPositionCache); 3525 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver ticalPositionCache);
3526 3526
3527 setLineGridBox(lineGridBox); 3527 setLineGridBox(lineGridBox);
3528 3528
3529 // FIXME: If any of the characteristics of the box change compared to the ol d one, then we need to do a deep dirtying 3529 // FIXME: If any of the characteristics of the box change compared to the ol d one, then we need to do a deep dirtying
3530 // (similar to what happens when the page height changes). Ideally, though, we only do this if someone is actually snapping 3530 // (similar to what happens when the page height changes). Ideally, though, we only do this if someone is actually snapping
3531 // to this grid. 3531 // to this grid.
3532 } 3532 }
3533 3533
3534 } 3534 }
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBlock.cpp ('k') | Source/core/rendering/RenderBox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698