Diff
Modified: trunk/Source/WebCore/ChangeLog (174721 => 174722)
--- trunk/Source/WebCore/ChangeLog 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/ChangeLog 2014-10-15 05:01:31 UTC (rev 174722)
@@ -1,3 +1,49 @@
+2014-10-14 Chris Dumez <[email protected]>
+
+ Have offsetFromContainer() / offsetFromAncestorContainer() take a RenderElement&
+ https://bugs.webkit.org/show_bug.cgi?id=137728
+
+ Reviewed by Benjamin Poulain.
+
+ Have offsetFromContainer() / offsetFromAncestorContainer() take a RenderElement&
+ instead of a RenderObject*. The argument passed is never null and the type
+ should be a RenderElement as the argument is a container.
+
+ No new tests, no behavior change.
+
+ * editing/htmlediting.cpp:
+ (WebCore::localCaretRectInRendererForCaretPainting):
+ * page/GestureTapHighlighter.cpp:
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::mapLocalToContainer):
+ (WebCore::RenderBox::pushMappingToContainer):
+ (WebCore::RenderBox::offsetFromContainer):
+ (WebCore::RenderBox::computeRectForRepaint):
+ * rendering/RenderBox.h:
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::computeRectForRepaint):
+ (WebCore::RenderInline::offsetFromContainer):
+ (WebCore::RenderInline::mapLocalToContainer):
+ (WebCore::RenderInline::pushMappingToContainer):
+ * rendering/RenderInline.h:
+ * rendering/RenderMultiColumnFlowThread.cpp:
+ (WebCore::RenderMultiColumnFlowThread::offsetFromContainer):
+ * rendering/RenderMultiColumnFlowThread.h:
+ * rendering/RenderNamedFlowFragment.cpp:
+ (WebCore::RenderNamedFlowFragment::offsetFromContainer):
+ * rendering/RenderNamedFlowFragment.h:
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::offsetFromContainer):
+ (WebCore::RenderObject::offsetFromAncestorContainer):
+ * rendering/RenderObject.h:
+ * rendering/RenderTableCell.cpp:
+ (WebCore::RenderTableCell::offsetFromContainer):
+ * rendering/RenderTableCell.h:
+ * rendering/RenderThemeMac.mm:
+ (WebCore::RenderThemeMac::convertToPaintingRect):
+
2014-10-14 Jer Noble <[email protected]>
REGRESSION (r159208): Crash when clicking scrubber after navigating away/back to video
Modified: trunk/Source/WebCore/editing/htmlediting.cpp (174721 => 174722)
--- trunk/Source/WebCore/editing/htmlediting.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/editing/htmlediting.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -1294,10 +1294,10 @@
// Compute an offset between the renderer and the caretPainter.
while (renderer != caretPainter) {
- RenderObject* containerObject = renderer->container();
+ RenderElement* containerObject = renderer->container();
if (!containerObject)
return LayoutRect();
- localRect.move(renderer->offsetFromContainer(containerObject, localRect.location()));
+ localRect.move(renderer->offsetFromContainer(*containerObject, localRect.location()));
renderer = containerObject;
}
Modified: trunk/Source/WebCore/page/GestureTapHighlighter.cpp (174721 => 174722)
--- trunk/Source/WebCore/page/GestureTapHighlighter.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/page/GestureTapHighlighter.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -64,11 +64,11 @@
LayoutPoint referencePoint;
while (o) {
- RenderObject* nextContainer = o->container();
+ RenderElement* nextContainer = o->container();
if (!nextContainer)
break;
- LayoutSize containerOffset = o->offsetFromContainer(nextContainer, referencePoint);
+ LayoutSize containerOffset = o->offsetFromContainer(*nextContainer, referencePoint);
TransformationMatrix t;
o->getTransformFromContainer(nextContainer, containerOffset, t);
Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderBox.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -1912,8 +1912,8 @@
}
bool containerSkipped;
- auto o = container(repaintContainer, &containerSkipped);
- if (!o)
+ RenderElement* container = this->container(repaintContainer, &containerSkipped);
+ if (!container)
return;
bool isFixedPos = style().position() == FixedPosition;
@@ -1928,12 +1928,12 @@
if (wasFixed)
*wasFixed = mode & IsFixed;
- LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint(transformState.mappedPoint()));
+ LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint(transformState.mappedPoint()));
- bool preserve3D = mode & UseTransforms && (o->style().preserves3D() || style().preserves3D());
- if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {
+ bool preserve3D = mode & UseTransforms && (container->style().preserves3D() || style().preserves3D());
+ if (mode & UseTransforms && shouldUseTransformFromContainer(container)) {
TransformationMatrix t;
- getTransformFromContainer(o, containerOffset, t);
+ getTransformFromContainer(container, containerOffset, t);
transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
} else
transformState.move(containerOffset.width(), containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
@@ -1941,7 +1941,7 @@
if (containerSkipped) {
// There can't be a transform between repaintContainer and o, because transforms create containers, so it should be safe
// to just subtract the delta between the repaintContainer and o.
- LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(o);
+ LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(*container);
transformState.move(-containerOffset.width(), -containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
return;
}
@@ -1950,10 +1950,10 @@
// For fixed positioned elements inside out-of-flow named flows, we do not want to
// map their position further to regions based on their coordinates inside the named flows.
- if (!o->isOutOfFlowRenderFlowThread() || !fixedPositionedWithNamedFlowContainingBlock())
- o->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
+ if (!container->isOutOfFlowRenderFlowThread() || !fixedPositionedWithNamedFlowContainingBlock())
+ container->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
else
- o->mapLocalToContainer(toRenderLayerModelObject(o), transformState, mode, wasFixed);
+ container->mapLocalToContainer(toRenderLayerModelObject(container), transformState, mode, wasFixed);
}
const RenderObject* RenderBox::pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
@@ -1961,9 +1961,9 @@
ASSERT(ancestorToStopAt != this);
bool ancestorSkipped;
- auto container = this->container(ancestorToStopAt, &ancestorSkipped);
+ RenderElement* container = this->container(ancestorToStopAt, &ancestorSkipped);
if (!container)
- return 0;
+ return nullptr;
bool isFixedPos = style().position() == FixedPosition;
bool hasTransform = hasLayer() && layer()->transform();
@@ -1972,11 +1972,11 @@
if (ancestorSkipped) {
// There can't be a transform between repaintContainer and o, because transforms create containers, so it should be safe
// to just subtract the delta between the ancestor and o.
- adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorContainer(container);
+ adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorContainer(*container);
}
bool offsetDependsOnPoint = false;
- LayoutSize containerOffset = offsetFromContainer(container, LayoutPoint(), &offsetDependsOnPoint);
+ LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint(), &offsetDependsOnPoint);
bool preserve3D = container->style().preserves3D() || style().preserves3D();
if (shouldUseTransformFromContainer(container)) {
@@ -2007,10 +2007,10 @@
RenderBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState);
}
-LayoutSize RenderBox::offsetFromContainer(RenderObject* renderer, const LayoutPoint&, bool* offsetDependsOnPoint) const
+LayoutSize RenderBox::offsetFromContainer(RenderElement& renderer, const LayoutPoint&, bool* offsetDependsOnPoint) const
{
// A region "has" boxes inside it without being their container.
- ASSERT(renderer == container() || is<RenderRegion>(*renderer));
+ ASSERT(&renderer == container() || is<RenderRegion>(renderer));
LayoutSize offset;
if (isInFlowPositioned())
@@ -2019,14 +2019,14 @@
if (!isInline() || isReplaced())
offset += topLeftLocationOffset();
- if (is<RenderBox>(*renderer))
- offset -= downcast<RenderBox>(*renderer).scrolledContentOffset();
+ if (is<RenderBox>(renderer))
+ offset -= downcast<RenderBox>(renderer).scrolledContentOffset();
- if (style().position() == AbsolutePosition && renderer->isInFlowPositioned() && is<RenderInline>(*renderer))
- offset += downcast<RenderInline>(*renderer).offsetForInFlowPositionedInline(this);
+ if (style().position() == AbsolutePosition && renderer.isInFlowPositioned() && is<RenderInline>(renderer))
+ offset += downcast<RenderInline>(renderer).offsetForInFlowPositionedInline(this);
if (offsetDependsOnPoint)
- *offsetDependsOnPoint |= is<RenderFlowThread>(*renderer);
+ *offsetDependsOnPoint |= is<RenderFlowThread>(renderer);
return offset;
}
@@ -2225,7 +2225,7 @@
if (containerSkipped) {
// If the repaintContainer is below o, then we need to map the rect into repaintContainer's coordinates.
- LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(renderer);
+ LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(*renderer);
rect.move(-containerOffset);
return;
}
Modified: trunk/Source/WebCore/rendering/RenderBox.h (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderBox.h 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2014-10-15 05:01:31 UTC (rev 174722)
@@ -335,7 +335,7 @@
void clearOverrideContainingBlockContentLogicalHeight();
#endif
- virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const override;
+ virtual LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const override;
LayoutUnit adjustBorderBoxLogicalWidthForBoxSizing(LayoutUnit width) const;
LayoutUnit adjustBorderBoxLogicalHeightForBoxSizing(LayoutUnit height) const;
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -2637,8 +2637,8 @@
void RenderBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
{
- auto o = container();
- if (!o)
+ RenderElement* container = this->container();
+ if (!container)
return;
// FIXME: This code is wrong for named flow threads since it only works for content in the first region.
@@ -2646,21 +2646,21 @@
// geometry to actually get a better result.
// The point inside a box that's inside a region has its coordinates relative to the region,
// not the FlowThread that is its container in the RenderObject tree.
- if (isBox() && o->isOutOfFlowRenderFlowThread()) {
+ if (is<RenderBox>(*this) && container->isOutOfFlowRenderFlowThread()) {
RenderRegion* startRegion = nullptr;
RenderRegion* endRegion = nullptr;
- if (toRenderFlowThread(o)->getRegionRangeForBox(toRenderBox(this), startRegion, endRegion))
- o = startRegion;
+ if (downcast<RenderFlowThread>(*container).getRegionRangeForBox(downcast<RenderBox>(this), startRegion, endRegion))
+ container = startRegion;
}
- o->mapAbsoluteToLocalPoint(mode, transformState);
+ container->mapAbsoluteToLocalPoint(mode, transformState);
- LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint());
+ LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint());
- bool preserve3D = mode & UseTransforms && (o->style().preserves3D() || style().preserves3D());
- if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {
+ bool preserve3D = mode & UseTransforms && (container->style().preserves3D() || style().preserves3D());
+ if (mode & UseTransforms && shouldUseTransformFromContainer(container)) {
TransformationMatrix t;
- getTransformFromContainer(o, containerOffset, t);
+ getTransformFromContainer(container, containerOffset, t);
transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
} else
transformState.move(containerOffset.width(), containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderInline.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -1167,8 +1167,8 @@
return;
bool containerSkipped;
- RenderElement* o = container(repaintContainer, &containerSkipped);
- if (!o)
+ RenderElement* container = this->container(repaintContainer, &containerSkipped);
+ if (!container)
return;
LayoutPoint topLeft = rect.location();
@@ -1184,36 +1184,35 @@
// FIXME: We ignore the lightweight clipping rect that controls use, since if |o| is in mid-layout,
// its controlClipRect will be wrong. For overflow clip we use the values cached by the layer.
rect.setLocation(topLeft);
- if (o->hasOverflowClip()) {
- RenderBox* containerBox = toRenderBox(o);
- containerBox->applyCachedClipAndScrollOffsetForRepaint(rect);
+ if (container->hasOverflowClip()) {
+ downcast<RenderBox>(*container).applyCachedClipAndScrollOffsetForRepaint(rect);
if (rect.isEmpty())
return;
}
if (containerSkipped) {
// If the repaintContainer is below o, then we need to map the rect into repaintContainer's coordinates.
- LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(o);
+ LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(*container);
rect.move(-containerOffset);
return;
}
- o->computeRectForRepaint(repaintContainer, rect, fixed);
+ container->computeRectForRepaint(repaintContainer, rect, fixed);
}
-LayoutSize RenderInline::offsetFromContainer(RenderObject* container, const LayoutPoint&, bool* offsetDependsOnPoint) const
+LayoutSize RenderInline::offsetFromContainer(RenderElement& container, const LayoutPoint&, bool* offsetDependsOnPoint) const
{
- ASSERT(container == this->container());
+ ASSERT(&container == this->container());
LayoutSize offset;
if (isInFlowPositioned())
offset += offsetForInFlowPosition();
- if (container->isBox())
- offset -= toRenderBox(container)->scrolledContentOffset();
+ if (is<RenderBox>(container))
+ offset -= downcast<RenderBox>(container).scrolledContentOffset();
if (offsetDependsOnPoint)
- *offsetDependsOnPoint = (container->isBox() && container->style().isFlippedBlocksWritingMode()) || container->isRenderFlowThread();
+ *offsetDependsOnPoint = (is<RenderBox>(container) && container.style().isFlippedBlocksWritingMode()) || is<RenderFlowThread>(container);
return offset;
}
@@ -1233,24 +1232,24 @@
}
bool containerSkipped;
- RenderElement* o = container(repaintContainer, &containerSkipped);
- if (!o)
+ RenderElement* container = this->container(repaintContainer, &containerSkipped);
+ if (!container)
return;
- if (mode & ApplyContainerFlip && o->isBox()) {
- if (o->style().isFlippedBlocksWritingMode()) {
+ if (mode & ApplyContainerFlip && is<RenderBox>(*container)) {
+ if (container->style().isFlippedBlocksWritingMode()) {
LayoutPoint centerPoint(transformState.mappedPoint());
- transformState.move(toRenderBox(o)->flipForWritingMode(centerPoint) - centerPoint);
+ transformState.move(downcast<RenderBox>(*container).flipForWritingMode(centerPoint) - centerPoint);
}
mode &= ~ApplyContainerFlip;
}
- LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint(transformState.mappedPoint()));
+ LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint(transformState.mappedPoint()));
- bool preserve3D = mode & UseTransforms && (o->style().preserves3D() || style().preserves3D());
- if (mode & UseTransforms && shouldUseTransformFromContainer(o)) {
+ bool preserve3D = mode & UseTransforms && (container->style().preserves3D() || style().preserves3D());
+ if (mode & UseTransforms && shouldUseTransformFromContainer(container)) {
TransformationMatrix t;
- getTransformFromContainer(o, containerOffset, t);
+ getTransformFromContainer(container, containerOffset, t);
transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
} else
transformState.move(containerOffset.width(), containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
@@ -1258,12 +1257,12 @@
if (containerSkipped) {
// There can't be a transform between repaintContainer and o, because transforms create containers, so it should be safe
// to just subtract the delta between the repaintContainer and o.
- LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(o);
+ LayoutSize containerOffset = repaintContainer->offsetFromAncestorContainer(*container);
transformState.move(-containerOffset.width(), -containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
return;
}
- o->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
+ container->mapLocalToContainer(repaintContainer, transformState, mode, wasFixed);
}
const RenderObject* RenderInline::pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
@@ -1273,17 +1272,17 @@
bool ancestorSkipped;
RenderElement* container = this->container(ancestorToStopAt, &ancestorSkipped);
if (!container)
- return 0;
+ return nullptr;
LayoutSize adjustmentForSkippedAncestor;
if (ancestorSkipped) {
// There can't be a transform between repaintContainer and o, because transforms create containers, so it should be safe
// to just subtract the delta between the ancestor and o.
- adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorContainer(container);
+ adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorContainer(*container);
}
bool offsetDependsOnPoint = false;
- LayoutSize containerOffset = offsetFromContainer(container, LayoutPoint(), &offsetDependsOnPoint);
+ LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint(), &offsetDependsOnPoint);
bool preserve3D = container->style().preserves3D() || style().preserves3D();
if (shouldUseTransformFromContainer(container)) {
Modified: trunk/Source/WebCore/rendering/RenderInline.h (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderInline.h 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderInline.h 2014-10-15 05:01:31 UTC (rev 174722)
@@ -51,7 +51,7 @@
virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint& accumulatedOffset) const override final;
virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed) const override;
- virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const override final;
+ virtual LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = nullptr) const override final;
virtual IntRect borderBoundingBox() const override final
{
Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -608,21 +608,20 @@
}
}
-LayoutSize RenderMultiColumnFlowThread::offsetFromContainer(RenderObject* enclosingContainer, const LayoutPoint& physicalPoint, bool* offsetDependsOnPoint) const
+LayoutSize RenderMultiColumnFlowThread::offsetFromContainer(RenderElement& enclosingContainer, const LayoutPoint& physicalPoint, bool* offsetDependsOnPoint) const
{
- ASSERT(enclosingContainer == container());
+ ASSERT(&enclosingContainer == container());
if (offsetDependsOnPoint)
*offsetDependsOnPoint = true;
LayoutPoint translatedPhysicalPoint(physicalPoint);
- RenderRegion* region = physicalTranslationFromFlowToRegion(translatedPhysicalPoint);
- if (region)
+ if (RenderRegion* region = physicalTranslationFromFlowToRegion(translatedPhysicalPoint))
translatedPhysicalPoint.moveBy(region->topLeftLocation());
LayoutSize offset(translatedPhysicalPoint.x(), translatedPhysicalPoint.y());
- if (enclosingContainer->isBox())
- offset -= toRenderBox(enclosingContainer)->scrolledContentOffset();
+ if (is<RenderBox>(enclosingContainer))
+ offset -= downcast<RenderBox>(enclosingContainer).scrolledContentOffset();
return offset;
}
@@ -638,7 +637,7 @@
LayoutSize candidateContainerOffset;
for (const auto& columnSet : childrenOfType<RenderMultiColumnSet>(*parent())) {
- candidateContainerOffset = columnSet.offsetFromContainer(parent(), LayoutPoint());
+ candidateContainerOffset = columnSet.offsetFromContainer(*parent(), LayoutPoint());
candidatePoint = transformPoint - candidateContainerOffset;
candidateColumnSet = &columnSet;
Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h 2014-10-15 05:01:31 UTC (rev 174722)
@@ -109,7 +109,7 @@
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const override;
- virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = nullptr) const override;
+ virtual LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = nullptr) const override;
// FIXME: Eventually as column and region flow threads start nesting, this will end up changing.
virtual bool shouldCheckColumnBreaks() const override;
Modified: trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -249,11 +249,10 @@
return isLastRegion() && (style().regionFragment() == BreakRegionFragment);
}
-LayoutSize RenderNamedFlowFragment::offsetFromContainer(RenderObject* o, const LayoutPoint&, bool*) const
+LayoutSize RenderNamedFlowFragment::offsetFromContainer(RenderElement& container, const LayoutPoint&, bool*) const
{
- ASSERT(&fragmentContainer() == o);
- ASSERT(container() == o);
- UNUSED_PARAM(o);
+ ASSERT_UNUSED(container, &fragmentContainer() == &container);
+ ASSERT_UNUSED(container, this->container() == &container);
return topLeftLocationOffset();
}
Modified: trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h 2014-10-15 05:01:31 UTC (rev 174722)
@@ -69,7 +69,7 @@
virtual bool shouldClipFlowThreadContent() const override;
- virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const override;
+ virtual LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = nullptr) const override;
bool isPseudoElementRegion() const { return parent() && parent()->isPseudoElement(); }
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -1851,36 +1851,36 @@
return transformState.lastPlanarPoint();
}
-LayoutSize RenderObject::offsetFromContainer(RenderObject* o, const LayoutPoint&, bool* offsetDependsOnPoint) const
+LayoutSize RenderObject::offsetFromContainer(RenderElement& container, const LayoutPoint&, bool* offsetDependsOnPoint) const
{
- ASSERT(o == container());
+ ASSERT(&container == this->container());
LayoutSize offset;
- if (o->isBox())
- offset -= toRenderBox(o)->scrolledContentOffset();
+ if (is<RenderBox>(container))
+ offset -= downcast<RenderBox>(container).scrolledContentOffset();
if (offsetDependsOnPoint)
- *offsetDependsOnPoint = o->isRenderFlowThread();
+ *offsetDependsOnPoint = is<RenderFlowThread>(container);
return offset;
}
-LayoutSize RenderObject::offsetFromAncestorContainer(RenderObject* container) const
+LayoutSize RenderObject::offsetFromAncestorContainer(RenderElement& container) const
{
LayoutSize offset;
LayoutPoint referencePoint;
const RenderObject* currContainer = this;
do {
- auto nextContainer = currContainer->container();
+ RenderElement* nextContainer = currContainer->container();
ASSERT(nextContainer); // This means we reached the top without finding container.
if (!nextContainer)
break;
ASSERT(!currContainer->hasTransform());
- LayoutSize currentOffset = currContainer->offsetFromContainer(nextContainer, referencePoint);
+ LayoutSize currentOffset = currContainer->offsetFromContainer(*nextContainer, referencePoint);
offset += currentOffset;
referencePoint.move(currentOffset);
currContainer = nextContainer;
- } while (currContainer != container);
+ } while (currContainer != &container);
return offset;
}
Modified: trunk/Source/WebCore/rendering/RenderObject.h (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderObject.h 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2014-10-15 05:01:31 UTC (rev 174722)
@@ -684,9 +684,9 @@
// Return the offset from the container() renderer (excluding transforms). In multi-column layout,
// different offsets apply at different points, so return the offset that applies to the given point.
- virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const;
+ virtual LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const;
// Return the offset from an object up the container() chain. Asserts that none of the intermediate objects have transforms.
- LayoutSize offsetFromAncestorContainer(RenderObject*) const;
+ LayoutSize offsetFromAncestorContainer(RenderElement&) const;
#if PLATFORM(IOS)
virtual void collectSelectionRects(Vector<SelectionRect>&, unsigned startOffset = 0, unsigned endOffset = std::numeric_limits<unsigned>::max());
Modified: trunk/Source/WebCore/rendering/RenderTableCell.cpp (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderTableCell.cpp 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderTableCell.cpp 2014-10-15 05:01:31 UTC (rev 174722)
@@ -319,11 +319,11 @@
setOverrideLogicalContentHeight(std::max<LayoutUnit>(0, rowHeight - borderAndPaddingLogicalHeight()));
}
-LayoutSize RenderTableCell::offsetFromContainer(RenderObject* o, const LayoutPoint& point, bool* offsetDependsOnPoint) const
+LayoutSize RenderTableCell::offsetFromContainer(RenderElement& container, const LayoutPoint& point, bool* offsetDependsOnPoint) const
{
- ASSERT(o == container());
+ ASSERT(&container == this->container());
- LayoutSize offset = RenderBlockFlow::offsetFromContainer(o, point, offsetDependsOnPoint);
+ LayoutSize offset = RenderBlockFlow::offsetFromContainer(container, point, offsetDependsOnPoint);
if (parent())
offset -= parentBox()->locationOffset();
Modified: trunk/Source/WebCore/rendering/RenderTableCell.h (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderTableCell.h 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderTableCell.h 2014-10-15 05:01:31 UTC (rev 174722)
@@ -234,7 +234,7 @@
virtual bool boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoidance, InlineFlowBox*) const override;
- virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const override;
+ virtual LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const override;
virtual LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const override;
virtual void computeRectForRepaint(const RenderLayerModelObject* repaintContainer, LayoutRect&, bool fixed = false) const override;
Modified: trunk/Source/WebCore/rendering/RenderThemeMac.mm (174721 => 174722)
--- trunk/Source/WebCore/rendering/RenderThemeMac.mm 2014-10-15 03:28:55 UTC (rev 174721)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.mm 2014-10-15 05:01:31 UTC (rev 174722)
@@ -681,7 +681,8 @@
const RenderObject* renderer = &partRenderer;
while (renderer && renderer != &inputRenderer) {
RenderElement* containingRenderer = renderer->container();
- offsetFromInputRenderer -= roundedIntSize(renderer->offsetFromContainer(containingRenderer, LayoutPoint()));
+ ASSERT(containingRenderer);
+ offsetFromInputRenderer -= roundedIntSize(renderer->offsetFromContainer(*containingRenderer, LayoutPoint()));
renderer = containingRenderer;
}
// If the input renderer was not a container, something went wrong