| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/location_bar/location_bar_view.h" | 5 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 using views::View; | 107 using views::View; |
| 108 | 108 |
| 109 | 109 |
| 110 namespace { | 110 namespace { |
| 111 | 111 |
| 112 Browser* GetBrowserFromDelegate(LocationBarView::Delegate* delegate) { | 112 Browser* GetBrowserFromDelegate(LocationBarView::Delegate* delegate) { |
| 113 WebContents* contents = delegate->GetWebContents(); | 113 WebContents* contents = delegate->GetWebContents(); |
| 114 return contents ? chrome::FindBrowserWithWebContents(contents) : NULL; | 114 return contents ? chrome::FindBrowserWithWebContents(contents) : NULL; |
| 115 } | 115 } |
| 116 | 116 |
| 117 // Given a containing |height| and a base |font|, shrinks the font until it will | 117 // Given a containing |height| and a base |font_list|, shrinks the fonts until |
| 118 // fit within |height| while having its cap height vertically centered. Returns | 118 // the primary font will fit within |height| while having its cap height |
| 119 // the |font_y_offset| needed to produce this centering. | 119 // vertically centered. Returns the |font_y_offset| needed to produce this |
| 120 // centering. |
| 120 void CalculateFontAndOffsetForHeight(int height, | 121 void CalculateFontAndOffsetForHeight(int height, |
| 121 gfx::Font* font, | 122 gfx::FontList* font_list, |
| 122 int* font_y_offset) { | 123 int* font_y_offset) { |
| 123 #if defined(OS_WIN) | 124 #if defined(OS_WIN) |
| 124 base::win::ScopedGetDC screen_dc(NULL); | 125 base::win::ScopedGetDC screen_dc(NULL); |
| 125 #endif | 126 #endif |
| 126 | 127 |
| 127 while (true) { | 128 while (true) { |
| 128 // TODO(pkasting): Expand the gfx::Font metrics (and underlying Skia | 129 // TODO(pkasting): Expand the gfx::Font metrics (and underlying Skia |
| 129 // metrics) enough to expose the cap height directly. | 130 // metrics) enough to expose the cap height directly. |
| 130 #if defined(OS_WIN) | 131 #if defined(OS_WIN) |
| 131 base::win::ScopedSelectObject font_in_dc(screen_dc, font->GetNativeFont()); | 132 const gfx::Font& font = font_list->GetPrimaryFont(); |
| 133 base::win::ScopedSelectObject font_in_dc(screen_dc, font.GetNativeFont()); |
| 132 TEXTMETRIC tm = {0}; | 134 TEXTMETRIC tm = {0}; |
| 133 GetTextMetrics(screen_dc, &tm); | 135 GetTextMetrics(screen_dc, &tm); |
| 134 int cap_height = font->GetBaseline() - tm.tmInternalLeading; | 136 int cap_height = font.GetBaseline() - tm.tmInternalLeading; |
| 135 *font_y_offset = ((height - cap_height) / 2) - tm.tmInternalLeading; | 137 *font_y_offset = ((height - cap_height) / 2) - tm.tmInternalLeading; |
| 136 #else | 138 #else |
| 137 // Without cap height available, we fall back to centering the full height. | 139 // Without cap height available, we fall back to centering the full height. |
| 138 *font_y_offset = (height - font->GetHeight()) / 2; | 140 *font_y_offset = (height - font_list->GetHeight()) / 2; |
| 139 #endif | 141 #endif |
| 140 | 142 |
| 143 const int font_size = font_list->GetFontSize(); |
| 141 if (((*font_y_offset >= 0) && | 144 if (((*font_y_offset >= 0) && |
| 142 ((*font_y_offset + font->GetHeight()) <= height)) || | 145 ((*font_y_offset + font_list->GetHeight()) <= height)) || |
| 143 (font->GetFontSize() <= 1)) | 146 (font_size <= 1)) |
| 144 return; | 147 return; |
| 145 *font = font->DeriveFont(-1); | 148 *font_list = font_list->DeriveFontListWithSize(font_size - 1); |
| 146 } | 149 } |
| 147 } | 150 } |
| 148 | 151 |
| 149 } // namespace | 152 } // namespace |
| 150 | 153 |
| 151 | 154 |
| 152 // LocationBarView ----------------------------------------------------------- | 155 // LocationBarView ----------------------------------------------------------- |
| 153 | 156 |
| 154 // static | 157 // static |
| 155 const int LocationBarView::kNormalEdgeThickness = 2; | 158 const int LocationBarView::kNormalEdgeThickness = 2; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 void LocationBarView::Init() { | 230 void LocationBarView::Init() { |
| 228 // We need to be in a Widget, otherwise GetNativeTheme() may change and we're | 231 // We need to be in a Widget, otherwise GetNativeTheme() may change and we're |
| 229 // not prepared for that. | 232 // not prepared for that. |
| 230 DCHECK(GetWidget()); | 233 DCHECK(GetWidget()); |
| 231 | 234 |
| 232 location_icon_view_ = new LocationIconView(this); | 235 location_icon_view_ = new LocationIconView(this); |
| 233 location_icon_view_->set_drag_controller(this); | 236 location_icon_view_->set_drag_controller(this); |
| 234 AddChildView(location_icon_view_); | 237 AddChildView(location_icon_view_); |
| 235 | 238 |
| 236 // Determine the main font. | 239 // Determine the main font. |
| 237 gfx::Font font(ui::ResourceBundle::GetSharedInstance().GetFont( | 240 gfx::FontList font_list = ResourceBundle::GetSharedInstance().GetFontList( |
| 238 ui::ResourceBundle::BaseFont)); | 241 ResourceBundle::BaseFont); |
| 239 const int current_font_size = font.GetFontSize(); | 242 const int current_font_size = font_list.GetFontSize(); |
| 240 const int desired_font_size = browser_defaults::kOmniboxFontPixelSize; | 243 const int desired_font_size = browser_defaults::kOmniboxFontPixelSize; |
| 241 if (current_font_size < desired_font_size) | 244 if (current_font_size < desired_font_size) |
| 242 font = font.DeriveFont(desired_font_size - current_font_size); | 245 font_list = font_list.DeriveFontListWithSize(desired_font_size); |
| 243 // Shrink large fonts to make them fit. | 246 // Shrink large fonts to make them fit. |
| 244 // TODO(pkasting): Stretch the location bar instead in this case. | 247 // TODO(pkasting): Stretch the location bar instead in this case. |
| 245 int location_height = GetInternalHeight(true); | 248 int location_height = GetInternalHeight(true); |
| 246 int font_y_offset; | 249 int font_y_offset; |
| 247 CalculateFontAndOffsetForHeight(location_height, &font, &font_y_offset); | 250 CalculateFontAndOffsetForHeight(location_height, &font_list, &font_y_offset); |
| 251 const gfx::Font& font = font_list.GetPrimaryFont(); |
| 248 | 252 |
| 249 // Determine the font for use inside the bubbles. | 253 // Determine the font for use inside the bubbles. |
| 250 gfx::Font bubble_font(font); | 254 gfx::FontList bubble_font_list(font_list); |
| 251 int bubble_font_y_offset; | 255 int bubble_font_y_offset; |
| 252 // The bubble background images have 1 px thick edges, which we don't want to | 256 // The bubble background images have 1 px thick edges, which we don't want to |
| 253 // overlap. | 257 // overlap. |
| 254 const int kBubbleInteriorVerticalPadding = 1; | 258 const int kBubbleInteriorVerticalPadding = 1; |
| 255 CalculateFontAndOffsetForHeight( | 259 CalculateFontAndOffsetForHeight( |
| 256 location_height - ((kBubblePadding + kBubbleInteriorVerticalPadding) * 2), | 260 location_height - ((kBubblePadding + kBubbleInteriorVerticalPadding) * 2), |
| 257 &bubble_font, &bubble_font_y_offset); | 261 &bubble_font_list, &bubble_font_y_offset); |
| 258 bubble_font_y_offset += kBubbleInteriorVerticalPadding; | 262 bubble_font_y_offset += kBubbleInteriorVerticalPadding; |
| 263 const gfx::Font& bubble_font = font_list.GetPrimaryFont(); |
| 259 | 264 |
| 260 const SkColor background_color = | 265 const SkColor background_color = |
| 261 GetColor(ToolbarModel::NONE, LocationBarView::BACKGROUND); | 266 GetColor(ToolbarModel::NONE, LocationBarView::BACKGROUND); |
| 262 ev_bubble_view_ = new EVBubbleView( | 267 ev_bubble_view_ = new EVBubbleView( |
| 263 bubble_font, bubble_font_y_offset, | 268 bubble_font, bubble_font_y_offset, |
| 264 GetColor(ToolbarModel::EV_SECURE, SECURITY_TEXT), background_color, this); | 269 GetColor(ToolbarModel::EV_SECURE, SECURITY_TEXT), background_color, this); |
| 265 ev_bubble_view_->set_drag_controller(this); | 270 ev_bubble_view_->set_drag_controller(this); |
| 266 AddChildView(ev_bubble_view_); | 271 AddChildView(ev_bubble_view_); |
| 267 | 272 |
| 268 // Initialize the Omnibox view. | 273 // Initialize the Omnibox view. |
| 269 location_entry_.reset(CreateOmniboxView(this, model_, profile_, | 274 location_entry_.reset(CreateOmniboxView(this, model_, profile_, |
| 270 command_updater_, is_popup_mode_, this, font, font_y_offset)); | 275 command_updater_, is_popup_mode_, this, font_list, font_y_offset)); |
| 271 SetLocationEntryFocusable(true); | 276 SetLocationEntryFocusable(true); |
| 272 location_entry_view_ = location_entry_->AddToView(this); | 277 location_entry_view_ = location_entry_->AddToView(this); |
| 273 | 278 |
| 274 // Initialize the inline autocomplete view which is visible only when IME is | 279 // Initialize the inline autocomplete view which is visible only when IME is |
| 275 // turned on. Use the same font with the omnibox and highlighted background. | 280 // turned on. Use the same font with the omnibox and highlighted background. |
| 276 ime_inline_autocomplete_view_ = new views::Label(string16(), font); | 281 ime_inline_autocomplete_view_ = new views::Label(string16(), font); |
| 277 ime_inline_autocomplete_view_->set_border( | 282 ime_inline_autocomplete_view_->set_border( |
| 278 views::Border::CreateEmptyBorder(font_y_offset, 0, 0, 0)); | 283 views::Border::CreateEmptyBorder(font_y_offset, 0, 0, 0)); |
| 279 ime_inline_autocomplete_view_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 284 ime_inline_autocomplete_view_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| 280 ime_inline_autocomplete_view_->SetAutoColorReadabilityEnabled(false); | 285 ime_inline_autocomplete_view_->SetAutoColorReadabilityEnabled(false); |
| (...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1501 int LocationBarView::GetInternalHeight(bool use_preferred_size) { | 1506 int LocationBarView::GetInternalHeight(bool use_preferred_size) { |
| 1502 int total_height = | 1507 int total_height = |
| 1503 use_preferred_size ? GetPreferredSize().height() : height(); | 1508 use_preferred_size ? GetPreferredSize().height() : height(); |
| 1504 return std::max(total_height - (vertical_edge_thickness() * 2), 0); | 1509 return std::max(total_height - (vertical_edge_thickness() * 2), 0); |
| 1505 } | 1510 } |
| 1506 | 1511 |
| 1507 bool LocationBarView::HasValidSuggestText() const { | 1512 bool LocationBarView::HasValidSuggestText() const { |
| 1508 return suggested_text_view_->visible() && | 1513 return suggested_text_view_->visible() && |
| 1509 !suggested_text_view_->size().IsEmpty(); | 1514 !suggested_text_view_->size().IsEmpty(); |
| 1510 } | 1515 } |
| OLD | NEW |