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

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

Issue 1455193003: Draw popup window toolbars as only containing a location bar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@arbitrary_heights
Patch Set: Glass cleanups 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
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());
243 // Fall back to the caption if no other component matches. 243 // Fall back to the caption if no other component matches.
244 return (window_component == HTNOWHERE) ? HTCAPTION : window_component; 244 return (window_component == HTNOWHERE) ? HTCAPTION : window_component;
245 } 245 }
246 246
247 /////////////////////////////////////////////////////////////////////////////// 247 ///////////////////////////////////////////////////////////////////////////////
248 // GlassBrowserFrameView, views::View overrides: 248 // GlassBrowserFrameView, views::View overrides:
249 249
250 void GlassBrowserFrameView::OnPaint(gfx::Canvas* canvas) { 250 void GlassBrowserFrameView::OnPaint(gfx::Canvas* canvas) {
251 if (browser_view()->IsToolbarVisible() && 251 if (IsToolbarVisible())
252 browser_view()->toolbar()->ShouldPaintBackground())
253 PaintToolbarBackground(canvas); 252 PaintToolbarBackground(canvas);
254 if (!frame()->IsMaximized()) 253 PaintClientEdge(canvas);
255 PaintRestoredClientEdge(canvas);
256 } 254 }
257 255
258 void GlassBrowserFrameView::Layout() { 256 void GlassBrowserFrameView::Layout() {
259 if (browser_view()->IsRegularOrGuestSession()) 257 if (browser_view()->IsRegularOrGuestSession())
260 LayoutNewStyleAvatar(); 258 LayoutNewStyleAvatar();
261 LayoutIncognitoIcon(); 259 LayoutIncognitoIcon();
262 LayoutClientView(); 260 LayoutClientView();
263 } 261 }
264 262
265 /////////////////////////////////////////////////////////////////////////////// 263 ///////////////////////////////////////////////////////////////////////////////
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 // Annoyingly, the pre-MD layout uses different heights for the hit-test 333 // 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 334 // 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 335 // so that the region above the tab's hit-test zone matches) versus the shadow
338 // thickness. 336 // thickness.
339 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT); 337 const int exclusion = GetLayoutConstant(TAB_TOP_EXCLUSION_HEIGHT);
340 return (frame()->IsMaximized() && !restored) ? 338 return (frame()->IsMaximized() && !restored) ?
341 (top - GetLayoutInsets(TAB).top() + 1) : 339 (top - GetLayoutInsets(TAB).top() + 1) :
342 (top + kNonClientRestoredExtraThickness - exclusion); 340 (top + kNonClientRestoredExtraThickness - exclusion);
343 } 341 }
344 342
343 bool GlassBrowserFrameView::IsToolbarVisible() const {
344 return browser_view()->IsToolbarVisible() &&
345 !browser_view()->toolbar()->GetPreferredSize().IsEmpty();
346 }
347
345 void GlassBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) { 348 void GlassBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) {
346 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds()); 349 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
347 if (toolbar_bounds.IsEmpty()) 350 if (toolbar_bounds.IsEmpty())
348 return; 351 return;
349 gfx::Point toolbar_origin(toolbar_bounds.origin()); 352 gfx::Point toolbar_origin(toolbar_bounds.origin());
350 ConvertPointToTarget(browser_view(), this, &toolbar_origin); 353 ConvertPointToTarget(browser_view(), this, &toolbar_origin);
351 toolbar_bounds.set_origin(toolbar_origin); 354 toolbar_bounds.set_origin(toolbar_origin);
352 const int h = toolbar_bounds.height(); 355 const int h = toolbar_bounds.height();
353 ui::ThemeProvider* tp = GetThemeProvider(); 356 ui::ThemeProvider* tp = GetThemeProvider();
357 const SkColor separator_color =
358 tp->GetColor(ThemeProperties::COLOR_TOOLBAR_SEPARATOR);
354 359
355 // Background. 360 // Background.
356 int x = toolbar_bounds.x(); 361 if (browser_view()->IsTabStripVisible()) {
357 const int y = toolbar_bounds.y(); 362 int x = toolbar_bounds.x();
358 int w = toolbar_bounds.width(); 363 const int y = toolbar_bounds.y();
364 int w = toolbar_bounds.width();
359 365
360 // The top stroke is drawn using the IDR_CONTENT_TOP_XXX images, which overlay 366 // The top stroke is drawn using the IDR_CONTENT_TOP_XXX images, which
361 // the toolbar. The top 2 px of these images is the actual top stroke + 367 // overlay the toolbar. The top 2 px of these images is the actual top
362 // shadow, and is partly transparent, so the toolbar background shouldn't be 368 // stroke + shadow, and is partly transparent, so the toolbar background
363 // drawn over it. 369 // shouldn't be drawn over it.
364 const int split_point = std::min(kContentEdgeShadowThickness, h); 370 const int split_point = std::min(kContentEdgeShadowThickness, h);
365 if (h > split_point) { 371 if (h > split_point) {
366 // Tile the toolbar image starting at the frame edge on the left and where 372 // Tile the toolbar image starting at the frame edge on the left and where
367 // the tabstrip is on the top. 373 // the tabstrip is on the top.
368 const int split_y = 374 const int split_y = y + split_point;
369 y + (browser_view()->IsTabStripVisible() ? split_point : 0); 375 const int bg_y =
370 const int bg_y = 376 GetTopInset(false) + Tab::GetYInsetForActiveTabBackground();
371 GetTopInset(false) + Tab::GetYInsetForActiveTabBackground(); 377 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR),
372 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR), 378 x + GetThemeBackgroundXInset(), split_y - bg_y, x,
373 x + GetThemeBackgroundXInset(), split_y - bg_y, x, 379 split_y, w, h - split_point);
374 split_y, w, h - split_point); 380 }
375 }
376 381
377 if (browser_view()->IsTabStripVisible()) {
378 // On Windows 10+ where we don't draw our own window border but rather go 382 // On Windows 10+ where we don't draw our own window border but rather go
379 // right to the system border, the toolbar has no corners or side strokes. 383 // right to the system border, the toolbar has no corners or side strokes.
380 if (base::win::GetVersion() < base::win::VERSION_WIN10) { 384 if (base::win::GetVersion() < base::win::VERSION_WIN10) {
381 // Mask out the corners. 385 // Mask out the corners.
382 gfx::ImageSkia* left = tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER); 386 gfx::ImageSkia* left = tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER);
383 const int img_w = left->width(); 387 const int img_w = left->width();
384 x -= kContentEdgeShadowThickness; 388 x -= kContentEdgeShadowThickness;
385 SkPaint paint; 389 SkPaint paint;
386 paint.setXfermodeMode(SkXfermode::kDstIn_Mode); 390 paint.setXfermodeMode(SkXfermode::kDstIn_Mode);
387 canvas->DrawImageInt( 391 canvas->DrawImageInt(
(...skipping 10 matching lines...) Expand all
398 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER), 402 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER),
399 0, 0, img_w, h, right_x, y, img_w, h, false); 403 0, 0, img_w, h, right_x, y, img_w, h, false);
400 404
401 x += img_w; 405 x += img_w;
402 w = right_x - x; 406 w = right_x - x;
403 } 407 }
404 408
405 // Top stroke. 409 // Top stroke.
406 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_CENTER), x, y, 410 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_CENTER), x, y,
407 w, split_point); 411 w, split_point);
412
413 if (ui::MaterialDesignController::IsModeMaterial()) {
414 // Toolbar/content separator.
415 toolbar_bounds.Inset(kClientEdgeThickness, 0);
416 BrowserView::Paint1pxHorizontalLine(canvas, separator_color,
417 toolbar_bounds);
418 return;
419 }
408 } 420 }
409 421
410 // Toolbar/content separator. 422 // Toolbar/content separator.
411 const SkColor separator_color = 423 toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness,
412 tp->GetColor(ThemeProperties::COLOR_TOOLBAR_SEPARATOR); 424 kClientEdgeThickness, 0);
413 if (ui::MaterialDesignController::IsModeMaterial()) { 425 canvas->FillRect(toolbar_bounds, separator_color);
414 toolbar_bounds.Inset(kClientEdgeThickness, 0);
415 BrowserView::Paint1pxHorizontalLine(canvas, separator_color,
416 toolbar_bounds);
417 } else {
418 toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness,
419 kClientEdgeThickness, 0);
420 canvas->FillRect(toolbar_bounds, separator_color);
421 }
422 } 426 }
423 427
424 void GlassBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { 428 void GlassBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) {
429 gfx::Rect client_bounds = CalculateClientAreaBounds();
430 int y = client_bounds.y();
431 const bool normal_mode = browser_view()->IsTabStripVisible();
425 ui::ThemeProvider* tp = GetThemeProvider(); 432 ui::ThemeProvider* tp = GetThemeProvider();
426 int y = frame()->client_view()->y(); 433 const SkColor toolbar_color = normal_mode ?
434 tp->GetColor(ThemeProperties::COLOR_TOOLBAR) :
435 ThemeProperties::GetDefaultColor(ThemeProperties::COLOR_TOOLBAR);
427 436
428 gfx::Rect client_bounds = CalculateClientAreaBounds(); 437 const gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
438 if (!normal_mode) {
439 // The toolbar isn't going to draw a top edge for us, so draw one ourselves.
440 if (IsToolbarVisible())
441 y += toolbar_bounds.y() + kClientEdgeThickness;
442 client_bounds.set_y(y);
443 client_bounds.Inset(-kClientEdgeThickness, -kClientEdgeThickness,
444 -kClientEdgeThickness, client_bounds.height());
445 canvas->FillRect(client_bounds, toolbar_color);
446
447 // Popup and app windows don't custom-draw any other edges, so we're done.
448 return;
449 }
450
451 // In maximized mode, the only edge to draw is the top one, so we're done.
452 if (frame()->IsMaximized())
453 return;
454
429 const int x = client_bounds.x(); 455 const int x = client_bounds.x();
456 y += toolbar_bounds.bottom(); // The side edges start below the toolbar.
430 const int w = client_bounds.width(); 457 const int w = client_bounds.width();
431 const int right = client_bounds.right(); 458 const int right = client_bounds.right();
432 const SkColor toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR);
433
434 // The client edges start below the toolbar.
435 y += browser_view()->GetToolbarBounds().bottom();
436
437 const int bottom = std::max(y, height() - NonClientBorderThickness(false)); 459 const int bottom = std::max(y, height() - NonClientBorderThickness(false));
438 int height = bottom - y; 460 const int height = bottom - y;
439 461
440 // Draw the client edge images. 462 // Draw the client edge images.
441 gfx::ImageSkia* right_image = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); 463 gfx::ImageSkia* right_image = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE);
442 const int img_w = right_image->width(); 464 const int img_w = right_image->width();
443 canvas->TileImageInt(*right_image, right, y, img_w, height); 465 canvas->TileImageInt(*right_image, right, y, img_w, height);
444 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER), 466 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER),
445 right, bottom); 467 right, bottom);
446 gfx::ImageSkia* bottom_image = 468 gfx::ImageSkia* bottom_image =
447 tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER); 469 tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER);
448 canvas->TileImageInt(*bottom_image, x, bottom, w, bottom_image->height()); 470 canvas->TileImageInt(*bottom_image, x, bottom, w, bottom_image->height());
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 static bool initialized = false; 642 static bool initialized = false;
621 if (!initialized) { 643 if (!initialized) {
622 for (int i = 0; i < kThrobberIconCount; ++i) { 644 for (int i = 0; i < kThrobberIconCount; ++i) {
623 throbber_icons_[i] = 645 throbber_icons_[i] =
624 ui::LoadThemeIconFromResourcesDataDLL(IDI_THROBBER_01 + i); 646 ui::LoadThemeIconFromResourcesDataDLL(IDI_THROBBER_01 + i);
625 DCHECK(throbber_icons_[i]); 647 DCHECK(throbber_icons_[i]);
626 } 648 }
627 initialized = true; 649 initialized = true;
628 } 650 }
629 } 651 }
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.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698