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

Side by Side Diff: chrome/browser/ui/views/omnibox/omnibox_view_win.cc

Issue 15745031: Restyle omnibox popup (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Go back to 3 max search suggestions for now Created 7 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 "chrome/browser/ui/views/omnibox/omnibox_view_win.h" 5 #include "chrome/browser/ui/views/omnibox/omnibox_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 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 // twips are a unit of type measurement, and RichEdit controls use them 455 // twips are a unit of type measurement, and RichEdit controls use them
456 // to set offsets. 456 // to set offsets.
457 const int kTwipsPerInch = 1440; 457 const int kTwipsPerInch = 1440;
458 458
459 } // namespace 459 } // namespace
460 460
461 HMODULE OmniboxViewWin::loaded_library_module_ = NULL; 461 HMODULE OmniboxViewWin::loaded_library_module_ = NULL;
462 462
463 OmniboxViewWin::OmniboxViewWin(OmniboxEditController* controller, 463 OmniboxViewWin::OmniboxViewWin(OmniboxEditController* controller,
464 ToolbarModel* toolbar_model, 464 ToolbarModel* toolbar_model,
465 LocationBarView* parent_view, 465 LocationBarView* location_bar,
466 CommandUpdater* command_updater, 466 CommandUpdater* command_updater,
467 bool popup_window_mode, 467 bool popup_window_mode,
468 views::View* location_bar,
469 const gfx::Font& font, 468 const gfx::Font& font,
470 int font_y_offset) 469 int font_y_offset)
471 : OmniboxView(parent_view->profile(), controller, toolbar_model, 470 : OmniboxView(location_bar->profile(), controller, toolbar_model,
472 command_updater), 471 command_updater),
473 popup_view_( 472 popup_view_(
474 OmniboxPopupContentsView::Create(font, this, model(), location_bar)), 473 OmniboxPopupContentsView::Create(font, this, model(), location_bar)),
475 parent_view_(parent_view), 474 location_bar_(location_bar),
476 popup_window_mode_(popup_window_mode), 475 popup_window_mode_(popup_window_mode),
477 force_hidden_(false), 476 force_hidden_(false),
478 tracking_click_(), 477 tracking_click_(),
479 tracking_double_click_(false), 478 tracking_double_click_(false),
480 double_click_time_(0), 479 double_click_time_(0),
481 can_discard_mousemove_(false), 480 can_discard_mousemove_(false),
482 ignore_ime_messages_(false), 481 ignore_ime_messages_(false),
483 delete_at_end_pressed_(false), 482 delete_at_end_pressed_(false),
484 font_(font), 483 font_(font),
485 font_y_adjustment_(font_y_offset), 484 font_y_adjustment_(font_y_offset),
486 possible_drag_(false), 485 possible_drag_(false),
487 in_drag_(false), 486 in_drag_(false),
488 initiated_drag_(false), 487 initiated_drag_(false),
489 drop_highlight_position_(-1), 488 drop_highlight_position_(-1),
490 ime_candidate_window_open_(false), 489 ime_candidate_window_open_(false),
491 background_color_(skia::SkColorToCOLORREF(parent_view->GetColor( 490 background_color_(skia::SkColorToCOLORREF(location_bar->GetColor(
492 ToolbarModel::NONE, LocationBarView::BACKGROUND))), 491 ToolbarModel::NONE, LocationBarView::BACKGROUND))),
493 security_level_(ToolbarModel::NONE), 492 security_level_(ToolbarModel::NONE),
494 text_object_model_(NULL), 493 text_object_model_(NULL),
495 tsf_event_router_(base::win::IsTSFAwareRequired() ? 494 tsf_event_router_(base::win::IsTSFAwareRequired() ?
496 new ui::TSFEventRouter(this) : NULL) { 495 new ui::TSFEventRouter(this) : NULL) {
497 if (!loaded_library_module_) 496 if (!loaded_library_module_)
498 loaded_library_module_ = LoadLibrary(kRichEditDLLName); 497 loaded_library_module_ = LoadLibrary(kRichEditDLLName);
499 // RichEdit should be available; rare exceptions should use the Views omnibox. 498 // RichEdit should be available; rare exceptions should use the Views omnibox.
500 DCHECK(loaded_library_module_); 499 DCHECK(loaded_library_module_);
501 500
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 if (text_object_model_) 575 if (text_object_model_)
577 text_object_model_->Release(); 576 text_object_model_->Release();
578 577
579 // We balance our reference count and unpatch when the last instance has 578 // We balance our reference count and unpatch when the last instance has
580 // been destroyed. This prevents us from relying on the AtExit or static 579 // been destroyed. This prevents us from relying on the AtExit or static
581 // destructor sequence to do our unpatching, which is generally fragile. 580 // destructor sequence to do our unpatching, which is generally fragile.
582 g_paint_patcher.Pointer()->DerefPatch(); 581 g_paint_patcher.Pointer()->DerefPatch();
583 } 582 }
584 583
585 views::View* OmniboxViewWin::parent_view() const { 584 views::View* OmniboxViewWin::parent_view() const {
586 return parent_view_; 585 return location_bar_;
587 } 586 }
588 587
589 void OmniboxViewWin::SaveStateToTab(WebContents* tab) { 588 void OmniboxViewWin::SaveStateToTab(WebContents* tab) {
590 DCHECK(tab); 589 DCHECK(tab);
591 590
592 const OmniboxEditModel::State model_state(model()->GetStateForTabSwitch()); 591 const OmniboxEditModel::State model_state(model()->GetStateForTabSwitch());
593 592
594 CHARRANGE selection; 593 CHARRANGE selection;
595 GetSelection(selection); 594 GetSelection(selection);
596 tab->SetUserData( 595 tab->SetUserData(
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 // display area of IME windows, this workaround becomes unnecessary. 1023 // display area of IME windows, this workaround becomes unnecessary.
1025 HWND ime_window = ImmGetDefaultIMEWnd(edit_native_view); 1024 HWND ime_window = ImmGetDefaultIMEWnd(edit_native_view);
1026 return ime_window ? ime_window : HWND_NOTOPMOST; 1025 return ime_window ? ime_window : HWND_NOTOPMOST;
1027 } 1026 }
1028 1027
1029 gfx::NativeView OmniboxViewWin::GetRelativeWindowForPopup() const { 1028 gfx::NativeView OmniboxViewWin::GetRelativeWindowForPopup() const {
1030 return GetRelativeWindowForNativeView(GetNativeView()); 1029 return GetRelativeWindowForNativeView(GetNativeView());
1031 } 1030 }
1032 1031
1033 void OmniboxViewWin::SetInstantSuggestion(const string16& suggestion) { 1032 void OmniboxViewWin::SetInstantSuggestion(const string16& suggestion) {
1034 parent_view_->SetInstantSuggestion(suggestion); 1033 location_bar_->SetInstantSuggestion(suggestion);
1035 } 1034 }
1036 1035
1037 int OmniboxViewWin::TextWidth() const { 1036 int OmniboxViewWin::TextWidth() const {
1038 return WidthNeededToDisplay(GetText()); 1037 return WidthNeededToDisplay(GetText());
1039 } 1038 }
1040 1039
1041 string16 OmniboxViewWin::GetInstantSuggestion() const { 1040 string16 OmniboxViewWin::GetInstantSuggestion() const {
1042 return parent_view_->GetInstantSuggestion(); 1041 return location_bar_->GetInstantSuggestion();
1043 } 1042 }
1044 1043
1045 bool OmniboxViewWin::IsImeComposing() const { 1044 bool OmniboxViewWin::IsImeComposing() const {
1046 if (tsf_event_router_) 1045 if (tsf_event_router_)
1047 return tsf_event_router_->IsImeComposing(); 1046 return tsf_event_router_->IsImeComposing();
1048 bool ime_composing = false; 1047 bool ime_composing = false;
1049 HIMC context = ImmGetContext(m_hWnd); 1048 HIMC context = ImmGetContext(m_hWnd);
1050 if (context) { 1049 if (context) {
1051 ime_composing = !!ImmGetCompositionString(context, GCS_COMPSTR, NULL, 0); 1050 ime_composing = !!ImmGetCompositionString(context, GCS_COMPSTR, NULL, 0);
1052 ImmReleaseContext(m_hWnd, context); 1051 ImmReleaseContext(m_hWnd, context);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 return command_updater()->IsCommandEnabled(command_id); 1199 return command_updater()->IsCommandEnabled(command_id);
1201 default: 1200 default:
1202 NOTREACHED(); 1201 NOTREACHED();
1203 return false; 1202 return false;
1204 } 1203 }
1205 } 1204 }
1206 1205
1207 bool OmniboxViewWin::GetAcceleratorForCommandId( 1206 bool OmniboxViewWin::GetAcceleratorForCommandId(
1208 int command_id, 1207 int command_id,
1209 ui::Accelerator* accelerator) { 1208 ui::Accelerator* accelerator) {
1210 return parent_view_->GetWidget()->GetAccelerator(command_id, accelerator); 1209 return location_bar_->GetWidget()->GetAccelerator(command_id, accelerator);
1211 } 1210 }
1212 1211
1213 bool OmniboxViewWin::IsItemForCommandIdDynamic(int command_id) const { 1212 bool OmniboxViewWin::IsItemForCommandIdDynamic(int command_id) const {
1214 // No need to change the default IDS_PASTE_AND_GO label unless this is a 1213 // No need to change the default IDS_PASTE_AND_GO label unless this is a
1215 // search. 1214 // search.
1216 return command_id == IDS_PASTE_AND_GO; 1215 return command_id == IDS_PASTE_AND_GO;
1217 } 1216 }
1218 1217
1219 string16 OmniboxViewWin::GetLabelForCommandId(int command_id) const { 1218 string16 OmniboxViewWin::GetLabelForCommandId(int command_id) const {
1220 DCHECK_EQ(IDS_PASTE_AND_GO, command_id); 1219 DCHECK_EQ(IDS_PASTE_AND_GO, command_id);
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
2016 SetMsgHandled(false); 2015 SetMsgHandled(false);
2017 } 2016 }
2018 2017
2019 void OmniboxViewWin::OnRButtonUp(UINT /*keys*/, const CPoint& point) { 2018 void OmniboxViewWin::OnRButtonUp(UINT /*keys*/, const CPoint& point) {
2020 SelectAllIfNecessary(kRight, point); 2019 SelectAllIfNecessary(kRight, point);
2021 tracking_click_[kRight] = false; 2020 tracking_click_[kRight] = false;
2022 SetMsgHandled(false); 2021 SetMsgHandled(false);
2023 } 2022 }
2024 2023
2025 void OmniboxViewWin::OnSetFocus(HWND focus_wnd) { 2024 void OmniboxViewWin::OnSetFocus(HWND focus_wnd) {
2026 views::FocusManager* focus_manager = parent_view_->GetFocusManager(); 2025 views::FocusManager* focus_manager = location_bar_->GetFocusManager();
2027 if (focus_manager) { 2026 if (focus_manager) {
2028 // Notify the FocusManager that the focused view is now the location bar 2027 // Notify the FocusManager that the focused view is now the location bar
2029 // (our parent view). 2028 // (our parent view).
2030 focus_manager->SetFocusedView(parent_view_); 2029 focus_manager->SetFocusedView(location_bar_);
2031 } else { 2030 } else {
2032 NOTREACHED(); 2031 NOTREACHED();
2033 } 2032 }
2034 2033
2035 model()->OnSetFocus(GetKeyState(VK_CONTROL) < 0); 2034 model()->OnSetFocus(GetKeyState(VK_CONTROL) < 0);
2036 2035
2037 // Restore saved selection if available. 2036 // Restore saved selection if available.
2038 if (saved_selection_for_focus_change_.cpMin != -1) { 2037 if (saved_selection_for_focus_change_.cpMin != -1) {
2039 SetSelectionRange(saved_selection_for_focus_change_); 2038 SetSelectionRange(saved_selection_for_focus_change_);
2040 saved_selection_for_focus_change_.cpMin = -1; 2039 saved_selection_for_focus_change_.cpMin = -1;
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
2456 // Set the baseline emphasis. 2455 // Set the baseline emphasis.
2457 CHARFORMAT cf = {0}; 2456 CHARFORMAT cf = {0};
2458 cf.dwMask = CFM_COLOR; 2457 cf.dwMask = CFM_COLOR;
2459 // If we're going to emphasize parts of the text, then the baseline state 2458 // If we're going to emphasize parts of the text, then the baseline state
2460 // should be "de-emphasized". If not, then everything should be rendered in 2459 // should be "de-emphasized". If not, then everything should be rendered in
2461 // the standard text color unless we should grey out the entire URL. 2460 // the standard text color unless we should grey out the entire URL.
2462 bool grey_out_url = text.substr(scheme.begin, scheme.len) == 2461 bool grey_out_url = text.substr(scheme.begin, scheme.len) ==
2463 UTF8ToUTF16(extensions::kExtensionScheme); 2462 UTF8ToUTF16(extensions::kExtensionScheme);
2464 bool grey_base = model()->CurrentTextIsURL() && 2463 bool grey_base = model()->CurrentTextIsURL() &&
2465 (host.is_nonempty() || grey_out_url); 2464 (host.is_nonempty() || grey_out_url);
2466 cf.crTextColor = skia::SkColorToCOLORREF(parent_view_->GetColor( 2465 cf.crTextColor = skia::SkColorToCOLORREF(location_bar_->GetColor(
2467 security_level_, 2466 security_level_,
2468 grey_base ? LocationBarView::DEEMPHASIZED_TEXT : LocationBarView::TEXT)); 2467 grey_base ? LocationBarView::DEEMPHASIZED_TEXT : LocationBarView::TEXT));
2469 // NOTE: Don't use SetDefaultCharFormat() instead of the below; that sets 2468 // NOTE: Don't use SetDefaultCharFormat() instead of the below; that sets
2470 // the format that will get applied to text added in the future, not to text 2469 // the format that will get applied to text added in the future, not to text
2471 // already in the edit. 2470 // already in the edit.
2472 SelectAll(false); 2471 SelectAll(false);
2473 SetSelectionCharFormat(cf); 2472 SetSelectionCharFormat(cf);
2474 if (host.is_nonempty() && !grey_out_url) { 2473 if (host.is_nonempty() && !grey_out_url) {
2475 // We've found a host name and we should provide emphasis to host names, 2474 // We've found a host name and we should provide emphasis to host names,
2476 // so emphasize it. 2475 // so emphasize it.
2477 cf.crTextColor = skia::SkColorToCOLORREF(parent_view_->GetColor( 2476 cf.crTextColor = skia::SkColorToCOLORREF(location_bar_->GetColor(
2478 security_level_, LocationBarView::TEXT)); 2477 security_level_, LocationBarView::TEXT));
2479 SetSelection(host.begin, host.end()); 2478 SetSelection(host.begin, host.end());
2480 SetSelectionCharFormat(cf); 2479 SetSelectionCharFormat(cf);
2481 } 2480 }
2482 2481
2483 // Emphasize the scheme for security UI display purposes (if necessary). 2482 // Emphasize the scheme for security UI display purposes (if necessary).
2484 insecure_scheme_component_.reset(); 2483 insecure_scheme_component_.reset();
2485 if (!model()->user_input_in_progress() && model()->CurrentTextIsURL() && 2484 if (!model()->user_input_in_progress() && model()->CurrentTextIsURL() &&
2486 scheme.is_nonempty() && (security_level_ != ToolbarModel::NONE)) { 2485 scheme.is_nonempty() && (security_level_ != ToolbarModel::NONE)) {
2487 if (security_level_ == ToolbarModel::SECURITY_ERROR) { 2486 if (security_level_ == ToolbarModel::SECURITY_ERROR) {
2488 insecure_scheme_component_.begin = scheme.begin; 2487 insecure_scheme_component_.begin = scheme.begin;
2489 insecure_scheme_component_.len = scheme.len; 2488 insecure_scheme_component_.len = scheme.len;
2490 } 2489 }
2491 cf.crTextColor = skia::SkColorToCOLORREF(parent_view_->GetColor( 2490 cf.crTextColor = skia::SkColorToCOLORREF(location_bar_->GetColor(
2492 security_level_, LocationBarView::SECURITY_TEXT)); 2491 security_level_, LocationBarView::SECURITY_TEXT));
2493 SetSelection(scheme.begin, scheme.end()); 2492 SetSelection(scheme.begin, scheme.end());
2494 SetSelectionCharFormat(cf); 2493 SetSelectionCharFormat(cf);
2495 } 2494 }
2496 2495
2497 // Restore the selection. 2496 // Restore the selection.
2498 SetSelectionRange(saved_sel); 2497 SetSelectionRange(saved_sel);
2499 } 2498 }
2500 2499
2501 void OmniboxViewWin::EraseTopOfSelection(CDC* dc, 2500 void OmniboxViewWin::EraseTopOfSelection(CDC* dc,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
2578 const SkRect selection_rect = { 2577 const SkRect selection_rect = {
2579 SkIntToScalar(PosFromChar(sel.cpMin).x - scheme_rect.left), 2578 SkIntToScalar(PosFromChar(sel.cpMin).x - scheme_rect.left),
2580 SkIntToScalar(0), 2579 SkIntToScalar(0),
2581 SkIntToScalar(PosFromChar(sel.cpMax).x - scheme_rect.left), 2580 SkIntToScalar(PosFromChar(sel.cpMax).x - scheme_rect.left),
2582 SkIntToScalar(scheme_rect.Height()) }; 2581 SkIntToScalar(scheme_rect.Height()) };
2583 2582
2584 // Draw the unselected portion of the stroke. 2583 // Draw the unselected portion of the stroke.
2585 sk_canvas->save(); 2584 sk_canvas->save();
2586 if (selection_rect.isEmpty() || 2585 if (selection_rect.isEmpty() ||
2587 sk_canvas->clipRect(selection_rect, SkRegion::kDifference_Op)) { 2586 sk_canvas->clipRect(selection_rect, SkRegion::kDifference_Op)) {
2588 paint.setColor(parent_view_->GetColor(security_level_, 2587 paint.setColor(location_bar_->GetColor(security_level_,
2589 LocationBarView::SECURITY_TEXT)); 2588 LocationBarView::SECURITY_TEXT));
2590 sk_canvas->drawLine(start_point.fX, start_point.fY, 2589 sk_canvas->drawLine(start_point.fX, start_point.fY,
2591 end_point.fX, end_point.fY, paint); 2590 end_point.fX, end_point.fY, paint);
2592 } 2591 }
2593 sk_canvas->restore(); 2592 sk_canvas->restore();
2594 2593
2595 // Draw the selected portion of the stroke. 2594 // Draw the selected portion of the stroke.
2596 if (!selection_rect.isEmpty() && sk_canvas->clipRect(selection_rect)) { 2595 if (!selection_rect.isEmpty() && sk_canvas->clipRect(selection_rect)) {
2597 paint.setColor(parent_view_->GetColor(security_level_, 2596 paint.setColor(location_bar_->GetColor(security_level_,
2598 LocationBarView::SELECTED_TEXT)); 2597 LocationBarView::SELECTED_TEXT));
2599 sk_canvas->drawLine(start_point.fX, start_point.fY, 2598 sk_canvas->drawLine(start_point.fX, start_point.fY,
2600 end_point.fX, end_point.fY, paint); 2599 end_point.fX, end_point.fY, paint);
2601 } 2600 }
2602 2601
2603 // Now copy what we drew to the target HDC. 2602 // Now copy what we drew to the target HDC.
2604 skia::DrawToNativeContext(sk_canvas, hdc, 2603 skia::DrawToNativeContext(sk_canvas, hdc,
2605 scheme_rect.left + canvas_paint_clip_rect.left - canvas_clip_rect.left, 2604 scheme_rect.left + canvas_paint_clip_rect.left - canvas_clip_rect.left,
2606 std::max(scheme_rect.top, client_rect.top) + canvas_paint_clip_rect.top - 2605 std::max(scheme_rect.top, client_rect.top) + canvas_paint_clip_rect.top -
2607 canvas_clip_rect.top, &canvas_paint_clip_rect); 2606 canvas_clip_rect.top, &canvas_paint_clip_rect);
2608 } 2607 }
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
2836 return (rect.left - client_rect.left) + (client_rect.right - rect.right); 2835 return (rect.left - client_rect.left) + (client_rect.right - rect.right);
2837 } 2836 }
2838 2837
2839 int OmniboxViewWin::WidthNeededToDisplay(const string16& text) const { 2838 int OmniboxViewWin::WidthNeededToDisplay(const string16& text) const {
2840 // Use font_.GetStringWidth() instead of PosFromChar(GetTextLength()) because 2839 // Use font_.GetStringWidth() instead of PosFromChar(GetTextLength()) because
2841 // PosFromChar() is apparently buggy. In both LTR UI and RTL UI with 2840 // PosFromChar() is apparently buggy. In both LTR UI and RTL UI with
2842 // left-to-right layout, PosFromChar(i) might return 0 when i is greater than 2841 // left-to-right layout, PosFromChar(i) might return 0 when i is greater than
2843 // 1. 2842 // 1.
2844 return font_.GetStringWidth(text) + GetHorizontalMargin(); 2843 return font_.GetStringWidth(text) + GetHorizontalMargin();
2845 } 2844 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698