Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: content/browser/renderer_host/ime_adapter_android.cc

Issue 2611813002: Add support for persisting CompositionUnderlines in InputMethodController (Closed)
Patch Set: Try one more time Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/ime_adapter_android.h" 5 #include "content/browser/renderer_host/ime_adapter_android.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <android/input.h> 8 #include <android/input.h>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 jlong underlines_ptr, 73 jlong underlines_ptr,
74 jint start, 74 jint start,
75 jint end, 75 jint end,
76 jint background_color) { 76 jint background_color) {
77 DCHECK_GE(start, 0); 77 DCHECK_GE(start, 0);
78 DCHECK_GE(end, 0); 78 DCHECK_GE(end, 0);
79 // Do not check |background_color|. 79 // Do not check |background_color|.
80 std::vector<blink::WebCompositionUnderline>* underlines = 80 std::vector<blink::WebCompositionUnderline>* underlines =
81 reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>( 81 reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>(
82 underlines_ptr); 82 underlines_ptr);
83 underlines->push_back( 83 underlines->push_back(blink::WebCompositionUnderline(
84 blink::WebCompositionUnderline(static_cast<unsigned>(start), 84 static_cast<unsigned>(start), static_cast<unsigned>(end),
85 static_cast<unsigned>(end), 85 SK_ColorTRANSPARENT, false, static_cast<unsigned>(background_color),
86 SK_ColorTRANSPARENT, 86 false));
87 false,
88 static_cast<unsigned>(background_color)));
89 } 87 }
90 88
91 // Callback from Java to convert UnderlineSpan data to a 89 // Callback from Java to convert UnderlineSpan data to a
92 // blink::WebCompositionUnderline instance, and append it to |underlines_ptr|. 90 // blink::WebCompositionUnderline instance, and append it to |underlines_ptr|.
93 void AppendUnderlineSpan(JNIEnv*, 91 void AppendUnderlineSpan(JNIEnv*,
94 const JavaParamRef<jclass>&, 92 const JavaParamRef<jclass>&,
95 jlong underlines_ptr, 93 jlong underlines_ptr,
96 jint start, 94 jint start,
97 jint end) { 95 jint end) {
98 DCHECK_GE(start, 0); 96 DCHECK_GE(start, 0);
99 DCHECK_GE(end, 0); 97 DCHECK_GE(end, 0);
100 std::vector<blink::WebCompositionUnderline>* underlines = 98 std::vector<blink::WebCompositionUnderline>* underlines =
101 reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>( 99 reinterpret_cast<std::vector<blink::WebCompositionUnderline>*>(
102 underlines_ptr); 100 underlines_ptr);
103 underlines->push_back( 101 underlines->push_back(blink::WebCompositionUnderline(
104 blink::WebCompositionUnderline(static_cast<unsigned>(start), 102 static_cast<unsigned>(start), static_cast<unsigned>(end), SK_ColorBLACK,
105 static_cast<unsigned>(end), 103 false, SK_ColorTRANSPARENT, false));
106 SK_ColorBLACK,
107 false,
108 SK_ColorTRANSPARENT));
109 } 104 }
110 105
111 ImeAdapterAndroid::ImeAdapterAndroid(RenderWidgetHostViewAndroid* rwhva) 106 ImeAdapterAndroid::ImeAdapterAndroid(RenderWidgetHostViewAndroid* rwhva)
112 : rwhva_(rwhva) { 107 : rwhva_(rwhva) {
113 } 108 }
114 109
115 ImeAdapterAndroid::~ImeAdapterAndroid() { 110 ImeAdapterAndroid::~ImeAdapterAndroid() {
116 JNIEnv* env = AttachCurrentThread(); 111 JNIEnv* env = AttachCurrentThread();
117 base::android::ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env); 112 base::android::ScopedJavaLocalRef<jobject> obj = java_ime_adapter_.get(env);
118 if (!obj.is_null()) 113 if (!obj.is_null())
(...skipping 28 matching lines...) Expand all
147 return; 142 return;
148 143
149 base::string16 text16 = ConvertJavaStringToUTF16(env, text_str); 144 base::string16 text16 = ConvertJavaStringToUTF16(env, text_str);
150 145
151 std::vector<blink::WebCompositionUnderline> underlines = 146 std::vector<blink::WebCompositionUnderline> underlines =
152 GetUnderlinesFromSpans(env, obj, text, text16); 147 GetUnderlinesFromSpans(env, obj, text, text16);
153 148
154 // Default to plain underline if we didn't find any span that we care about. 149 // Default to plain underline if we didn't find any span that we care about.
155 if (underlines.empty()) { 150 if (underlines.empty()) {
156 underlines.push_back(blink::WebCompositionUnderline( 151 underlines.push_back(blink::WebCompositionUnderline(
157 0, text16.length(), SK_ColorBLACK, false, SK_ColorTRANSPARENT)); 152 0, text16.length(), SK_ColorBLACK, false, SK_ColorTRANSPARENT, false));
158 } 153 }
159 154
160 // relative_cursor_pos is as described in the Android API for 155 // relative_cursor_pos is as described in the Android API for
161 // InputConnection#setComposingText, whereas the parameters for 156 // InputConnection#setComposingText, whereas the parameters for
162 // ImeSetComposition are relative to the start of the composition. 157 // ImeSetComposition are relative to the start of the composition.
163 if (relative_cursor_pos > 0) 158 if (relative_cursor_pos > 0)
164 relative_cursor_pos = text16.length() + relative_cursor_pos - 1; 159 relative_cursor_pos = text16.length() + relative_cursor_pos - 1;
165 160
166 rwhi->ImeSetComposition(text16, underlines, gfx::Range::InvalidRange(), 161 rwhi->ImeSetComposition(text16, underlines, gfx::Range::InvalidRange(),
167 relative_cursor_pos, relative_cursor_pos); 162 relative_cursor_pos, relative_cursor_pos);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 void ImeAdapterAndroid::SetComposingRegion(JNIEnv*, 257 void ImeAdapterAndroid::SetComposingRegion(JNIEnv*,
263 const JavaParamRef<jobject>&, 258 const JavaParamRef<jobject>&,
264 int start, 259 int start,
265 int end) { 260 int end) {
266 RenderFrameHost* rfh = GetFocusedFrame(); 261 RenderFrameHost* rfh = GetFocusedFrame();
267 if (!rfh) 262 if (!rfh)
268 return; 263 return;
269 264
270 std::vector<blink::WebCompositionUnderline> underlines; 265 std::vector<blink::WebCompositionUnderline> underlines;
271 underlines.push_back(blink::WebCompositionUnderline( 266 underlines.push_back(blink::WebCompositionUnderline(
272 0, end - start, SK_ColorBLACK, false, SK_ColorTRANSPARENT)); 267 0, end - start, SK_ColorBLACK, false, SK_ColorTRANSPARENT, false));
273 268
274 rfh->Send(new InputMsg_SetCompositionFromExistingText( 269 rfh->Send(new InputMsg_SetCompositionFromExistingText(
275 rfh->GetRoutingID(), start, end, underlines)); 270 rfh->GetRoutingID(), start, end, underlines));
276 } 271 }
277 272
278 void ImeAdapterAndroid::DeleteSurroundingText(JNIEnv*, 273 void ImeAdapterAndroid::DeleteSurroundingText(JNIEnv*,
279 const JavaParamRef<jobject>&, 274 const JavaParamRef<jobject>&,
280 int before, 275 int before,
281 int after) { 276 int after) {
282 RenderFrameHostImpl* rfh = 277 RenderFrameHostImpl* rfh =
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 Java_ImeAdapter_populateUnderlinesFromSpans( 352 Java_ImeAdapter_populateUnderlinesFromSpans(
358 env, obj, text, reinterpret_cast<jlong>(&underlines)); 353 env, obj, text, reinterpret_cast<jlong>(&underlines));
359 354
360 // Sort spans by |.startOffset|. 355 // Sort spans by |.startOffset|.
361 std::sort(underlines.begin(), underlines.end()); 356 std::sort(underlines.begin(), underlines.end());
362 357
363 return underlines; 358 return underlines;
364 } 359 }
365 360
366 } // namespace content 361 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698