summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/WebKit/android/nav/SelectText.cpp10
-rw-r--r--Source/WebKit/android/nav/SelectText.h1
-rw-r--r--Source/WebKit/android/nav/WebView.cpp15
3 files changed, 26 insertions, 0 deletions
diff --git a/Source/WebKit/android/nav/SelectText.cpp b/Source/WebKit/android/nav/SelectText.cpp
index c56c53c..7d18d5d 100644
--- a/Source/WebKit/android/nav/SelectText.cpp
+++ b/Source/WebKit/android/nav/SelectText.cpp
@@ -1475,6 +1475,16 @@ static void addEnd(SkRegion* diff, const SkIRect& rect)
diff->op(bounds, SkRegion::kUnion_Op);
}
+void SelectText::getSelectionRegion(const IntRect& vis, SkRegion *region)
+{
+ SkIRect ivisBounds = vis;
+ ivisBounds.join(m_selStart);
+ ivisBounds.join(m_selEnd);
+ region->setEmpty();
+ buildSelection(*m_picture, ivisBounds, m_selStart, m_startBase,
+ m_selEnd, m_endBase, region);
+}
+
void SelectText::drawSelectionRegion(SkCanvas* canvas, IntRect* inval)
{
if (!m_picture)
diff --git a/Source/WebKit/android/nav/SelectText.h b/Source/WebKit/android/nav/SelectText.h
index de577ac..272cfd1 100644
--- a/Source/WebKit/android/nav/SelectText.h
+++ b/Source/WebKit/android/nav/SelectText.h
@@ -57,6 +57,7 @@ public:
void setExtendSelection(bool extend) { m_extendSelection = extend; }
bool startSelection(const CachedRoot* , const IntRect& vis, int x, int y);
bool wordSelection(const CachedRoot* , const IntRect& vis, int x, int y);
+ void getSelectionRegion(const IntRect& vis, SkRegion *region);
public:
float m_inverseScale; // inverse scale, x, y used for drawing select path
int m_selectX;
diff --git a/Source/WebKit/android/nav/WebView.cpp b/Source/WebKit/android/nav/WebView.cpp
index 945a785..5cf9953 100644
--- a/Source/WebKit/android/nav/WebView.cpp
+++ b/Source/WebKit/android/nav/WebView.cpp
@@ -1482,6 +1482,11 @@ void setBaseLayer(BaseLayerAndroid* layer, SkRegion& inval, bool showVisualIndic
root->setRootLayer(compositeRoot());
}
+void getTextSelectionRegion(SkRegion *region)
+{
+ m_selectText.getSelectionRegion(getVisibleRect(), region);
+}
+
void replaceBaseContent(PictureSet* set)
{
if (!m_baseLayer)
@@ -1910,6 +1915,14 @@ static void nativeSetBaseLayer(JNIEnv *env, jobject obj, jint layer, jobject inv
registerPageSwapCallback);
}
+static void nativeGetTextSelectionRegion(JNIEnv *env, jobject obj, jobject region)
+{
+ if (!region)
+ return;
+ SkRegion* nregion = GraphicsJNI::getNativeRegion(env, region);
+ GET_NATIVE_VIEW(env, obj)->getTextSelectionRegion(nregion);
+}
+
static BaseLayerAndroid* nativeGetBaseLayer(JNIEnv *env, jobject obj)
{
return GET_NATIVE_VIEW(env, obj)->getBaseLayer();
@@ -2794,6 +2807,8 @@ static JNINativeMethod gJavaWebViewMethods[] = {
(void*) nativeSetHeightCanMeasure },
{ "nativeSetBaseLayer", "(ILandroid/graphics/Region;ZZZ)V",
(void*) nativeSetBaseLayer },
+ { "nativeGetTextSelectionRegion", "(Landroid/graphics/Region;)V",
+ (void*) nativeGetTextSelectionRegion },
{ "nativeGetBaseLayer", "()I",
(void*) nativeGetBaseLayer },
{ "nativeReplaceBaseContent", "(I)V",