Title: [225512] trunk/Source/WebCore
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).
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to