summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/rendering/LineWidth.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/LineWidth.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/rendering/LineWidth.cpp197
1 files changed, 0 insertions, 197 deletions
diff --git a/chromium/third_party/WebKit/Source/core/rendering/LineWidth.cpp b/chromium/third_party/WebKit/Source/core/rendering/LineWidth.cpp
deleted file mode 100644
index ea720e2024e..00000000000
--- a/chromium/third_party/WebKit/Source/core/rendering/LineWidth.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/rendering/LineWidth.h"
-
-#include "core/rendering/RenderBlock.h"
-#include "core/rendering/RenderRubyRun.h"
-
-namespace WebCore {
-
-LineWidth::LineWidth(RenderBlockFlow& block, bool isFirstLine, IndentTextOrNot shouldIndentText)
- : m_block(block)
- , m_uncommittedWidth(0)
- , m_committedWidth(0)
- , m_overhangWidth(0)
- , m_left(0)
- , m_right(0)
- , m_availableWidth(0)
- , m_segment(0)
- , m_isFirstLine(isFirstLine)
- , m_shouldIndentText(shouldIndentText)
-{
- updateCurrentShapeSegment();
- updateAvailableWidth();
-}
-
-void LineWidth::updateAvailableWidth(LayoutUnit replacedHeight)
-{
- LayoutUnit height = m_block.logicalHeight();
- LayoutUnit logicalHeight = m_block.minLineHeightForReplacedRenderer(m_isFirstLine, replacedHeight);
- m_left = m_block.logicalLeftOffsetForLine(height, shouldIndentText(), logicalHeight);
- m_right = m_block.logicalRightOffsetForLine(height, shouldIndentText(), logicalHeight);
-
- if (m_segment) {
- m_left = std::max<float>(m_segment->logicalLeft, m_left);
- m_right = std::min<float>(m_segment->logicalRight, m_right);
- }
-
- computeAvailableWidthFromLeftAndRight();
-}
-
-void LineWidth::shrinkAvailableWidthForNewFloatIfNeeded(FloatingObject* newFloat)
-{
- LayoutUnit height = m_block.logicalHeight();
- if (height < m_block.logicalTopForFloat(newFloat) || height >= m_block.logicalBottomForFloat(newFloat))
- return;
-
- // When floats with shape outside are stacked, the floats are positioned based on the margin box of the float,
- // not the shape's contour. Since we computed the width based on the shape contour when we added the float,
- // when we add a subsequent float on the same line, we need to undo the shape delta in order to position
- // based on the margin box. In order to do this, we need to walk back through the floating object list to find
- // the first previous float that is on the same side as our newFloat.
- ShapeOutsideInfo* previousShapeOutsideInfo = 0;
- const FloatingObjectSet& floatingObjectSet = m_block.m_floatingObjects->set();
- FloatingObjectSetIterator it = floatingObjectSet.end();
- FloatingObjectSetIterator begin = floatingObjectSet.begin();
- LayoutUnit lineHeight = m_block.lineHeight(m_isFirstLine, m_block.isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes);
- for (--it; it != begin; --it) {
- FloatingObject* previousFloat = *it;
- if (previousFloat != newFloat && previousFloat->type() == newFloat->type()) {
- previousShapeOutsideInfo = previousFloat->renderer()->shapeOutsideInfo();
- if (previousShapeOutsideInfo)
- previousShapeOutsideInfo->updateDeltasForContainingBlockLine(&m_block, previousFloat, m_block.logicalHeight(), lineHeight);
- break;
- }
- }
-
- ShapeOutsideInfo* shapeOutsideInfo = newFloat->renderer()->shapeOutsideInfo();
- if (shapeOutsideInfo)
- shapeOutsideInfo->updateDeltasForContainingBlockLine(&m_block, newFloat, m_block.logicalHeight(), lineHeight);
-
- if (newFloat->type() == FloatingObject::FloatLeft) {
- float newLeft = m_block.logicalRightForFloat(newFloat);
- if (previousShapeOutsideInfo)
- newLeft -= previousShapeOutsideInfo->rightMarginBoxDelta();
- if (shapeOutsideInfo)
- newLeft += shapeOutsideInfo->rightMarginBoxDelta();
-
- if (shouldIndentText() && m_block.style()->isLeftToRightDirection())
- newLeft += floorToInt(m_block.textIndentOffset());
- m_left = std::max<float>(m_left, newLeft);
- } else {
- float newRight = m_block.logicalLeftForFloat(newFloat);
- if (previousShapeOutsideInfo)
- newRight -= previousShapeOutsideInfo->leftMarginBoxDelta();
- if (shapeOutsideInfo)
- newRight += shapeOutsideInfo->leftMarginBoxDelta();
-
- if (shouldIndentText() && !m_block.style()->isLeftToRightDirection())
- newRight -= floorToInt(m_block.textIndentOffset());
- m_right = std::min<float>(m_right, newRight);
- }
-
- computeAvailableWidthFromLeftAndRight();
-}
-
-void LineWidth::commit()
-{
- m_committedWidth += m_uncommittedWidth;
- m_uncommittedWidth = 0;
-}
-
-void LineWidth::applyOverhang(RenderRubyRun* rubyRun, RenderObject* startRenderer, RenderObject* endRenderer)
-{
- int startOverhang;
- int endOverhang;
- rubyRun->getOverhang(m_isFirstLine, startRenderer, endRenderer, startOverhang, endOverhang);
-
- startOverhang = std::min<int>(startOverhang, m_committedWidth);
- m_availableWidth += startOverhang;
-
- endOverhang = std::max(std::min<int>(endOverhang, m_availableWidth - currentWidth()), 0);
- m_availableWidth += endOverhang;
- m_overhangWidth += startOverhang + endOverhang;
-}
-
-void LineWidth::fitBelowFloats()
-{
- ASSERT(!m_committedWidth);
- ASSERT(!fitsOnLine());
-
- LayoutUnit floatLogicalBottom;
- LayoutUnit lastFloatLogicalBottom = m_block.logicalHeight();
- float newLineWidth = m_availableWidth;
- float newLineLeft = m_left;
- float newLineRight = m_right;
- while (true) {
- floatLogicalBottom = m_block.nextFloatLogicalBottomBelow(lastFloatLogicalBottom, ShapeOutsideFloatShapeOffset);
- if (floatLogicalBottom <= lastFloatLogicalBottom)
- break;
-
- newLineLeft = m_block.logicalLeftOffsetForLine(floatLogicalBottom, shouldIndentText());
- newLineRight = m_block.logicalRightOffsetForLine(floatLogicalBottom, shouldIndentText());
- newLineWidth = max(0.0f, newLineRight - newLineLeft);
- lastFloatLogicalBottom = floatLogicalBottom;
-
- // FIXME: This code should be refactored to incorporate with the code above.
- ShapeInsideInfo* shapeInsideInfo = m_block.layoutShapeInsideInfo();
- if (shapeInsideInfo) {
- LayoutUnit logicalOffsetFromShapeContainer = m_block.logicalOffsetFromShapeAncestorContainer(shapeInsideInfo->owner()).height();
- LayoutUnit lineHeight = m_block.lineHeight(false, m_block.isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes);
- shapeInsideInfo->updateSegmentsForLine(lastFloatLogicalBottom + logicalOffsetFromShapeContainer, lineHeight);
- updateCurrentShapeSegment();
- updateAvailableWidth();
- }
-
- if (newLineWidth >= m_uncommittedWidth)
- break;
- }
-
- if (newLineWidth > m_availableWidth) {
- m_block.setLogicalHeight(lastFloatLogicalBottom);
- m_availableWidth = newLineWidth + m_overhangWidth;
- m_left = newLineLeft;
- m_right = newLineRight;
- }
-}
-
-void LineWidth::updateCurrentShapeSegment()
-{
- if (ShapeInsideInfo* shapeInsideInfo = m_block.layoutShapeInsideInfo())
- m_segment = shapeInsideInfo->currentSegment();
-}
-
-void LineWidth::computeAvailableWidthFromLeftAndRight()
-{
- m_availableWidth = max(0.0f, m_right - m_left) + m_overhangWidth;
-}
-
-}