From 8111ace8860f79c6b7ece2c408a3f80a0762b09b Mon Sep 17 00:00:00 2001 From: John Reck Date: Wed, 31 Aug 2011 17:01:41 -0700 Subject: Allow native to query selection region Bug: 5224394 Bug: 5208328 Change-Id: I2141ad80a78f717e3005740285661cd1f558dfca --- Source/WebKit/android/nav/SelectText.cpp | 10 ++++++++++ Source/WebKit/android/nav/SelectText.h | 1 + Source/WebKit/android/nav/WebView.cpp | 15 +++++++++++++++ 3 files changed, 26 insertions(+) (limited to 'Source/WebKit/android') 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", -- cgit v1.1