- Revision
- 225512
- Author
- simon.fra...@apple.com
- Date
- 2017-12-04 17:37:20 -0800 (Mon, 04 Dec 2017)
Log Message
Cleanup code that computes iframe content offsets in FrameView
https://bugs.webkit.org/show_bug.cgi?id=180385
Reviewed by Zalan Bujtas.
The coordinate conversion functions in FrameView explicitly added borderLeft/paddingLeft
and borderTop/paddingTop to compute the offset from the contents of a frame to its parent renderer.
This is equivalent to the call to contextBoxRect() that RenderWidget::updateWidgetGeometry() does,
which also takes left-side scrollbars into account.
Coordinate offsets don't need height and width, so add RenderBox::contentBoxLocation() that just
computes the top left, and use it in FrameView.
* page/FrameView.cpp:
(WebCore::FrameView::invalidateRect):
(WebCore::FrameView::convertToContainingView const):
(WebCore::FrameView::convertFromContainingView const):
* platform/graphics/FloatPoint.h:
(WebCore::FloatPoint::scaled const):
(WebCore::FloatPoint::scaled): Deleted.
* rendering/RenderBox.cpp:
(WebCore::RenderBox::contentBoxLocation const):
* rendering/RenderBox.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (225511 => 225512)
--- trunk/Source/WebCore/ChangeLog 2017-12-05 01:24:19 UTC (rev 225511)
+++ trunk/Source/WebCore/ChangeLog 2017-12-05 01:37:20 UTC (rev 225512)
@@ -1,3 +1,30 @@
+2017-12-04 Simon Fraser <simon.fra...@apple.com>
+
+ Cleanup code that computes iframe content offsets in FrameView
+ https://bugs.webkit.org/show_bug.cgi?id=180385
+
+ Reviewed by Zalan Bujtas.
+
+ The coordinate conversion functions in FrameView explicitly added borderLeft/paddingLeft
+ and borderTop/paddingTop to compute the offset from the contents of a frame to its parent renderer.
+
+ This is equivalent to the call to contextBoxRect() that RenderWidget::updateWidgetGeometry() does,
+ which also takes left-side scrollbars into account.
+
+ Coordinate offsets don't need height and width, so add RenderBox::contentBoxLocation() that just
+ computes the top left, and use it in FrameView.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::invalidateRect):
+ (WebCore::FrameView::convertToContainingView const):
+ (WebCore::FrameView::convertFromContainingView const):
+ * platform/graphics/FloatPoint.h:
+ (WebCore::FloatPoint::scaled const):
+ (WebCore::FloatPoint::scaled): Deleted.
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::contentBoxLocation const):
+ * rendering/RenderBox.h:
+
2017-12-04 Nan Wang <n_w...@apple.com>
AX: AOM: Implement relation type properties
Modified: trunk/Source/WebCore/page/FrameView.cpp (225511 => 225512)
--- trunk/Source/WebCore/page/FrameView.cpp 2017-12-05 01:24:19 UTC (rev 225511)
+++ trunk/Source/WebCore/page/FrameView.cpp 2017-12-05 01:37:20 UTC (rev 225512)
@@ -430,7 +430,7 @@
return;
IntRect repaintRect = rect;
- repaintRect.move(renderer->borderLeft() + renderer->paddingLeft(), renderer->borderTop() + renderer->paddingTop());
+ repaintRect.moveBy(roundedIntPoint(renderer->contentBoxLocation()));
renderer->repaintRectangle(repaintRect);
}
@@ -4384,10 +4384,8 @@
if (!renderer)
return localRect;
- IntRect rect(localRect);
- // Add borders and padding??
- rect.move(renderer->borderLeft() + renderer->paddingLeft(),
- renderer->borderTop() + renderer->paddingTop());
+ auto rect = localRect;
+ rect.moveBy(roundedIntPoint(renderer->contentBoxLocation()));
return parentView.convertFromRendererToContainingView(renderer, rect);
}
@@ -4408,10 +4406,8 @@
if (!renderer)
return parentRect;
- IntRect rect = parentView.convertFromContainingViewToRenderer(renderer, parentRect);
- // Subtract borders and padding
- rect.move(-renderer->borderLeft() - renderer->paddingLeft(),
- -renderer->borderTop() - renderer->paddingTop());
+ auto rect = parentView.convertFromContainingViewToRenderer(renderer, parentRect);
+ rect.moveBy(-roundedIntPoint(renderer->contentBoxLocation()));
return rect;
}
@@ -4432,11 +4428,8 @@
if (!renderer)
return localPoint;
- IntPoint point(localPoint);
-
- // Add borders and padding
- point.move(renderer->borderLeft() + renderer->paddingLeft(),
- renderer->borderTop() + renderer->paddingTop());
+ auto point = localPoint;
+ point.moveBy(roundedIntPoint(renderer->contentBoxLocation()));
return parentView.convertFromRendererToContainingView(renderer, point);
}
@@ -4457,10 +4450,8 @@
if (!renderer)
return parentPoint;
- IntPoint point = parentView.convertFromContainingViewToRenderer(renderer, parentPoint);
- // Subtract borders and padding
- point.move(-renderer->borderLeft() - renderer->paddingLeft(),
- -renderer->borderTop() - renderer->paddingTop());
+ auto point = parentView.convertFromContainingViewToRenderer(renderer, parentPoint);
+ point.moveBy(-roundedIntPoint(renderer->contentBoxLocation()));
return point;
}
Modified: trunk/Source/WebCore/platform/graphics/FloatPoint.h (225511 => 225512)
--- trunk/Source/WebCore/platform/graphics/FloatPoint.h 2017-12-05 01:24:19 UTC (rev 225511)
+++ trunk/Source/WebCore/platform/graphics/FloatPoint.h 2017-12-05 01:37:20 UTC (rev 225512)
@@ -127,12 +127,12 @@
m_y *= scaleY;
}
- FloatPoint scaled(float scale)
+ FloatPoint scaled(float scale) const
{
return { m_x * scale, m_y * scale };
}
- FloatPoint scaled(float scaleX, float scaleY)
+ FloatPoint scaled(float scaleX, float scaleY) const
{
return { m_x * scaleX, m_y * scaleY };
}
Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (225511 => 225512)
--- trunk/Source/WebCore/rendering/RenderBox.cpp 2017-12-05 01:24:19 UTC (rev 225511)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp 2017-12-05 01:37:20 UTC (rev 225512)
@@ -660,13 +660,15 @@
LayoutRect RenderBox::contentBoxRect() const
{
- LayoutUnit x = borderLeft() + paddingLeft();
- if (shouldPlaceBlockDirectionScrollbarOnLeft())
- x += verticalScrollbarWidth();
- LayoutUnit y = borderTop() + paddingTop();
- return LayoutRect(x, y, contentWidth(), contentHeight());
+ return { contentBoxLocation(), contentSize() };
}
+LayoutPoint RenderBox::contentBoxLocation() const
+{
+ LayoutUnit scrollbarSpace = shouldPlaceBlockDirectionScrollbarOnLeft() ? verticalScrollbarWidth() : 0;
+ return { borderLeft() + paddingLeft() + scrollbarSpace, borderTop() + paddingTop() };
+}
+
IntRect RenderBox::absoluteContentBox() const
{
// This is wrong with transforms and flipped writing modes.
Modified: trunk/Source/WebCore/rendering/RenderBox.h (225511 => 225512)
--- trunk/Source/WebCore/rendering/RenderBox.h 2017-12-05 01:24:19 UTC (rev 225511)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2017-12-05 01:37:20 UTC (rev 225512)
@@ -160,6 +160,8 @@
// The content area of the box (excludes padding - and intrinsic padding for table cells, etc... - and border).
LayoutRect contentBoxRect() const;
+ LayoutPoint contentBoxLocation() const;
+
// The content box in absolute coords. Ignores transforms.
IntRect absoluteContentBox() const;
// The content box converted to absolute coords (taking transforms into account).