Changeset 225512 in webkit


Ignore:
Timestamp:
Dec 4, 2017, 5:37:20 PM (8 years ago)
Author:
Simon Fraser
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:
Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r225511 r225512  
     12017-12-04  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Cleanup code that computes iframe content offsets in FrameView
     4        https://bugs.webkit.org/show_bug.cgi?id=180385
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        The coordinate conversion functions in FrameView explicitly added borderLeft/paddingLeft
     9        and borderTop/paddingTop to compute the offset from the contents of a frame to its parent renderer.
     10       
     11        This is equivalent to the call to contextBoxRect() that RenderWidget::updateWidgetGeometry() does,
     12        which also takes left-side scrollbars into account.
     13       
     14        Coordinate offsets don't need height and width, so add RenderBox::contentBoxLocation() that just
     15        computes the top left, and use it in FrameView.
     16
     17        * page/FrameView.cpp:
     18        (WebCore::FrameView::invalidateRect):
     19        (WebCore::FrameView::convertToContainingView const):
     20        (WebCore::FrameView::convertFromContainingView const):
     21        * platform/graphics/FloatPoint.h:
     22        (WebCore::FloatPoint::scaled const):
     23        (WebCore::FloatPoint::scaled): Deleted.
     24        * rendering/RenderBox.cpp:
     25        (WebCore::RenderBox::contentBoxLocation const):
     26        * rendering/RenderBox.h:
     27
    1282017-12-04  Nan Wang  <n_wang@apple.com>
    229
  • trunk/Source/WebCore/page/FrameView.cpp

    r225449 r225512  
    431431
    432432    IntRect repaintRect = rect;
    433     repaintRect.move(renderer->borderLeft() + renderer->paddingLeft(), renderer->borderTop() + renderer->paddingTop());
     433    repaintRect.moveBy(roundedIntPoint(renderer->contentBoxLocation()));
    434434    renderer->repaintRectangle(repaintRect);
    435435}
     
    43854385                return localRect;
    43864386               
    4387             IntRect rect(localRect);
    4388             // Add borders and padding??
    4389             rect.move(renderer->borderLeft() + renderer->paddingLeft(),
    4390                       renderer->borderTop() + renderer->paddingTop());
     4387            auto rect = localRect;
     4388            rect.moveBy(roundedIntPoint(renderer->contentBoxLocation()));
    43914389            return parentView.convertFromRendererToContainingView(renderer, rect);
    43924390        }
     
    44094407                return parentRect;
    44104408
    4411             IntRect rect = parentView.convertFromContainingViewToRenderer(renderer, parentRect);
    4412             // Subtract borders and padding
    4413             rect.move(-renderer->borderLeft() - renderer->paddingLeft(),
    4414                       -renderer->borderTop() - renderer->paddingTop());
     4409            auto rect = parentView.convertFromContainingViewToRenderer(renderer, parentRect);
     4410            rect.moveBy(-roundedIntPoint(renderer->contentBoxLocation()));
    44154411            return rect;
    44164412        }
     
    44334429                return localPoint;
    44344430               
    4435             IntPoint point(localPoint);
    4436 
    4437             // Add borders and padding
    4438             point.move(renderer->borderLeft() + renderer->paddingLeft(),
    4439                        renderer->borderTop() + renderer->paddingTop());
     4431            auto point = localPoint;
     4432            point.moveBy(roundedIntPoint(renderer->contentBoxLocation()));
    44404433            return parentView.convertFromRendererToContainingView(renderer, point);
    44414434        }
     
    44584451                return parentPoint;
    44594452
    4460             IntPoint point = parentView.convertFromContainingViewToRenderer(renderer, parentPoint);
    4461             // Subtract borders and padding
    4462             point.move(-renderer->borderLeft() - renderer->paddingLeft(),
    4463                        -renderer->borderTop() - renderer->paddingTop());
     4453            auto point = parentView.convertFromContainingViewToRenderer(renderer, parentPoint);
     4454            point.moveBy(-roundedIntPoint(renderer->contentBoxLocation()));
    44644455            return point;
    44654456        }
  • trunk/Source/WebCore/platform/graphics/FloatPoint.h

    r220503 r225512  
    128128    }
    129129
    130     FloatPoint scaled(float scale)
     130    FloatPoint scaled(float scale) const
    131131    {
    132132        return { m_x * scale, m_y * scale };
    133133    }
    134134
    135     FloatPoint scaled(float scaleX, float scaleY)
     135    FloatPoint scaled(float scaleX, float scaleY) const
    136136    {
    137137        return { m_x * scaleX, m_y * scaleY };
  • trunk/Source/WebCore/rendering/RenderBox.cpp

    r225101 r225512  
    661661LayoutRect RenderBox::contentBoxRect() const
    662662{
    663     LayoutUnit x = borderLeft() + paddingLeft();
    664     if (shouldPlaceBlockDirectionScrollbarOnLeft())
    665         x += verticalScrollbarWidth();
    666     LayoutUnit y = borderTop() + paddingTop();
    667     return LayoutRect(x, y, contentWidth(), contentHeight());
     663    return { contentBoxLocation(), contentSize() };
     664}
     665
     666LayoutPoint RenderBox::contentBoxLocation() const
     667{
     668    LayoutUnit scrollbarSpace = shouldPlaceBlockDirectionScrollbarOnLeft() ? verticalScrollbarWidth() : 0;
     669    return { borderLeft() + paddingLeft() + scrollbarSpace, borderTop() + paddingTop() };
    668670}
    669671
  • trunk/Source/WebCore/rendering/RenderBox.h

    r224537 r225512  
    161161    // The content area of the box (excludes padding - and intrinsic padding for table cells, etc... - and border).
    162162    LayoutRect contentBoxRect() const;
     163    LayoutPoint contentBoxLocation() const;
     164
    163165    // The content box in absolute coords. Ignores transforms.
    164166    IntRect absoluteContentBox() const;
Note: See TracChangeset for help on using the changeset viewer.