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

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

Issue 9583032: Aura: Fix gray line at top of toolbar with translucent frames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tweak popup appearance Created 8 years, 9 months 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
« no previous file with comments | « chrome/browser/ui/views/frame/browser_non_client_frame_view_aura.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/browser_non_client_frame_view_aura.h" 5 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_aura.h"
6 6
7 #include "chrome/browser/themes/theme_service.h"
7 #include "chrome/browser/ui/views/frame/browser_frame.h" 8 #include "chrome/browser/ui/views/frame/browser_frame.h"
8 #include "chrome/browser/ui/views/frame/browser_view.h" 9 #include "chrome/browser/ui/views/frame/browser_view.h"
9 #include "content/public/browser/web_contents.h" 10 #include "content/public/browser/web_contents.h"
10 #include "grit/generated_resources.h" // Accessibility names 11 #include "grit/generated_resources.h" // Accessibility names
11 #include "grit/theme_resources.h" 12 #include "grit/theme_resources.h"
12 #include "grit/theme_resources_standard.h" 13 #include "grit/theme_resources_standard.h"
13 #include "grit/ui_resources.h" 14 #include "grit/ui_resources.h"
14 #include "third_party/skia/include/core/SkCanvas.h" 15 #include "third_party/skia/include/core/SkCanvas.h"
15 #include "third_party/skia/include/core/SkPaint.h" 16 #include "third_party/skia/include/core/SkPaint.h"
16 #include "third_party/skia/include/core/SkPath.h" 17 #include "third_party/skia/include/core/SkPath.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 } 261 }
261 262
262 /////////////////////////////////////////////////////////////////////////////// 263 ///////////////////////////////////////////////////////////////////////////////
263 // views::View overrides: 264 // views::View overrides:
264 265
265 void BrowserNonClientFrameViewAura::OnPaint(gfx::Canvas* canvas) { 266 void BrowserNonClientFrameViewAura::OnPaint(gfx::Canvas* canvas) {
266 if (frame()->IsFullscreen()) 267 if (frame()->IsFullscreen())
267 return; // Nothing visible, don't paint. 268 return; // Nothing visible, don't paint.
268 PaintHeader(canvas); 269 PaintHeader(canvas);
269 PaintTitleBar(canvas); 270 PaintTitleBar(canvas);
271 PaintToolbarBackground(canvas);
270 // Paint the view hierarchy, which draws the caption buttons. 272 // Paint the view hierarchy, which draws the caption buttons.
271 BrowserNonClientFrameView::OnPaint(canvas); 273 BrowserNonClientFrameView::OnPaint(canvas);
272 } 274 }
273 275
274 void BrowserNonClientFrameViewAura::Layout() { 276 void BrowserNonClientFrameViewAura::Layout() {
275 // Maximized windows and app/popup windows use shorter buttons. 277 // Maximized windows and app/popup windows use shorter buttons.
276 if (frame()->IsMaximized() || 278 if (frame()->IsMaximized() ||
277 !browser_view()->IsBrowserTypeNormal()) { 279 !browser_view()->IsBrowserTypeNormal()) {
278 SetButtonImages(close_button_, 280 SetButtonImages(close_button_,
279 IDR_AURA_WINDOW_MAXIMIZED_CLOSE, 281 IDR_AURA_WINDOW_MAXIMIZED_CLOSE,
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 // Header right edge. 458 // Header right edge.
457 int header_right_height = theme_frame->height() - top_right_height; 459 int header_right_height = theme_frame->height() - top_right_height;
458 canvas->TileImageInt(*header_right_edge_, 460 canvas->TileImageInt(*header_right_edge_,
459 width() - header_right_edge_->width(), top_right_height, 461 width() - header_right_edge_->width(), top_right_height,
460 header_right_edge_->width(), header_right_height); 462 header_right_edge_->width(), header_right_height);
461 463
462 // We don't draw edges around the content area. Web content goes flush 464 // We don't draw edges around the content area. Web content goes flush
463 // to the edge of the window. 465 // to the edge of the window.
464 } 466 }
465 467
468 void BrowserNonClientFrameViewAura::PaintToolbarBackground(
469 gfx::Canvas* canvas) {
470 gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
471 if (toolbar_bounds.IsEmpty())
472 return;
473 gfx::Point toolbar_origin(toolbar_bounds.origin());
474 ConvertPointToView(browser_view(), this, &toolbar_origin);
475 toolbar_bounds.set_origin(toolbar_origin);
476
477 int x = toolbar_bounds.x();
478 int w = toolbar_bounds.width();
479 int y = toolbar_bounds.y();
480 int h = toolbar_bounds.height();
481
482 // Gross hack: We split the toolbar images into two pieces, since sometimes
483 // (popup mode) the toolbar isn't tall enough to show the whole image. The
484 // split happens between the top shadow section and the bottom gradient
485 // section so that we never break the gradient.
486 int split_point = kFrameShadowThickness * 2;
487 int bottom_y = y + split_point;
488 ui::ThemeProvider* tp = GetThemeProvider();
489 SkBitmap* theme_toolbar = tp->GetBitmapNamed(IDR_THEME_TOOLBAR);
490 int bottom_edge_height = std::min(theme_toolbar->height(), h) - split_point;
491
492 canvas->FillRect(gfx::Rect(x, bottom_y, w, bottom_edge_height),
493 tp->GetColor(ThemeService::COLOR_TOOLBAR));
494
495 // Paint the main toolbar image. Since this image is also used to draw the
496 // tab background, we must use the tab strip offset to compute the image
497 // source y position. If you have to debug this code use an image editor
498 // to paint a diagonal line through the toolbar image and ensure it lines up
499 // across the tab and toolbar.
500 bool restored = !frame()->IsMaximized();
501 canvas->TileImageInt(
502 *theme_toolbar,
503 x, bottom_y - GetHorizontalTabStripVerticalOffset(restored),
504 x, bottom_y,
505 w, theme_toolbar->height());
506
507 SkBitmap* toolbar_center =
508 tp->GetBitmapNamed(IDR_CONTENT_TOP_CENTER);
509 canvas->TileImageInt(*toolbar_center,
510 0, 0,
511 x, y,
512 w, split_point);
513
514 // Draw the content/toolbar separator.
515 canvas->FillRect(gfx::Rect(x + kClientEdgeThickness,
516 toolbar_bounds.bottom() - kClientEdgeThickness,
517 w - (2 * kClientEdgeThickness),
518 kClientEdgeThickness),
519 ThemeService::GetDefaultColor(ThemeService::COLOR_TOOLBAR_SEPARATOR));
520 }
521
466 void BrowserNonClientFrameViewAura::PaintTitleBar(gfx::Canvas* canvas) { 522 void BrowserNonClientFrameViewAura::PaintTitleBar(gfx::Canvas* canvas) {
467 // The window icon is painted by the TabIconView. 523 // The window icon is painted by the TabIconView.
468 views::WidgetDelegate* delegate = frame()->widget_delegate(); 524 views::WidgetDelegate* delegate = frame()->widget_delegate();
469 if (delegate && delegate->ShouldShowWindowTitle()) { 525 if (delegate && delegate->ShouldShowWindowTitle()) {
470 int icon_right = window_icon_ ? window_icon_->bounds().right() : 0; 526 int icon_right = window_icon_ ? window_icon_->bounds().right() : 0;
471 gfx::Rect title_bounds( 527 gfx::Rect title_bounds(
472 icon_right + kTitleOffsetX, 528 icon_right + kTitleOffsetX,
473 kTitleOffsetY, 529 kTitleOffsetY,
474 std::max(0, maximize_button_->x() - kTitleLogoSpacing - icon_right), 530 std::max(0, maximize_button_->x() - kTitleLogoSpacing - icon_right),
475 BrowserFrame::GetTitleFont().GetHeight()); 531 BrowserFrame::GetTitleFont().GetHeight());
476 canvas->DrawStringInt(delegate->GetWindowTitle(), 532 canvas->DrawStringInt(delegate->GetWindowTitle(),
477 BrowserFrame::GetTitleFont(), 533 BrowserFrame::GetTitleFont(),
478 SK_ColorWHITE, 534 SK_ColorBLACK,
479 GetMirroredXForRect(title_bounds), 535 GetMirroredXForRect(title_bounds),
480 title_bounds.y(), 536 title_bounds.y(),
481 title_bounds.width(), 537 title_bounds.width(),
482 title_bounds.height()); 538 title_bounds.height());
483 } 539 }
484 } 540 }
485 541
486 SkBitmap* BrowserNonClientFrameViewAura::GetThemeFrameBitmap() const { 542 SkBitmap* BrowserNonClientFrameViewAura::GetThemeFrameBitmap() const {
487 bool is_incognito = browser_view()->IsOffTheRecord(); 543 bool is_incognito = browser_view()->IsOffTheRecord();
488 int resource_id; 544 int resource_id;
(...skipping 13 matching lines...) Expand all
502 return GetCustomBitmap(IDR_THEME_FRAME_INCOGNITO_INACTIVE, 558 return GetCustomBitmap(IDR_THEME_FRAME_INCOGNITO_INACTIVE,
503 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_INACTIVE); 559 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_INACTIVE);
504 } 560 }
505 return GetCustomBitmap(IDR_THEME_FRAME_INACTIVE, 561 return GetCustomBitmap(IDR_THEME_FRAME_INACTIVE,
506 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE); 562 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE);
507 } 563 }
508 // Never theme app and popup windows. 564 // Never theme app and popup windows.
509 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 565 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
510 if (ShouldPaintAsActive()) { 566 if (ShouldPaintAsActive()) {
511 resource_id = is_incognito ? 567 resource_id = is_incognito ?
512 IDR_THEME_FRAME_INCOGNITO : IDR_FRAME; 568 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_ACTIVE :
569 IDR_AURA_WINDOW_HEADER_BASE_ACTIVE;
513 } else { 570 } else {
514 resource_id = is_incognito ? 571 resource_id = is_incognito ?
515 IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; 572 IDR_AURA_WINDOW_HEADER_BASE_INCOGNITO_INACTIVE :
573 IDR_AURA_WINDOW_HEADER_BASE_INACTIVE;
516 } 574 }
517 return rb.GetBitmapNamed(resource_id); 575 return rb.GetBitmapNamed(resource_id);
518 } 576 }
519 577
520 SkBitmap* BrowserNonClientFrameViewAura::GetThemeFrameOverlayBitmap() const { 578 SkBitmap* BrowserNonClientFrameViewAura::GetThemeFrameOverlayBitmap() const {
521 ui::ThemeProvider* tp = GetThemeProvider(); 579 ui::ThemeProvider* tp = GetThemeProvider();
522 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && 580 if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) &&
523 browser_view()->IsBrowserTypeNormal() && 581 browser_view()->IsBrowserTypeNormal() &&
524 !browser_view()->IsOffTheRecord()) { 582 !browser_view()->IsOffTheRecord()) {
525 return tp->GetBitmapNamed(ShouldPaintAsActive() ? 583 return tp->GetBitmapNamed(ShouldPaintAsActive() ?
526 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE); 584 IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE);
527 } 585 }
528 return NULL; 586 return NULL;
529 } 587 }
530 588
531 SkBitmap* BrowserNonClientFrameViewAura::GetCustomBitmap( 589 SkBitmap* BrowserNonClientFrameViewAura::GetCustomBitmap(
532 int bitmap_id, 590 int bitmap_id,
533 int fallback_bitmap_id) const { 591 int fallback_bitmap_id) const {
534 ui::ThemeProvider* tp = GetThemeProvider(); 592 ui::ThemeProvider* tp = GetThemeProvider();
535 if (tp->HasCustomImage(bitmap_id)) 593 if (tp->HasCustomImage(bitmap_id))
536 return tp->GetBitmapNamed(bitmap_id); 594 return tp->GetBitmapNamed(bitmap_id);
537 return tp->GetBitmapNamed(fallback_bitmap_id); 595 return tp->GetBitmapNamed(fallback_bitmap_id);
538 } 596 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/browser_non_client_frame_view_aura.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698