Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: third_party/WebKit/Source/core/frame/FrameView.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
3 * 1999 Lars Knoll <knoll@kde.org> 3 * 1999 Lars Knoll <knoll@kde.org>
4 * 1999 Antti Koivisto <koivisto@kde.org> 4 * 1999 Antti Koivisto <koivisto@kde.org>
5 * 2000 Dirk Mueller <mueller@kde.org> 5 * 2000 Dirk Mueller <mueller@kde.org>
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com) 7 * (C) 2006 Graham Dennis (graham.dennis@gmail.com)
8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * Copyright (C) 2009 Google Inc. All rights reserved. 9 * Copyright (C) 2009 Google Inc. All rights reserved.
10 * 10 *
(...skipping 1644 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 if (!layoutViewItem.isNull() && layoutViewItem.needsLayout()) 1655 if (!layoutViewItem.isNull() && layoutViewItem.needsLayout())
1656 layout(); 1656 layout();
1657 else 1657 else
1658 scrollToFragmentAnchor(); 1658 scrollToFragmentAnchor();
1659 } 1659 }
1660 1660
1661 void FrameView::clearFragmentAnchor() { 1661 void FrameView::clearFragmentAnchor() {
1662 m_fragmentAnchor = nullptr; 1662 m_fragmentAnchor = nullptr;
1663 } 1663 }
1664 1664
1665 void FrameView::setScrollPosition(const DoublePoint& scrollPoint,
1666 ScrollType scrollType,
1667 ScrollBehavior scrollBehavior) {
1668 DoublePoint newScrollPosition = clampScrollPosition(scrollPoint);
1669 if (newScrollPosition == scrollPositionDouble())
1670 return;
1671
1672 if (scrollBehavior == ScrollBehaviorAuto)
1673 scrollBehavior = scrollBehaviorStyle();
1674
1675 ScrollableArea::setScrollPosition(newScrollPosition, scrollType,
1676 scrollBehavior);
1677 }
1678
1679 void FrameView::didUpdateElasticOverscroll() { 1665 void FrameView::didUpdateElasticOverscroll() {
1680 Page* page = frame().page(); 1666 Page* page = frame().page();
1681 if (!page) 1667 if (!page)
1682 return; 1668 return;
1683 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll(); 1669 FloatSize elasticOverscroll = page->chromeClient().elasticOverscroll();
1684 if (m_horizontalScrollbar) { 1670 if (m_horizontalScrollbar) {
1685 float delta = 1671 float delta =
1686 elasticOverscroll.width() - m_horizontalScrollbar->elasticOverscroll(); 1672 elasticOverscroll.width() - m_horizontalScrollbar->elasticOverscroll();
1687 if (delta != 0) { 1673 if (delta != 0) {
1688 m_horizontalScrollbar->setElasticOverscroll(elasticOverscroll.width()); 1674 m_horizontalScrollbar->setElasticOverscroll(elasticOverscroll.width());
(...skipping 24 matching lines...) Expand all
1713 1699
1714 setLayoutSizeInternal(size); 1700 setLayoutSizeInternal(size);
1715 } 1701 }
1716 1702
1717 void FrameView::didScrollTimerFired(TimerBase*) { 1703 void FrameView::didScrollTimerFired(TimerBase*) {
1718 if (m_frame->document() && !m_frame->document()->layoutViewItem().isNull()) 1704 if (m_frame->document() && !m_frame->document()->layoutViewItem().isNull())
1719 m_frame->document()->fetcher()->updateAllImageResourcePriorities(); 1705 m_frame->document()->fetcher()->updateAllImageResourcePriorities();
1720 } 1706 }
1721 1707
1722 void FrameView::updateLayersAndCompositingAfterScrollIfNeeded( 1708 void FrameView::updateLayersAndCompositingAfterScrollIfNeeded(
1723 const DoubleSize& scrollDelta) { 1709 const ScrollOffset& scrollDelta) {
1724 // Nothing to do after scrolling if there are no fixed position elements. 1710 // Nothing to do after scrolling if there are no fixed position elements.
1725 if (!hasViewportConstrainedObjects()) 1711 if (!hasViewportConstrainedObjects())
1726 return; 1712 return;
1727 1713
1728 // Update sticky position objects which are stuck to the viewport. 1714 // Update sticky position objects which are stuck to the viewport.
1729 for (const auto& viewportConstrainedObject : *m_viewportConstrainedObjects) { 1715 for (const auto& viewportConstrainedObject : *m_viewportConstrainedObjects) {
1730 LayoutObject* layoutObject = viewportConstrainedObject; 1716 LayoutObject* layoutObject = viewportConstrainedObject;
1731 PaintLayer* layer = toLayoutBoxModelObject(layoutObject)->layer(); 1717 PaintLayer* layer = toLayoutBoxModelObject(layoutObject)->layer();
1732 if (layoutObject->style()->position() == StickyPosition) { 1718 if (layoutObject->style()->position() == StickyPosition) {
1733 // TODO(skobes): Resolve circular dependency between scroll offset and 1719 // TODO(skobes): Resolve circular dependency between scroll offset and
(...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after
3114 overflow); // This is how we clip in case we overflow again. 3100 overflow); // This is how we clip in case we overflow again.
3115 } 3101 }
3116 } 3102 }
3117 3103
3118 adjustViewSizeAndLayout(); 3104 adjustViewSizeAndLayout();
3119 } 3105 }
3120 3106
3121 IntRect FrameView::convertFromLayoutObject( 3107 IntRect FrameView::convertFromLayoutObject(
3122 const LayoutObject& layoutObject, 3108 const LayoutObject& layoutObject,
3123 const IntRect& layoutObjectRect) const { 3109 const IntRect& layoutObjectRect) const {
3124 IntRect rect = pixelSnappedIntRect(enclosingLayoutRect( 3110 // Convert from page ("absolute") to FrameView coordinates.
3111 LayoutRect rect = enclosingLayoutRect(
3125 layoutObject.localToAbsoluteQuad(FloatRect(layoutObjectRect)) 3112 layoutObject.localToAbsoluteQuad(FloatRect(layoutObjectRect))
3126 .boundingBox())); 3113 .boundingBox());
3127 3114 rect.move(LayoutSize(-scrollOffset()));
3128 // Convert from page ("absolute") to FrameView coordinates. 3115 return pixelSnappedIntRect(rect);
3129 rect.moveBy(-scrollPosition());
3130
3131 return rect;
3132 } 3116 }
3133 3117
3134 IntRect FrameView::convertToLayoutObject(const LayoutObject& layoutObject, 3118 IntRect FrameView::convertToLayoutObject(const LayoutObject& layoutObject,
3135 const IntRect& frameRect) const { 3119 const IntRect& frameRect) const {
3136 IntRect rectInContent = frameToContents(frameRect); 3120 IntRect rectInContent = frameToContents(frameRect);
3137 3121
3138 // Convert from FrameView coords into page ("absolute") coordinates. 3122 // Convert from FrameView coords into page ("absolute") coordinates.
3139 rectInContent.moveBy(scrollPosition()); 3123 rectInContent.move(scrollOffsetInt());
3140 3124
3141 // FIXME: we don't have a way to map an absolute rect down to a local quad, so 3125 // FIXME: we don't have a way to map an absolute rect down to a local quad, so
3142 // just move the rect for now. 3126 // just move the rect for now.
3143 rectInContent.setLocation(roundedIntPoint( 3127 rectInContent.setLocation(roundedIntPoint(
3144 layoutObject.absoluteToLocal(rectInContent.location(), UseTransforms))); 3128 layoutObject.absoluteToLocal(rectInContent.location(), UseTransforms)));
3145 return rectInContent; 3129 return rectInContent;
3146 } 3130 }
3147 3131
3148 IntPoint FrameView::convertFromLayoutObject( 3132 IntPoint FrameView::convertFromLayoutObject(
3149 const LayoutObject& layoutObject, 3133 const LayoutObject& layoutObject,
3150 const IntPoint& layoutObjectPoint) const { 3134 const IntPoint& layoutObjectPoint) const {
3151 IntPoint point = roundedIntPoint( 3135 IntPoint point = roundedIntPoint(
3152 layoutObject.localToAbsolute(layoutObjectPoint, UseTransforms)); 3136 layoutObject.localToAbsolute(layoutObjectPoint, UseTransforms));
3153 3137
3154 // Convert from page ("absolute") to FrameView coordinates. 3138 // Convert from page ("absolute") to FrameView coordinates.
3155 point.moveBy(-scrollPosition()); 3139 point.move(-scrollOffsetInt());
3156 return point; 3140 return point;
3157 } 3141 }
3158 3142
3159 IntPoint FrameView::convertToLayoutObject(const LayoutObject& layoutObject, 3143 IntPoint FrameView::convertToLayoutObject(const LayoutObject& layoutObject,
3160 const IntPoint& framePoint) const { 3144 const IntPoint& framePoint) const {
3161 IntPoint point = framePoint; 3145 IntPoint point = framePoint;
3162 3146
3163 // Convert from FrameView coords into page ("absolute") coordinates. 3147 // Convert from FrameView coords into page ("absolute") coordinates.
3164 point += IntSize(scrollX(), scrollY()); 3148 point += IntSize(scrollX(), scrollY());
3165 3149
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
3426 3410
3427 void FrameView::didAddScrollbar(Scrollbar& scrollbar, 3411 void FrameView::didAddScrollbar(Scrollbar& scrollbar,
3428 ScrollbarOrientation orientation) { 3412 ScrollbarOrientation orientation) {
3429 ScrollableArea::didAddScrollbar(scrollbar, orientation); 3413 ScrollableArea::didAddScrollbar(scrollbar, orientation);
3430 } 3414 }
3431 3415
3432 void FrameView::setTopControlsViewportAdjustment(float adjustment) { 3416 void FrameView::setTopControlsViewportAdjustment(float adjustment) {
3433 m_topControlsViewportAdjustment = adjustment; 3417 m_topControlsViewportAdjustment = adjustment;
3434 } 3418 }
3435 3419
3436 IntPoint FrameView::maximumScrollPosition() const { 3420 IntSize FrameView::maximumScrollOffsetInt() const {
3437 // Make the same calculation as in CC's LayerImpl::MaxScrollOffset() 3421 // Make the same calculation as in CC's LayerImpl::MaxScrollOffset()
3438 // FIXME: We probably shouldn't be storing the bounds in a float. 3422 // FIXME: We probably shouldn't be storing the bounds in a float.
3439 // crbug.com/422331. 3423 // crbug.com/422331.
3440 IntSize visibleSize = 3424 IntSize visibleSize =
3441 visibleContentSize(ExcludeScrollbars) + topControlsSize(); 3425 visibleContentSize(ExcludeScrollbars) + topControlsSize();
3442 IntSize contentBounds = contentsSize(); 3426 IntSize contentBounds = contentsSize();
3443 IntPoint maximumPosition = -scrollOrigin() + (contentBounds - visibleSize); 3427 IntSize maximumOffset =
3444 return maximumPosition.expandedTo(minimumScrollPosition()); 3428 toIntSize(-scrollOrigin() + (contentBounds - visibleSize));
3429 return maximumOffset.expandedTo(minimumScrollOffsetInt());
3445 } 3430 }
3446 3431
3447 void FrameView::addChild(Widget* child) { 3432 void FrameView::addChild(Widget* child) {
3448 ASSERT(child != this && !child->parent()); 3433 ASSERT(child != this && !child->parent());
3449 child->setParent(this); 3434 child->setParent(this);
3450 m_children.add(child); 3435 m_children.add(child);
3451 } 3436 }
3452 3437
3453 void FrameView::setHasHorizontalScrollbar(bool hasBar) { 3438 void FrameView::setHasHorizontalScrollbar(bool hasBar) {
3454 if (hasBar == !!m_horizontalScrollbar) 3439 if (hasBar == !!m_horizontalScrollbar)
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
3545 3530
3546 IntSize FrameView::visibleContentSize( 3531 IntSize FrameView::visibleContentSize(
3547 IncludeScrollbarsInRect scrollbarInclusion) const { 3532 IncludeScrollbarsInRect scrollbarInclusion) const {
3548 return scrollbarInclusion == ExcludeScrollbars 3533 return scrollbarInclusion == ExcludeScrollbars
3549 ? excludeScrollbars(frameRect().size()) 3534 ? excludeScrollbars(frameRect().size())
3550 : frameRect().size(); 3535 : frameRect().size();
3551 } 3536 }
3552 3537
3553 IntRect FrameView::visibleContentRect( 3538 IntRect FrameView::visibleContentRect(
3554 IncludeScrollbarsInRect scrollbarInclusion) const { 3539 IncludeScrollbarsInRect scrollbarInclusion) const {
3555 return IntRect(flooredIntPoint(m_scrollPosition), 3540 return IntRect(IntPoint(flooredIntSize(m_scrollOffset)),
3556 visibleContentSize(scrollbarInclusion)); 3541 visibleContentSize(scrollbarInclusion));
3557 } 3542 }
3558 3543
3559 IntSize FrameView::contentsSize() const { 3544 IntSize FrameView::contentsSize() const {
3560 return m_contentsSize; 3545 return m_contentsSize;
3561 } 3546 }
3562 3547
3563 void FrameView::clipPaintRect(FloatRect* paintRect) const { 3548 void FrameView::clipPaintRect(FloatRect* paintRect) const {
3564 // Paint the whole rect if "mainFrameClipsContent" is false, meaning that 3549 // Paint the whole rect if "mainFrameClipsContent" is false, meaning that
3565 // WebPreferences::record_whole_document is true. 3550 // WebPreferences::record_whole_document is true.
3566 if (!m_frame->settings()->mainFrameClipsContent()) 3551 if (!m_frame->settings()->mainFrameClipsContent())
3567 return; 3552 return;
3568 3553
3569 paintRect->intersect( 3554 paintRect->intersect(
3570 page()->chromeClient().visibleContentRectForPainting().value_or( 3555 page()->chromeClient().visibleContentRectForPainting().value_or(
3571 visibleContentRect())); 3556 visibleContentRect()));
3572 } 3557 }
3573 3558
3574 IntPoint FrameView::minimumScrollPosition() const { 3559 IntSize FrameView::minimumScrollOffsetInt() const {
3575 return IntPoint(-scrollOrigin().x(), -scrollOrigin().y()); 3560 return IntSize(-scrollOrigin().x(), -scrollOrigin().y());
3576 } 3561 }
3577 3562
3578 void FrameView::adjustScrollbarOpacity() { 3563 void FrameView::adjustScrollbarOpacity() {
3579 if (m_horizontalScrollbar && layerForHorizontalScrollbar()) { 3564 if (m_horizontalScrollbar && layerForHorizontalScrollbar()) {
3580 bool isOpaqueScrollbar = !m_horizontalScrollbar->isOverlayScrollbar(); 3565 bool isOpaqueScrollbar = !m_horizontalScrollbar->isOverlayScrollbar();
3581 layerForHorizontalScrollbar()->setContentsOpaque(isOpaqueScrollbar); 3566 layerForHorizontalScrollbar()->setContentsOpaque(isOpaqueScrollbar);
3582 } 3567 }
3583 if (m_verticalScrollbar && layerForVerticalScrollbar()) { 3568 if (m_verticalScrollbar && layerForVerticalScrollbar()) {
3584 bool isOpaqueScrollbar = !m_verticalScrollbar->isOverlayScrollbar(); 3569 bool isOpaqueScrollbar = !m_verticalScrollbar->isOverlayScrollbar();
3585 layerForVerticalScrollbar()->setContentsOpaque(isOpaqueScrollbar); 3570 layerForVerticalScrollbar()->setContentsOpaque(isOpaqueScrollbar);
(...skipping 10 matching lines...) Expand all
3596 if (!scrollbar) { 3581 if (!scrollbar) {
3597 IntSize scrollSize = m_contentsSize - visibleContentRect().size(); 3582 IntSize scrollSize = m_contentsSize - visibleContentRect().size();
3598 scrollSize.clampNegativeToZero(); 3583 scrollSize.clampNegativeToZero();
3599 return orientation == HorizontalScrollbar ? scrollSize.width() 3584 return orientation == HorizontalScrollbar ? scrollSize.width()
3600 : scrollSize.height(); 3585 : scrollSize.height();
3601 } 3586 }
3602 3587
3603 return scrollbar->totalSize() - scrollbar->visibleSize(); 3588 return scrollbar->totalSize() - scrollbar->visibleSize();
3604 } 3589 }
3605 3590
3606 void FrameView::setScrollOffset(const DoublePoint& offset, 3591 void FrameView::updateScrollOffset(const ScrollOffset& offset,
3607 ScrollType scrollType) { 3592 ScrollType scrollType) {
3608 DoublePoint oldPosition = m_scrollPosition; 3593 ScrollOffset scrollDelta = offset - m_scrollOffset;
3609 DoubleSize scrollDelta = offset - oldPosition;
3610 if (scrollDelta.isZero()) 3594 if (scrollDelta.isZero())
3611 return; 3595 return;
3612 3596
3613 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { 3597 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) {
3614 // Don't scroll the FrameView! 3598 // Don't scroll the FrameView!
3615 ASSERT_NOT_REACHED(); 3599 ASSERT_NOT_REACHED();
3616 } 3600 }
3617 3601
3618 m_scrollPosition = offset; 3602 m_scrollOffset = offset;
3619 3603
3620 if (!scrollbarsSuppressed()) 3604 if (!scrollbarsSuppressed())
3621 m_pendingScrollDelta += scrollDelta; 3605 m_pendingScrollDelta += scrollDelta;
3622 3606
3623 clearFragmentAnchor(); 3607 clearFragmentAnchor();
3624 updateLayersAndCompositingAfterScrollIfNeeded(scrollDelta); 3608 updateLayersAndCompositingAfterScrollIfNeeded(scrollDelta);
3625 3609
3626 Document* document = m_frame->document(); 3610 Document* document = m_frame->document();
3627 document->enqueueScrollEventForNode(document); 3611 document->enqueueScrollEventForNode(document);
3628 3612
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
3871 void FrameView::updateScrollbars() { 3855 void FrameView::updateScrollbars() {
3872 m_needsScrollbarsUpdate = false; 3856 m_needsScrollbarsUpdate = false;
3873 3857
3874 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled()) 3858 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled())
3875 return; 3859 return;
3876 3860
3877 // Avoid drawing two sets of scrollbars when visual viewport is enabled. 3861 // Avoid drawing two sets of scrollbars when visual viewport is enabled.
3878 if (visualViewportSuppliesScrollbars()) { 3862 if (visualViewportSuppliesScrollbars()) {
3879 setHasHorizontalScrollbar(false); 3863 setHasHorizontalScrollbar(false);
3880 setHasVerticalScrollbar(false); 3864 setHasVerticalScrollbar(false);
3881 adjustScrollPositionFromUpdateScrollbars(); 3865 adjustScrollOffsetFromUpdateScrollbars();
3882 return; 3866 return;
3883 } 3867 }
3884 3868
3885 if (m_inUpdateScrollbars) 3869 if (m_inUpdateScrollbars)
3886 return; 3870 return;
3887 InUpdateScrollbarsScope inUpdateScrollbarsScope(this); 3871 InUpdateScrollbarsScope inUpdateScrollbarsScope(this);
3888 3872
3889 bool scrollbarExistenceChanged = false; 3873 bool scrollbarExistenceChanged = false;
3890 3874
3891 if (needsScrollbarReconstruction()) { 3875 if (needsScrollbarReconstruction()) {
(...skipping 15 matching lines...) Expand all
3907 updateScrollbarGeometry(); 3891 updateScrollbarGeometry();
3908 3892
3909 if (scrollbarExistenceChanged) { 3893 if (scrollbarExistenceChanged) {
3910 // FIXME: Is frameRectsChanged really necessary here? Have any frame rects 3894 // FIXME: Is frameRectsChanged really necessary here? Have any frame rects
3911 // changed? 3895 // changed?
3912 frameRectsChanged(); 3896 frameRectsChanged();
3913 positionScrollbarLayers(); 3897 positionScrollbarLayers();
3914 updateScrollCorner(); 3898 updateScrollCorner();
3915 } 3899 }
3916 3900
3917 adjustScrollPositionFromUpdateScrollbars(); 3901 adjustScrollOffsetFromUpdateScrollbars();
3918 } 3902 }
3919 3903
3920 void FrameView::adjustScrollPositionFromUpdateScrollbars() { 3904 void FrameView::adjustScrollOffsetFromUpdateScrollbars() {
3921 DoublePoint clamped = clampScrollPosition(scrollPositionDouble()); 3905 ScrollOffset clamped = clampScrollOffset(scrollOffset());
3922 // Restore before clamping because clamping clears the scroll anchor. 3906 // Restore before clamping because clamping clears the scroll anchor.
3923 // TODO(ymalik): This same logic exists in PaintLayerScrollableArea. 3907 // TODO(ymalik): This same logic exists in PaintLayerScrollableArea.
3924 // Remove when root-layer-scrolls is enabled. 3908 // Remove when root-layer-scrolls is enabled.
3925 if (clamped != scrollPositionDouble() && shouldPerformScrollAnchoring()) { 3909 if (clamped != scrollOffset() && shouldPerformScrollAnchoring()) {
3926 m_scrollAnchor.restore(); 3910 m_scrollAnchor.restore();
3927 clamped = clampScrollPosition(scrollPositionDouble()); 3911 clamped = clampScrollOffset(scrollOffset());
3928 } 3912 }
3929 if (clamped != scrollPositionDouble() || scrollOriginChanged()) { 3913 if (clamped != scrollOffset() || scrollOriginChanged()) {
3930 ScrollableArea::setScrollPosition(clamped, ProgrammaticScroll); 3914 ScrollableArea::setScrollOffset(clamped, ProgrammaticScroll);
3931 resetScrollOriginChanged(); 3915 resetScrollOriginChanged();
3932 } 3916 }
3933 } 3917 }
3934 3918
3935 void FrameView::scrollContentsIfNeeded() { 3919 void FrameView::scrollContentsIfNeeded() {
3936 if (m_pendingScrollDelta.isZero()) 3920 if (m_pendingScrollDelta.isZero())
3937 return; 3921 return;
3938 DoubleSize scrollDelta = m_pendingScrollDelta; 3922 ScrollOffset scrollDelta = m_pendingScrollDelta;
3939 m_pendingScrollDelta = DoubleSize(); 3923 m_pendingScrollDelta = ScrollOffset();
3940 // FIXME: Change scrollContents() to take DoubleSize. crbug.com/414283. 3924 // FIXME: Change scrollContents() to take DoubleSize. crbug.com/414283.
3941 scrollContents(flooredIntSize(scrollDelta)); 3925 scrollContents(flooredIntSize(scrollDelta));
3942 } 3926 }
3943 3927
3944 void FrameView::scrollContents(const IntSize& scrollDelta) { 3928 void FrameView::scrollContents(const IntSize& scrollDelta) {
3945 HostWindow* window = getHostWindow(); 3929 HostWindow* window = getHostWindow();
3946 if (!window) 3930 if (!window)
3947 return; 3931 return;
3948 3932
3949 TRACE_EVENT0("blink", "FrameView::scrollContents"); 3933 TRACE_EVENT0("blink", "FrameView::scrollContents");
3950 3934
3951 if (!scrollContentsFastPath(-scrollDelta)) 3935 if (!scrollContentsFastPath(-scrollDelta))
3952 scrollContentsSlowPath(); 3936 scrollContentsSlowPath();
3953 3937
3954 // This call will move children with native widgets (plugins) and invalidate 3938 // This call will move children with native widgets (plugins) and invalidate
3955 // them as well. 3939 // them as well.
3956 frameRectsChanged(); 3940 frameRectsChanged();
3957 } 3941 }
3958 3942
3959 IntPoint FrameView::contentsToFrame(const IntPoint& pointInContentSpace) const { 3943 IntPoint FrameView::contentsToFrame(const IntPoint& pointInContentSpace) const {
3960 return pointInContentSpace - scrollOffset(); 3944 return pointInContentSpace - scrollOffsetInt();
3961 } 3945 }
3962 3946
3963 IntRect FrameView::contentsToFrame(const IntRect& rectInContentSpace) const { 3947 IntRect FrameView::contentsToFrame(const IntRect& rectInContentSpace) const {
3964 return IntRect(contentsToFrame(rectInContentSpace.location()), 3948 return IntRect(contentsToFrame(rectInContentSpace.location()),
3965 rectInContentSpace.size()); 3949 rectInContentSpace.size());
3966 } 3950 }
3967 3951
3968 FloatPoint FrameView::frameToContents(const FloatPoint& pointInFrame) const { 3952 FloatPoint FrameView::frameToContents(const FloatPoint& pointInFrame) const {
3969 return pointInFrame + scrollOffset(); 3953 return pointInFrame + scrollOffset();
3970 } 3954 }
3971 3955
3972 IntPoint FrameView::frameToContents(const IntPoint& pointInFrame) const { 3956 IntPoint FrameView::frameToContents(const IntPoint& pointInFrame) const {
3973 return pointInFrame + scrollOffset(); 3957 return pointInFrame + scrollOffsetInt();
3974 } 3958 }
3975 3959
3976 IntRect FrameView::frameToContents(const IntRect& rectInFrame) const { 3960 IntRect FrameView::frameToContents(const IntRect& rectInFrame) const {
3977 return IntRect(frameToContents(rectInFrame.location()), rectInFrame.size()); 3961 return IntRect(frameToContents(rectInFrame.location()), rectInFrame.size());
3978 } 3962 }
3979 3963
3980 IntPoint FrameView::rootFrameToContents(const IntPoint& rootFramePoint) const { 3964 IntPoint FrameView::rootFrameToContents(const IntPoint& rootFramePoint) const {
3981 IntPoint framePoint = convertFromRootFrame(rootFramePoint); 3965 IntPoint framePoint = convertFromRootFrame(rootFramePoint);
3982 return frameToContents(framePoint); 3966 return frameToContents(framePoint);
3983 } 3967 }
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
4150 return this; 4134 return this;
4151 } 4135 }
4152 4136
4153 LayoutRect FrameView::scrollIntoView(const LayoutRect& rectInContent, 4137 LayoutRect FrameView::scrollIntoView(const LayoutRect& rectInContent,
4154 const ScrollAlignment& alignX, 4138 const ScrollAlignment& alignX,
4155 const ScrollAlignment& alignY, 4139 const ScrollAlignment& alignY,
4156 ScrollType scrollType) { 4140 ScrollType scrollType) {
4157 LayoutRect viewRect(visibleContentRect()); 4141 LayoutRect viewRect(visibleContentRect());
4158 LayoutRect exposeRect = 4142 LayoutRect exposeRect =
4159 ScrollAlignment::getRectToExpose(viewRect, rectInContent, alignX, alignY); 4143 ScrollAlignment::getRectToExpose(viewRect, rectInContent, alignX, alignY);
4160 if (exposeRect != viewRect) 4144 if (exposeRect != viewRect) {
4161 setScrollPosition(DoublePoint(exposeRect.x(), exposeRect.y()), scrollType); 4145 setScrollOffset(
4146 ScrollOffset(exposeRect.x().toFloat(), exposeRect.y().toFloat()),
4147 scrollType);
4148 }
4162 4149
4163 // Scrolling the FrameView cannot change the input rect's location relative to 4150 // Scrolling the FrameView cannot change the input rect's location relative to
4164 // the document. 4151 // the document.
4165 return rectInContent; 4152 return rectInContent;
4166 } 4153 }
4167 4154
4168 IntRect FrameView::scrollCornerRect() const { 4155 IntRect FrameView::scrollCornerRect() const {
4169 IntRect cornerRect; 4156 IntRect cornerRect;
4170 4157
4171 if (hasOverlayScrollbars()) 4158 if (hasOverlayScrollbars())
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
4570 } 4557 }
4571 4558
4572 bool FrameView::canThrottleRendering() const { 4559 bool FrameView::canThrottleRendering() const {
4573 if (!RuntimeEnabledFeatures::renderingPipelineThrottlingEnabled()) 4560 if (!RuntimeEnabledFeatures::renderingPipelineThrottlingEnabled())
4574 return false; 4561 return false;
4575 return m_subtreeThrottled || 4562 return m_subtreeThrottled ||
4576 (m_hiddenForThrottling && m_crossOriginForThrottling); 4563 (m_hiddenForThrottling && m_crossOriginForThrottling);
4577 } 4564 }
4578 4565
4579 } // namespace blink 4566 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/frame/FrameView.h ('k') | third_party/WebKit/Source/core/frame/FrameViewTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698