| 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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 namespace { | 106 namespace { |
| 107 | 107 |
| 108 const gfx::Tween::Type kShowTweenType = gfx::Tween::LINEAR_OUT_SLOW_IN; | 108 const gfx::Tween::Type kShowTweenType = gfx::Tween::LINEAR_OUT_SLOW_IN; |
| 109 const gfx::Tween::Type kHideTweenType = gfx::Tween::FAST_OUT_LINEAR_IN; | 109 const gfx::Tween::Type kHideTweenType = gfx::Tween::FAST_OUT_LINEAR_IN; |
| 110 | 110 |
| 111 // The search button images are made to look as if they overlay the normal edge | 111 // The search button images are made to look as if they overlay the normal edge |
| 112 // images, but to align things, the search button needs to be inset horizontally | 112 // images, but to align things, the search button needs to be inset horizontally |
| 113 // by 1 px. | 113 // by 1 px. |
| 114 const int kSearchButtonInset = 1; | 114 const int kSearchButtonInset = 1; |
| 115 | 115 |
| 116 // Given a containing |height| and a |base_font_list|, shrinks the font size | |
| 117 // until the font list will fit within |height| while having its cap height | |
| 118 // vertically centered. Returns the correctly-sized font list. | |
| 119 // | |
| 120 // The expected layout: | |
| 121 // +--------+-----------------------------------------------+------------+ | |
| 122 // | | y offset | space | | |
| 123 // | +--------+-------------------+------------------+ above | | |
| 124 // | | | | internal leading | cap height | | |
| 125 // | box | font | ascent (baseline) +------------------+------------+ | |
| 126 // | height | height | | cap height | | |
| 127 // | | |-------------------+------------------+------------+ | |
| 128 // | | | descent (height - baseline) | space | | |
| 129 // | +--------+--------------------------------------+ below | | |
| 130 // | | space at bottom | cap height | | |
| 131 // +--------+-----------------------------------------------+------------+ | |
| 132 // Goal: | |
| 133 // center of box height == center of cap height | |
| 134 // (i.e. space above cap height == space below cap height) | |
| 135 // Restrictions: | |
| 136 // y offset >= 0 | |
| 137 // space at bottom >= 0 | |
| 138 // (i.e. Entire font must be visible inside the box.) | |
| 139 gfx::FontList GetLargestFontListWithHeightBound( | |
| 140 const gfx::FontList& base_font_list, | |
| 141 int height) { | |
| 142 gfx::FontList font_list = base_font_list; | |
| 143 for (int font_size = font_list.GetFontSize(); font_size > 1; --font_size) { | |
| 144 const int internal_leading = | |
| 145 font_list.GetBaseline() - font_list.GetCapHeight(); | |
| 146 // Some platforms don't support getting the cap height, and simply return | |
| 147 // the entire font ascent from GetCapHeight(). Centering the ascent makes | |
| 148 // the font look too low, so if GetCapHeight() returns the ascent, center | |
| 149 // the entire font height instead. | |
| 150 const int space = | |
| 151 height - ((internal_leading != 0) ? | |
| 152 font_list.GetCapHeight() : font_list.GetHeight()); | |
| 153 const int y_offset = space / 2 - internal_leading; | |
| 154 const int space_at_bottom = height - (y_offset + font_list.GetHeight()); | |
| 155 if ((y_offset >= 0) && (space_at_bottom >= 0)) | |
| 156 break; | |
| 157 font_list = font_list.DeriveWithSizeDelta(-1); | |
| 158 } | |
| 159 return font_list; | |
| 160 } | |
| 161 | |
| 162 int GetEditLeadingInternalSpace() { | 116 int GetEditLeadingInternalSpace() { |
| 163 // The textfield has 1 px of whitespace before the text in the RTL case only. | 117 // The textfield has 1 px of whitespace before the text in the RTL case only. |
| 164 return base::i18n::IsRTL() ? 1 : 0; | 118 return base::i18n::IsRTL() ? 1 : 0; |
| 165 } | 119 } |
| 166 | 120 |
| 167 // Functor for moving BookmarkManagerPrivate page actions to the right via | 121 // Functor for moving BookmarkManagerPrivate page actions to the right via |
| 168 // stable_partition. | 122 // stable_partition. |
| 169 class IsPageActionViewRightAligned { | 123 class IsPageActionViewRightAligned { |
| 170 public: | 124 public: |
| 171 explicit IsPageActionViewRightAligned( | 125 explicit IsPageActionViewRightAligned( |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 ResourceBundle::BaseFont); | 228 ResourceBundle::BaseFont); |
| 275 const int current_font_size = font_list.GetFontSize(); | 229 const int current_font_size = font_list.GetFontSize(); |
| 276 const int desired_font_size = browser_defaults::kOmniboxFontPixelSize; | 230 const int desired_font_size = browser_defaults::kOmniboxFontPixelSize; |
| 277 if (current_font_size != desired_font_size) { | 231 if (current_font_size != desired_font_size) { |
| 278 font_list = | 232 font_list = |
| 279 font_list.DeriveWithSizeDelta(desired_font_size - current_font_size); | 233 font_list.DeriveWithSizeDelta(desired_font_size - current_font_size); |
| 280 } | 234 } |
| 281 // Shrink large fonts to make them fit. | 235 // Shrink large fonts to make them fit. |
| 282 // TODO(pkasting): Stretch the location bar instead in this case. | 236 // TODO(pkasting): Stretch the location bar instead in this case. |
| 283 const int location_height = GetInternalHeight(true); | 237 const int location_height = GetInternalHeight(true); |
| 284 font_list = GetLargestFontListWithHeightBound(font_list, location_height); | 238 font_list = font_list.GetLargestFontListWithHeightBound(location_height); |
| 285 | 239 |
| 286 // Determine the font for use inside the bubbles. The bubble background | 240 // Determine the font for use inside the bubbles. The bubble background |
| 287 // images have 1 px thick edges, which we don't want to overlap. | 241 // images have 1 px thick edges, which we don't want to overlap. |
| 288 const int kBubbleInteriorVerticalPadding = 1; | 242 const int kBubbleInteriorVerticalPadding = 1; |
| 289 const int bubble_vertical_padding = | 243 const int bubble_vertical_padding = |
| 290 (kBubblePadding + kBubbleInteriorVerticalPadding) * 2; | 244 (kBubblePadding + kBubbleInteriorVerticalPadding) * 2; |
| 291 const gfx::FontList bubble_font_list( | 245 const gfx::FontList bubble_font_list( |
| 292 GetLargestFontListWithHeightBound( | 246 font_list.GetLargestFontListWithHeightBound( |
| 293 font_list, location_height - bubble_vertical_padding)); | 247 location_height - bubble_vertical_padding)); |
| 294 | 248 |
| 295 const SkColor background_color = | 249 const SkColor background_color = |
| 296 GetColor(ToolbarModel::NONE, LocationBarView::BACKGROUND); | 250 GetColor(ToolbarModel::NONE, LocationBarView::BACKGROUND); |
| 297 ev_bubble_view_ = new EVBubbleView( | 251 ev_bubble_view_ = new EVBubbleView( |
| 298 bubble_font_list, GetColor(ToolbarModel::EV_SECURE, SECURITY_TEXT), | 252 bubble_font_list, GetColor(ToolbarModel::EV_SECURE, SECURITY_TEXT), |
| 299 background_color, this); | 253 background_color, this); |
| 300 ev_bubble_view_->set_drag_controller(this); | 254 ev_bubble_view_->set_drag_controller(this); |
| 301 AddChildView(ev_bubble_view_); | 255 AddChildView(ev_bubble_view_); |
| 302 | 256 |
| 303 // Initialize the Omnibox view. | 257 // Initialize the Omnibox view. |
| (...skipping 1458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 | 1716 |
| 1763 void LocationBarView::ModelChanged(const SearchModel::State& old_state, | 1717 void LocationBarView::ModelChanged(const SearchModel::State& old_state, |
| 1764 const SearchModel::State& new_state) { | 1718 const SearchModel::State& new_state) { |
| 1765 const bool visible = !GetToolbarModel()->input_in_progress() && | 1719 const bool visible = !GetToolbarModel()->input_in_progress() && |
| 1766 new_state.voice_search_supported; | 1720 new_state.voice_search_supported; |
| 1767 if (mic_search_view_->visible() != visible) { | 1721 if (mic_search_view_->visible() != visible) { |
| 1768 mic_search_view_->SetVisible(visible); | 1722 mic_search_view_->SetVisible(visible); |
| 1769 Layout(); | 1723 Layout(); |
| 1770 } | 1724 } |
| 1771 } | 1725 } |
| OLD | NEW |