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

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

Powered by Google App Engine
This is Rietveld 408576698