summaryrefslogtreecommitdiffstats
path: root/WebCore/platform
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform')
-rw-r--r--WebCore/platform/ScrollView.cpp8
-rw-r--r--WebCore/platform/ScrollView.h4
-rw-r--r--WebCore/platform/android/ScrollViewAndroid.cpp16
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