diff options
Diffstat (limited to 'WebCore/platform')
-rw-r--r-- | WebCore/platform/ScrollView.cpp | 8 | ||||
-rw-r--r-- | WebCore/platform/ScrollView.h | 4 | ||||
-rw-r--r-- | WebCore/platform/android/ScrollViewAndroid.cpp | 16 |
3 files changed, 24 insertions, 4 deletions
diff --git a/WebCore/platform/ScrollView.cpp b/WebCore/platform/ScrollView.cpp index 8c4b115..d59d10a 100644 --- a/WebCore/platform/ScrollView.cpp +++ b/WebCore/platform/ScrollView.cpp @@ -713,10 +713,16 @@ void ScrollView::frameRectsChanged() void ScrollView::repaintContentRectangle(const IntRect& rect, bool now) { IntRect visibleContent = visibleContentRect(); +#ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS + IntRect fullVis = visibleContent; +#endif visibleContent.intersect(rect); +#ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS + if (rect != visibleContent) + platformOffscreenContentRectangle(fullVis, rect); +#endif if (visibleContent.isEmpty()) return; - if (platformWidget()) { platformRepaintContentRectangle(visibleContent, now); return; diff --git a/WebCore/platform/ScrollView.h b/WebCore/platform/ScrollView.h index ef3d03d..2da6829 100644 --- a/WebCore/platform/ScrollView.h +++ b/WebCore/platform/ScrollView.h @@ -334,7 +334,9 @@ private: public: bool platformProhibitsScrolling(); #ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS - void platformOffscreenContentRectangle(const IntRect& ); + // capture parts of rect not contained by vis + void platformOffscreenContentRectangle(const IntRect& vis, + const IntRect& rect); #endif #endif }; // class ScrollView diff --git a/WebCore/platform/android/ScrollViewAndroid.cpp b/WebCore/platform/android/ScrollViewAndroid.cpp index 274c04f..9149deb 100644 --- a/WebCore/platform/android/ScrollViewAndroid.cpp +++ b/WebCore/platform/android/ScrollViewAndroid.cpp @@ -30,6 +30,7 @@ #include "FloatRect.h" #include "FrameView.h" #include "IntRect.h" +#include "SkRegion.h" #include "WebCoreFrameBridge.h" #include "WebCoreViewBridge.h" #include "WebViewCore.h" @@ -96,9 +97,20 @@ void ScrollView::platformRepaintContentRectangle(const IntRect &rect, bool now) } #ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS -void ScrollView::platformOffscreenContentRectangle(const IntRect& rect) +/* + Compute the offscreen parts of the drawn rectangle by subtracting + vis from rect. This can compute up to four rectangular slices. +*/ +void ScrollView::platformOffscreenContentRectangle(const IntRect& vis, + const IntRect& rect) { - android::WebViewCore::getWebViewCore(this)->offInvalidate(rect); + SkRegion rectRgn = SkRegion(rect); + rectRgn.op(vis, SkRegion::kDifference_Op); + SkRegion::Iterator iter(rectRgn); + for (; !iter.done(); iter.next()) { + const SkIRect& diff = iter.rect(); + android::WebViewCore::getWebViewCore(this)->offInvalidate(diff); + } } #endif |