OLD | NEW |
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 1725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1736 } | 1736 } |
1737 | 1737 |
1738 HostWindow* FrameView::hostWindow() const | 1738 HostWindow* FrameView::hostWindow() const |
1739 { | 1739 { |
1740 Page* page = frame().page(); | 1740 Page* page = frame().page(); |
1741 if (!page) | 1741 if (!page) |
1742 return nullptr; | 1742 return nullptr; |
1743 return &page->chrome(); | 1743 return &page->chrome(); |
1744 } | 1744 } |
1745 | 1745 |
1746 void FrameView::contentRectangleForPaintInvalidation(const IntRect& rect) | 1746 void FrameView::contentRectangleForPaintInvalidation(const IntRect& rectInConten
t) |
1747 { | 1747 { |
1748 ASSERT(!m_frame->ownerRenderer()); | 1748 ASSERT(!m_frame->ownerRenderer()); |
1749 | 1749 |
1750 if (m_isTrackingPaintInvalidations) { | 1750 if (m_isTrackingPaintInvalidations) { |
1751 IntRect paintInvalidationRect = rect; | 1751 m_trackedPaintInvalidationRects.append(contentsToFrame(rectInContent)); |
1752 paintInvalidationRect.move(-scrollOffset()); | |
1753 m_trackedPaintInvalidationRects.append(paintInvalidationRect); | |
1754 // FIXME: http://crbug.com/368518. Eventually, invalidateContentRectangl
eForPaint | 1752 // FIXME: http://crbug.com/368518. Eventually, invalidateContentRectangl
eForPaint |
1755 // is going away entirely once all layout tests are FCM. In the short | 1753 // is going away entirely once all layout tests are FCM. In the short |
1756 // term, no code should be tracking non-composited FrameView paint inval
idations. | 1754 // term, no code should be tracking non-composited FrameView paint inval
idations. |
1757 RELEASE_ASSERT_NOT_REACHED(); | 1755 RELEASE_ASSERT_NOT_REACHED(); |
1758 } | 1756 } |
1759 | 1757 |
1760 IntRect paintRect = rect; | 1758 IntRect paintRect = rectInContent; |
1761 if (clipsPaintInvalidations()) | 1759 if (clipsPaintInvalidations()) |
1762 paintRect.intersect(visibleContentRect()); | 1760 paintRect.intersect(visibleContentRect()); |
1763 if (paintRect.isEmpty()) | 1761 if (paintRect.isEmpty()) |
1764 return; | 1762 return; |
1765 | 1763 |
1766 if (HostWindow* window = hostWindow()) | 1764 if (HostWindow* window = hostWindow()) |
1767 window->invalidateRect(contentsToWindow(paintRect)); | 1765 window->invalidateRect(contentsToWindow(paintRect)); |
1768 } | 1766 } |
1769 | 1767 |
1770 void FrameView::contentsResized() | 1768 void FrameView::contentsResized() |
(...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2750 IntRect FrameView::convertFromRenderer(const LayoutObject& renderer, const IntRe
ct& rendererRect) const | 2748 IntRect FrameView::convertFromRenderer(const LayoutObject& renderer, const IntRe
ct& rendererRect) const |
2751 { | 2749 { |
2752 IntRect rect = pixelSnappedIntRect(enclosingLayoutRect(renderer.localToAbsol
uteQuad(FloatRect(rendererRect)).boundingBox())); | 2750 IntRect rect = pixelSnappedIntRect(enclosingLayoutRect(renderer.localToAbsol
uteQuad(FloatRect(rendererRect)).boundingBox())); |
2753 | 2751 |
2754 // Convert from page ("absolute") to FrameView coordinates. | 2752 // Convert from page ("absolute") to FrameView coordinates. |
2755 rect.moveBy(-scrollPosition()); | 2753 rect.moveBy(-scrollPosition()); |
2756 | 2754 |
2757 return rect; | 2755 return rect; |
2758 } | 2756 } |
2759 | 2757 |
2760 IntRect FrameView::convertToRenderer(const LayoutObject& renderer, const IntRect
& viewRect) const | 2758 IntRect FrameView::convertToRenderer(const LayoutObject& renderer, const IntRect
& frameRect) const |
2761 { | 2759 { |
2762 IntRect rect = viewRect; | 2760 IntRect rectInContent = frameToContents(frameRect); |
2763 | 2761 |
2764 // Convert from FrameView coords into page ("absolute") coordinates. | 2762 // Convert from FrameView coords into page ("absolute") coordinates. |
2765 rect.moveBy(scrollPosition()); | 2763 rectInContent.moveBy(scrollPosition()); |
2766 | 2764 |
2767 // FIXME: we don't have a way to map an absolute rect down to a local quad,
so just | 2765 // FIXME: we don't have a way to map an absolute rect down to a local quad,
so just |
2768 // move the rect for now. | 2766 // move the rect for now. |
2769 rect.setLocation(roundedIntPoint(renderer.absoluteToLocal(rect.location(), U
seTransforms))); | 2767 rectInContent.setLocation(roundedIntPoint(renderer.absoluteToLocal(rectInCon
tent.location(), UseTransforms))); |
2770 return rect; | 2768 return rectInContent; |
2771 } | 2769 } |
2772 | 2770 |
2773 IntPoint FrameView::convertFromRenderer(const LayoutObject& renderer, const IntP
oint& rendererPoint) const | 2771 IntPoint FrameView::convertFromRenderer(const LayoutObject& renderer, const IntP
oint& rendererPoint) const |
2774 { | 2772 { |
2775 IntPoint point = roundedIntPoint(renderer.localToAbsolute(rendererPoint, Use
Transforms)); | 2773 IntPoint point = roundedIntPoint(renderer.localToAbsolute(rendererPoint, Use
Transforms)); |
2776 | 2774 |
2777 // Convert from page ("absolute") to FrameView coordinates. | 2775 // Convert from page ("absolute") to FrameView coordinates. |
2778 point.moveBy(-scrollPosition()); | 2776 point.moveBy(-scrollPosition()); |
2779 return point; | 2777 return point; |
2780 } | 2778 } |
2781 | 2779 |
2782 IntPoint FrameView::convertToRenderer(const LayoutObject& renderer, const IntPoi
nt& viewPoint) const | 2780 IntPoint FrameView::convertToRenderer(const LayoutObject& renderer, const IntPoi
nt& framePoint) const |
2783 { | 2781 { |
2784 IntPoint point = viewPoint; | 2782 IntPoint point = framePoint; |
2785 | 2783 |
2786 // Convert from FrameView coords into page ("absolute") coordinates. | 2784 // Convert from FrameView coords into page ("absolute") coordinates. |
2787 point += IntSize(scrollX(), scrollY()); | 2785 point += IntSize(scrollX(), scrollY()); |
2788 | 2786 |
2789 return roundedIntPoint(renderer.absoluteToLocal(point, UseTransforms)); | 2787 return roundedIntPoint(renderer.absoluteToLocal(point, UseTransforms)); |
2790 } | 2788 } |
2791 | 2789 |
2792 IntRect FrameView::convertToContainingView(const IntRect& localRect) const | 2790 IntRect FrameView::convertToContainingView(const IntRect& localRect) const |
2793 { | 2791 { |
2794 if (const FrameView* parentView = toFrameView(parent())) { | 2792 if (const FrameView* parentView = toFrameView(parent())) { |
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3619 if (!scrollContentsFastPath(-scrollDelta)) | 3617 if (!scrollContentsFastPath(-scrollDelta)) |
3620 scrollContentsSlowPath(updateRect); | 3618 scrollContentsSlowPath(updateRect); |
3621 | 3619 |
3622 // Invalidate the overhang areas if they are visible. | 3620 // Invalidate the overhang areas if they are visible. |
3623 updateOverhangAreas(); | 3621 updateOverhangAreas(); |
3624 | 3622 |
3625 // This call will move children with native widgets (plugins) and invalidate
them as well. | 3623 // This call will move children with native widgets (plugins) and invalidate
them as well. |
3626 frameRectsChanged(); | 3624 frameRectsChanged(); |
3627 } | 3625 } |
3628 | 3626 |
3629 IntPoint FrameView::rootViewToContents(const IntPoint& rootViewPoint) const | 3627 IntPoint FrameView::contentsToFrame(const IntPoint& pointInContentSpace) const |
3630 { | 3628 { |
3631 IntPoint viewPoint = convertFromContainingWindow(rootViewPoint); | 3629 return pointInContentSpace - scrollOffset(); |
3632 return viewPoint + scrollOffset(); | |
3633 } | 3630 } |
3634 | 3631 |
3635 IntPoint FrameView::contentsToRootView(const IntPoint& contentsPoint) const | 3632 IntRect FrameView::contentsToFrame(const IntRect& rectInContentSpace) const |
3636 { | 3633 { |
3637 IntPoint viewPoint = contentsPoint - scrollOffset(); | 3634 return IntRect(contentsToFrame(rectInContentSpace.location()), rectInContent
Space.size()); |
3638 return convertToContainingWindow(viewPoint); | |
3639 } | 3635 } |
3640 | 3636 |
3641 IntRect FrameView::rootViewToContents(const IntRect& rootViewRect) const | 3637 FloatPoint FrameView::frameToContents(const FloatPoint& pointInFrame) const |
3642 { | 3638 { |
3643 IntRect viewRect = convertFromContainingWindow(rootViewRect); | 3639 return pointInFrame + scrollOffset(); |
3644 viewRect.move(scrollOffset()); | |
3645 return viewRect; | |
3646 } | 3640 } |
3647 | 3641 |
3648 IntRect FrameView::contentsToRootView(const IntRect& contentsRect) const | 3642 IntPoint FrameView::frameToContents(const IntPoint& pointInFrame) const |
3649 { | 3643 { |
3650 IntRect viewRect = contentsRect; | 3644 return pointInFrame + scrollOffset(); |
3651 viewRect.move(-scrollOffset()); | 3645 } |
3652 return convertToContainingWindow(viewRect); | 3646 |
| 3647 IntRect FrameView::frameToContents(const IntRect& rectInFrame) const |
| 3648 { |
| 3649 return IntRect(frameToContents(rectInFrame.location()), rectInFrame.size()); |
| 3650 } |
| 3651 |
| 3652 IntPoint FrameView::rootFrameToContents(const IntPoint& rootFramePoint) const |
| 3653 { |
| 3654 IntPoint framePoint = convertFromContainingWindow(rootFramePoint); |
| 3655 return frameToContents(framePoint); |
| 3656 } |
| 3657 |
| 3658 IntRect FrameView::rootFrameToContents(const IntRect& rootFrameRect) const |
| 3659 { |
| 3660 return IntRect(rootFrameToContents(rootFrameRect.location()), rootFrameRect.
size()); |
| 3661 } |
| 3662 |
| 3663 IntPoint FrameView::contentsToRootFrame(const IntPoint& contentsPoint) const |
| 3664 { |
| 3665 IntPoint framePoint = contentsToFrame(contentsPoint); |
| 3666 return convertToContainingWindow(framePoint); |
| 3667 } |
| 3668 |
| 3669 IntRect FrameView::contentsToRootFrame(const IntRect& contentsRect) const |
| 3670 { |
| 3671 IntRect rectInFrame = contentsToFrame(contentsRect); |
| 3672 return convertToContainingWindow(rectInFrame); |
3653 } | 3673 } |
3654 | 3674 |
3655 IntPoint FrameView::windowToContents(const IntPoint& windowPoint) const | 3675 IntPoint FrameView::windowToContents(const IntPoint& windowPoint) const |
3656 { | 3676 { |
3657 IntPoint viewPoint = convertFromContainingWindow(windowPoint); | 3677 IntPoint framePoint = convertFromContainingWindow(windowPoint); |
3658 return viewPoint + scrollOffset(); | 3678 return frameToContents(framePoint); |
3659 } | 3679 } |
3660 | 3680 |
3661 FloatPoint FrameView::windowToContents(const FloatPoint& windowPoint) const | 3681 FloatPoint FrameView::windowToContents(const FloatPoint& windowPoint) const |
3662 { | 3682 { |
3663 FloatPoint viewPoint = convertFromContainingWindow(windowPoint); | 3683 FloatPoint framePoint = convertFromContainingWindow(windowPoint); |
3664 return viewPoint + scrollOffset(); | 3684 return frameToContents(framePoint); |
3665 } | 3685 } |
3666 | 3686 |
3667 IntPoint FrameView::contentsToWindow(const IntPoint& contentsPoint) const | 3687 IntPoint FrameView::contentsToWindow(const IntPoint& contentsPoint) const |
3668 { | 3688 { |
3669 IntPoint viewPoint = contentsPoint - scrollOffset(); | 3689 IntPoint framePoint = contentsToFrame(contentsPoint); |
3670 return convertToContainingWindow(viewPoint); | 3690 return convertToContainingWindow(framePoint); |
3671 } | 3691 } |
3672 | 3692 |
3673 IntRect FrameView::windowToContents(const IntRect& windowRect) const | 3693 IntRect FrameView::windowToContents(const IntRect& windowRect) const |
3674 { | 3694 { |
3675 IntRect viewRect = convertFromContainingWindow(windowRect); | 3695 IntRect rectInFrame = convertFromContainingWindow(windowRect); |
3676 viewRect.move(scrollOffset()); | 3696 return frameToContents(rectInFrame); |
3677 return viewRect; | |
3678 } | 3697 } |
3679 | 3698 |
3680 IntRect FrameView::contentsToWindow(const IntRect& contentsRect) const | 3699 IntRect FrameView::contentsToWindow(const IntRect& contentsRect) const |
3681 { | 3700 { |
3682 IntRect viewRect = contentsRect; | 3701 IntRect rectInFrame = contentsToFrame(contentsRect); |
3683 viewRect.move(-scrollOffset()); | 3702 return convertToContainingWindow(rectInFrame); |
3684 return convertToContainingWindow(viewRect); | |
3685 } | 3703 } |
3686 | 3704 |
3687 IntRect FrameView::contentsToScreen(const IntRect& rect) const | 3705 IntRect FrameView::contentsToScreen(const IntRect& rect) const |
3688 { | 3706 { |
3689 HostWindow* window = hostWindow(); | 3707 HostWindow* window = hostWindow(); |
3690 if (!window) | 3708 if (!window) |
3691 return IntRect(); | 3709 return IntRect(); |
3692 return window->rootViewToScreen(contentsToRootView(rect)); | 3710 return window->viewportToScreen(contentsToWindow(rect)); |
3693 } | 3711 } |
3694 | 3712 |
3695 bool FrameView::containsScrollbarsAvoidingResizer() const | 3713 bool FrameView::containsScrollbarsAvoidingResizer() const |
3696 { | 3714 { |
3697 return !m_scrollbarsAvoidingResizer; | 3715 return !m_scrollbarsAvoidingResizer; |
3698 } | 3716 } |
3699 | 3717 |
3700 void FrameView::adjustScrollbarsAvoidingResizerCount(int overlapDelta) | 3718 void FrameView::adjustScrollbarsAvoidingResizerCount(int overlapDelta) |
3701 { | 3719 { |
3702 int oldCount = m_scrollbarsAvoidingResizer; | 3720 int oldCount = m_scrollbarsAvoidingResizer; |
(...skipping 23 matching lines...) Expand all Loading... |
3726 if (m_verticalScrollbar) | 3744 if (m_verticalScrollbar) |
3727 m_verticalScrollbar->invalidate(); | 3745 m_verticalScrollbar->invalidate(); |
3728 | 3746 |
3729 // Invalidate the scroll corner too on unsuppress. | 3747 // Invalidate the scroll corner too on unsuppress. |
3730 invalidateRect(scrollCornerRect()); | 3748 invalidateRect(scrollCornerRect()); |
3731 } | 3749 } |
3732 } | 3750 } |
3733 | 3751 |
3734 Scrollbar* FrameView::scrollbarAtWindowPoint(const IntPoint& windowPoint) | 3752 Scrollbar* FrameView::scrollbarAtWindowPoint(const IntPoint& windowPoint) |
3735 { | 3753 { |
3736 IntPoint viewPoint = convertFromContainingWindow(windowPoint); | 3754 IntPoint pointInFrame = convertFromContainingWindow(windowPoint); |
3737 return scrollbarAtViewPoint(viewPoint); | 3755 return scrollbarAtFramePoint(pointInFrame); |
3738 } | 3756 } |
3739 | 3757 |
3740 Scrollbar* FrameView::scrollbarAtViewPoint(const IntPoint& viewPoint) | 3758 Scrollbar* FrameView::scrollbarAtFramePoint(const IntPoint& pointInFrame) |
3741 { | 3759 { |
3742 if (m_horizontalScrollbar && m_horizontalScrollbar->shouldParticipateInHitTe
sting() && m_horizontalScrollbar->frameRect().contains(viewPoint)) | 3760 if (m_horizontalScrollbar && m_horizontalScrollbar->shouldParticipateInHitTe
sting() && m_horizontalScrollbar->frameRect().contains(pointInFrame)) |
3743 return m_horizontalScrollbar.get(); | 3761 return m_horizontalScrollbar.get(); |
3744 if (m_verticalScrollbar && m_verticalScrollbar->shouldParticipateInHitTestin
g() && m_verticalScrollbar->frameRect().contains(viewPoint)) | 3762 if (m_verticalScrollbar && m_verticalScrollbar->shouldParticipateInHitTestin
g() && m_verticalScrollbar->frameRect().contains(pointInFrame)) |
3745 return m_verticalScrollbar.get(); | 3763 return m_verticalScrollbar.get(); |
3746 return nullptr; | 3764 return nullptr; |
3747 } | 3765 } |
3748 | 3766 |
3749 static void positionScrollbarLayer(GraphicsLayer* graphicsLayer, Scrollbar* scro
llbar) | 3767 static void positionScrollbarLayer(GraphicsLayer* graphicsLayer, Scrollbar* scro
llbar) |
3750 { | 3768 { |
3751 if (!graphicsLayer || !scrollbar) | 3769 if (!graphicsLayer || !scrollbar) |
3752 return; | 3770 return; |
3753 | 3771 |
3754 IntRect scrollbarRect = scrollbar->frameRect(); | 3772 IntRect scrollbarRect = scrollbar->frameRect(); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3914 window->invalidateRect(horizontalOverhangRect); | 3932 window->invalidateRect(horizontalOverhangRect); |
3915 if (!verticalOverhangRect.isEmpty()) | 3933 if (!verticalOverhangRect.isEmpty()) |
3916 window->invalidateRect(verticalOverhangRect); | 3934 window->invalidateRect(verticalOverhangRect); |
3917 } | 3935 } |
3918 | 3936 |
3919 bool FrameView::isPointInScrollbarCorner(const IntPoint& windowPoint) | 3937 bool FrameView::isPointInScrollbarCorner(const IntPoint& windowPoint) |
3920 { | 3938 { |
3921 if (!scrollbarCornerPresent()) | 3939 if (!scrollbarCornerPresent()) |
3922 return false; | 3940 return false; |
3923 | 3941 |
3924 IntPoint viewPoint = convertFromContainingWindow(windowPoint); | 3942 IntPoint framePoint = convertFromContainingWindow(windowPoint); |
3925 | 3943 |
3926 if (m_horizontalScrollbar) { | 3944 if (m_horizontalScrollbar) { |
3927 int horizontalScrollbarYMin = m_horizontalScrollbar->frameRect().y(); | 3945 int horizontalScrollbarYMin = m_horizontalScrollbar->frameRect().y(); |
3928 int horizontalScrollbarYMax = m_horizontalScrollbar->frameRect().y() + m
_horizontalScrollbar->frameRect().height(); | 3946 int horizontalScrollbarYMax = m_horizontalScrollbar->frameRect().y() + m
_horizontalScrollbar->frameRect().height(); |
3929 int horizontalScrollbarXMin = m_horizontalScrollbar->frameRect().x() + m
_horizontalScrollbar->frameRect().width(); | 3947 int horizontalScrollbarXMin = m_horizontalScrollbar->frameRect().x() + m
_horizontalScrollbar->frameRect().width(); |
3930 | 3948 |
3931 return viewPoint.y() > horizontalScrollbarYMin && viewPoint.y() < horizo
ntalScrollbarYMax && viewPoint.x() > horizontalScrollbarXMin; | 3949 return framePoint.y() > horizontalScrollbarYMin && framePoint.y() < hori
zontalScrollbarYMax && framePoint.x() > horizontalScrollbarXMin; |
3932 } | 3950 } |
3933 | 3951 |
3934 int verticalScrollbarXMin = m_verticalScrollbar->frameRect().x(); | 3952 int verticalScrollbarXMin = m_verticalScrollbar->frameRect().x(); |
3935 int verticalScrollbarXMax = m_verticalScrollbar->frameRect().x() + m_vertica
lScrollbar->frameRect().width(); | 3953 int verticalScrollbarXMax = m_verticalScrollbar->frameRect().x() + m_vertica
lScrollbar->frameRect().width(); |
3936 int verticalScrollbarYMin = m_verticalScrollbar->frameRect().y() + m_vertica
lScrollbar->frameRect().height(); | 3954 int verticalScrollbarYMin = m_verticalScrollbar->frameRect().y() + m_vertica
lScrollbar->frameRect().height(); |
3937 | 3955 |
3938 return viewPoint.x() > verticalScrollbarXMin && viewPoint.x() < verticalScro
llbarXMax && viewPoint.y() > verticalScrollbarYMin; | 3956 return framePoint.x() > verticalScrollbarXMin && framePoint.x() < verticalSc
rollbarXMax && framePoint.y() > verticalScrollbarYMin; |
3939 } | 3957 } |
3940 | 3958 |
3941 bool FrameView::scrollbarCornerPresent() const | 3959 bool FrameView::scrollbarCornerPresent() const |
3942 { | 3960 { |
3943 return (m_horizontalScrollbar && width() - m_horizontalScrollbar->width() >
0) | 3961 return (m_horizontalScrollbar && width() - m_horizontalScrollbar->width() >
0) |
3944 || (m_verticalScrollbar && height() - m_verticalScrollbar->height() > 0)
; | 3962 || (m_verticalScrollbar && height() - m_verticalScrollbar->height() > 0)
; |
3945 } | 3963 } |
3946 | 3964 |
3947 IntRect FrameView::convertFromScrollbarToContainingView(const Scrollbar* scrollb
ar, const IntRect& localRect) const | 3965 IntRect FrameView::convertFromScrollbarToContainingView(const Scrollbar* scrollb
ar, const IntRect& localRect) const |
3948 { | 3966 { |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4054 { | 4072 { |
4055 Settings* settings = frame().settings(); | 4073 Settings* settings = frame().settings(); |
4056 if (!settings || !settings->rootLayerScrolls()) | 4074 if (!settings || !settings->rootLayerScrolls()) |
4057 return this; | 4075 return this; |
4058 | 4076 |
4059 RenderView* renderView = this->renderView(); | 4077 RenderView* renderView = this->renderView(); |
4060 return renderView ? renderView->scrollableArea() : nullptr; | 4078 return renderView ? renderView->scrollableArea() : nullptr; |
4061 } | 4079 } |
4062 | 4080 |
4063 } // namespace blink | 4081 } // namespace blink |
OLD | NEW |