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