OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 if (!hostWindow()) | 580 if (!hostWindow()) |
581 return; | 581 return; |
582 | 582 |
583 // Since scrolling is double buffered, we will be blitting the scroll view's
intersection | 583 // Since scrolling is double buffered, we will be blitting the scroll view's
intersection |
584 // with the clip rect every time to keep it smooth. | 584 // with the clip rect every time to keep it smooth. |
585 IntRect clipRect = windowClipRect(); | 585 IntRect clipRect = windowClipRect(); |
586 IntRect scrollViewRect = rectToCopyOnScroll(); | 586 IntRect scrollViewRect = rectToCopyOnScroll(); |
587 IntRect updateRect = clipRect; | 587 IntRect updateRect = clipRect; |
588 updateRect.intersect(scrollViewRect); | 588 updateRect.intersect(scrollViewRect); |
589 | 589 |
590 // Invalidate the root view (not the backing store). | |
591 hostWindow()->invalidateRootView(updateRect); | |
592 | |
593 if (m_drawPanScrollIcon) { | 590 if (m_drawPanScrollIcon) { |
594 // FIXME: the pan icon is broken when accelerated compositing is on, sin
ce it will draw under the compositing layers. | 591 // FIXME: the pan icon is broken when accelerated compositing is on, sin
ce it will draw under the compositing layers. |
595 // https://bugs.webkit.org/show_bug.cgi?id=47837 | 592 // https://bugs.webkit.org/show_bug.cgi?id=47837 |
596 int panIconDirtySquareSizeLength = 2 * (panIconSizeLength + max(abs(scro
llDelta.width()), abs(scrollDelta.height()))); // We only want to repaint what's
necessary | 593 int panIconDirtySquareSizeLength = 2 * (panIconSizeLength + max(abs(scro
llDelta.width()), abs(scrollDelta.height()))); // We only want to repaint what's
necessary |
597 IntPoint panIconDirtySquareLocation = IntPoint(m_panScrollIconPoint.x()
- (panIconDirtySquareSizeLength / 2), m_panScrollIconPoint.y() - (panIconDirtySq
uareSizeLength / 2)); | 594 IntPoint panIconDirtySquareLocation = IntPoint(m_panScrollIconPoint.x()
- (panIconDirtySquareSizeLength / 2), m_panScrollIconPoint.y() - (panIconDirtySq
uareSizeLength / 2)); |
598 IntRect panScrollIconDirtyRect = IntRect(panIconDirtySquareLocation, Int
Size(panIconDirtySquareSizeLength, panIconDirtySquareSizeLength)); | 595 IntRect panScrollIconDirtyRect = IntRect(panIconDirtySquareLocation, Int
Size(panIconDirtySquareSizeLength, panIconDirtySquareSizeLength)); |
599 panScrollIconDirtyRect.intersect(clipRect); | 596 panScrollIconDirtyRect.intersect(clipRect); |
600 hostWindow()->invalidateContentsAndRootView(panScrollIconDirtyRect); | 597 hostWindow()->invalidateContentsAndRootView(panScrollIconDirtyRect); |
601 } | 598 } |
602 | 599 |
603 if (canBlitOnScroll()) { // The main frame can just blit the WebView window | 600 if (canBlitOnScroll()) { // The main frame can just blit the WebView window |
604 // FIXME: Find a way to scroll subframes with this faster path | 601 // FIXME: Find a way to scroll subframes with this faster path |
605 if (!scrollContentsFastPath(-scrollDelta, scrollViewRect, clipRect)) | 602 if (!scrollContentsFastPath(-scrollDelta, scrollViewRect, clipRect)) |
606 scrollContentsSlowPath(updateRect); | 603 scrollContentsSlowPath(updateRect); |
607 } else { | 604 } else { |
608 // We need to go ahead and repaint the entire backing store. Do it now b
efore moving the | 605 // We need to go ahead and repaint the entire backing store. Do it now b
efore moving the |
609 // windowed plugins. | 606 // windowed plugins. |
610 scrollContentsSlowPath(updateRect); | 607 scrollContentsSlowPath(updateRect); |
611 } | 608 } |
612 | 609 |
613 // Invalidate the overhang areas if they are visible. | 610 // Invalidate the overhang areas if they are visible. |
614 updateOverhangAreas(); | 611 updateOverhangAreas(); |
615 | 612 |
616 // This call will move children with native widgets (plugins) and invalidate
them as well. | 613 // This call will move children with native widgets (plugins) and invalidate
them as well. |
617 frameRectsChanged(); | 614 frameRectsChanged(); |
618 | |
619 // Now blit the backingstore into the window which should be very fast. | |
620 hostWindow()->invalidateRootView(IntRect()); | |
621 } | 615 } |
622 | 616 |
623 bool ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRec
t& rectToScroll, const IntRect& clipRect) | 617 bool ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRec
t& rectToScroll, const IntRect& clipRect) |
624 { | 618 { |
625 hostWindow()->scroll(scrollDelta, rectToScroll, clipRect); | 619 hostWindow()->scroll(scrollDelta, rectToScroll, clipRect); |
626 return true; | 620 return true; |
627 } | 621 } |
628 | 622 |
629 void ScrollView::scrollContentsSlowPath(const IntRect& updateRect) | 623 void ScrollView::scrollContentsSlowPath(const IntRect& updateRect) |
630 { | 624 { |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1269 { | 1263 { |
1270 } | 1264 } |
1271 | 1265 |
1272 bool ScrollView::platformIsOffscreen() const | 1266 bool ScrollView::platformIsOffscreen() const |
1273 { | 1267 { |
1274 return false; | 1268 return false; |
1275 } | 1269 } |
1276 | 1270 |
1277 | 1271 |
1278 } | 1272 } |
OLD | NEW |