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

Side by Side Diff: chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.cc

Issue 111723012: Linux Aura: Added --use-system-title-bar flag. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing jamescook nits. Created 7 years 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/frame/opaque_browser_frame_view_layout.h" 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
6 6
7 #include "base/command_line.h"
7 #include "chrome/browser/profiles/profiles_state.h" 8 #include "chrome/browser/profiles/profiles_state.h"
8 #include "chrome/browser/ui/views/avatar_menu_button.h" 9 #include "chrome/browser/ui/views/avatar_menu_button.h"
10 #include "chrome/common/chrome_switches.h"
9 #include "chrome/common/profile_management_switches.h" 11 #include "chrome/common/profile_management_switches.h"
10 #include "ui/gfx/font.h" 12 #include "ui/gfx/font.h"
11 #include "ui/views/controls/button/image_button.h" 13 #include "ui/views/controls/button/image_button.h"
12 #include "ui/views/controls/label.h" 14 #include "ui/views/controls/label.h"
13 15
14 #if defined(OS_WIN) 16 #if defined(OS_WIN)
15 #include "win8/util/win8_util.h" 17 #include "win8/util/win8_util.h"
16 #endif // OS_WIN 18 #endif // OS_WIN
17 19
18 namespace { 20 namespace {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 53
52 // Space between the edge of the avatar and the tabstrip. 54 // Space between the edge of the avatar and the tabstrip.
53 const int kAvatarInnerSpacing = 4; 55 const int kAvatarInnerSpacing = 4;
54 56
55 // Space between the trailing edge of the avatar label and the tabstrip. 57 // Space between the trailing edge of the avatar label and the tabstrip.
56 const int kAvatarLabelInnerSpacing = 10; 58 const int kAvatarLabelInnerSpacing = 10;
57 59
58 // How far the new avatar button is from the closest caption button. 60 // How far the new avatar button is from the closest caption button.
59 const int kNewAvatarButtonOffset = 5; 61 const int kNewAvatarButtonOffset = 5;
60 62
61 // In restored mode, the New Tab button isn't at the same height as the caption 63 // When the title bar is in its normal two row mode, the New Tab button isn't at
James Cook 2013/12/20 22:23:51 nit: You might want to put the word "restored" in
Matt Giuca 2014/01/06 04:28:21 Done.
62 // buttons, but the space will look cluttered if it actually slides under them, 64 // the same height as the caption buttons, but the space will look cluttered if
63 // so we stop it when the gap between the two is down to 5 px. 65 // it actually slides under them, so we stop it when the gap between the two is
64 const int kNewTabCaptionRestoredSpacing = 5; 66 // down to 5 px.
67 const int kNewTabCaptionNormalSpacing = 5;
65 68
66 // In maximized mode, where the New Tab button and the caption buttons are at 69 // When the title bar is condensed to one row (as when maximized), the New Tab
67 // similar vertical coordinates, we need to reserve a larger, 16 px gap to avoid 70 // button and the caption buttons are at similar vertical coordinates, so we
68 // looking too cluttered. 71 // need to reserve a larger, 16 px gap to avoid looking too cluttered.
69 const int kNewTabCaptionMaximizedSpacing = 16; 72 const int kNewTapCaptionCondensedSpacing = 16;
70 73
71 // The top 3 px of the tabstrip is shadow; in maximized mode we push this off 74 // The top 3 px of the tabstrip is shadow; in maximized mode we push this off
72 // the top of the screen so the tabs appear flush against the screen edge. 75 // the top of the screen so the tabs appear flush against the screen edge.
73 const int kTabstripTopShadowThickness = 3; 76 const int kTabstripTopShadowThickness = 3;
74 77
75 // How far to indent the tabstrip from the left side of the screen when there 78 // How far to indent the tabstrip from the left side of the screen when there
76 // is no avatar icon. 79 // is no avatar icon.
77 const int kTabStripIndent = -6; 80 const int kTabStripIndent = -6;
78 81
79 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 82 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 139
137 gfx::Rect OpaqueBrowserFrameViewLayout::GetBoundsForTabStrip( 140 gfx::Rect OpaqueBrowserFrameViewLayout::GetBoundsForTabStrip(
138 const gfx::Size& tabstrip_preferred_size, 141 const gfx::Size& tabstrip_preferred_size,
139 int available_width) const { 142 int available_width) const {
140 available_width -= trailing_button_start_; 143 available_width -= trailing_button_start_;
141 available_width -= leading_button_start_; 144 available_width -= leading_button_start_;
142 145
143 if (delegate_->GetAdditionalReservedSpaceInTabStrip()) 146 if (delegate_->GetAdditionalReservedSpaceInTabStrip())
144 available_width -= delegate_->GetAdditionalReservedSpaceInTabStrip(); 147 available_width -= delegate_->GetAdditionalReservedSpaceInTabStrip();
145 148
146 const int caption_spacing = delegate_->IsMaximized() ? 149 const int caption_spacing = IsTitleBarCondensed() ?
147 kNewTabCaptionMaximizedSpacing : kNewTabCaptionRestoredSpacing; 150 kNewTapCaptionCondensedSpacing : kNewTabCaptionNormalSpacing;
148 const int tabstrip_width = available_width - caption_spacing; 151 const int tabstrip_width = available_width - caption_spacing;
149 gfx::Rect bounds(leading_button_start_, GetTabStripInsetsTop(false), 152 gfx::Rect bounds(leading_button_start_, GetTabStripInsetsTop(false),
150 std::max(0, tabstrip_width), 153 std::max(0, tabstrip_width),
151 tabstrip_preferred_size.height()); 154 tabstrip_preferred_size.height());
152 155
153 int leading_tabstrip_indent = kTabStripIndent; 156 int leading_tabstrip_indent = kTabStripIndent;
154 if (delegate_->ShouldShowAvatar() && !ShouldAvatarBeOnRight()) { 157 if (delegate_->ShouldShowAvatar() && !ShouldAvatarBeOnRight()) {
155 if (avatar_label_ && avatar_label_->bounds().width()) 158 if (avatar_label_ && avatar_label_->bounds().width())
156 leading_tabstrip_indent += kAvatarLabelInnerSpacing; 159 leading_tabstrip_indent += kAvatarLabelInnerSpacing;
157 else 160 else
(...skipping 11 matching lines...) Expand all
169 NonClientTopBorderHeight(false) + border_thickness); 172 NonClientTopBorderHeight(false) + border_thickness);
170 173
171 // Ensure that we can, at minimum, hold our window controls and avatar icon. 174 // Ensure that we can, at minimum, hold our window controls and avatar icon.
172 min_size.set_width(std::max(min_size.width(), minimum_size_for_buttons_)); 175 min_size.set_width(std::max(min_size.width(), minimum_size_for_buttons_));
173 176
174 // Ensure that the minimum width is enough to hold a minimum width tab strip 177 // Ensure that the minimum width is enough to hold a minimum width tab strip
175 // at its usual insets. 178 // at its usual insets.
176 if (delegate_->IsTabStripVisible()) { 179 if (delegate_->IsTabStripVisible()) {
177 gfx::Size preferred_size = delegate_->GetTabstripPreferredSize(); 180 gfx::Size preferred_size = delegate_->GetTabstripPreferredSize();
178 const int min_tabstrip_width = preferred_size.width(); 181 const int min_tabstrip_width = preferred_size.width();
179 const int caption_spacing = delegate_->IsMaximized() ? 182 const int caption_spacing = IsTitleBarCondensed() ?
180 kNewTabCaptionMaximizedSpacing : kNewTabCaptionRestoredSpacing; 183 kNewTapCaptionCondensedSpacing : kNewTabCaptionNormalSpacing;
181 min_size.Enlarge(min_tabstrip_width + caption_spacing, 0); 184 min_size.Enlarge(min_tabstrip_width + caption_spacing, 0);
182 } 185 }
183 186
184 return min_size; 187 return min_size;
185 } 188 }
186 189
187 gfx::Rect OpaqueBrowserFrameViewLayout::GetWindowBoundsForClientBounds( 190 gfx::Rect OpaqueBrowserFrameViewLayout::GetWindowBoundsForClientBounds(
188 const gfx::Rect& client_bounds) const { 191 const gfx::Rect& client_bounds) const {
189 int top_height = NonClientTopBorderHeight(false); 192 int top_height = NonClientTopBorderHeight(false);
190 int border_thickness = NonClientBorderThickness(); 193 int border_thickness = NonClientBorderThickness();
191 return gfx::Rect(std::max(0, client_bounds.x() - border_thickness), 194 return gfx::Rect(std::max(0, client_bounds.x() - border_thickness),
192 std::max(0, client_bounds.y() - top_height), 195 std::max(0, client_bounds.y() - top_height),
193 client_bounds.width() + (2 * border_thickness), 196 client_bounds.width() + (2 * border_thickness),
194 client_bounds.height() + top_height + border_thickness); 197 client_bounds.height() + top_height + border_thickness);
195 } 198 }
196 199
197 int OpaqueBrowserFrameViewLayout::FrameBorderThickness(bool restored) const { 200 int OpaqueBrowserFrameViewLayout::FrameBorderThickness(bool restored) const {
198 return (!restored && (delegate_->IsMaximized() || 201 return (!restored && (IsTitleBarCondensed() ||
199 delegate_->IsFullscreen())) ? 202 delegate_->IsFullscreen())) ?
200 0 : kFrameBorderThickness; 203 0 : kFrameBorderThickness;
201 } 204 }
202 205
203 int OpaqueBrowserFrameViewLayout::NonClientBorderThickness() const { 206 int OpaqueBrowserFrameViewLayout::NonClientBorderThickness() const {
204 // When we fill the screen, we don't show a client edge. 207 // When we fill the screen, we don't show a client edge.
205 return FrameBorderThickness(false) + 208 return FrameBorderThickness(false) +
206 ((delegate_->IsMaximized() || delegate_->IsFullscreen()) ? 209 ((IsTitleBarCondensed() || delegate_->IsFullscreen()) ?
207 0 : views::NonClientFrameView::kClientEdgeThickness); 210 0 : views::NonClientFrameView::kClientEdgeThickness);
208 } 211 }
209 212
210 int OpaqueBrowserFrameViewLayout::NonClientTopBorderHeight( 213 int OpaqueBrowserFrameViewLayout::NonClientTopBorderHeight(
211 bool restored) const { 214 bool restored) const {
212 if (delegate_->ShouldShowWindowTitle()) { 215 if (delegate_->ShouldShowWindowTitle()) {
213 return std::max(FrameBorderThickness(restored) + delegate_->GetIconSize(), 216 return std::max(FrameBorderThickness(restored) + delegate_->GetIconSize(),
214 CaptionButtonY(restored) + kCaptionButtonHeightWithPadding) + 217 CaptionButtonY(restored) + kCaptionButtonHeightWithPadding) +
215 TitlebarBottomThickness(restored); 218 TitlebarBottomThickness(restored);
216 } 219 }
217 220
218 return FrameBorderThickness(restored) - 221 int thickness = FrameBorderThickness(restored);
219 ((delegate_->IsTabStripVisible() && 222 if (!restored && delegate_->IsTabStripVisible() &&
James Cook 2013/12/20 22:23:51 better, thanks
220 !restored && !delegate_->ShouldLeaveOffsetNearTopBorder()) 223 (!delegate_->ShouldLeaveOffsetNearTopBorder() || IsTitleBarCondensed())) {
221 ? kTabstripTopShadowThickness : 0); 224 thickness -= kTabstripTopShadowThickness;
225 }
226 return thickness;
222 } 227 }
223 228
224 int OpaqueBrowserFrameViewLayout::GetTabStripInsetsTop(bool restored) const { 229 int OpaqueBrowserFrameViewLayout::GetTabStripInsetsTop(bool restored) const {
225 return NonClientTopBorderHeight(restored) + ((!restored && 230 return NonClientTopBorderHeight(restored) + ((!restored &&
226 (!delegate_->ShouldLeaveOffsetNearTopBorder() || 231 (!delegate_->ShouldLeaveOffsetNearTopBorder() ||
232 IsTitleBarCondensed() ||
227 delegate_->IsFullscreen())) ? 233 delegate_->IsFullscreen())) ?
228 0 : kNonClientRestoredExtraThickness); 234 0 : kNonClientRestoredExtraThickness);
229 } 235 }
230 236
231 int OpaqueBrowserFrameViewLayout::TitlebarBottomThickness(bool restored) const { 237 int OpaqueBrowserFrameViewLayout::TitlebarBottomThickness(bool restored) const {
232 return kTitlebarTopAndBottomEdgeThickness + 238 return kTitlebarTopAndBottomEdgeThickness +
233 ((!restored && delegate_->IsMaximized()) ? 0 : 239 ((!restored && IsTitleBarCondensed()) ? 0 :
234 views::NonClientFrameView::kClientEdgeThickness); 240 views::NonClientFrameView::kClientEdgeThickness);
235 } 241 }
236 242
237 int OpaqueBrowserFrameViewLayout::CaptionButtonY(bool restored) const { 243 int OpaqueBrowserFrameViewLayout::CaptionButtonY(bool restored) const {
238 // Maximized buttons start at window top, since the window has no border. This 244 // Maximized buttons start at window top, since the window has no border. This
239 // offset is for the image (the actual clickable bounds extend all the way to 245 // offset is for the image (the actual clickable bounds extend all the way to
240 // the top to take Fitts' Law into account). 246 // the top to take Fitts' Law into account).
241 return ((!restored && delegate_->IsMaximized()) ? 247 return ((!restored && IsTitleBarCondensed()) ?
242 FrameBorderThickness(false) : 248 FrameBorderThickness(false) :
243 views::NonClientFrameView::kFrameShadowThickness) + extra_caption_y_; 249 views::NonClientFrameView::kFrameShadowThickness) + extra_caption_y_;
244 } 250 }
245 251
246 gfx::Rect OpaqueBrowserFrameViewLayout::IconBounds() const { 252 gfx::Rect OpaqueBrowserFrameViewLayout::IconBounds() const {
247 return window_icon_bounds_; 253 return window_icon_bounds_;
248 } 254 }
249 255
250 gfx::Rect OpaqueBrowserFrameViewLayout::CalculateClientAreaBounds( 256 gfx::Rect OpaqueBrowserFrameViewLayout::CalculateClientAreaBounds(
251 int width, 257 int width,
252 int height) const { 258 int height) const {
253 int top_height = NonClientTopBorderHeight(false); 259 int top_height = NonClientTopBorderHeight(false);
254 int border_thickness = NonClientBorderThickness(); 260 int border_thickness = NonClientBorderThickness();
255 return gfx::Rect(border_thickness, top_height, 261 return gfx::Rect(border_thickness, top_height,
256 std::max(0, width - (2 * border_thickness)), 262 std::max(0, width - (2 * border_thickness)),
257 std::max(0, height - top_height - border_thickness)); 263 std::max(0, height - top_height - border_thickness));
258 } 264 }
259 265
266 bool OpaqueBrowserFrameViewLayout::IsTitleBarCondensed() const {
267 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
268 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUseSystemTitleBar))
269 return true;
270 #endif
271
272 return delegate_->IsMaximized();
273 }
274
260 /////////////////////////////////////////////////////////////////////////////// 275 ///////////////////////////////////////////////////////////////////////////////
261 // OpaqueBrowserFrameView, private: 276 // OpaqueBrowserFrameView, private:
262 277
263 bool OpaqueBrowserFrameViewLayout::ShouldAvatarBeOnRight() const { 278 bool OpaqueBrowserFrameViewLayout::ShouldAvatarBeOnRight() const {
264 // The avatar should be shown either on the end of the left or the beginning 279 // The avatar should be shown either on the end of the left or the beginning
265 // of the right depending on which side has fewer buttons. 280 // of the right depending on which side has fewer buttons.
266 return trailing_buttons_.size() < leading_buttons_.size(); 281 return trailing_buttons_.size() < leading_buttons_.size();
267 } 282 }
268 283
269 void OpaqueBrowserFrameViewLayout::LayoutWindowControls(views::View* host) { 284 void OpaqueBrowserFrameViewLayout::LayoutWindowControls(views::View* host) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 use_hidden_icon_location = false; 329 use_hidden_icon_location = false;
315 330
316 // Our frame border has a different "3D look" than Windows'. Theirs has 331 // Our frame border has a different "3D look" than Windows'. Theirs has
317 // a more complex gradient on the top that they push their icon/title 332 // a more complex gradient on the top that they push their icon/title
318 // below; then the maximized window cuts this off and the icon/title are 333 // below; then the maximized window cuts this off and the icon/title are
319 // centered in the remaining space. Because the apparent shape of our 334 // centered in the remaining space. Because the apparent shape of our
320 // border is simpler, using the same positioning makes things look 335 // border is simpler, using the same positioning makes things look
321 // slightly uncentered with restored windows, so when the window is 336 // slightly uncentered with restored windows, so when the window is
322 // restored, instead of calculating the remaining space from below the 337 // restored, instead of calculating the remaining space from below the
323 // frame border, we calculate from below the 3D edge. 338 // frame border, we calculate from below the 3D edge.
324 int unavailable_px_at_top = delegate_->IsMaximized() ? 339 int unavailable_px_at_top = IsTitleBarCondensed() ?
325 frame_thickness : kTitlebarTopAndBottomEdgeThickness; 340 frame_thickness : kTitlebarTopAndBottomEdgeThickness;
326 // When the icon is shorter than the minimum space we reserve for the 341 // When the icon is shorter than the minimum space we reserve for the
327 // caption button, we vertically center it. We want to bias rounding to 342 // caption button, we vertically center it. We want to bias rounding to
328 // put extra space above the icon, since the 3D edge (+ client edge, for 343 // put extra space above the icon, since the 3D edge (+ client edge, for
329 // restored windows) below looks (to the eye) more like additional space 344 // restored windows) below looks (to the eye) more like additional space
330 // than does the 3D edge (or nothing at all, for maximized windows) 345 // than does the 3D edge (or nothing at all, for maximized windows)
331 // above; hence the +1. 346 // above; hence the +1.
332 int y = unavailable_px_at_top + (NonClientTopBorderHeight(false) - 347 int y = unavailable_px_at_top + (NonClientTopBorderHeight(false) -
333 unavailable_px_at_top - size - 348 unavailable_px_at_top - size -
334 TitlebarBottomThickness(false) + 1) / 2; 349 TitlebarBottomThickness(false) + 1) / 2;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 gfx::ImageSkia incognito_icon = delegate_->GetOTRAvatarIcon(); 415 gfx::ImageSkia incognito_icon = delegate_->GetOTRAvatarIcon();
401 416
402 bool avatar_on_right = ShouldAvatarBeOnRight(); 417 bool avatar_on_right = ShouldAvatarBeOnRight();
403 int avatar_bottom = GetTabStripInsetsTop(false) + 418 int avatar_bottom = GetTabStripInsetsTop(false) +
404 delegate_->GetTabStripHeight() - kAvatarBottomSpacing; 419 delegate_->GetTabStripHeight() - kAvatarBottomSpacing;
405 int avatar_restored_y = avatar_bottom - incognito_icon.height(); 420 int avatar_restored_y = avatar_bottom - incognito_icon.height();
406 int avatar_x = avatar_on_right ? 421 int avatar_x = avatar_on_right ?
407 host->width() - trailing_button_start_ - kAvatarOuterSpacing - 422 host->width() - trailing_button_start_ - kAvatarOuterSpacing -
408 incognito_icon.width() : 423 incognito_icon.width() :
409 leading_button_start_ + kAvatarOuterSpacing; 424 leading_button_start_ + kAvatarOuterSpacing;
410 int avatar_y = delegate_->IsMaximized() ? 425 int avatar_y = IsTitleBarCondensed() ?
411 (NonClientTopBorderHeight(false) + kTabstripTopShadowThickness) : 426 (NonClientTopBorderHeight(false) + kTabstripTopShadowThickness) :
412 avatar_restored_y; 427 avatar_restored_y;
413 avatar_bounds_.SetRect( 428 avatar_bounds_.SetRect(
414 avatar_x, 429 avatar_x,
415 avatar_y, 430 avatar_y,
416 incognito_icon.width(), 431 incognito_icon.width(),
417 delegate_->ShouldShowAvatar() ? (avatar_bottom - avatar_y) : 0); 432 delegate_->ShouldShowAvatar() ? (avatar_bottom - avatar_y) : 0);
418 if (avatar_button_) { 433 if (avatar_button_) {
419 avatar_button_->set_button_on_right(avatar_on_right); 434 avatar_button_->set_button_on_right(avatar_on_right);
420 avatar_button_->SetBoundsRect(avatar_bounds_); 435 avatar_button_->SetBoundsRect(avatar_bounds_);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 521
507 button->SetImageAlignment( 522 button->SetImageAlignment(
508 (alignment == ALIGN_LEADING) ? 523 (alignment == ALIGN_LEADING) ?
509 views::ImageButton::ALIGN_RIGHT : views::ImageButton::ALIGN_LEFT, 524 views::ImageButton::ALIGN_RIGHT : views::ImageButton::ALIGN_LEFT,
510 views::ImageButton::ALIGN_BOTTOM); 525 views::ImageButton::ALIGN_BOTTOM);
511 526
512 // There should always be the same number of non-shadow pixels visible to the 527 // There should always be the same number of non-shadow pixels visible to the
513 // side of the caption buttons. In maximized mode we extend buttons to the 528 // side of the caption buttons. In maximized mode we extend buttons to the
514 // screen top and the rightmost button to the screen right (or leftmost button 529 // screen top and the rightmost button to the screen right (or leftmost button
515 // to the screen left, for left-aligned buttons) to obey Fitts' Law. 530 // to the screen left, for left-aligned buttons) to obey Fitts' Law.
516 bool is_maximized = delegate_->IsMaximized(); 531 bool title_bar_condensed = IsTitleBarCondensed();
517 532
518 // When we are the first button on the leading side and are the close 533 // When we are the first button on the leading side and are the close
519 // button, we must flip ourselves, because the close button assets have 534 // button, we must flip ourselves, because the close button assets have
520 // a little notch to fit in the rounded frame. 535 // a little notch to fit in the rounded frame.
521 button->SetDrawImageMirrored(alignment == ALIGN_LEADING && 536 button->SetDrawImageMirrored(alignment == ALIGN_LEADING &&
522 !has_leading_buttons_ && 537 !has_leading_buttons_ &&
523 button == close_button_); 538 button == close_button_);
524 // If the window is maximized, align the buttons to its upper edge. 539 // If the window is maximized, align the buttons to its upper edge.
525 int extra_height = is_maximized ? extra_caption_y_ : 0; 540 int extra_height = title_bar_condensed ? extra_caption_y_ : 0;
526 541
527 switch (alignment) { 542 switch (alignment) {
528 case ALIGN_LEADING: { 543 case ALIGN_LEADING: {
529 if (has_leading_buttons_) 544 if (has_leading_buttons_)
530 leading_button_start_ += window_caption_spacing_; 545 leading_button_start_ += window_caption_spacing_;
531 546
532 // If we're the first button on the left and maximized, add width to the 547 // If we're the first button on the left and maximized, add width to the
533 // right hand side of the screen. 548 // right hand side of the screen.
534 int extra_width = (is_maximized && !has_leading_buttons_) ? 549 int extra_width = (title_bar_condensed && !has_leading_buttons_) ?
535 (kFrameBorderThickness - 550 (kFrameBorderThickness -
536 views::NonClientFrameView::kFrameShadowThickness) : 0; 551 views::NonClientFrameView::kFrameShadowThickness) : 0;
537 552
538 button->SetBounds( 553 button->SetBounds(
539 leading_button_start_, 554 leading_button_start_,
540 caption_y - extra_height, 555 caption_y - extra_height,
541 button_size.width() + extra_width, 556 button_size.width() + extra_width,
542 button_size.height() + extra_height); 557 button_size.height() + extra_height);
543 558
544 leading_button_start_ += extra_width + button_size.width(); 559 leading_button_start_ += extra_width + button_size.width();
545 minimum_size_for_buttons_ += extra_width + button_size.width(); 560 minimum_size_for_buttons_ += extra_width + button_size.width();
546 has_leading_buttons_ = true; 561 has_leading_buttons_ = true;
547 break; 562 break;
548 } 563 }
549 case ALIGN_TRAILING: { 564 case ALIGN_TRAILING: {
550 if (has_trailing_buttons_) 565 if (has_trailing_buttons_)
551 trailing_button_start_ += window_caption_spacing_; 566 trailing_button_start_ += window_caption_spacing_;
552 567
553 // If we're the first button on the right and maximized, add width to the 568 // If we're the first button on the right and maximized, add width to the
554 // right hand side of the screen. 569 // right hand side of the screen.
555 int extra_width = (is_maximized && !has_trailing_buttons_) ? 570 int extra_width = (title_bar_condensed && !has_trailing_buttons_) ?
556 (kFrameBorderThickness - 571 (kFrameBorderThickness -
557 views::NonClientFrameView::kFrameShadowThickness) : 0; 572 views::NonClientFrameView::kFrameShadowThickness) : 0;
558 573
559 button->SetBounds( 574 button->SetBounds(
560 host->width() - trailing_button_start_ - extra_width - 575 host->width() - trailing_button_start_ - extra_width -
561 button_size.width(), 576 button_size.width(),
562 caption_y - extra_height, 577 caption_y - extra_height,
563 button_size.width() + extra_width, 578 button_size.width() + extra_width,
564 button_size.height() + extra_height); 579 button_size.height() + extra_height);
565 580
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 688
674 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host, 689 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host,
675 views::View* view) { 690 views::View* view) {
676 SetView(view->id(), view); 691 SetView(view->id(), view);
677 } 692 }
678 693
679 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host, 694 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host,
680 views::View* view) { 695 views::View* view) {
681 SetView(view->id(), NULL); 696 SetView(view->id(), NULL);
682 } 697 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698