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 c14297557a19724d4fcbaf021ef0c7ee0dac3e1c..95c1241f6ddd5ed59b76d0c0d0832bd5e10529fa 100644 |
--- a/content/browser/renderer_host/ime_adapter_android.cc |
+++ b/content/browser/renderer_host/ime_adapter_android.cc |
@@ -9,6 +9,7 @@ |
#include <vector> |
#include "base/android/jni_android.h" |
+#include "base/android/jni_array.h" |
#include "base/android/jni_string.h" |
#include "base/android/scoped_java_ref.h" |
#include "base/feature_list.h" |
@@ -266,6 +267,31 @@ void ImeAdapterAndroid::SetEditableSelectionOffsets( |
start, end)); |
} |
+void ImeAdapterAndroid::SetCharacterBounds( |
+ const std::vector<gfx::RectF>& 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; |
+ scoped_ptr<float[]> coordinates_array(new float[coordinates_array_size]); |
+ for (size_t i = 0; i < character_bounds.size(); ++i) { |
+ const gfx::RectF& 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(); |
+ } |
+ Java_ImeAdapter_setCharacterBounds( |
+ env, |
+ obj.obj(), |
+ base::android::ToJavaFloatArray(env, |
+ coordinates_array.get(), |
+ coordinates_array_size).obj()); |
+} |
+ |
void ImeAdapterAndroid::SetComposingRegion(JNIEnv*, |
const JavaParamRef<jobject>&, |
int start, |