| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/autocomplete/autocomplete_edit_view_win.h" | 5 #include "chrome/browser/autocomplete/autocomplete_edit_view_win.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <locale> | 8 #include <locale> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 // before we free the library. If the library gets unloaded before this | 491 // before we free the library. If the library gets unloaded before this |
| 492 // released, it becomes garbage. | 492 // released, it becomes garbage. |
| 493 text_object_model_->Release(); | 493 text_object_model_->Release(); |
| 494 | 494 |
| 495 // We balance our reference count and unpatch when the last instance has | 495 // We balance our reference count and unpatch when the last instance has |
| 496 // been destroyed. This prevents us from relying on the AtExit or static | 496 // been destroyed. This prevents us from relying on the AtExit or static |
| 497 // destructor sequence to do our unpatching, which is generally fragile. | 497 // destructor sequence to do our unpatching, which is generally fragile. |
| 498 g_paint_patcher.Pointer()->DerefPatch(); | 498 g_paint_patcher.Pointer()->DerefPatch(); |
| 499 } | 499 } |
| 500 | 500 |
| 501 int AutocompleteEditViewWin::TextWidth() { | |
| 502 return WidthNeededToDisplay(GetText()); | |
| 503 } | |
| 504 | |
| 505 int AutocompleteEditViewWin::WidthOfTextAfterCursor() { | 501 int AutocompleteEditViewWin::WidthOfTextAfterCursor() { |
| 506 CHARRANGE selection; | 502 CHARRANGE selection; |
| 507 GetSelection(selection); | 503 GetSelection(selection); |
| 508 const int start = std::max(0, static_cast<int>(selection.cpMax - 1)); | 504 const int start = std::max(0, static_cast<int>(selection.cpMax - 1)); |
| 509 return WidthNeededToDisplay(GetText().substr(start)); | 505 return WidthNeededToDisplay(GetText().substr(start)); |
| 510 } | 506 } |
| 511 | 507 |
| 512 gfx::Font AutocompleteEditViewWin::GetFont() { | 508 gfx::Font AutocompleteEditViewWin::GetFont() { |
| 513 return font_; | 509 return font_; |
| 514 } | 510 } |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 } | 902 } |
| 907 | 903 |
| 908 gfx::NativeView AutocompleteEditViewWin::GetNativeView() const { | 904 gfx::NativeView AutocompleteEditViewWin::GetNativeView() const { |
| 909 return m_hWnd; | 905 return m_hWnd; |
| 910 } | 906 } |
| 911 | 907 |
| 912 CommandUpdater* AutocompleteEditViewWin::GetCommandUpdater() { | 908 CommandUpdater* AutocompleteEditViewWin::GetCommandUpdater() { |
| 913 return command_updater_; | 909 return command_updater_; |
| 914 } | 910 } |
| 915 | 911 |
| 912 views::View* AutocompleteEditViewWin::AddToView(views::View* parent) { |
| 913 views::NativeViewHost* host = new views::NativeViewHost; |
| 914 parent->AddChildView(host); |
| 915 host->set_focus_view(parent); |
| 916 host->Attach(GetNativeView()); |
| 917 return host; |
| 918 } |
| 919 |
| 920 bool AutocompleteEditViewWin::CommitInstantSuggestion( |
| 921 const std::wstring& typed_text, |
| 922 const std::wstring& suggested_text) { |
| 923 model_->FinalizeInstantQuery(typed_text, suggested_text); |
| 924 return true; |
| 925 } |
| 926 |
| 927 void AutocompleteEditViewWin::SetInstantSuggestion(const string16& suggestion) { |
| 928 // Win shows the suggestion in LocationBarView. |
| 929 NOTREACHED(); |
| 930 } |
| 931 |
| 932 int AutocompleteEditViewWin::TextWidth() const { |
| 933 return WidthNeededToDisplay(GetText()); |
| 934 } |
| 935 |
| 916 void AutocompleteEditViewWin::PasteAndGo(const std::wstring& text) { | 936 void AutocompleteEditViewWin::PasteAndGo(const std::wstring& text) { |
| 917 if (CanPasteAndGo(text)) | 937 if (CanPasteAndGo(text)) |
| 918 model_->PasteAndGo(); | 938 model_->PasteAndGo(); |
| 919 } | 939 } |
| 920 | 940 |
| 921 bool AutocompleteEditViewWin::SkipDefaultKeyEventProcessing( | 941 bool AutocompleteEditViewWin::SkipDefaultKeyEventProcessing( |
| 922 const views::KeyEvent& e) { | 942 const views::KeyEvent& e) { |
| 923 app::KeyboardCode key = e.GetKeyCode(); | 943 app::KeyboardCode key = e.GetKeyCode(); |
| 924 // We don't process ALT + numpad digit as accelerators, they are used for | 944 // We don't process ALT + numpad digit as accelerators, they are used for |
| 925 // entering special characters. We do translate alt-home. | 945 // entering special characters. We do translate alt-home. |
| (...skipping 1637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2563 const CPoint& point) { | 2583 const CPoint& point) { |
| 2564 if (gaining_focus_.get()) { | 2584 if (gaining_focus_.get()) { |
| 2565 // This click is giving us focus, so we need to track how much the mouse | 2585 // This click is giving us focus, so we need to track how much the mouse |
| 2566 // moves to see if it's a drag or just a click. Clicks should select all | 2586 // moves to see if it's a drag or just a click. Clicks should select all |
| 2567 // the text. | 2587 // the text. |
| 2568 tracking_click_[button] = true; | 2588 tracking_click_[button] = true; |
| 2569 click_point_[button] = point; | 2589 click_point_[button] = point; |
| 2570 } | 2590 } |
| 2571 } | 2591 } |
| 2572 | 2592 |
| 2573 int AutocompleteEditViewWin::GetHorizontalMargin() { | 2593 int AutocompleteEditViewWin::GetHorizontalMargin() const { |
| 2574 RECT rect; | 2594 RECT rect; |
| 2575 GetRect(&rect); | 2595 GetRect(&rect); |
| 2576 RECT client_rect; | 2596 RECT client_rect; |
| 2577 GetClientRect(&client_rect); | 2597 GetClientRect(&client_rect); |
| 2578 return (rect.left - client_rect.left) + (client_rect.right - rect.right); | 2598 return (rect.left - client_rect.left) + (client_rect.right - rect.right); |
| 2579 } | 2599 } |
| 2580 | 2600 |
| 2581 int AutocompleteEditViewWin::WidthNeededToDisplay(const std::wstring& text) { | 2601 int AutocompleteEditViewWin::WidthNeededToDisplay( |
| 2602 const std::wstring& text) const { |
| 2582 // Use font_.GetStringWidth() instead of | 2603 // Use font_.GetStringWidth() instead of |
| 2583 // PosFromChar(location_entry_->GetTextLength()) because PosFromChar() is | 2604 // PosFromChar(location_entry_->GetTextLength()) because PosFromChar() is |
| 2584 // apparently buggy. In both LTR UI and RTL UI with left-to-right layout, | 2605 // apparently buggy. In both LTR UI and RTL UI with left-to-right layout, |
| 2585 // PosFromChar(i) might return 0 when i is greater than 1. | 2606 // PosFromChar(i) might return 0 when i is greater than 1. |
| 2586 return font_.GetStringWidth(text) + GetHorizontalMargin(); | 2607 return font_.GetStringWidth(text) + GetHorizontalMargin(); |
| 2587 } | 2608 } |
| 2588 | 2609 |
| 2589 bool AutocompleteEditViewWin::IsImeComposing() const { | 2610 bool AutocompleteEditViewWin::IsImeComposing() const { |
| 2590 bool ime_composing = false; | 2611 bool ime_composing = false; |
| 2591 HIMC context = ImmGetContext(m_hWnd); | 2612 HIMC context = ImmGetContext(m_hWnd); |
| 2592 if (context) { | 2613 if (context) { |
| 2593 ime_composing = !!ImmGetCompositionString(context, GCS_COMPSTR, NULL, 0); | 2614 ime_composing = !!ImmGetCompositionString(context, GCS_COMPSTR, NULL, 0); |
| 2594 ImmReleaseContext(m_hWnd, context); | 2615 ImmReleaseContext(m_hWnd, context); |
| 2595 } | 2616 } |
| 2596 return ime_composing; | 2617 return ime_composing; |
| 2597 } | 2618 } |
| OLD | NEW |