summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderBlockLineLayout.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-25 15:09:11 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-25 15:09:11 +0200
commita89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd (patch)
treeb7abd9f49ae1d4d2e426a5883bfccd42b8e2ee12 /Source/WebCore/rendering/RenderBlockLineLayout.cpp
parent8d473cf9743f1d30a16a27114e93bd5af5648d23 (diff)
downloadqtwebkit-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-xSource/WebCore/rendering/RenderBlockLineLayout.cpp11
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)) {