Diff
Modified: trunk/Source/WebCore/ChangeLog (157673 => 157674)
--- trunk/Source/WebCore/ChangeLog 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/ChangeLog 2013-10-19 19:55:40 UTC (rev 157674)
@@ -1,3 +1,36 @@
+2013-10-18 Sam Weinig <[email protected]>
+
+ Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 2)
+ https://bugs.webkit.org/show_bug.cgi?id=122969
+
+ Reviewed by Antti Koivisto.
+
+ - Move truncation (e.g. line clamp and ellipse) support to RenderBlockFlow.
+
+ * rendering/EllipsisBox.cpp:
+ (WebCore::EllipsisBox::EllipsisBox):
+ (WebCore::EllipsisBox::paint):
+ (WebCore::EllipsisBox::markupBox):
+ (WebCore::EllipsisBox::selectionRect):
+ (WebCore::EllipsisBox::paintSelection):
+ (WebCore::EllipsisBox::nodeAtPoint):
+ * rendering/EllipsisBox.h:
+ * rendering/RenderBlock.cpp:
+ * rendering/RenderBlock.h:
+ * rendering/RenderBlockFlow.cpp:
+ (WebCore::shouldCheckLines):
+ (WebCore::RenderBlockFlow::lineAtIndex):
+ (WebCore::RenderBlockFlow::lineCount):
+ (WebCore::getHeightForLineCount):
+ (WebCore::RenderBlockFlow::heightForLineCount):
+ (WebCore::RenderBlockFlow::clearTruncation):
+ * rendering/RenderBlockFlow.h:
+ * rendering/RenderDeprecatedFlexibleBox.cpp:
+ (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
+ (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
+ * rendering/RootInlineBox.cpp:
+ (WebCore::RootInlineBox::placeEllipsis):
+
2013-10-19 Andreas Kling <[email protected]>
StyleResolver should deal in PassRef<RenderStyle> where possible.
Modified: trunk/Source/WebCore/rendering/EllipsisBox.cpp (157673 => 157674)
--- trunk/Source/WebCore/rendering/EllipsisBox.cpp 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/EllipsisBox.cpp 2013-10-19 19:55:40 UTC (rev 157674)
@@ -26,13 +26,12 @@
#include "HitTestResult.h"
#include "InlineTextBox.h"
#include "PaintInfo.h"
-#include "RenderBlock.h"
#include "RootInlineBox.h"
#include "TextRun.h"
namespace WebCore {
-EllipsisBox::EllipsisBox(RenderBlock& renderer, const AtomicString& ellipsisStr, InlineFlowBox* parent, int width, int height, int y, bool firstLine, bool isVertical, InlineBox* markupBox)
+EllipsisBox::EllipsisBox(RenderBlockFlow& renderer, const AtomicString& ellipsisStr, InlineFlowBox* parent, int width, int height, int y, bool firstLine, bool isVertical, InlineBox* markupBox)
: InlineBox(renderer, FloatPoint(0, y), width, firstLine, true, false, false, isVertical, 0, 0, parent)
, m_shouldPaintMarkupBox(markupBox)
, m_height(height)
@@ -60,13 +59,13 @@
paintSelection(context, paintOffset, lineStyle, font);
// Select the correct color for painting the text.
- Color foreground = paintInfo.forceBlackText() ? Color::black : renderer().selectionForegroundColor();
+ Color foreground = paintInfo.forceBlackText() ? Color::black : blockFlow().selectionForegroundColor();
if (foreground.isValid() && foreground != textColor)
context->setFillColor(foreground, lineStyle.colorSpace());
}
// FIXME: Why is this always LTR? Fix by passing correct text run flags below.
- context->drawText(font, RenderBlock::constructTextRun(&renderer(), font, m_str, lineStyle, TextRun::AllowTrailingExpansion), LayoutPoint(x() + paintOffset.x(), y() + paintOffset.y() + lineStyle.fontMetrics().ascent()));
+ context->drawText(font, RenderBlock::constructTextRun(&blockFlow(), font, m_str, lineStyle, TextRun::AllowTrailingExpansion), LayoutPoint(x() + paintOffset.x(), y() + paintOffset.y() + lineStyle.fontMetrics().ascent()));
// Restore the regular fill color.
if (textColor != context->fillColor())
@@ -83,7 +82,7 @@
if (!m_shouldPaintMarkupBox)
return 0;
- RootInlineBox* lastLine = renderer().lineAtIndex(renderer().lineCount() - 1);
+ RootInlineBox* lastLine = blockFlow().lineAtIndex(blockFlow().lineCount() - 1);
if (!lastLine)
return 0;
@@ -114,13 +113,13 @@
const Font& font = lineStyle.font();
const RootInlineBox& rootBox = root();
// FIXME: Why is this always LTR? Fix by passing correct text run flags below.
- return enclosingIntRect(font.selectionRectForText(RenderBlock::constructTextRun(&renderer(), font, m_str, lineStyle, TextRun::AllowTrailingExpansion), IntPoint(x(), y() + rootBox.selectionTopAdjustedForPrecedingBlock()), rootBox.selectionHeightAdjustedForPrecedingBlock()));
+ return enclosingIntRect(font.selectionRectForText(RenderBlock::constructTextRun(&blockFlow(), font, m_str, lineStyle, TextRun::AllowTrailingExpansion), IntPoint(x(), y() + rootBox.selectionTopAdjustedForPrecedingBlock()), rootBox.selectionHeightAdjustedForPrecedingBlock()));
}
void EllipsisBox::paintSelection(GraphicsContext* context, const LayoutPoint& paintOffset, const RenderStyle& style, const Font& font)
{
Color textColor = style.visitedDependentColor(CSSPropertyColor);
- Color c = renderer().selectionBackgroundColor();
+ Color c = blockFlow().selectionBackgroundColor();
if (!c.isValid() || !c.alpha())
return;
@@ -138,7 +137,7 @@
GraphicsContextStateSaver stateSaver(*context);
context->clip(clipRect);
// FIXME: Why is this always LTR? Fix by passing correct text run flags below.
- context->drawHighlightForText(font, RenderBlock::constructTextRun(&renderer(), font, m_str, style, TextRun::AllowTrailingExpansion), roundedIntPoint(LayoutPoint(x() + paintOffset.x(), y() + paintOffset.y() + top)), h, c, style.colorSpace());
+ context->drawHighlightForText(font, RenderBlock::constructTextRun(&blockFlow(), font, m_str, style, TextRun::AllowTrailingExpansion), roundedIntPoint(LayoutPoint(x() + paintOffset.x(), y() + paintOffset.y() + top)), h, c, style.colorSpace());
}
bool EllipsisBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, LayoutUnit lineBottom)
@@ -151,15 +150,15 @@
LayoutUnit mtx = adjustedLocation.x() + m_logicalWidth - markupBox->x();
LayoutUnit mty = adjustedLocation.y() + lineStyle.fontMetrics().ascent() - (markupBox->y() + markupBox->lineStyle().fontMetrics().ascent());
if (markupBox->nodeAtPoint(request, result, locationInContainer, LayoutPoint(mtx, mty), lineTop, lineBottom)) {
- renderer().updateHitTestResult(result, locationInContainer.point() - LayoutSize(mtx, mty));
+ blockFlow().updateHitTestResult(result, locationInContainer.point() - LayoutSize(mtx, mty));
return true;
}
}
LayoutRect boundsRect(adjustedLocation, LayoutSize(m_logicalWidth, m_height));
if (visibleToHitTesting() && boundsRect.intersects(HitTestLocation::rectForPoint(locationInContainer.point(), 0, 0, 0, 0))) {
- renderer().updateHitTestResult(result, locationInContainer.point() - toLayoutSize(adjustedLocation));
- if (!result.addNodeToRectBasedTestResult(renderer().element(), request, locationInContainer, boundsRect))
+ blockFlow().updateHitTestResult(result, locationInContainer.point() - toLayoutSize(adjustedLocation));
+ if (!result.addNodeToRectBasedTestResult(blockFlow().element(), request, locationInContainer, boundsRect))
return true;
}
Modified: trunk/Source/WebCore/rendering/EllipsisBox.h (157673 => 157674)
--- trunk/Source/WebCore/rendering/EllipsisBox.h 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/EllipsisBox.h 2013-10-19 19:55:40 UTC (rev 157674)
@@ -21,7 +21,7 @@
#define EllipsisBox_h
#include "InlineBox.h"
-#include "RenderBlock.h"
+#include "RenderBlockFlow.h"
namespace WebCore {
@@ -30,13 +30,13 @@
class EllipsisBox FINAL : public InlineBox {
public:
- EllipsisBox(RenderBlock&, const AtomicString& ellipsisStr, InlineFlowBox* parent, int width, int height, int y, bool firstLine, bool isVertical, InlineBox* markupBox);
+ EllipsisBox(RenderBlockFlow&, const AtomicString& ellipsisStr, InlineFlowBox* parent, int width, int height, int y, bool firstLine, bool isVertical, InlineBox* markupBox);
virtual void paint(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom);
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, LayoutUnit lineTop, LayoutUnit lineBottom) OVERRIDE;
void setSelectionState(RenderObject::SelectionState s) { m_selectionState = s; }
IntRect selectionRect();
- RenderBlock& renderer() const { return toRenderBlock(InlineBox::renderer()); }
+ RenderBlockFlow& blockFlow() const { return toRenderBlockFlow(InlineBox::renderer()); }
private:
void paintMarkupBox(PaintInfo&, const LayoutPoint& paintOffset, LayoutUnit lineTop, LayoutUnit lineBottom, const RenderStyle&);
Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (157673 => 157674)
--- trunk/Source/WebCore/rendering/RenderBlock.cpp 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp 2013-10-19 19:55:40 UTC (rev 157674)
@@ -5181,100 +5181,6 @@
createFirstLetterRenderer(firstLetterBlock, toRenderText(descendant));
}
-// Helper methods for obtaining the last line, computing line counts and heights for line counts
-// (crawling into blocks).
-static bool shouldCheckLines(RenderObject* obj)
-{
- return !obj->isFloatingOrOutOfFlowPositioned() && !obj->isRunIn()
- && obj->isRenderBlock() && obj->style()->height().isAuto()
- && (!obj->isDeprecatedFlexibleBox() || obj->style()->boxOrient() == VERTICAL);
-}
-
-static int getHeightForLineCount(RenderBlock* block, int l, bool includeBottom, int& count)
-{
- if (block->style()->visibility() == VISIBLE) {
- if (block->childrenInline()) {
- for (RootInlineBox* box = block->firstRootBox(); box; box = box->nextRootBox()) {
- if (++count == l)
- return box->lineBottom() + (includeBottom ? (block->borderBottom() + block->paddingBottom()) : LayoutUnit());
- }
- }
- else {
- RenderBox* normalFlowChildWithoutLines = 0;
- for (RenderBox* obj = block->firstChildBox(); obj; obj = obj->nextSiblingBox()) {
- if (shouldCheckLines(obj)) {
- int result = getHeightForLineCount(toRenderBlock(obj), l, false, count);
- if (result != -1)
- return result + obj->y() + (includeBottom ? (block->borderBottom() + block->paddingBottom()) : LayoutUnit());
- } else if (!obj->isFloatingOrOutOfFlowPositioned() && !obj->isRunIn())
- normalFlowChildWithoutLines = obj;
- }
- if (normalFlowChildWithoutLines && l == 0)
- return normalFlowChildWithoutLines->y() + normalFlowChildWithoutLines->height();
- }
- }
-
- return -1;
-}
-
-RootInlineBox* RenderBlock::lineAtIndex(int i) const
-{
- ASSERT(i >= 0);
-
- if (style()->visibility() != VISIBLE)
- return 0;
-
- if (childrenInline()) {
- for (RootInlineBox* box = firstRootBox(); box; box = box->nextRootBox())
- if (!i--)
- return box;
- } else {
- for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
- if (!shouldCheckLines(child))
- continue;
- if (RootInlineBox* box = toRenderBlock(child)->lineAtIndex(i))
- return box;
- }
- }
-
- return 0;
-}
-
-int RenderBlock::lineCount(const RootInlineBox* stopRootInlineBox, bool* found) const
-{
- int count = 0;
-
- if (style()->visibility() == VISIBLE) {
- if (childrenInline())
- for (RootInlineBox* box = firstRootBox(); box; box = box->nextRootBox()) {
- count++;
- if (box == stopRootInlineBox) {
- if (found)
- *found = true;
- break;
- }
- }
- else
- for (RenderObject* obj = firstChild(); obj; obj = obj->nextSibling())
- if (shouldCheckLines(obj)) {
- bool recursiveFound = false;
- count += toRenderBlock(obj)->lineCount(stopRootInlineBox, &recursiveFound);
- if (recursiveFound) {
- if (found)
- *found = true;
- break;
- }
- }
- }
- return count;
-}
-
-int RenderBlock::heightForLineCount(int l)
-{
- int count = 0;
- return getHeightForLineCount(this, l, true, count);
-}
-
void RenderBlock::adjustForBorderFit(LayoutUnit x, LayoutUnit& left, LayoutUnit& right) const
{
// We don't deal with relative positioning. Our assumption is that you shrink to fit the lines without accounting
@@ -5330,22 +5236,6 @@
clearOverrideLogicalContentWidth();
}
-void RenderBlock::clearTruncation()
-{
- if (style()->visibility() == VISIBLE) {
- if (childrenInline() && hasMarkupTruncation()) {
- setHasMarkupTruncation(false);
- for (RootInlineBox* box = firstRootBox(); box; box = box->nextRootBox())
- box->clearTruncation();
- } else {
- for (RenderObject* obj = firstChild(); obj; obj = obj->nextSibling()) {
- if (shouldCheckLines(obj))
- toRenderBlock(obj)->clearTruncation();
- }
- }
- }
-}
-
void RenderBlock::setPaginationStrut(LayoutUnit strut)
{
if (!m_rareData) {
Modified: trunk/Source/WebCore/rendering/RenderBlock.h (157673 => 157674)
--- trunk/Source/WebCore/rendering/RenderBlock.h 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/RenderBlock.h 2013-10-19 19:55:40 UTC (rev 157674)
@@ -143,9 +143,6 @@
static void clearPercentHeightDescendantsFrom(RenderBox*);
static void removePercentHeightDescendantIfNeeded(RenderBox*);
- void setHasMarkupTruncation(bool b) { m_hasMarkupTruncation = b; }
- bool hasMarkupTruncation() const { return m_hasMarkupTruncation; }
-
void setHasMarginBeforeQuirk(bool b) { m_hasMarginBeforeQuirk = b; }
void setHasMarginAfterQuirk(bool b) { m_hasMarginAfterQuirk = b; }
@@ -250,12 +247,6 @@
LayoutRect logicalRectToPhysicalRect(const LayoutPoint& physicalPosition, const LayoutRect& logicalRect);
- // Helper methods for computing line counts and heights for line counts.
- RootInlineBox* lineAtIndex(int) const;
- int lineCount(const RootInlineBox* = 0, bool* = 0) const;
- int heightForLineCount(int);
- void clearTruncation();
-
void adjustRectForColumns(LayoutRect&) const;
virtual void adjustForColumns(LayoutSize&, const LayoutPoint&) const OVERRIDE FINAL;
void adjustForColumnRect(LayoutSize& offset, const LayoutPoint& locationInContainer) const;
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (157673 => 157674)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2013-10-19 19:55:40 UTC (rev 157674)
@@ -2411,4 +2411,116 @@
m_rareData->m_renderNamedFlowFragment = flowFragment;
}
+static bool shouldCheckLines(RenderObject& obj)
+{
+ return !obj.isFloatingOrOutOfFlowPositioned() && !obj.isRunIn() && obj.isRenderBlockFlow() && obj.style()->height().isAuto() && (!obj.isDeprecatedFlexibleBox() || obj.style()->boxOrient() == VERTICAL);
+}
+
+RootInlineBox* RenderBlockFlow::lineAtIndex(int i) const
+{
+ ASSERT(i >= 0);
+
+ if (style()->visibility() != VISIBLE)
+ return nullptr;
+
+ if (childrenInline()) {
+ for (auto box = firstRootBox(); box; box = box->nextRootBox()) {
+ if (!i--)
+ return box;
+ }
+ } else {
+ for (auto child = firstChild(); child; child = child->nextSibling()) {
+ if (!shouldCheckLines(*child))
+ continue;
+ if (RootInlineBox* box = toRenderBlockFlow(child)->lineAtIndex(i))
+ return box;
+ }
+ }
+
+ return nullptr;
+}
+
+int RenderBlockFlow::lineCount(const RootInlineBox* stopRootInlineBox, bool* found) const
+{
+ if (style()->visibility() != VISIBLE)
+ return 0;
+
+ int count = 0;
+
+ if (childrenInline()) {
+ for (auto box = firstRootBox(); box; box = box->nextRootBox()) {
+ count++;
+ if (box == stopRootInlineBox) {
+ if (found)
+ *found = true;
+ break;
+ }
+ }
+ } else {
+ for (auto child = firstChild(); child; child = child->nextSibling()) {
+ if (shouldCheckLines(*child)) {
+ bool recursiveFound = false;
+ count += toRenderBlockFlow(child)->lineCount(stopRootInlineBox, &recursiveFound);
+ if (recursiveFound) {
+ if (found)
+ *found = true;
+ break;
+ }
+ }
+ }
+ }
+
+ return count;
+}
+
+static int getHeightForLineCount(const RenderBlockFlow& block, int lineCount, bool includeBottom, int& count)
+{
+ if (block.style()->visibility() != VISIBLE)
+ return -1;
+
+ if (block.childrenInline()) {
+ for (auto box = block.firstRootBox(); box; box = box->nextRootBox()) {
+ if (++count == lineCount)
+ return box->lineBottom() + (includeBottom ? (block.borderBottom() + block.paddingBottom()) : LayoutUnit());
+ }
+ } else {
+ RenderBox* normalFlowChildWithoutLines = 0;
+ for (auto obj = block.firstChildBox(); obj; obj = obj->nextSiblingBox()) {
+ if (shouldCheckLines(*obj)) {
+ int result = getHeightForLineCount(toRenderBlockFlow(*obj), lineCount, false, count);
+ if (result != -1)
+ return result + obj->y() + (includeBottom ? (block.borderBottom() + block.paddingBottom()) : LayoutUnit());
+ } else if (!obj->isFloatingOrOutOfFlowPositioned() && !obj->isRunIn())
+ normalFlowChildWithoutLines = obj;
+ }
+ if (normalFlowChildWithoutLines && !lineCount)
+ return normalFlowChildWithoutLines->y() + normalFlowChildWithoutLines->height();
+ }
+
+ return -1;
+}
+
+int RenderBlockFlow::heightForLineCount(int lineCount)
+{
+ int count = 0;
+ return getHeightForLineCount(*this, lineCount, true, count);
+}
+
+void RenderBlockFlow::clearTruncation()
+{
+ if (style()->visibility() != VISIBLE)
+ return;
+
+ if (childrenInline() && hasMarkupTruncation()) {
+ setHasMarkupTruncation(false);
+ for (auto box = firstRootBox(); box; box = box->nextRootBox())
+ box->clearTruncation();
+ } else {
+ for (auto child = firstChild(); child; child = child->nextSibling()) {
+ if (shouldCheckLines(*child))
+ toRenderBlockFlow(child)->clearTruncation();
+ }
+ }
+}
+
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (157673 => 157674)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.h 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h 2013-10-19 19:55:40 UTC (rev 157674)
@@ -296,6 +296,15 @@
floatingObject->setHeight(logicalWidth);
}
+ // Helper methods for computing line counts and heights for line counts.
+ RootInlineBox* lineAtIndex(int) const;
+ int lineCount(const RootInlineBox* = nullptr, bool* = nullptr) const;
+ int heightForLineCount(int);
+ void clearTruncation();
+
+ void setHasMarkupTruncation(bool b) { m_hasMarkupTruncation = b; }
+ bool hasMarkupTruncation() const { return m_hasMarkupTruncation; }
+
protected:
LayoutUnit maxPositiveMarginBefore() const { return m_rareData ? m_rareData->m_margins.positiveMarginBefore() : RenderBlockFlowRareData::positiveMarginBeforeDefault(this); }
LayoutUnit maxNegativeMarginBefore() const { return m_rareData ? m_rareData->m_margins.negativeMarginBefore() : RenderBlockFlowRareData::negativeMarginBeforeDefault(this); }
Modified: trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp (157673 => 157674)
--- trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp 2013-10-19 19:55:40 UTC (rev 157674)
@@ -954,18 +954,18 @@
child->clearOverrideSize();
if (relayoutChildren || (child->isReplaced() && (child->style()->width().isPercent() || child->style()->height().isPercent()))
- || (child->style()->height().isAuto() && child->isRenderBlock())) {
+ || (child->style()->height().isAuto() && child->isRenderBlockFlow())) {
child->setChildNeedsLayout(MarkOnlyThis);
// Dirty all the positioned objects.
- if (child->isRenderBlock()) {
- toRenderBlock(child)->markPositionedObjectsForLayout();
- toRenderBlock(child)->clearTruncation();
+ if (child->isRenderBlockFlow()) {
+ toRenderBlockFlow(child)->markPositionedObjectsForLayout();
+ toRenderBlockFlow(child)->clearTruncation();
}
}
child->layoutIfNeeded();
- if (child->style()->height().isAuto() && child->isRenderBlock())
- maxLineCount = max(maxLineCount, toRenderBlock(child)->lineCount());
+ if (child->style()->height().isAuto() && child->isRenderBlockFlow())
+ maxLineCount = max(maxLineCount, toRenderBlockFlow(child)->lineCount());
}
// Get the number of lines and then alter all block flow children with auto height to use the
@@ -976,10 +976,10 @@
return;
for (RenderBox* child = iterator.first(); child; child = iterator.next()) {
- if (childDoesNotAffectWidthOrFlexing(child) || !child->style()->height().isAuto() || !child->isRenderBlock())
+ if (childDoesNotAffectWidthOrFlexing(child) || !child->style()->height().isAuto() || !child->isRenderBlockFlow())
continue;
- RenderBlock* blockChild = toRenderBlock(child);
+ RenderBlockFlow* blockChild = toRenderBlockFlow(child);
int lineCount = blockChild->lineCount();
if (lineCount <= numVisibleLines)
continue;
@@ -1022,8 +1022,8 @@
}
// See if this width can be accommodated on the last visible line
- RenderBlock& destBlock = toRenderBlock(lastVisibleLine->renderer());
- RenderBlock& srcBlock = toRenderBlock(lastLine->renderer());
+ RenderBlockFlow& destBlock = lastVisibleLine->blockFlow();
+ RenderBlockFlow& srcBlock = lastLine->blockFlow();
// FIXME: Directions of src/destBlock could be different from our direction and from one another.
if (!srcBlock.style()->isLeftToRightDirection())
@@ -1057,9 +1057,9 @@
|| (child->style()->height().isAuto() && child->isRenderBlock())) {
child->setChildNeedsLayout();
- if (child->isRenderBlock()) {
- toRenderBlock(child)->markPositionedObjectsForLayout();
- toRenderBlock(child)->clearTruncation();
+ if (child->isRenderBlockFlow()) {
+ toRenderBlockFlow(child)->markPositionedObjectsForLayout();
+ toRenderBlockFlow(child)->clearTruncation();
}
}
}
Modified: trunk/Source/WebCore/rendering/RootInlineBox.cpp (157673 => 157674)
--- trunk/Source/WebCore/rendering/RootInlineBox.cpp 2013-10-19 19:55:32 UTC (rev 157673)
+++ trunk/Source/WebCore/rendering/RootInlineBox.cpp 2013-10-19 19:55:40 UTC (rev 157674)
@@ -128,14 +128,11 @@
return InlineFlowBox::canAccommodateEllipsis(ltr, blockEdge, ellipsisWidth);
}
-float RootInlineBox::placeEllipsis(const AtomicString& ellipsisStr, bool ltr, float blockLeftEdge, float blockRightEdge, float ellipsisWidth,
- InlineBox* markupBox)
+float RootInlineBox::placeEllipsis(const AtomicString& ellipsisStr, bool ltr, float blockLeftEdge, float blockRightEdge, float ellipsisWidth, InlineBox* markupBox)
{
// Create an ellipsis box.
- EllipsisBox* ellipsisBox = new (renderer().renderArena()) EllipsisBox(blockFlow(), ellipsisStr, this,
- ellipsisWidth - (markupBox ? markupBox->logicalWidth() : 0), logicalHeight(),
- y(), !prevRootBox(), isHorizontal(), markupBox);
-
+ EllipsisBox* ellipsisBox = new (renderer().renderArena()) EllipsisBox(blockFlow(), ellipsisStr, this, ellipsisWidth - (markupBox ? markupBox->logicalWidth() : 0), logicalHeight(), y(), !prevRootBox(), isHorizontal(), markupBox);
+
if (!gEllipsisBoxMap)
gEllipsisBoxMap = new EllipsisBoxMap();
gEllipsisBoxMap->add(this, ellipsisBox);