Index: content/browser/renderer_host/ime_adapter_android.cc |
diff --git a/content/browser/renderer_host/ime_adapter_android.cc b/content/browser/renderer_host/ime_adapter_android.cc |
index ac820f5765c3a7bf214293e8271e7bba7951f972..c98560afe598e4b517be20a3e10e0ae564c24576 100644 |
--- a/content/browser/renderer_host/ime_adapter_android.cc |
+++ b/content/browser/renderer_host/ime_adapter_android.cc |
@@ -237,6 +237,36 @@ void ImeAdapterAndroid::FocusedNodeChanged(bool is_editable_node) { |
} |
} |
+void ImeAdapterAndroid::SetCharacterBounds( |
+ const std::vector<gfx::Rect>& character_bounds) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ base::android::ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env); |
+ if (obj.is_null()) |
+ return; |
+ |
+ const size_t coordinates_array_size = character_bounds.size() * 4; |
+ base::android::ScopedJavaLocalRef<jfloatArray> coordinates_dest_array( |
+ env, env->NewFloatArray(coordinates_array_size)); |
+ if (coordinates_dest_array.is_null()) |
+ return; |
+ |
+ scoped_ptr<jfloat[]> coordinates_array(new jfloat[coordinates_array_size]); |
+ for (size_t i = 0; i < character_bounds.size(); ++i) { |
+ const gfx::Rect& rect = character_bounds[i]; |
+ const size_t coordinates_array_index = i * 4; |
+ coordinates_array[coordinates_array_index + 0] = rect.x(); |
+ coordinates_array[coordinates_array_index + 1] = rect.y(); |
+ coordinates_array[coordinates_array_index + 2] = rect.right(); |
+ coordinates_array[coordinates_array_index + 3] = rect.bottom(); |
+ } |
+ // TODO(yukawa): Consider to move this to base/android/jni_array.h |
+ env->SetFloatArrayRegion(coordinates_dest_array.obj(), 0, |
jdduke (slow)
2015/02/09 17:01:17
Should we add a |ToJavaFloatArray| in base/android
yukawa
2015/02/10 17:24:54
Done.
|
+ coordinates_array_size, coordinates_array.get()); |
+ base::android::CheckException(env); |
+ Java_ImeAdapter_setCharacterBounds(env, obj.obj(), |
+ coordinates_dest_array.obj()); |
+} |
+ |
void ImeAdapterAndroid::SetEditableSelectionOffsets(JNIEnv*, jobject, |
int start, int end) { |
RenderFrameHost* rfh = GetFocusedFrame(); |