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

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

Issue 1412833008: Draw the same portion of the frame background behind the tabstrip in maximized (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@match_frame_alignment
Patch Set: Add comment Created 5 years, 1 month 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
OLDNEW
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/frame/glass_browser_frame_view.h" 5 #include "chrome/browser/ui/views/frame/glass_browser_frame_view.h"
6 6
7 #include "base/prefs/pref_service.h" 7 #include "base/prefs/pref_service.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "base/win/windows_version.h" 9 #include "base/win/windows_version.h"
10 #include "chrome/app/chrome_command_ids.h" 10 #include "chrome/app/chrome_command_ids.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 gfx::Rect GlassBrowserFrameView::GetBoundsForTabStrip( 98 gfx::Rect GlassBrowserFrameView::GetBoundsForTabStrip(
99 views::View* tabstrip) const { 99 views::View* tabstrip) const {
100 // In maximized RTL windows, don't let the tabstrip overlap the caption area, 100 // In maximized RTL windows, don't let the tabstrip overlap the caption area,
101 // or the alpha-blending it does will make things like the new avatar button 101 // or the alpha-blending it does will make things like the new avatar button
102 // look glitchy. 102 // look glitchy.
103 const int offset = 103 const int offset =
104 (ui::MaterialDesignController::IsModeMaterial() || !base::i18n::IsRTL() || 104 (ui::MaterialDesignController::IsModeMaterial() || !base::i18n::IsRTL() ||
105 !frame()->IsMaximized()) ? 105 !frame()->IsMaximized()) ?
106 GetLayoutInsets(AVATAR_ICON).right() : 0; 106 GetLayoutInsets(AVATAR_ICON).right() : 0;
107 const int x = incognito_bounds_.right() + offset; 107 const int x = incognito_bounds_.right() + offset;
108 int end_x = width() - NonClientBorderThickness(); 108 int end_x = width() - NonClientBorderThickness(false);
109 if (!base::i18n::IsRTL()) { 109 if (!base::i18n::IsRTL()) {
110 end_x = std::min(frame()->GetMinimizeButtonOffset(), end_x) - 110 end_x = std::min(frame()->GetMinimizeButtonOffset(), end_x) -
111 (frame()->IsMaximized() ? 111 (frame()->IsMaximized() ?
112 kNewTabCaptionMaximizedSpacing : kNewTabCaptionRestoredSpacing); 112 kNewTabCaptionMaximizedSpacing : kNewTabCaptionRestoredSpacing);
113 113
114 // The new avatar button is optionally displayed to the left of the 114 // The new avatar button is optionally displayed to the left of the
115 // minimize button. 115 // minimize button.
116 if (new_avatar_button()) { 116 if (new_avatar_button()) {
117 const int old_end_x = end_x; 117 const int old_end_x = end_x;
118 end_x -= new_avatar_button()->width() + kNewAvatarButtonOffset; 118 end_x -= new_avatar_button()->width() + kNewAvatarButtonOffset;
119 119
120 // In non-maximized mode, allow the new tab button to slide completely 120 // In non-maximized mode, allow the new tab button to slide completely
121 // under the avatar button. 121 // under the avatar button.
122 if (!frame()->IsMaximized()) { 122 if (!frame()->IsMaximized()) {
123 end_x = std::min(end_x + GetLayoutConstant(NEW_TAB_BUTTON_WIDTH) + 123 end_x = std::min(end_x + GetLayoutConstant(NEW_TAB_BUTTON_WIDTH) +
124 kNewTabCaptionRestoredSpacing, 124 kNewTabCaptionRestoredSpacing,
125 old_end_x); 125 old_end_x);
126 } 126 }
127 } 127 }
128 } 128 }
129 return gfx::Rect(x, NonClientTopBorderHeight(), std::max(0, end_x - x), 129 return gfx::Rect(x, NonClientTopBorderHeight(false), std::max(0, end_x - x),
130 tabstrip->GetPreferredSize().height()); 130 tabstrip->GetPreferredSize().height());
131 } 131 }
132 132
133 int GlassBrowserFrameView::GetTopInset() const { 133 int GlassBrowserFrameView::GetTopInset(bool restored) const {
134 return GetClientAreaInsets().top(); 134 return GetClientAreaInsets(restored).top();
135 } 135 }
136 136
137 int GlassBrowserFrameView::GetThemeBackgroundXInset() const { 137 int GlassBrowserFrameView::GetThemeBackgroundXInset() const {
138 return 0; 138 return 0;
139 } 139 }
140 140
141 void GlassBrowserFrameView::UpdateThrobber(bool running) { 141 void GlassBrowserFrameView::UpdateThrobber(bool running) {
142 if (throbber_running_) { 142 if (throbber_running_) {
143 if (running) { 143 if (running) {
144 DisplayNextThrobberFrame(); 144 DisplayNextThrobberFrame();
145 } else { 145 } else {
146 StopThrobber(); 146 StopThrobber();
147 } 147 }
148 } else if (running) { 148 } else if (running) {
149 StartThrobber(); 149 StartThrobber();
150 } 150 }
151 } 151 }
152 152
153 gfx::Size GlassBrowserFrameView::GetMinimumSize() const { 153 gfx::Size GlassBrowserFrameView::GetMinimumSize() const {
154 gfx::Size min_size(browser_view()->GetMinimumSize()); 154 gfx::Size min_size(browser_view()->GetMinimumSize());
155 155
156 // Account for the client area insets. 156 // Account for the client area insets.
157 gfx::Insets insets = GetClientAreaInsets(); 157 gfx::Insets insets = GetClientAreaInsets(false);
158 min_size.Enlarge(insets.width(), insets.height()); 158 min_size.Enlarge(insets.width(), insets.height());
159 // Client area insets do not include the shadow thickness. 159 // Client area insets do not include the shadow thickness.
160 min_size.Enlarge(2 * kContentEdgeShadowThickness, 0); 160 min_size.Enlarge(2 * kContentEdgeShadowThickness, 0);
161 161
162 // Ensure that the minimum width is enough to hold a tab strip with minimum 162 // Ensure that the minimum width is enough to hold a tab strip with minimum
163 // width at its usual insets. 163 // width at its usual insets.
164 if (browser_view()->IsTabStripVisible()) { 164 if (browser_view()->IsTabStripVisible()) {
165 TabStrip* tabstrip = browser_view()->tabstrip(); 165 TabStrip* tabstrip = browser_view()->tabstrip();
166 int min_tabstrip_width = tabstrip->GetMinimumSize().width(); 166 int min_tabstrip_width = tabstrip->GetMinimumSize().width();
167 int min_tabstrip_area_width = 167 int min_tabstrip_area_width =
(...skipping 18 matching lines...) Expand all
186 // If we don't have a tabstrip, we're either a popup or an app window, in 186 // If we don't have a tabstrip, we're either a popup or an app window, in
187 // which case we have a standard size non-client area and can just use 187 // which case we have a standard size non-client area and can just use
188 // AdjustWindowRectEx to obtain it. We check for a non-null window handle in 188 // AdjustWindowRectEx to obtain it. We check for a non-null window handle in
189 // case this gets called before the window is actually created. 189 // case this gets called before the window is actually created.
190 RECT rect = client_bounds.ToRECT(); 190 RECT rect = client_bounds.ToRECT();
191 AdjustWindowRectEx(&rect, GetWindowLong(hwnd, GWL_STYLE), FALSE, 191 AdjustWindowRectEx(&rect, GetWindowLong(hwnd, GWL_STYLE), FALSE,
192 GetWindowLong(hwnd, GWL_EXSTYLE)); 192 GetWindowLong(hwnd, GWL_EXSTYLE));
193 return gfx::Rect(rect); 193 return gfx::Rect(rect);
194 } 194 }
195 195
196 gfx::Insets insets = GetClientAreaInsets(); 196 gfx::Insets insets = GetClientAreaInsets(false);
197 return gfx::Rect(std::max(0, client_bounds.x() - insets.left()), 197 return gfx::Rect(std::max(0, client_bounds.x() - insets.left()),
198 std::max(0, client_bounds.y() - insets.top()), 198 std::max(0, client_bounds.y() - insets.top()),
199 client_bounds.width() + insets.width(), 199 client_bounds.width() + insets.width(),
200 client_bounds.height() + insets.height()); 200 client_bounds.height() + insets.height());
201 } 201 }
202 202
203 int GlassBrowserFrameView::NonClientHitTest(const gfx::Point& point) { 203 int GlassBrowserFrameView::NonClientHitTest(const gfx::Point& point) {
204 // If the browser isn't in normal mode, we haven't customized the frame, so 204 // If the browser isn't in normal mode, we haven't customized the frame, so
205 // Windows can figure this out. If the point isn't within our bounds, then 205 // Windows can figure this out. If the point isn't within our bounds, then
206 // it's in the native portion of the frame, so again Windows can figure it 206 // it's in the native portion of the frame, so again Windows can figure it
207 // out. 207 // out.
208 if (!browser_view()->IsBrowserTypeNormal() || !bounds().Contains(point)) 208 if (!browser_view()->IsBrowserTypeNormal() || !bounds().Contains(point))
209 return HTNOWHERE; 209 return HTNOWHERE;
210 210
211 // See if the point is within the incognito icon or the new avatar menu. 211 // See if the point is within the incognito icon or the new avatar menu.
212 if ((avatar_button() && 212 if ((avatar_button() &&
213 avatar_button()->GetMirroredBounds().Contains(point)) || 213 avatar_button()->GetMirroredBounds().Contains(point)) ||
214 (new_avatar_button() && 214 (new_avatar_button() &&
215 new_avatar_button()->GetMirroredBounds().Contains(point))) 215 new_avatar_button()->GetMirroredBounds().Contains(point)))
216 return HTCLIENT; 216 return HTCLIENT;
217 217
218 int frame_component = frame()->client_view()->NonClientHitTest(point); 218 int frame_component = frame()->client_view()->NonClientHitTest(point);
219 219
220 // See if we're in the sysmenu region. We still have to check the tabstrip 220 // See if we're in the sysmenu region. We still have to check the tabstrip
221 // first so that clicks in a tab don't get treated as sysmenu clicks. 221 // first so that clicks in a tab don't get treated as sysmenu clicks.
222 int nonclient_border_thickness = NonClientBorderThickness(); 222 int nonclient_border_thickness = NonClientBorderThickness(false);
223 if (gfx::Rect(nonclient_border_thickness, 223 if (gfx::Rect(nonclient_border_thickness,
224 gfx::win::GetSystemMetricsInDIP(SM_CYSIZEFRAME), 224 gfx::win::GetSystemMetricsInDIP(SM_CYSIZEFRAME),
225 gfx::win::GetSystemMetricsInDIP(SM_CXSMICON), 225 gfx::win::GetSystemMetricsInDIP(SM_CXSMICON),
226 gfx::win::GetSystemMetricsInDIP(SM_CYSMICON)).Contains(point)) 226 gfx::win::GetSystemMetricsInDIP(SM_CYSMICON)).Contains(point))
227 return (frame_component == HTCLIENT) ? HTCLIENT : HTSYSMENU; 227 return (frame_component == HTCLIENT) ? HTCLIENT : HTSYSMENU;
228 228
229 if (frame_component != HTNOWHERE) 229 if (frame_component != HTNOWHERE)
230 return frame_component; 230 return frame_component;
231 231
232 int frame_top_border_height = FrameTopBorderHeight(); 232 int frame_top_border_height = FrameTopBorderHeight(false);
233 // We want the resize corner behavior to apply to the kResizeCornerWidth 233 // We want the resize corner behavior to apply to the kResizeCornerWidth
234 // pixels at each end of the top and bottom edges. Because |point|'s x 234 // pixels at each end of the top and bottom edges. Because |point|'s x
235 // coordinate is based on the DWM-inset portion of the window (so, it's 0 at 235 // coordinate is based on the DWM-inset portion of the window (so, it's 0 at
236 // the first pixel inside the left DWM margin), we need to subtract the DWM 236 // the first pixel inside the left DWM margin), we need to subtract the DWM
237 // margin thickness, which we calculate as the total frame border thickness 237 // margin thickness, which we calculate as the total frame border thickness
238 // minus the nonclient border thickness. 238 // minus the nonclient border thickness.
239 const int dwm_margin = FrameBorderThickness() - nonclient_border_thickness; 239 const int dwm_margin = FrameBorderThickness() - nonclient_border_thickness;
240 int window_component = GetHTComponentForFrame(point, frame_top_border_height, 240 int window_component = GetHTComponentForFrame(point, frame_top_border_height,
241 nonclient_border_thickness, frame_top_border_height, 241 nonclient_border_thickness, frame_top_border_height,
242 kResizeCornerWidth - dwm_margin, frame()->widget_delegate()->CanResize()); 242 kResizeCornerWidth - dwm_margin, frame()->widget_delegate()->CanResize());
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 new_avatar_button()->GetMirroredBounds().Intersects(rect); 300 new_avatar_button()->GetMirroredBounds().Intersects(rect);
301 return hit_incognito_icon || hit_new_avatar_button || 301 return hit_incognito_icon || hit_new_avatar_button ||
302 !frame()->client_view()->bounds().Intersects(rect); 302 !frame()->client_view()->bounds().Intersects(rect);
303 } 303 }
304 304
305 int GlassBrowserFrameView::FrameBorderThickness() const { 305 int GlassBrowserFrameView::FrameBorderThickness() const {
306 return (frame()->IsMaximized() || frame()->IsFullscreen()) ? 306 return (frame()->IsMaximized() || frame()->IsFullscreen()) ?
307 0 : gfx::win::GetSystemMetricsInDIP(SM_CXSIZEFRAME); 307 0 : gfx::win::GetSystemMetricsInDIP(SM_CXSIZEFRAME);
308 } 308 }
309 309
310 int GlassBrowserFrameView::FrameTopBorderHeight() const { 310 int GlassBrowserFrameView::FrameTopBorderHeight(bool restored) const {
311 // We'd like to use FrameBorderThickness() here, but the maximized Aero glass 311 // We'd like to use FrameBorderThickness() here, but the maximized Aero glass
312 // frame has a 0 frame border around most edges and a CYSIZEFRAME-thick border 312 // frame has a 0 frame border around most edges and a CYSIZEFRAME-thick border
313 // at the top (see AeroGlassFrame::OnGetMinMaxInfo()). 313 // at the top (see AeroGlassFrame::OnGetMinMaxInfo()).
314 return frame()->IsFullscreen() ? 314 return (frame()->IsFullscreen() && !restored) ?
315 0 : gfx::win::GetSystemMetricsInDIP(SM_CYSIZEFRAME); 315 0 : gfx::win::GetSystemMetricsInDIP(SM_CYSIZEFRAME);
316 } 316 }
317 317
318 int GlassBrowserFrameView::NonClientBorderThickness() const { 318 int GlassBrowserFrameView::NonClientBorderThickness(bool restored) const {
319 if (frame()->IsMaximized() || frame()->IsFullscreen()) 319 if ((frame()->IsMaximized() || frame()->IsFullscreen()) && !restored)
320 return 0; 320 return 0;
321 321
322 return (base::win::GetVersion() <= base::win::VERSION_WIN8_1) 322 return (base::win::GetVersion() <= base::win::VERSION_WIN8_1)
323 ? kNonClientBorderThicknessPreWin10 323 ? kNonClientBorderThicknessPreWin10
324 : kNonClientBorderThicknessWin10; 324 : kNonClientBorderThicknessWin10;
325 } 325 }
326 326
327 int GlassBrowserFrameView::NonClientTopBorderHeight() const { 327 int GlassBrowserFrameView::NonClientTopBorderHeight(bool restored) const {
328 if (frame()->IsFullscreen()) 328 if (frame()->IsFullscreen() && !restored)
329 return 0; 329 return 0;
330 330
331 const int top = FrameTopBorderHeight(); 331 const int top = FrameTopBorderHeight(restored);
332 // The tab top inset is equal to the height of any shadow region above the 332 // The tab top inset is equal to the height of any shadow region above the
333 // tabs, plus a 1 px top stroke. In maximized mode, we want to push the 333 // tabs, plus a 1 px top stroke. In maximized mode, we want to push the
334 // shadow region off the top of the screen but leave the top stroke. 334 // shadow region off the top of the screen but leave the top stroke.
335 // Annoyingly, the pre-MD layout uses different heights for the hit-test 335 // Annoyingly, the pre-MD layout uses different heights for the hit-test
336 // exclusion region (which we want here, since we're trying to size the border 336 // exclusion region (which we want here, since we're trying to size the border
337 // so that the region above the tab's hit-test zone matches) versus the shadow 337 // so that the region above the tab's hit-test zone matches) versus the shadow
338 // thickness. 338 // thickness.
339 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT); 339 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT);
340 return frame()->IsMaximized() ? 340 return (frame()->IsMaximized() && !restored) ?
341 (top - GetLayoutInsets(TAB).top() + 1) : 341 (top - GetLayoutInsets(TAB).top() + 1) :
342 (top + kNonClientRestoredExtraThickness - exclusion); 342 (top + kNonClientRestoredExtraThickness - exclusion);
343 } 343 }
344 344
345 void GlassBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) { 345 void GlassBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) {
346 ui::ThemeProvider* tp = GetThemeProvider(); 346 ui::ThemeProvider* tp = GetThemeProvider();
347 347
348 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); 348 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
349 gfx::Point toolbar_origin(toolbar_bounds.origin()); 349 gfx::Point toolbar_origin(toolbar_bounds.origin());
350 View::ConvertPointToTarget(browser_view(), this, &toolbar_origin); 350 View::ConvertPointToTarget(browser_view(), this, &toolbar_origin);
351 toolbar_bounds.set_origin(toolbar_origin); 351 toolbar_bounds.set_origin(toolbar_origin);
352 int x = toolbar_bounds.x(); 352 int x = toolbar_bounds.x();
353 int w = toolbar_bounds.width(); 353 int w = toolbar_bounds.width();
354 354
355 // Toolbar background. 355 // Toolbar background.
356 int y = toolbar_bounds.y(); 356 int y = toolbar_bounds.y();
357 // Tile the toolbar image starting at the frame edge on the left and where 357 // Tile the toolbar image starting at the frame edge on the left and where
358 // the tabstrip is on the top. 358 // the tabstrip is on the top.
359 gfx::ImageSkia* theme_toolbar = tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); 359 gfx::ImageSkia* theme_toolbar = tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR);
360 int dest_y = y; 360 int dest_y = y;
361 // In the pre-MD world, the toolbar top edge is drawn using the 361 // In the pre-MD world, the toolbar top edge is drawn using the
362 // IDR_CONTENT_TOP_XXX images, which overlay the toolbar. The top 2 px of 362 // IDR_CONTENT_TOP_XXX images, which overlay the toolbar. The top 2 px of
363 // these images is the actual top edge, and is partly transparent, so the 363 // these images is the actual top edge, and is partly transparent, so the
364 // toolbar background shouldn't be drawn over it. 364 // toolbar background shouldn't be drawn over it.
365 const int kPreMDToolbarTopEdgeExclusion = 2; 365 const int kPreMDToolbarTopEdgeExclusion = 2;
366 if (browser_view()->IsTabStripVisible()) 366 if (browser_view()->IsTabStripVisible())
367 dest_y += kPreMDToolbarTopEdgeExclusion; 367 dest_y += kPreMDToolbarTopEdgeExclusion;
368 canvas->TileImageInt( 368 canvas->TileImageInt(
369 *theme_toolbar, x + GetThemeBackgroundXInset(), 369 *theme_toolbar, x + GetThemeBackgroundXInset(),
370 dest_y - GetTopInset() + Tab::GetYOffsetForActiveTabBackground(), 370 dest_y - GetTopInset(false) + Tab::GetYOffsetForActiveTabBackground(),
371 x, dest_y, w, theme_toolbar->height()); 371 x, dest_y, w, theme_toolbar->height());
372 372
373 // Toolbar edges. 373 // Toolbar edges.
374 if (browser_view()->IsTabStripVisible()) { 374 if (browser_view()->IsTabStripVisible()) {
375 // Pre-Windows 10, we draw toolbar left and right edges and top corners, 375 // Pre-Windows 10, we draw toolbar left and right edges and top corners,
376 // partly atop the window border. In Windows 10+, we don't draw our own 376 // partly atop the window border. In Windows 10+, we don't draw our own
377 // window border but rather go right to the system border, so we need only 377 // window border but rather go right to the system border, so we need only
378 // draw the toolbar top edge. 378 // draw the toolbar top edge.
379 int center_x = x; 379 int center_x = x;
380 int center_w = w; 380 int center_w = w;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { 430 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) {
431 ui::ThemeProvider* tp = GetThemeProvider(); 431 ui::ThemeProvider* tp = GetThemeProvider();
432 gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height()); 432 gfx::Rect client_area_bounds = CalculateClientAreaBounds(width(), height());
433 433
434 // The client edges start below the toolbar upper corner images regardless 434 // The client edges start below the toolbar upper corner images regardless
435 // of how tall the toolbar itself is. 435 // of how tall the toolbar itself is.
436 int client_area_top = frame()->client_view()->y() + 436 int client_area_top = frame()->client_view()->y() +
437 browser_view()->GetToolbarBounds().y() + 437 browser_view()->GetToolbarBounds().y() +
438 tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER)->height(); 438 tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER)->height();
439 int client_area_bottom = 439 int client_area_bottom =
440 std::max(client_area_top, height() - NonClientBorderThickness()); 440 std::max(client_area_top, height() - NonClientBorderThickness(false));
441 int client_area_height = client_area_bottom - client_area_top; 441 int client_area_height = client_area_bottom - client_area_top;
442 442
443 // Draw the client edge images. 443 // Draw the client edge images.
444 gfx::ImageSkia* right = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); 444 gfx::ImageSkia* right = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE);
445 canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top, 445 canvas->TileImageInt(*right, client_area_bounds.right(), client_area_top,
446 right->width(), client_area_height); 446 right->width(), client_area_height);
447 canvas->DrawImageInt( 447 canvas->DrawImageInt(
448 *tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER), 448 *tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER),
449 client_area_bounds.right(), client_area_bottom); 449 client_area_bounds.right(), client_area_bottom);
450 gfx::ImageSkia* bottom = tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER); 450 gfx::ImageSkia* bottom = tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 // FrameTopBorderHeight() pixels from the top of the window; all those top 495 // FrameTopBorderHeight() pixels from the top of the window; all those top
496 // border pixels are offscreen, so this result in caption buttons flush with 496 // border pixels are offscreen, so this result in caption buttons flush with
497 // the top of the screen. In restored mode, the caption buttons are first 497 // the top of the screen. In restored mode, the caption buttons are first
498 // placed just below a 2 px border at the top of the window (which is the 498 // placed just below a 2 px border at the top of the window (which is the
499 // first two pixels' worth of FrameTopBorderHeight()), then extended upwards 499 // first two pixels' worth of FrameTopBorderHeight()), then extended upwards
500 // one extra pixel to overlap part of this border. 500 // one extra pixel to overlap part of this border.
501 // 501 //
502 // To match both of these, we size the button as if it's always the extra one 502 // To match both of these, we size the button as if it's always the extra one
503 // pixel in height, then we place it at the correct position in restored mode, 503 // pixel in height, then we place it at the correct position in restored mode,
504 // or one pixel above the top of the screen in maximized mode. 504 // or one pixel above the top of the screen in maximized mode.
505 int button_y = frame()->IsMaximized() ? (FrameTopBorderHeight() - 1) : 1; 505 int button_y = frame()->IsMaximized() ? (FrameTopBorderHeight(false) - 1) : 1;
506 new_avatar_button()->SetBounds( 506 new_avatar_button()->SetBounds(
507 button_x, 507 button_x,
508 button_y, 508 button_y,
509 label_size.width(), 509 label_size.width(),
510 gfx::win::GetSystemMetricsInDIP(SM_CYMENUSIZE) + 1); 510 gfx::win::GetSystemMetricsInDIP(SM_CYMENUSIZE) + 1);
511 } 511 }
512 512
513 void GlassBrowserFrameView::LayoutIncognitoIcon() { 513 void GlassBrowserFrameView::LayoutIncognitoIcon() {
514 const gfx::Insets insets(GetLayoutInsets(AVATAR_ICON)); 514 const gfx::Insets insets(GetLayoutInsets(AVATAR_ICON));
515 gfx::Size size; 515 gfx::Size size;
516 // During startup it's possible to reach here before the browser view has been 516 // During startup it's possible to reach here before the browser view has been
517 // added to the view hierarchy. In this case it won't have a widget and thus 517 // added to the view hierarchy. In this case it won't have a widget and thus
518 // can't access the theme provider, which is required to get the incognito 518 // can't access the theme provider, which is required to get the incognito
519 // icon. Use an empty size in this case, which will still place the tabstrip 519 // icon. Use an empty size in this case, which will still place the tabstrip
520 // at the correct coordinates for a non-incognito window. We should get 520 // at the correct coordinates for a non-incognito window. We should get
521 // another layout call after the browser view has a widget anyway. 521 // another layout call after the browser view has a widget anyway.
522 if (browser_view()->GetWidget()) 522 if (browser_view()->GetWidget())
523 size = browser_view()->GetOTRAvatarIcon().size(); 523 size = browser_view()->GetOTRAvatarIcon().size();
524 int x = NonClientBorderThickness(); 524 int x = NonClientBorderThickness(false);
525 // In RTL, the icon needs to start after the caption buttons. 525 // In RTL, the icon needs to start after the caption buttons.
526 if (base::i18n::IsRTL()) { 526 if (base::i18n::IsRTL()) {
527 x = width() - frame()->GetMinimizeButtonOffset() + 527 x = width() - frame()->GetMinimizeButtonOffset() +
528 (new_avatar_button() ? 528 (new_avatar_button() ?
529 (new_avatar_button()->width() + kNewAvatarButtonOffset) : 0); 529 (new_avatar_button()->width() + kNewAvatarButtonOffset) : 0);
530 } 530 }
531 const int bottom = 531 const int bottom = GetTopInset(false) + browser_view()->GetTabStripHeight() -
532 GetTopInset() + browser_view()->GetTabStripHeight() - insets.bottom(); 532 insets.bottom();
533 const int y = (ui::MaterialDesignController::IsModeMaterial() || 533 const int y = (ui::MaterialDesignController::IsModeMaterial() ||
534 !frame()->IsMaximized()) ? 534 !frame()->IsMaximized()) ?
535 (bottom - size.height()) : FrameTopBorderHeight(); 535 (bottom - size.height()) : FrameTopBorderHeight(false);
536 incognito_bounds_.SetRect(x + (avatar_button() ? insets.left() : 0), y, 536 incognito_bounds_.SetRect(x + (avatar_button() ? insets.left() : 0), y,
537 avatar_button() ? size.width() : 0, bottom - y); 537 avatar_button() ? size.width() : 0, bottom - y);
538 if (avatar_button()) 538 if (avatar_button())
539 avatar_button()->SetBoundsRect(incognito_bounds_); 539 avatar_button()->SetBoundsRect(incognito_bounds_);
540 } 540 }
541 541
542 void GlassBrowserFrameView::LayoutClientView() { 542 void GlassBrowserFrameView::LayoutClientView() {
543 client_view_bounds_ = CalculateClientAreaBounds(width(), height()); 543 client_view_bounds_ = CalculateClientAreaBounds(width(), height());
544 } 544 }
545 545
546 gfx::Insets GlassBrowserFrameView::GetClientAreaInsets() const { 546 gfx::Insets GlassBrowserFrameView::GetClientAreaInsets(bool restored) const {
547 if (!browser_view()->IsTabStripVisible()) 547 if (!browser_view()->IsTabStripVisible())
548 return gfx::Insets(); 548 return gfx::Insets();
549 549
550 const int top_height = NonClientTopBorderHeight(); 550 const int top_height = NonClientTopBorderHeight(restored);
551 const int border_thickness = NonClientBorderThickness(); 551 const int border_thickness = NonClientBorderThickness(restored);
552 return gfx::Insets(top_height, 552 return gfx::Insets(top_height,
553 border_thickness, 553 border_thickness,
554 border_thickness, 554 border_thickness,
555 border_thickness); 555 border_thickness);
556 } 556 }
557 557
558 gfx::Rect GlassBrowserFrameView::CalculateClientAreaBounds(int width, 558 gfx::Rect GlassBrowserFrameView::CalculateClientAreaBounds(int width,
559 int height) const { 559 int height) const {
560 gfx::Rect bounds(0, 0, width, height); 560 gfx::Rect bounds(0, 0, width, height);
561 bounds.Inset(GetClientAreaInsets()); 561 bounds.Inset(GetClientAreaInsets(false));
562 return bounds; 562 return bounds;
563 } 563 }
564 564
565 void GlassBrowserFrameView::StartThrobber() { 565 void GlassBrowserFrameView::StartThrobber() {
566 if (!throbber_running_) { 566 if (!throbber_running_) {
567 throbber_running_ = true; 567 throbber_running_ = true;
568 throbber_frame_ = 0; 568 throbber_frame_ = 0;
569 InitThrobberIcons(); 569 InitThrobberIcons();
570 SendMessage(views::HWNDForWidget(frame()), WM_SETICON, 570 SendMessage(views::HWNDForWidget(frame()), WM_SETICON,
571 static_cast<WPARAM>(ICON_SMALL), 571 static_cast<WPARAM>(ICON_SMALL),
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 static bool initialized = false; 634 static bool initialized = false;
635 if (!initialized) { 635 if (!initialized) {
636 for (int i = 0; i < kThrobberIconCount; ++i) { 636 for (int i = 0; i < kThrobberIconCount; ++i) {
637 throbber_icons_[i] = 637 throbber_icons_[i] =
638 ui::LoadThemeIconFromResourcesDataDLL(IDI_THROBBER_01 + i); 638 ui::LoadThemeIconFromResourcesDataDLL(IDI_THROBBER_01 + i);
639 DCHECK(throbber_icons_[i]); 639 DCHECK(throbber_icons_[i]);
640 } 640 }
641 initialized = true; 641 initialized = true;
642 } 642 }
643 } 643 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/glass_browser_frame_view.h ('k') | chrome/browser/ui/views/frame/opaque_browser_frame_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698