OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/base/ime/input_method_chromeos.h" | 5 #include "ui/base/ime/input_method_chromeos.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstring> | 8 #include <cstring> |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 | 182 |
183 if (!IsNonPasswordInputFieldFocused()) | 183 if (!IsNonPasswordInputFieldFocused()) |
184 return; | 184 return; |
185 | 185 |
186 // The current text input type should not be NONE if |context_| is focused. | 186 // The current text input type should not be NONE if |context_| is focused. |
187 DCHECK(client == GetTextInputClient()); | 187 DCHECK(client == GetTextInputClient()); |
188 DCHECK(!IsTextInputTypeNone()); | 188 DCHECK(!IsTextInputTypeNone()); |
189 const gfx::Rect caret_rect = client->GetCaretBounds(); | 189 const gfx::Rect caret_rect = client->GetCaretBounds(); |
190 | 190 |
191 gfx::Rect composition_head; | 191 gfx::Rect composition_head; |
| 192 std::vector<gfx::Rect> rects; |
192 if (client->HasCompositionText()) { | 193 if (client->HasCompositionText()) { |
193 std::vector<gfx::Rect> rects; | |
194 uint32 i = 0; | 194 uint32 i = 0; |
195 gfx::Rect rect; | 195 gfx::Rect rect; |
196 while (client->GetCompositionCharacterBounds(i++, &rect)) | 196 while (client->GetCompositionCharacterBounds(i++, &rect)) |
197 rects.push_back(rect); | 197 rects.push_back(rect); |
198 if (rects.size() > 0) { | |
199 if (GetEngine()) | |
200 GetEngine()->SetCompositionBounds(rects); | |
201 composition_head = rects[0]; | |
202 } | |
203 } else { | 198 } else { |
204 composition_head = caret_rect; | 199 rects.push_back(caret_rect); |
| 200 } |
| 201 |
| 202 if (rects.size() > 0) { |
| 203 composition_head = rects[0]; |
| 204 if (GetEngine()) |
| 205 GetEngine()->SetCompositionBounds(rects); |
205 } | 206 } |
206 | 207 |
207 chromeos::IMECandidateWindowHandlerInterface* candidate_window = | 208 chromeos::IMECandidateWindowHandlerInterface* candidate_window = |
208 chromeos::IMEBridge::Get()->GetCandidateWindowHandler(); | 209 chromeos::IMEBridge::Get()->GetCandidateWindowHandler(); |
209 if (!candidate_window) | 210 if (!candidate_window) |
210 return; | 211 return; |
211 candidate_window->SetCursorBounds(caret_rect, composition_head); | 212 candidate_window->SetCursorBounds(caret_rect, composition_head); |
212 | 213 |
213 gfx::Range text_range; | 214 gfx::Range text_range; |
214 gfx::Range selection_range; | 215 gfx::Range selection_range; |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 bool InputMethodChromeOS::IsNonPasswordInputFieldFocused() { | 675 bool InputMethodChromeOS::IsNonPasswordInputFieldFocused() { |
675 TextInputType type = GetTextInputType(); | 676 TextInputType type = GetTextInputType(); |
676 return (type != TEXT_INPUT_TYPE_NONE) && (type != TEXT_INPUT_TYPE_PASSWORD); | 677 return (type != TEXT_INPUT_TYPE_NONE) && (type != TEXT_INPUT_TYPE_PASSWORD); |
677 } | 678 } |
678 | 679 |
679 bool InputMethodChromeOS::IsInputFieldFocused() { | 680 bool InputMethodChromeOS::IsInputFieldFocused() { |
680 return GetTextInputType() != TEXT_INPUT_TYPE_NONE; | 681 return GetTextInputType() != TEXT_INPUT_TYPE_NONE; |
681 } | 682 } |
682 | 683 |
683 } // namespace ui | 684 } // namespace ui |
OLD | NEW |