Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (155367 => 155368)
--- trunk/Source/WebCore/rendering/RenderBlock.cpp 2013-09-09 18:40:04 UTC (rev 155367)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp 2013-09-09 18:47:22 UTC (rev 155368)
@@ -4555,29 +4555,10 @@
LayoutUnit RenderBlock::logicalLeftFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const
{
-#if !ENABLE(CSS_SHAPES)
- UNUSED_PARAM(offsetMode);
-#endif
- LayoutUnit left = fixedOffset;
- if (m_floatingObjects && m_floatingObjects->hasLeftObjects()) {
- ComputeFloatOffsetAdapter<FloatingObject::FloatLeft> adapter(this, roundToInt(logicalTop), roundToInt(logicalTop + logicalHeight), left);
- m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter);
+ if (m_floatingObjects && m_floatingObjects->hasLeftObjects())
+ return m_floatingObjects->logicalLeftOffset(fixedOffset, logicalTop, logicalHeight, offsetMode, heightRemaining);
- if (heightRemaining)
- *heightRemaining = adapter.getHeightRemaining();
-
-#if ENABLE(CSS_SHAPES)
- const FloatingObject* outermostFloat = adapter.outermostFloat();
- if (offsetMode == ShapeOutsideFloatShapeOffset && outermostFloat) {
- if (ShapeOutsideInfo* shapeOutside = outermostFloat->renderer()->shapeOutsideInfo()) {
- shapeOutside->computeSegmentsForContainingBlockLine(logicalTop, outermostFloat->logicalTop(isHorizontalWritingMode()), logicalHeight);
- left += shapeOutside->rightSegmentMarginBoxDelta();
- }
- }
-#endif
- }
-
- return left;
+ return fixedOffset;
}
LayoutUnit RenderBlock::adjustLogicalLeftOffsetForLine(LayoutUnit offsetFromFloats, bool applyTextIndent) const
@@ -4622,34 +4603,10 @@
LayoutUnit RenderBlock::logicalRightFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const
{
-#if !ENABLE(CSS_SHAPES)
- UNUSED_PARAM(offsetMode);
-#endif
- LayoutUnit right = fixedOffset;
- if (m_floatingObjects && m_floatingObjects->hasRightObjects()) {
- LayoutUnit rightFloatOffset = fixedOffset;
- ComputeFloatOffsetAdapter<FloatingObject::FloatRight> adapter(this, roundToInt(logicalTop), roundToInt(logicalTop + logicalHeight), rightFloatOffset);
- m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter);
+ if (m_floatingObjects && m_floatingObjects->hasRightObjects())
+ return m_floatingObjects->logicalRightOffset(fixedOffset, logicalTop, logicalHeight, offsetMode, heightRemaining);
- if (heightRemaining)
- *heightRemaining = adapter.getHeightRemaining();
-
-#if ENABLE(CSS_SHAPES)
- const FloatingObject* outermostFloat = adapter.outermostFloat();
- if (offsetMode == ShapeOutsideFloatShapeOffset && outermostFloat) {
- if (ShapeOutsideInfo* shapeOutside = outermostFloat->renderer()->shapeOutsideInfo()) {
- shapeOutside->computeSegmentsForContainingBlockLine(logicalTop, outermostFloat->logicalTop(isHorizontalWritingMode()), logicalHeight);
- rightFloatOffset += shapeOutside->leftSegmentMarginBoxDelta();
- }
- }
-#else
- UNUSED_PARAM(offsetMode);
-#endif
-
- right = min(right, rightFloatOffset);
- }
-
- return right;
+ return fixedOffset;
}
LayoutUnit RenderBlock::adjustLogicalRightOffsetForLine(LayoutUnit offsetFromFloats, bool applyTextIndent) const
@@ -8340,6 +8297,58 @@
}
}
+LayoutUnit RenderBlock::FloatingObjects::logicalLeftOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode, LayoutUnit *heightRemaining)
+{
+#if !ENABLE(CSS_SHAPES)
+ UNUSED_PARAM(offsetMode);
+#endif
+
+ LayoutUnit offset = fixedOffset;
+ ComputeFloatOffsetAdapter<FloatingObject::FloatLeft> adapter(m_renderer, roundToInt(logicalTop), roundToInt(logicalTop + logicalHeight), offset);
+ placedFloatsTree().allOverlapsWithAdapter(adapter);
+
+ if (heightRemaining)
+ *heightRemaining = adapter.getHeightRemaining();
+
+#if ENABLE(CSS_SHAPES)
+ const FloatingObject* outermostFloat = adapter.outermostFloat();
+ if (offsetMode == ShapeOutsideFloatShapeOffset && outermostFloat) {
+ if (ShapeOutsideInfo* shapeOutside = outermostFloat->renderer()->shapeOutsideInfo()) {
+ shapeOutside->computeSegmentsForContainingBlockLine(logicalTop, outermostFloat->logicalTop(m_horizontalWritingMode), logicalHeight);
+ offset += shapeOutside->rightSegmentMarginBoxDelta();
+ }
+ }
+#endif
+
+ return offset;
+}
+
+LayoutUnit RenderBlock::FloatingObjects::logicalRightOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode, LayoutUnit *heightRemaining)
+{
+#if !ENABLE(CSS_SHAPES)
+ UNUSED_PARAM(offsetMode);
+#endif
+
+ LayoutUnit offset = fixedOffset;
+ ComputeFloatOffsetAdapter<FloatingObject::FloatRight> adapter(m_renderer, roundToInt(logicalTop), roundToInt(logicalTop + logicalHeight), offset);
+ placedFloatsTree().allOverlapsWithAdapter(adapter);
+
+ if (heightRemaining)
+ *heightRemaining = adapter.getHeightRemaining();
+
+#if ENABLE(CSS_SHAPES)
+ const FloatingObject* outermostFloat = adapter.outermostFloat();
+ if (offsetMode == ShapeOutsideFloatShapeOffset && outermostFloat) {
+ if (ShapeOutsideInfo* shapeOutside = outermostFloat->renderer()->shapeOutsideInfo()) {
+ shapeOutside->computeSegmentsForContainingBlockLine(logicalTop, outermostFloat->logicalTop(m_horizontalWritingMode), logicalHeight);
+ offset += shapeOutside->leftSegmentMarginBoxDelta();
+ }
+ }
+#endif
+
+ return min(fixedOffset, offset);
+}
+
template <typename CharacterType>
static inline TextRun constructTextRunInternal(RenderObject* context, const Font& font, const CharacterType* characters, int length, RenderStyle* style, TextRun::ExpansionBehavior expansion)
{
Modified: trunk/Source/WebCore/rendering/RenderBlock.h (155367 => 155368)
--- trunk/Source/WebCore/rendering/RenderBlock.h 2013-09-09 18:40:04 UTC (rev 155367)
+++ trunk/Source/WebCore/rendering/RenderBlock.h 2013-09-09 18:47:22 UTC (rev 155368)
@@ -1264,19 +1264,17 @@
bool hasLeftObjects() const { return m_leftObjectsCount > 0; }
bool hasRightObjects() const { return m_rightObjectsCount > 0; }
const FloatingObjectSet& set() const { return m_set; }
- const FloatingObjectTree& placedFloatsTree()
- {
- computePlacedFloatsTreeIfNeeded();
- return m_placedFloatsTree;
- }
void clearLineBoxTreePointers();
+ LayoutUnit logicalLeftOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode = ShapeOutsideFloatShapeOffset, LayoutUnit* heightRemaining = 0);
+ LayoutUnit logicalRightOffset(LayoutUnit fixedOffset, LayoutUnit logicalTop, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode = ShapeOutsideFloatShapeOffset, LayoutUnit* heightRemaining = 0);
private:
FloatingObjects(const RenderBlock*, bool horizontalWritingMode);
void computePlacedFloatsTree();
- inline void computePlacedFloatsTreeIfNeeded()
+ const FloatingObjectTree& placedFloatsTree()
{
if (!m_placedFloatsTree.isInitialized())
computePlacedFloatsTree();
+ return m_placedFloatsTree;
}
void increaseObjectsCount(FloatingObject::Type);
void decreaseObjectsCount(FloatingObject::Type);