diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-10 12:31:44 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-10 12:31:44 -0800 |
commit | 4b2ef0f288e7c6c4602f621b7a0e9feed304b70e (patch) | |
tree | 7d9cc1b60be8b1b75e916252e8b54217e2735447 /WebCore/platform | |
parent | af1255496788b347a21a5db0e63c011c992c83b8 (diff) | |
parent | 025ac4e283bb4b48f580d48541224e3996dc6f84 (diff) | |
download | external_webkit-4b2ef0f288e7c6c4602f621b7a0e9feed304b70e.zip external_webkit-4b2ef0f288e7c6c4602f621b7a0e9feed304b70e.tar.gz external_webkit-4b2ef0f288e7c6c4602f621b7a0e9feed304b70e.tar.bz2 |
Merge change I3a493eb3 into eclair-mr2
* changes:
capture offscreen invalidates in webkit
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 |