summaryrefslogtreecommitdiff
path: root/chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp b/chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp
index c6e004d649c..301200b19e7 100644
--- a/chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp
+++ b/chromium/third_party/WebKit/Source/core/rendering/shapes/ShapeInsideInfo.cpp
@@ -51,7 +51,8 @@ bool ShapeInsideInfo::isEnabledFor(const RenderBlock* renderer)
case ShapeValue::Shape:
return shapeValue->shape() && shapeValue->shape()->type() != BasicShape::BasicShapeInsetRectangleType;
case ShapeValue::Image:
- return shapeValue->isImageValid();
+ return shapeValue->isImageValid() && checkShapeImageOrigin(renderer->document(), *(shapeValue->image()->cachedImage()));
+ case ShapeValue::Box:
case ShapeValue::Outside:
return false;
}
@@ -59,6 +60,30 @@ bool ShapeInsideInfo::isEnabledFor(const RenderBlock* renderer)
return false;
}
+bool ShapeInsideInfo::updateSegmentsForLine(LayoutSize lineOffset, LayoutUnit lineHeight)
+{
+ bool result = updateSegmentsForLine(lineOffset.height(), lineHeight);
+ for (size_t i = 0; i < m_segments.size(); i++) {
+ m_segments[i].logicalLeft -= lineOffset.width();
+ m_segments[i].logicalRight -= lineOffset.width();
+ }
+ return result;
+}
+
+bool ShapeInsideInfo::updateSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineHeight)
+{
+ ASSERT(lineHeight >= 0);
+ m_shapeLineTop = lineTop - logicalTopOffset();
+ m_lineHeight = lineHeight;
+ m_segments.clear();
+ m_segmentRanges.clear();
+
+ if (lineOverlapsShapeBounds())
+ m_segments = computeSegmentsForLine(lineTop, lineHeight);
+
+ return m_segments.size();
+}
+
bool ShapeInsideInfo::adjustLogicalLineTop(float minSegmentWidth)
{
const Shape* shape = computedShape();
@@ -81,4 +106,16 @@ ShapeValue* ShapeInsideInfo::shapeValue() const
return m_renderer->style()->resolvedShapeInside();
}
+LayoutUnit ShapeInsideInfo::computeFirstFitPositionForFloat(const LayoutSize floatSize) const
+{
+ if (!computedShape() || !floatSize.width() || shapeLogicalBottom() < logicalLineTop())
+ return 0;
+
+ LayoutUnit firstFitPosition = 0;
+ if (computedShape()->firstIncludedIntervalLogicalTop(m_shapeLineTop, floatSize, firstFitPosition) && (m_shapeLineTop <= firstFitPosition))
+ return firstFitPosition;
+
+ return 0;
+}
+
}