X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcontent%2Fbrowser%2Frenderer_host%2Fime_adapter_android.cc;h=b7d3748002d6f333a4060290d5e2e201643b33ad;hb=1afa4dd80ef85af7c90efaea6959db1d92330844;hp=077e625f0ca9560da5378bc8228704d1817f5855;hpb=90762837333c13ccf56f2ad88e4481fc71e8d281;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/content/browser/renderer_host/ime_adapter_android.cc b/src/content/browser/renderer_host/ime_adapter_android.cc index 077e625..b7d3748 100644 --- a/src/content/browser/renderer_host/ime_adapter_android.cc +++ b/src/content/browser/renderer_host/ime_adapter_android.cc @@ -11,6 +11,7 @@ #include "base/android/jni_android.h" #include "base/android/jni_string.h" #include "base/android/scoped_java_ref.h" +#include "base/memory/scoped_ptr.h" #include "base/strings/utf_string_conversions.h" #include "base/time/time.h" #include "content/browser/frame_host/frame_tree.h" @@ -267,6 +268,36 @@ void ImeAdapterAndroid::FocusedNodeChanged(bool is_editable_node) { } } +void ImeAdapterAndroid::SetCharacterBounds( + const std::vector& character_bounds) { + JNIEnv* env = AttachCurrentThread(); + base::android::ScopedJavaLocalRef obj = java_ime_adapter_.get(env); + if (obj.is_null()) + return; + + const size_t coordinates_array_size = character_bounds.size() * 4; + base::android::ScopedJavaLocalRef coordinates_dest_array( + env, env->NewFloatArray(coordinates_array_size)); + if (coordinates_dest_array.is_null()) + return; + + scoped_ptr 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, + 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();