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 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 return Scrollbar::create(this, orientation, RegularScrollbar); | 494 return Scrollbar::create(this, orientation, RegularScrollbar); |
495 } | 495 } |
496 | 496 |
497 void FrameView::setContentsSize(const IntSize& size) | 497 void FrameView::setContentsSize(const IntSize& size) |
498 { | 498 { |
499 if (size == contentsSize()) | 499 if (size == contentsSize()) |
500 return; | 500 return; |
501 | 501 |
502 m_contentsSize = size; | 502 m_contentsSize = size; |
503 updateScrollbars(scrollOffsetDouble()); | 503 updateScrollbars(scrollOffsetDouble()); |
504 updateOverhangAreas(); | |
505 ScrollableArea::contentsResized(); | 504 ScrollableArea::contentsResized(); |
506 | 505 |
507 Page* page = frame().page(); | 506 Page* page = frame().page(); |
508 if (!page) | 507 if (!page) |
509 return; | 508 return; |
510 | 509 |
511 updateScrollableAreaSet(); | 510 updateScrollableAreaSet(); |
512 | 511 |
513 page->chrome().contentsSizeChanged(m_frame.get(), size); | 512 page->chrome().contentsSizeChanged(m_frame.get(), size); |
514 } | 513 } |
(...skipping 2753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3268 } | 3267 } |
3269 | 3268 |
3270 bool FrameView::scroll(ScrollDirection direction, ScrollGranularity granularity) | 3269 bool FrameView::scroll(ScrollDirection direction, ScrollGranularity granularity) |
3271 { | 3270 { |
3272 ScrollDirection physicalDirection = | 3271 ScrollDirection physicalDirection = |
3273 toPhysicalDirection(direction, isVerticalDocument(), isFlippedDocument()
); | 3272 toPhysicalDirection(direction, isVerticalDocument(), isFlippedDocument()
); |
3274 | 3273 |
3275 return ScrollableArea::scroll(physicalDirection, granularity); | 3274 return ScrollableArea::scroll(physicalDirection, granularity); |
3276 } | 3275 } |
3277 | 3276 |
3278 IntSize FrameView::overhangAmount() const | |
3279 { | |
3280 IntSize stretch; | |
3281 | |
3282 IntPoint currentScrollPosition = scrollPosition(); | |
3283 IntPoint minScrollPosition = minimumScrollPosition(); | |
3284 IntPoint maxScrollPosition = maximumScrollPosition(); | |
3285 | |
3286 if (currentScrollPosition.x() < minScrollPosition.x()) | |
3287 stretch.setWidth(currentScrollPosition.x() - minScrollPosition.x()); | |
3288 if (currentScrollPosition.x() > maxScrollPosition.x()) | |
3289 stretch.setWidth(currentScrollPosition.x() - maxScrollPosition.x()); | |
3290 | |
3291 if (currentScrollPosition.y() < minScrollPosition.y()) | |
3292 stretch.setHeight(currentScrollPosition.y() - minScrollPosition.y()); | |
3293 if (currentScrollPosition.y() > maxScrollPosition.y()) | |
3294 stretch.setHeight(currentScrollPosition.y() - maxScrollPosition.y()); | |
3295 | |
3296 return stretch; | |
3297 } | |
3298 | |
3299 void FrameView::windowResizerRectChanged() | 3277 void FrameView::windowResizerRectChanged() |
3300 { | 3278 { |
3301 updateScrollbars(scrollOffsetDouble()); | 3279 updateScrollbars(scrollOffsetDouble()); |
3302 } | 3280 } |
3303 | 3281 |
3304 bool FrameView::hasOverlayScrollbars() const | 3282 bool FrameView::hasOverlayScrollbars() const |
3305 { | 3283 { |
3306 | 3284 |
3307 return (m_horizontalScrollbar && m_horizontalScrollbar->isOverlayScrollbar()
) | 3285 return (m_horizontalScrollbar && m_horizontalScrollbar->isOverlayScrollbar()
) |
3308 || (m_verticalScrollbar && m_verticalScrollbar->isOverlayScrollbar()); | 3286 || (m_verticalScrollbar && m_verticalScrollbar->isOverlayScrollbar()); |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3581 int panIconDirtySquareSizeLength = 2 * (panIconSizeLength + std::max(abs
(scrollDelta.width()), abs(scrollDelta.height()))); // We only want to repaint w
hat's necessary | 3559 int panIconDirtySquareSizeLength = 2 * (panIconSizeLength + std::max(abs
(scrollDelta.width()), abs(scrollDelta.height()))); // We only want to repaint w
hat's necessary |
3582 IntPoint panIconDirtySquareLocation = IntPoint(m_panScrollIconPoint.x()
- (panIconDirtySquareSizeLength / 2), m_panScrollIconPoint.y() - (panIconDirtySq
uareSizeLength / 2)); | 3560 IntPoint panIconDirtySquareLocation = IntPoint(m_panScrollIconPoint.x()
- (panIconDirtySquareSizeLength / 2), m_panScrollIconPoint.y() - (panIconDirtySq
uareSizeLength / 2)); |
3583 IntRect panScrollIconDirtyRect = IntRect(panIconDirtySquareLocation, Int
Size(panIconDirtySquareSizeLength, panIconDirtySquareSizeLength)); | 3561 IntRect panScrollIconDirtyRect = IntRect(panIconDirtySquareLocation, Int
Size(panIconDirtySquareSizeLength, panIconDirtySquareSizeLength)); |
3584 panScrollIconDirtyRect.intersect(clipRect); | 3562 panScrollIconDirtyRect.intersect(clipRect); |
3585 window->invalidateRect(panScrollIconDirtyRect); | 3563 window->invalidateRect(panScrollIconDirtyRect); |
3586 } | 3564 } |
3587 | 3565 |
3588 if (!scrollContentsFastPath(-scrollDelta)) | 3566 if (!scrollContentsFastPath(-scrollDelta)) |
3589 scrollContentsSlowPath(updateRect); | 3567 scrollContentsSlowPath(updateRect); |
3590 | 3568 |
3591 // Invalidate the overhang areas if they are visible. | |
3592 updateOverhangAreas(); | |
3593 | |
3594 // This call will move children with native widgets (plugins) and invalidate
them as well. | 3569 // This call will move children with native widgets (plugins) and invalidate
them as well. |
3595 frameRectsChanged(); | 3570 frameRectsChanged(); |
3596 } | 3571 } |
3597 | 3572 |
3598 IntPoint FrameView::contentsToFrame(const IntPoint& pointInContentSpace) const | 3573 IntPoint FrameView::contentsToFrame(const IntPoint& pointInContentSpace) const |
3599 { | 3574 { |
3600 return pointInContentSpace - scrollOffset(); | 3575 return pointInContentSpace - scrollOffset(); |
3601 } | 3576 } |
3602 | 3577 |
3603 IntRect FrameView::contentsToFrame(const IntRect& rectInContentSpace) const | 3578 IntRect FrameView::contentsToFrame(const IntRect& rectInContentSpace) const |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3860 void FrameView::paint(GraphicsContext* context, const IntRect& rect) | 3835 void FrameView::paint(GraphicsContext* context, const IntRect& rect) |
3861 { | 3836 { |
3862 FramePainter(*this).paint(context, rect); | 3837 FramePainter(*this).paint(context, rect); |
3863 } | 3838 } |
3864 | 3839 |
3865 void FrameView::paintContents(GraphicsContext* context, const IntRect& damageRec
t) | 3840 void FrameView::paintContents(GraphicsContext* context, const IntRect& damageRec
t) |
3866 { | 3841 { |
3867 FramePainter(*this).paintContents(context, damageRect); | 3842 FramePainter(*this).paintContents(context, damageRect); |
3868 } | 3843 } |
3869 | 3844 |
3870 void FrameView::calculateOverhangAreasForPainting(IntRect& horizontalOverhangRec
t, IntRect& verticalOverhangRect) | |
3871 { | |
3872 int verticalScrollbarWidth = (verticalScrollbar() && !verticalScrollbar()->i
sOverlayScrollbar()) | |
3873 ? verticalScrollbar()->width() : 0; | |
3874 int horizontalScrollbarHeight = (horizontalScrollbar() && !horizontalScrollb
ar()->isOverlayScrollbar()) | |
3875 ? horizontalScrollbar()->height() : 0; | |
3876 | |
3877 int physicalScrollY = scrollPosition().y() + scrollOrigin().y(); | |
3878 if (physicalScrollY < 0) { | |
3879 horizontalOverhangRect = frameRect(); | |
3880 horizontalOverhangRect.setHeight(-physicalScrollY); | |
3881 horizontalOverhangRect.setWidth(horizontalOverhangRect.width() - vertica
lScrollbarWidth); | |
3882 } else if (physicalScrollY > 0 && contentsHeight() && physicalScrollY > cont
entsHeight() - visibleHeight()) { | |
3883 int height = physicalScrollY - (contentsHeight() - visibleHeight()); | |
3884 horizontalOverhangRect = frameRect(); | |
3885 horizontalOverhangRect.setY(frameRect().maxY() - height - horizontalScro
llbarHeight); | |
3886 horizontalOverhangRect.setHeight(height); | |
3887 horizontalOverhangRect.setWidth(horizontalOverhangRect.width() - vertica
lScrollbarWidth); | |
3888 } | |
3889 | |
3890 int physicalScrollX = scrollPosition().x() + scrollOrigin().x(); | |
3891 if (physicalScrollX < 0) { | |
3892 verticalOverhangRect.setWidth(-physicalScrollX); | |
3893 verticalOverhangRect.setHeight(frameRect().height() - horizontalOverhang
Rect.height() - horizontalScrollbarHeight); | |
3894 verticalOverhangRect.setX(frameRect().x()); | |
3895 if (horizontalOverhangRect.y() == frameRect().y()) | |
3896 verticalOverhangRect.setY(frameRect().y() + horizontalOverhangRect.h
eight()); | |
3897 else | |
3898 verticalOverhangRect.setY(frameRect().y()); | |
3899 } else if (physicalScrollX > 0 && contentsWidth() && physicalScrollX > conte
ntsWidth() - visibleWidth()) { | |
3900 int width = physicalScrollX - (contentsWidth() - visibleWidth()); | |
3901 verticalOverhangRect.setWidth(width); | |
3902 verticalOverhangRect.setHeight(frameRect().height() - horizontalOverhang
Rect.height() - horizontalScrollbarHeight); | |
3903 verticalOverhangRect.setX(frameRect().maxX() - width - verticalScrollbar
Width); | |
3904 if (horizontalOverhangRect.y() == frameRect().y()) | |
3905 verticalOverhangRect.setY(frameRect().y() + horizontalOverhangRect.h
eight()); | |
3906 else | |
3907 verticalOverhangRect.setY(frameRect().y()); | |
3908 } | |
3909 } | |
3910 | |
3911 void FrameView::updateOverhangAreas() | |
3912 { | |
3913 HostWindow* window = hostWindow(); | |
3914 if (!window) | |
3915 return; | |
3916 | |
3917 TRACE_EVENT0("blink", "FrameView::updateOverhangAreas"); | |
3918 | |
3919 IntRect horizontalOverhangRect; | |
3920 IntRect verticalOverhangRect; | |
3921 calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRe
ct); | |
3922 if (!horizontalOverhangRect.isEmpty()) | |
3923 window->invalidateRect(horizontalOverhangRect); | |
3924 if (!verticalOverhangRect.isEmpty()) | |
3925 window->invalidateRect(verticalOverhangRect); | |
3926 } | |
3927 | |
3928 bool FrameView::isPointInScrollbarCorner(const IntPoint& windowPoint) | 3845 bool FrameView::isPointInScrollbarCorner(const IntPoint& windowPoint) |
3929 { | 3846 { |
3930 if (!scrollbarCornerPresent()) | 3847 if (!scrollbarCornerPresent()) |
3931 return false; | 3848 return false; |
3932 | 3849 |
3933 IntPoint framePoint = convertFromContainingWindow(windowPoint); | 3850 IntPoint framePoint = convertFromContainingWindow(windowPoint); |
3934 | 3851 |
3935 if (m_horizontalScrollbar) { | 3852 if (m_horizontalScrollbar) { |
3936 int horizontalScrollbarYMin = m_horizontalScrollbar->frameRect().y(); | 3853 int horizontalScrollbarYMin = m_horizontalScrollbar->frameRect().y(); |
3937 int horizontalScrollbarYMax = m_horizontalScrollbar->frameRect().y() + m
_horizontalScrollbar->frameRect().height(); | 3854 int horizontalScrollbarYMax = m_horizontalScrollbar->frameRect().y() + m
_horizontalScrollbar->frameRect().height(); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4069 { | 3986 { |
4070 Settings* settings = frame().settings(); | 3987 Settings* settings = frame().settings(); |
4071 if (!settings || !settings->rootLayerScrolls()) | 3988 if (!settings || !settings->rootLayerScrolls()) |
4072 return this; | 3989 return this; |
4073 | 3990 |
4074 LayoutView* layoutView = this->layoutView(); | 3991 LayoutView* layoutView = this->layoutView(); |
4075 return layoutView ? layoutView->scrollableArea() : nullptr; | 3992 return layoutView ? layoutView->scrollableArea() : nullptr; |
4076 } | 3993 } |
4077 | 3994 |
4078 } // namespace blink | 3995 } // namespace blink |
OLD | NEW |