| Index: Source/core/layout/FloatingObjects.cpp
|
| diff --git a/Source/core/layout/FloatingObjects.cpp b/Source/core/layout/FloatingObjects.cpp
|
| index ddf72ac167b47ac9fc8f512472f7ff2ae49472ad..053334a7a406fda0c92a1e283361d6484502e4e1 100644
|
| --- a/Source/core/layout/FloatingObjects.cpp
|
| +++ b/Source/core/layout/FloatingObjects.cpp
|
| @@ -216,17 +216,17 @@ LayoutUnit FloatingObjects::lowestFloatLogicalBottom(FloatingObject::Type floatT
|
| LayoutUnit lowestFloatBottomLeft = 0;
|
| LayoutUnit lowestFloatBottomRight = 0;
|
| for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end; ++it) {
|
| - FloatingObject* floatingObject = it->get();
|
| - if (floatingObject->isPlaced()) {
|
| - FloatingObject::Type curType = floatingObject->type();
|
| + FloatingObject& floatingObject = *it->get();
|
| + if (floatingObject.isPlaced()) {
|
| + FloatingObject::Type curType = floatingObject.type();
|
| LayoutUnit curFloatLogicalBottom = m_layoutObject->logicalBottomForFloat(floatingObject);
|
| if (curType & FloatingObject::FloatLeft && curFloatLogicalBottom > lowestFloatBottomLeft) {
|
| lowestFloatBottomLeft = curFloatLogicalBottom;
|
| - lowestFloatingObjectLeft = floatingObject;
|
| + lowestFloatingObjectLeft = &floatingObject;
|
| }
|
| if (curType & FloatingObject::FloatRight && curFloatLogicalBottom > lowestFloatBottomRight) {
|
| lowestFloatBottomRight = curFloatLogicalBottom;
|
| - lowestFloatingObjectRight = floatingObject;
|
| + lowestFloatingObjectRight = &floatingObject;
|
| }
|
| }
|
| }
|
| @@ -236,10 +236,10 @@ LayoutUnit FloatingObjects::lowestFloatLogicalBottom(FloatingObject::Type floatT
|
| } else {
|
| FloatingObject* lowestFloatingObject = nullptr;
|
| for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end; ++it) {
|
| - FloatingObject* floatingObject = it->get();
|
| - if (floatingObject->isPlaced() && floatingObject->type() == floatType) {
|
| + FloatingObject& floatingObject = *it->get();
|
| + if (floatingObject.isPlaced() && floatingObject.type() == floatType) {
|
| if (m_layoutObject->logicalBottomForFloat(floatingObject) > lowestFloatBottom) {
|
| - lowestFloatingObject = floatingObject;
|
| + lowestFloatingObject = &floatingObject;
|
| lowestFloatBottom = m_layoutObject->logicalBottomForFloat(floatingObject);
|
| }
|
| }
|
| @@ -265,7 +265,7 @@ LayoutUnit FloatingObjects::getCachedlowestFloatLogicalBottom(FloatingObject::Ty
|
| ASSERT(floatIndex >= 0);
|
| if (!m_lowestFloatBottomCache[floatIndex].floatingObject)
|
| return LayoutUnit();
|
| - return m_layoutObject->logicalBottomForFloat(m_lowestFloatBottomCache[floatIndex].floatingObject);
|
| + return m_layoutObject->logicalBottomForFloat(*m_lowestFloatBottomCache[floatIndex].floatingObject);
|
| }
|
|
|
| void FloatingObjects::setCachedLowestFloatLogicalBottom(bool isHorizontal, FloatingObject::Type type, FloatingObject* floatingObject)
|
| @@ -285,8 +285,8 @@ FloatingObject* FloatingObjects::lowestFloatingObject() const
|
| return nullptr;
|
| FloatingObject* lowestLeftObject = m_lowestFloatBottomCache[0].floatingObject;
|
| FloatingObject* lowestRightObject = m_lowestFloatBottomCache[1].floatingObject;
|
| - LayoutUnit lowestFloatBottomLeft = lowestLeftObject ? m_layoutObject->logicalBottomForFloat(lowestLeftObject) : LayoutUnit();
|
| - LayoutUnit lowestFloatBottomRight = lowestRightObject ? m_layoutObject->logicalBottomForFloat(lowestRightObject) : LayoutUnit();
|
| + LayoutUnit lowestFloatBottomLeft = lowestLeftObject ? m_layoutObject->logicalBottomForFloat(*lowestLeftObject) : LayoutUnit();
|
| + LayoutUnit lowestFloatBottomRight = lowestRightObject ? m_layoutObject->logicalBottomForFloat(*lowestRightObject) : LayoutUnit();
|
|
|
| if (lowestFloatBottomLeft > lowestFloatBottomRight)
|
| return lowestLeftObject;
|
| @@ -325,39 +325,39 @@ inline void FloatingObjects::decreaseObjectsCount(FloatingObject::Type type)
|
| m_rightObjectsCount--;
|
| }
|
|
|
| -inline FloatingObjectInterval FloatingObjects::intervalForFloatingObject(FloatingObject* floatingObject)
|
| +inline FloatingObjectInterval FloatingObjects::intervalForFloatingObject(FloatingObject& floatingObject)
|
| {
|
| if (m_horizontalWritingMode)
|
| - return FloatingObjectInterval(floatingObject->frameRect().pixelSnappedY(), floatingObject->frameRect().pixelSnappedMaxY(), floatingObject);
|
| - return FloatingObjectInterval(floatingObject->frameRect().pixelSnappedX(), floatingObject->frameRect().pixelSnappedMaxX(), floatingObject);
|
| + return FloatingObjectInterval(floatingObject.frameRect().pixelSnappedY(), floatingObject.frameRect().pixelSnappedMaxY(), &floatingObject);
|
| + return FloatingObjectInterval(floatingObject.frameRect().pixelSnappedX(), floatingObject.frameRect().pixelSnappedMaxX(), &floatingObject);
|
| }
|
|
|
| -void FloatingObjects::addPlacedObject(FloatingObject* floatingObject)
|
| +void FloatingObjects::addPlacedObject(FloatingObject& floatingObject)
|
| {
|
| - ASSERT(!floatingObject->isInPlacedTree());
|
| + ASSERT(!floatingObject.isInPlacedTree());
|
|
|
| - floatingObject->setIsPlaced(true);
|
| + floatingObject.setIsPlaced(true);
|
| if (m_placedFloatsTree.isInitialized())
|
| m_placedFloatsTree.add(intervalForFloatingObject(floatingObject));
|
|
|
| #if ENABLE(ASSERT)
|
| - floatingObject->setIsInPlacedTree(true);
|
| + floatingObject.setIsInPlacedTree(true);
|
| #endif
|
| markLowestFloatLogicalBottomCacheAsDirty();
|
| }
|
|
|
| -void FloatingObjects::removePlacedObject(FloatingObject* floatingObject)
|
| +void FloatingObjects::removePlacedObject(FloatingObject& floatingObject)
|
| {
|
| - ASSERT(floatingObject->isPlaced() && floatingObject->isInPlacedTree());
|
| + ASSERT(floatingObject.isPlaced() && floatingObject.isInPlacedTree());
|
|
|
| if (m_placedFloatsTree.isInitialized()) {
|
| bool removed = m_placedFloatsTree.remove(intervalForFloatingObject(floatingObject));
|
| ASSERT_UNUSED(removed, removed);
|
| }
|
|
|
| - floatingObject->setIsPlaced(false);
|
| + floatingObject.setIsPlaced(false);
|
| #if ENABLE(ASSERT)
|
| - floatingObject->setIsInPlacedTree(false);
|
| + floatingObject.setIsInPlacedTree(false);
|
| #endif
|
| markLowestFloatLogicalBottomCacheAsDirty();
|
| }
|
| @@ -368,7 +368,7 @@ FloatingObject* FloatingObjects::add(PassOwnPtr<FloatingObject> floatingObject)
|
| increaseObjectsCount(newObject->type());
|
| m_set.add(adoptPtr(newObject));
|
| if (newObject->isPlaced())
|
| - addPlacedObject(newObject);
|
| + addPlacedObject(*newObject);
|
| markLowestFloatLogicalBottomCacheAsDirty();
|
| return newObject;
|
| }
|
| @@ -379,7 +379,7 @@ void FloatingObjects::remove(FloatingObject* toBeRemoved)
|
| OwnPtr<FloatingObject> floatingObject = m_set.take(toBeRemoved);
|
| ASSERT(floatingObject->isPlaced() || !floatingObject->isInPlacedTree());
|
| if (floatingObject->isPlaced())
|
| - removePlacedObject(floatingObject.get());
|
| + removePlacedObject(*floatingObject);
|
| markLowestFloatLogicalBottomCacheAsDirty();
|
| ASSERT(!floatingObject->originatingLine());
|
| }
|
| @@ -393,8 +393,8 @@ void FloatingObjects::computePlacedFloatsTree()
|
| FloatingObjectSetIterator it = m_set.begin();
|
| FloatingObjectSetIterator end = m_set.end();
|
| for (; it != end; ++it) {
|
| - FloatingObject* floatingObject = it->get();
|
| - if (floatingObject->isPlaced())
|
| + FloatingObject& floatingObject = *it->get();
|
| + if (floatingObject.isPlaced())
|
| m_placedFloatsTree.add(intervalForFloatingObject(floatingObject));
|
| }
|
| }
|
| @@ -468,7 +468,7 @@ inline static bool rangesIntersect(int floatTop, int floatBottom, int objectTop,
|
| template<>
|
| inline bool ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded(const FloatingObject& floatingObject)
|
| {
|
| - LayoutUnit logicalRight = m_layoutObject->logicalRightForFloat(&floatingObject);
|
| + LayoutUnit logicalRight = m_layoutObject->logicalRightForFloat(floatingObject);
|
| if (logicalRight > m_offset) {
|
| m_offset = logicalRight;
|
| return true;
|
| @@ -479,7 +479,7 @@ inline bool ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::
|
| template<>
|
| inline bool ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded(const FloatingObject& floatingObject)
|
| {
|
| - LayoutUnit logicalLeft = m_layoutObject->logicalLeftForFloat(&floatingObject);
|
| + LayoutUnit logicalLeft = m_layoutObject->logicalLeftForFloat(floatingObject);
|
| if (logicalLeft < m_offset) {
|
| m_offset = logicalLeft;
|
| return true;
|
| @@ -490,30 +490,30 @@ inline bool ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>:
|
| template <FloatingObject::Type FloatTypeValue>
|
| LayoutUnit ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining() const
|
| {
|
| - return this->m_outermostFloat ? this->m_layoutObject->logicalBottomForFloat(this->m_outermostFloat) - this->m_lineTop : LayoutUnit(1);
|
| + return this->m_outermostFloat ? this->m_layoutObject->logicalBottomForFloat(*this->m_outermostFloat) - this->m_lineTop : LayoutUnit(1);
|
| }
|
|
|
| template <FloatingObject::Type FloatTypeValue>
|
| inline void ComputeFloatOffsetAdapter<FloatTypeValue>::collectIfNeeded(const IntervalType& interval)
|
| {
|
| - const FloatingObject* floatingObject = interval.data();
|
| - if (floatingObject->type() != FloatTypeValue || !rangesIntersect(interval.low(), interval.high(), m_lineTop, m_lineBottom))
|
| + const FloatingObject& floatingObject = *(interval.data());
|
| + if (floatingObject.type() != FloatTypeValue || !rangesIntersect(interval.low(), interval.high(), m_lineTop, m_lineBottom))
|
| return;
|
|
|
| // Make sure the float hasn't changed since it was added to the placed floats tree.
|
| - ASSERT(floatingObject->isPlaced());
|
| + ASSERT(floatingObject.isPlaced());
|
| ASSERT(interval.low() == m_layoutObject->pixelSnappedLogicalTopForFloat(floatingObject));
|
| ASSERT(interval.high() == m_layoutObject->pixelSnappedLogicalBottomForFloat(floatingObject));
|
|
|
| - bool floatIsNewExtreme = updateOffsetIfNeeded(*floatingObject);
|
| + bool floatIsNewExtreme = updateOffsetIfNeeded(floatingObject);
|
| if (floatIsNewExtreme)
|
| - m_outermostFloat = floatingObject;
|
| + m_outermostFloat = &floatingObject;
|
| }
|
|
|
| template<>
|
| inline bool ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded(const FloatingObject& floatingObject)
|
| {
|
| - LayoutUnit logicalRight = m_layoutObject->logicalRightForFloat(&floatingObject);
|
| + LayoutUnit logicalRight = m_layoutObject->logicalRightForFloat(floatingObject);
|
| if (ShapeOutsideInfo* shapeOutside = floatingObject.layoutObject()->shapeOutsideInfo()) {
|
| ShapeOutsideDeltas shapeDeltas = shapeOutside->computeDeltasForContainingBlockLine(*m_layoutObject, floatingObject, m_lineTop, m_lineBottom - m_lineTop);
|
| if (!shapeDeltas.lineOverlapsShape())
|
| @@ -532,7 +532,7 @@ inline bool ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::u
|
| template<>
|
| inline bool ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded(const FloatingObject& floatingObject)
|
| {
|
| - LayoutUnit logicalLeft = m_layoutObject->logicalLeftForFloat(&floatingObject);
|
| + LayoutUnit logicalLeft = m_layoutObject->logicalLeftForFloat(floatingObject);
|
| if (ShapeOutsideInfo* shapeOutside = floatingObject.layoutObject()->shapeOutsideInfo()) {
|
| ShapeOutsideDeltas shapeDeltas = shapeOutside->computeDeltasForContainingBlockLine(*m_layoutObject, floatingObject, m_lineTop, m_lineBottom - m_lineTop);
|
| if (!shapeDeltas.lineOverlapsShape())
|
|
|