diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-25 15:09:11 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-25 15:09:11 +0200 |
commit | a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (patch) | |
tree | b7abd9f49ae1d4d2e426a5883bfccd42b8e2ee12 /Source/WebCore/rendering/RenderBlockLineLayout.cpp | |
parent | 8d473cf9743f1d30a16a27114e93bd5af5648d23 (diff) | |
download | qtwebkit-a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd.tar.gz |
Imported WebKit commit eb5c1b8fe4d4b1b90b5137433fc58a91da0e6878 (http://svn.webkit.org/repository/webkit/trunk@118516)
Diffstat (limited to 'Source/WebCore/rendering/RenderBlockLineLayout.cpp')
-rwxr-xr-x | Source/WebCore/rendering/RenderBlockLineLayout.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp index 922e72fa5..eb7e87efb 100755 --- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp +++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp @@ -315,8 +315,7 @@ static inline BidiRun* createRun(int start, int end, RenderObject* obj, InlineBi void RenderBlock::appendRunsForObject(BidiRunList<BidiRun>& runs, int start, int end, RenderObject* obj, InlineBidiResolver& resolver) { - if (start > end || obj->isFloating() || - (obj->isPositioned() && !obj->style()->isOriginalDisplayInlineType() && !obj->container()->isRenderInline())) + if (start > end || shouldSkipCreatingRunsForObject(obj)) return; LineMidpointState& lineMidpointState = resolver.midpointState(); @@ -1001,7 +1000,11 @@ static inline void constructBidiRuns(InlineBidiResolver& topResolver, BidiRunLis // rniwa says previousLineBrokeCleanly is just a WinIE hack and could always be false here? isolatedResolver.createBidiRunsForLine(endOfLine, NoVisualOverride, previousLineBrokeCleanly); // Note that we do not delete the runs from the resolver. - bidiRuns.replaceRunWithRuns(isolatedRun, isolatedResolver.runs()); + // We're not guaranteed to get any BidiRuns in the previous step. If we don't, we allow the placeholder + // itself to be turned into an InlineBox. We can't remove it here without potentially losing track of + // the logically last run. + if (isolatedResolver.runs().runCount()) + bidiRuns.replaceRunWithRuns(isolatedRun, isolatedResolver.runs()); // If we encountered any nested isolate runs, just move them // to the top resolver's list for later processing. @@ -1499,7 +1502,6 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, LayoutUnit& repain else if (layoutState.isFullLayout() || o->needsLayout()) { // Replaced elements toRenderBox(o)->dirtyLineBoxes(layoutState.isFullLayout()); - o->layoutIfNeeded(); } } else if (o->isText() || (o->isRenderInline() && !walker.atEndOfInline())) { if (!o->isText()) @@ -2269,6 +2271,7 @@ InlineIterator RenderBlock::LineBreaker::nextLineBreak(InlineBidiResolver& resol width.addUncommittedWidth(borderPaddingMarginStart(flowBox) + borderPaddingMarginEnd(flowBox)); } else if (current.m_obj->isReplaced()) { RenderBox* replacedBox = toRenderBox(current.m_obj); + replacedBox->layoutIfNeeded(); // Break on replaced elements if either has normal white-space. if ((autoWrap || RenderStyle::autoWrap(lastWS)) && (!current.m_obj->isImage() || allowImagesToBreak)) { |