Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 2296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2307 focusedFrame->inputMethodController().confirmComposition(); | 2307 focusedFrame->inputMethodController().confirmComposition(); |
| 2308 | 2308 |
| 2309 if (autofillClient) | 2309 if (autofillClient) |
| 2310 autofillClient->setIgnoreTextChanges(false); | 2310 autofillClient->setIgnoreTextChanges(false); |
| 2311 } | 2311 } |
| 2312 m_imeAcceptEvents = false; | 2312 m_imeAcceptEvents = false; |
| 2313 } | 2313 } |
| 2314 } | 2314 } |
| 2315 } | 2315 } |
| 2316 | 2316 |
| 2317 std::pair<int, int> WebViewImpl::adjustSelectionForBoundary(int selectionStart, int selectionEnd, const int textLength) | |
| 2318 { | |
|
yabinh
2016/07/06 11:53:55
textInputInfo() is quite an expensive function, bu
Changwan Ryu
2016/07/07 09:09:33
You should avoid calling textInputInfo(). textInpu
| |
| 2319 WebTextInputInfo textInputInfo = this->textInputInfo(); | |
| 2320 | |
| 2321 int compositionLength = textInputInfo.compositionEnd - textInputInfo.composi tionStart; | |
| 2322 int beforeCompositionLength; | |
| 2323 if (compositionLength != 0) | |
| 2324 beforeCompositionLength = textInputInfo.compositionStart; | |
| 2325 else | |
| 2326 beforeCompositionLength = textInputInfo.selectionStart; | |
| 2327 int afterCompositionLength = static_cast<int>(textInputInfo.value.length()) - compositionLength - beforeCompositionLength; | |
| 2328 | |
| 2329 // In case of exceeding the left boundary. | |
| 2330 selectionStart = std::max(selectionStart, -beforeCompositionLength); | |
| 2331 selectionEnd = std::max(selectionEnd, selectionStart); | |
| 2332 | |
| 2333 // In case of exceeding the right boundary. | |
| 2334 selectionEnd = std::min(selectionEnd, textLength + afterCompositionLength); | |
| 2335 selectionStart = std::min(selectionStart, selectionEnd); | |
| 2336 | |
| 2337 return std::make_pair(selectionStart, selectionEnd); | |
| 2338 } | |
| 2339 | |
| 2317 bool WebViewImpl::setComposition( | 2340 bool WebViewImpl::setComposition( |
| 2318 const WebString& text, | 2341 const WebString& text, |
| 2319 const WebVector<WebCompositionUnderline>& underlines, | 2342 const WebVector<WebCompositionUnderline>& underlines, |
| 2320 int selectionStart, | 2343 int selectionStart, |
| 2321 int selectionEnd) | 2344 int selectionEnd) |
| 2322 { | 2345 { |
| 2323 LocalFrame* focused = toLocalFrame(focusedCoreFrame()); | 2346 LocalFrame* focused = toLocalFrame(focusedCoreFrame()); |
| 2324 if (!focused || !m_imeAcceptEvents) | 2347 if (!focused || !m_imeAcceptEvents) |
| 2325 return false; | 2348 return false; |
| 2326 | 2349 |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 2347 | 2370 |
| 2348 // A keypress event is canceled. If an ongoing composition exists, then the | 2371 // A keypress event is canceled. If an ongoing composition exists, then the |
| 2349 // keydown event should have arisen from a handled key (e.g., backspace). | 2372 // keydown event should have arisen from a handled key (e.g., backspace). |
| 2350 // In this case we ignore the cancellation and continue; otherwise (no | 2373 // In this case we ignore the cancellation and continue; otherwise (no |
| 2351 // ongoing composition) we exit and signal success only for attempts to | 2374 // ongoing composition) we exit and signal success only for attempts to |
| 2352 // clear the composition. | 2375 // clear the composition. |
| 2353 if (m_suppressNextKeypressEvent && !inputMethodController.hasComposition()) | 2376 if (m_suppressNextKeypressEvent && !inputMethodController.hasComposition()) |
| 2354 return text.isEmpty(); | 2377 return text.isEmpty(); |
| 2355 | 2378 |
| 2356 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); | 2379 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); |
| 2357 | 2380 |
|
yabinh
2016/07/06 11:53:55
adjustSelectionForBoundary is moved here, thus it
| |
| 2381 std::pair<int, int> selectionPair = adjustSelectionForBoundary(selectionStar t, selectionEnd, text.length()); | |
| 2382 | |
| 2358 // When the range of composition underlines overlap with the range between | 2383 // When the range of composition underlines overlap with the range between |
| 2359 // selectionStart and selectionEnd, WebKit somehow won't paint the selection | 2384 // selectionStart and selectionEnd, WebKit somehow won't paint the selection |
| 2360 // at all (see InlineTextBox::paint() function in InlineTextBox.cpp). | 2385 // at all (see InlineTextBox::paint() function in InlineTextBox.cpp). |
| 2361 // But the selection range actually takes effect. | 2386 // But the selection range actually takes effect. |
| 2362 inputMethodController.setComposition(String(text), | 2387 inputMethodController.setComposition(String(text), |
| 2363 CompositionUnderlineVectorBuilder(underlines), | 2388 CompositionUnderlineVectorBuilder(underlines), |
| 2364 selectionStart, selectionEnd); | 2389 selectionPair.first, selectionPair.second); |
| 2365 | 2390 |
| 2366 return text.isEmpty() || inputMethodController.hasComposition(); | 2391 return text.isEmpty() || inputMethodController.hasComposition(); |
| 2367 } | 2392 } |
| 2368 | 2393 |
| 2369 bool WebViewImpl::confirmComposition() | 2394 bool WebViewImpl::confirmComposition() |
| 2370 { | 2395 { |
| 2371 return confirmComposition(DoNotKeepSelection); | 2396 return confirmComposition(DoNotKeepSelection); |
| 2372 } | 2397 } |
| 2373 | 2398 |
| 2374 bool WebViewImpl::confirmComposition(ConfirmCompositionBehavior selectionBehavio r) | 2399 bool WebViewImpl::confirmComposition(ConfirmCompositionBehavior selectionBehavio r) |
| (...skipping 2158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4533 { | 4558 { |
| 4534 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than | 4559 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than |
| 4535 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. | 4560 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. |
| 4536 if (!page()) | 4561 if (!page()) |
| 4537 return 1; | 4562 return 1; |
| 4538 | 4563 |
| 4539 return page()->deviceScaleFactor(); | 4564 return page()->deviceScaleFactor(); |
| 4540 } | 4565 } |
| 4541 | 4566 |
| 4542 } // namespace blink | 4567 } // namespace blink |
| OLD | NEW |