OLD | NEW |
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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 return false; | 100 return false; |
101 } | 101 } |
102 | 102 |
103 InlineFlowBox* LayoutBlockFlow::createLineBoxes(LayoutObject* obj, const LineInf
o& lineInfo, InlineBox* childBox) | 103 InlineFlowBox* LayoutBlockFlow::createLineBoxes(LayoutObject* obj, const LineInf
o& lineInfo, InlineBox* childBox) |
104 { | 104 { |
105 // See if we have an unconstructed line box for this object that is also | 105 // See if we have an unconstructed line box for this object that is also |
106 // the last item on the line. | 106 // the last item on the line. |
107 unsigned lineDepth = 1; | 107 unsigned lineDepth = 1; |
108 InlineFlowBox* parentBox = 0; | 108 InlineFlowBox* parentBox = 0; |
109 InlineFlowBox* result = 0; | 109 InlineFlowBox* result = 0; |
110 bool hasDefaultLineBoxContain = style()->lineBoxContain() == LayoutStyle::in
itialLineBoxContain(); | 110 bool hasDefaultLineBoxContain = style()->lineBoxContain() == ComputedStyle::
initialLineBoxContain(); |
111 do { | 111 do { |
112 ASSERT_WITH_SECURITY_IMPLICATION(obj->isLayoutInline() || obj == this); | 112 ASSERT_WITH_SECURITY_IMPLICATION(obj->isLayoutInline() || obj == this); |
113 | 113 |
114 LayoutInline* inlineFlow = (obj != this) ? toLayoutInline(obj) : 0; | 114 LayoutInline* inlineFlow = (obj != this) ? toLayoutInline(obj) : 0; |
115 | 115 |
116 // Get the last box we made for this render object. | 116 // Get the last box we made for this render object. |
117 parentBox = inlineFlow ? inlineFlow->lastLineBox() : toLayoutBlock(obj)-
>lastLineBox(); | 117 parentBox = inlineFlow ? inlineFlow->lastLineBox() : toLayoutBlock(obj)-
>lastLineBox(); |
118 | 118 |
119 // If this box or its ancestor is constructed then it is from a previous
line, and we need | 119 // If this box or its ancestor is constructed then it is from a previous
line, and we need |
120 // to make a new box for our line. If this box or its ancestor is uncon
structed but it has | 120 // to make a new box for our line. If this box or its ancestor is uncon
structed but it has |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 removeFloatingObjectsBelow(lastFloatFromPreviousLine, oldLogicalHeight); | 781 removeFloatingObjectsBelow(lastFloatFromPreviousLine, oldLogicalHeight); |
782 setLogicalHeight(newLogicalHeight); | 782 setLogicalHeight(newLogicalHeight); |
783 resolver.setPositionIgnoringNestedIsolates(oldEnd); | 783 resolver.setPositionIgnoringNestedIsolates(oldEnd); |
784 return oldEnd; | 784 return oldEnd; |
785 } | 785 } |
786 | 786 |
787 void LayoutBlockFlow::layoutRunsAndFloatsInRange(LineLayoutState& layoutState, | 787 void LayoutBlockFlow::layoutRunsAndFloatsInRange(LineLayoutState& layoutState, |
788 InlineBidiResolver& resolver, const InlineIterator& cleanLineStart, | 788 InlineBidiResolver& resolver, const InlineIterator& cleanLineStart, |
789 const BidiStatus& cleanLineBidiStatus) | 789 const BidiStatus& cleanLineBidiStatus) |
790 { | 790 { |
791 const LayoutStyle& styleToUse = styleRef(); | 791 const ComputedStyle& styleToUse = styleRef(); |
792 bool paginated = view()->layoutState() && view()->layoutState()->isPaginated
(); | 792 bool paginated = view()->layoutState() && view()->layoutState()->isPaginated
(); |
793 LineMidpointState& lineMidpointState = resolver.midpointState(); | 793 LineMidpointState& lineMidpointState = resolver.midpointState(); |
794 InlineIterator endOfLine = resolver.position(); | 794 InlineIterator endOfLine = resolver.position(); |
795 bool checkForEndLineMatch = layoutState.endLine(); | 795 bool checkForEndLineMatch = layoutState.endLine(); |
796 LayoutTextInfo renderTextInfo; | 796 LayoutTextInfo renderTextInfo; |
797 VerticalPositionCache verticalPositionCache; | 797 VerticalPositionCache verticalPositionCache; |
798 | 798 |
799 LineBreaker lineBreaker(this); | 799 LineBreaker lineBreaker(this); |
800 | 800 |
801 while (!endOfLine.atEnd()) { | 801 while (!endOfLine.atEnd()) { |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1149 | 1149 |
1150 static LayoutUnit getBPMWidth(LayoutUnit childValue, Length cssUnit) | 1150 static LayoutUnit getBPMWidth(LayoutUnit childValue, Length cssUnit) |
1151 { | 1151 { |
1152 if (cssUnit.type() != Auto) | 1152 if (cssUnit.type() != Auto) |
1153 return (cssUnit.isFixed() ? static_cast<LayoutUnit>(cssUnit.value()) : c
hildValue); | 1153 return (cssUnit.isFixed() ? static_cast<LayoutUnit>(cssUnit.value()) : c
hildValue); |
1154 return LayoutUnit(); | 1154 return LayoutUnit(); |
1155 } | 1155 } |
1156 | 1156 |
1157 static LayoutUnit getBorderPaddingMargin(const LayoutBoxModelObject& child, bool
endOfInline) | 1157 static LayoutUnit getBorderPaddingMargin(const LayoutBoxModelObject& child, bool
endOfInline) |
1158 { | 1158 { |
1159 const LayoutStyle& childStyle = child.styleRef(); | 1159 const ComputedStyle& childStyle = child.styleRef(); |
1160 if (endOfInline) { | 1160 if (endOfInline) { |
1161 return getBPMWidth(child.marginEnd(), childStyle.marginEnd()) + | 1161 return getBPMWidth(child.marginEnd(), childStyle.marginEnd()) + |
1162 getBPMWidth(child.paddingEnd(), childStyle.paddingEnd()) + | 1162 getBPMWidth(child.paddingEnd(), childStyle.paddingEnd()) + |
1163 child.borderEnd(); | 1163 child.borderEnd(); |
1164 } | 1164 } |
1165 return getBPMWidth(child.marginStart(), childStyle.marginStart()) + | 1165 return getBPMWidth(child.marginStart(), childStyle.marginStart()) + |
1166 getBPMWidth(child.paddingStart(), childStyle.paddingStart()) + | 1166 getBPMWidth(child.paddingStart(), childStyle.paddingStart()) + |
1167 child.borderStart(); | 1167 child.borderStart(); |
1168 } | 1168 } |
1169 | 1169 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1207 return LayoutUnit::fromFloatCeil(value); | 1207 return LayoutUnit::fromFloatCeil(value); |
1208 } | 1208 } |
1209 | 1209 |
1210 // FIXME: This function should be broken into something less monolithic. | 1210 // FIXME: This function should be broken into something less monolithic. |
1211 // FIXME: The main loop here is very similar to LineBreaker::nextSegmentBreak. T
hey can probably reuse code. | 1211 // FIXME: The main loop here is very similar to LineBreaker::nextSegmentBreak. T
hey can probably reuse code. |
1212 void LayoutBlockFlow::computeInlinePreferredLogicalWidths(LayoutUnit& minLogical
Width, LayoutUnit& maxLogicalWidth) | 1212 void LayoutBlockFlow::computeInlinePreferredLogicalWidths(LayoutUnit& minLogical
Width, LayoutUnit& maxLogicalWidth) |
1213 { | 1213 { |
1214 FloatWillBeLayoutUnit inlineMax; | 1214 FloatWillBeLayoutUnit inlineMax; |
1215 FloatWillBeLayoutUnit inlineMin; | 1215 FloatWillBeLayoutUnit inlineMin; |
1216 | 1216 |
1217 const LayoutStyle& styleToUse = styleRef(); | 1217 const ComputedStyle& styleToUse = styleRef(); |
1218 LayoutBlock* containingBlock = this->containingBlock(); | 1218 LayoutBlock* containingBlock = this->containingBlock(); |
1219 LayoutUnit cw = containingBlock ? containingBlock->contentLogicalWidth() : L
ayoutUnit(); | 1219 LayoutUnit cw = containingBlock ? containingBlock->contentLogicalWidth() : L
ayoutUnit(); |
1220 | 1220 |
1221 // If we are at the start of a line, we want to ignore all white-space. | 1221 // If we are at the start of a line, we want to ignore all white-space. |
1222 // Also strip spaces if we previously had text that ended in a trailing spac
e. | 1222 // Also strip spaces if we previously had text that ended in a trailing spac
e. |
1223 bool stripFrontSpaces = true; | 1223 bool stripFrontSpaces = true; |
1224 LayoutObject* trailingSpaceChild = 0; | 1224 LayoutObject* trailingSpaceChild = 0; |
1225 | 1225 |
1226 // Firefox and Opera will allow a table cell to grow to fit an image inside
it under | 1226 // Firefox and Opera will allow a table cell to grow to fit an image inside
it under |
1227 // very specific cirucumstances (in order to match common WinIE renderings). | 1227 // very specific cirucumstances (in order to match common WinIE renderings). |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 // If the text string starts with whitespace, then we need to go ahe
ad and | 1275 // If the text string starts with whitespace, then we need to go ahe
ad and |
1276 // terminate our current line (unless we're already in a whitespace
stripping | 1276 // terminate our current line (unless we're already in a whitespace
stripping |
1277 // mode. | 1277 // mode. |
1278 // | 1278 // |
1279 // If the text string has a breakable character in the middle, but d
idn't start | 1279 // If the text string has a breakable character in the middle, but d
idn't start |
1280 // with whitespace, then we add the width of the first non-breakable
run and | 1280 // with whitespace, then we add the width of the first non-breakable
run and |
1281 // then end the current line. We then need to use the intermediate m
in/max width | 1281 // then end the current line. We then need to use the intermediate m
in/max width |
1282 // values (if any of them are larger than our current min/max). We t
hen look at | 1282 // values (if any of them are larger than our current min/max). We t
hen look at |
1283 // the width of the last non-breakable run and use that to start a n
ew line | 1283 // the width of the last non-breakable run and use that to start a n
ew line |
1284 // (unless we end in whitespace). | 1284 // (unless we end in whitespace). |
1285 const LayoutStyle& childStyle = child->styleRef(); | 1285 const ComputedStyle& childStyle = child->styleRef(); |
1286 FloatWillBeLayoutUnit childMin; | 1286 FloatWillBeLayoutUnit childMin; |
1287 FloatWillBeLayoutUnit childMax; | 1287 FloatWillBeLayoutUnit childMax; |
1288 | 1288 |
1289 if (!child->isText()) { | 1289 if (!child->isText()) { |
1290 // Case (1) and (2). Inline replaced and inline flow elements. | 1290 // Case (1) and (2). Inline replaced and inline flow elements. |
1291 if (child->isLayoutInline()) { | 1291 if (child->isLayoutInline()) { |
1292 // Add in padding/border/margin from the appropriate side of | 1292 // Add in padding/border/margin from the appropriate side of |
1293 // the element. | 1293 // the element. |
1294 FloatWillBeLayoutUnit bpm = getBorderPaddingMargin(toLayoutI
nline(*child), childIterator.endOfInline); | 1294 FloatWillBeLayoutUnit bpm = getBorderPaddingMargin(toLayoutI
nline(*child), childIterator.endOfInline); |
1295 childMin += bpm; | 1295 childMin += bpm; |
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2052 float logicalLeft = logicalLeftOffsetForLine(logicalHeight(), false).toFloat
(); | 2052 float logicalLeft = logicalLeftOffsetForLine(logicalHeight(), false).toFloat
(); |
2053 float availableLogicalWidth = logicalRightOffsetForLine(logicalHeight(), fal
se) - logicalLeft; | 2053 float availableLogicalWidth = logicalRightOffsetForLine(logicalHeight(), fal
se) - logicalLeft; |
2054 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid
th, availableLogicalWidth, 0); | 2054 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid
th, availableLogicalWidth, 0); |
2055 | 2055 |
2056 if (!style()->isLeftToRightDirection()) | 2056 if (!style()->isLeftToRightDirection()) |
2057 return logicalWidth() - logicalLeft; | 2057 return logicalWidth() - logicalLeft; |
2058 return logicalLeft; | 2058 return logicalLeft; |
2059 } | 2059 } |
2060 | 2060 |
2061 } | 2061 } |
OLD | NEW |