| 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/frame/opaque_browser_frame_view.h" | 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 } | 430 } |
| 431 | 431 |
| 432 bool OpaqueBrowserFrameView::IsFullscreen() const { | 432 bool OpaqueBrowserFrameView::IsFullscreen() const { |
| 433 return frame()->IsFullscreen(); | 433 return frame()->IsFullscreen(); |
| 434 } | 434 } |
| 435 | 435 |
| 436 bool OpaqueBrowserFrameView::IsTabStripVisible() const { | 436 bool OpaqueBrowserFrameView::IsTabStripVisible() const { |
| 437 return browser_view()->IsTabStripVisible(); | 437 return browser_view()->IsTabStripVisible(); |
| 438 } | 438 } |
| 439 | 439 |
| 440 bool OpaqueBrowserFrameView::IsToolbarVisible() const { |
| 441 return browser_view()->IsToolbarVisible() && |
| 442 !browser_view()->toolbar()->GetPreferredSize().IsEmpty(); |
| 443 } |
| 444 |
| 440 int OpaqueBrowserFrameView::GetTabStripHeight() const { | 445 int OpaqueBrowserFrameView::GetTabStripHeight() const { |
| 441 return browser_view()->GetTabStripHeight(); | 446 return browser_view()->GetTabStripHeight(); |
| 442 } | 447 } |
| 443 | 448 |
| 444 gfx::Size OpaqueBrowserFrameView::GetTabstripPreferredSize() const { | 449 gfx::Size OpaqueBrowserFrameView::GetTabstripPreferredSize() const { |
| 445 gfx::Size s = browser_view()->tabstrip()->GetPreferredSize(); | 450 gfx::Size s = browser_view()->tabstrip()->GetPreferredSize(); |
| 446 return s; | 451 return s; |
| 447 } | 452 } |
| 448 | 453 |
| 449 /////////////////////////////////////////////////////////////////////////////// | 454 /////////////////////////////////////////////////////////////////////////////// |
| (...skipping 10 matching lines...) Expand all Loading... |
| 460 PaintRestoredFrameBorder(canvas); | 465 PaintRestoredFrameBorder(canvas); |
| 461 | 466 |
| 462 // The window icon and title are painted by their respective views. | 467 // The window icon and title are painted by their respective views. |
| 463 /* TODO(pkasting): If this window is active, we should also draw a drop | 468 /* TODO(pkasting): If this window is active, we should also draw a drop |
| 464 * shadow on the title. This is tricky, because we don't want to hardcode a | 469 * shadow on the title. This is tricky, because we don't want to hardcode a |
| 465 * shadow color (since we want to work with various themes), but we can't | 470 * shadow color (since we want to work with various themes), but we can't |
| 466 * alpha-blend either (since the Windows text APIs don't really do this). | 471 * alpha-blend either (since the Windows text APIs don't really do this). |
| 467 * So we'd need to sample the background color at the right location and | 472 * So we'd need to sample the background color at the right location and |
| 468 * synthesize a good shadow color. */ | 473 * synthesize a good shadow color. */ |
| 469 | 474 |
| 470 if (browser_view()->IsToolbarVisible()) | 475 if (IsToolbarVisible()) |
| 471 PaintToolbarBackground(canvas); | 476 PaintToolbarBackground(canvas); |
| 472 if (!layout_->IsTitleBarCondensed()) | 477 PaintClientEdge(canvas); |
| 473 PaintRestoredClientEdge(canvas); | |
| 474 } | 478 } |
| 475 | 479 |
| 476 // BrowserNonClientFrameView: | 480 // BrowserNonClientFrameView: |
| 477 bool OpaqueBrowserFrameView::ShouldPaintAsThemed() const { | 481 bool OpaqueBrowserFrameView::ShouldPaintAsThemed() const { |
| 478 // Theme app and popup windows if |platform_observer_| wants it. | 482 // Theme app and popup windows if |platform_observer_| wants it. |
| 479 return browser_view()->IsBrowserTypeNormal() || | 483 return browser_view()->IsBrowserTypeNormal() || |
| 480 platform_observer_->IsUsingSystemTheme(); | 484 platform_observer_->IsUsingSystemTheme(); |
| 481 } | 485 } |
| 482 | 486 |
| 483 void OpaqueBrowserFrameView::UpdateNewAvatarButtonImpl() { | 487 void OpaqueBrowserFrameView::UpdateNewAvatarButtonImpl() { |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 toolbar_bounds.Inset(kClientEdgeThickness, 0); | 741 toolbar_bounds.Inset(kClientEdgeThickness, 0); |
| 738 BrowserView::Paint1pxHorizontalLine(canvas, separator_color, | 742 BrowserView::Paint1pxHorizontalLine(canvas, separator_color, |
| 739 toolbar_bounds); | 743 toolbar_bounds); |
| 740 } else { | 744 } else { |
| 741 toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness, | 745 toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness, |
| 742 kClientEdgeThickness, 0); | 746 kClientEdgeThickness, 0); |
| 743 canvas->FillRect(toolbar_bounds, separator_color); | 747 canvas->FillRect(toolbar_bounds, separator_color); |
| 744 } | 748 } |
| 745 } | 749 } |
| 746 | 750 |
| 747 void OpaqueBrowserFrameView::PaintRestoredClientEdge(gfx::Canvas* canvas) { | 751 void OpaqueBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) { |
| 748 ui::ThemeProvider* tp = GetThemeProvider(); | 752 ui::ThemeProvider* tp = GetThemeProvider(); |
| 749 int y = frame()->client_view()->y(); | 753 int y = frame()->client_view()->y(); |
| 750 | 754 |
| 751 gfx::Rect client_bounds = | 755 gfx::Rect client_bounds = |
| 752 layout_->CalculateClientAreaBounds(width(), height()); | 756 layout_->CalculateClientAreaBounds(width(), height()); |
| 753 const int x = client_bounds.x(); | 757 const int x = client_bounds.x(); |
| 754 const int w = client_bounds.width(); | 758 const int w = client_bounds.width(); |
| 755 const int right = client_bounds.right(); | 759 const int right = client_bounds.right(); |
| 756 const SkColor toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR); | 760 const SkColor toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR); |
| 757 | 761 |
| 758 if (browser_view()->IsToolbarVisible()) { | 762 if (IsToolbarVisible()) { |
| 759 // The client edge images start below the toolbar. | 763 // The client edge images start below the toolbar. |
| 760 y += browser_view()->GetToolbarBounds().bottom(); | 764 y += browser_view()->GetToolbarBounds().bottom(); |
| 761 } else if (!browser_view()->IsTabStripVisible()) { | 765 } else { |
| 762 // The toolbar isn't going to draw a client edge for us, so draw one | 766 // The toolbar isn't going to draw a top edge for us, so draw one ourselves. |
| 763 // ourselves. | |
| 764 gfx::ImageSkia* top_left = tp->GetImageSkiaNamed(IDR_APP_TOP_LEFT); | 767 gfx::ImageSkia* top_left = tp->GetImageSkiaNamed(IDR_APP_TOP_LEFT); |
| 765 const int img_w = top_left->width(); | 768 const int img_w = top_left->width(); |
| 766 const int height = top_left->height(); | 769 const int height = top_left->height(); |
| 767 const int top_y = y - height; | 770 const int top_y = y - height; |
| 768 canvas->DrawImageInt(*top_left, 0, 0, img_w, height, x - img_w, top_y, | 771 canvas->DrawImageInt(*top_left, 0, 0, img_w, height, x - img_w, top_y, |
| 769 img_w, height, false); | 772 img_w, height, false); |
| 770 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_CENTER), 0, 0, x, | 773 canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_CENTER), 0, 0, x, |
| 771 top_y, w, height); | 774 top_y, w, height); |
| 772 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_RIGHT), 0, 0, img_w, | 775 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_RIGHT), 0, 0, img_w, |
| 773 height, right, top_y, img_w, height, false); | 776 height, right, top_y, img_w, height, false); |
| 774 client_bounds.Inset(-kClientEdgeThickness, -kClientEdgeThickness, | 777 client_bounds.Inset(-kClientEdgeThickness, -kClientEdgeThickness, |
| 775 -kClientEdgeThickness, client_bounds.height()); | 778 -kClientEdgeThickness, client_bounds.height()); |
| 776 canvas->FillRect(client_bounds, toolbar_color); | 779 canvas->FillRect(client_bounds, toolbar_color); |
| 777 } | 780 } |
| 778 | 781 |
| 782 // In maximized mode, the only edge to draw is the top one, so we're done. |
| 783 if (layout_->IsTitleBarCondensed()) |
| 784 return; |
| 785 |
| 779 const int bottom = std::max(y, height() - NonClientBorderThickness()); | 786 const int bottom = std::max(y, height() - NonClientBorderThickness()); |
| 780 int height = bottom - y; | 787 int height = bottom - y; |
| 781 | 788 |
| 782 // Draw the client edge images. | 789 // Draw the client edge images. |
| 783 gfx::ImageSkia* right_image = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); | 790 gfx::ImageSkia* right_image = tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE); |
| 784 const int img_w = right_image->width(); | 791 const int img_w = right_image->width(); |
| 785 canvas->TileImageInt(*right_image, right, y, img_w, height); | 792 canvas->TileImageInt(*right_image, right, y, img_w, height); |
| 786 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER), | 793 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER), |
| 787 right, bottom); | 794 right, bottom); |
| 788 gfx::ImageSkia* bottom_image = | 795 gfx::ImageSkia* bottom_image = |
| 789 tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER); | 796 tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_CENTER); |
| 790 canvas->TileImageInt(*bottom_image, x, bottom, w, bottom_image->height()); | 797 canvas->TileImageInt(*bottom_image, x, bottom, w, bottom_image->height()); |
| 791 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_LEFT_CORNER), | 798 canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_LEFT_CORNER), |
| 792 x - img_w, bottom); | 799 x - img_w, bottom); |
| 793 gfx::ImageSkia* left_image = tp->GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE); | 800 gfx::ImageSkia* left_image = tp->GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE); |
| 794 canvas->TileImageInt(*left_image, x - img_w, y, img_w, height); | 801 canvas->TileImageInt(*left_image, x - img_w, y, img_w, height); |
| 795 | 802 |
| 796 // Draw the toolbar color so that the client edges show the right color even | 803 // Draw the toolbar color so that the client edges show the right color even |
| 797 // where not covered by the toolbar image. NOTE: We do this after drawing the | 804 // where not covered by the toolbar image. NOTE: We do this after drawing the |
| 798 // images because the images are meant to alpha-blend atop the frame whereas | 805 // images because the images are meant to alpha-blend atop the frame whereas |
| 799 // these rects are meant to be fully opaque, without anything overlaid. | 806 // these rects are meant to be fully opaque, without anything overlaid. |
| 800 gfx::Rect side(x - kClientEdgeThickness, y, kClientEdgeThickness, | 807 gfx::Rect side(x - kClientEdgeThickness, y, kClientEdgeThickness, |
| 801 bottom + kClientEdgeThickness - y); | 808 bottom + kClientEdgeThickness - y); |
| 802 canvas->FillRect(side, toolbar_color); | 809 canvas->FillRect(side, toolbar_color); |
| 803 canvas->FillRect(gfx::Rect(x, bottom, w, kClientEdgeThickness), | 810 canvas->FillRect(gfx::Rect(x, bottom, w, kClientEdgeThickness), |
| 804 toolbar_color); | 811 toolbar_color); |
| 805 side.set_x(right); | 812 side.set_x(right); |
| 806 canvas->FillRect(side, toolbar_color); | 813 canvas->FillRect(side, toolbar_color); |
| 807 } | 814 } |
| OLD | NEW |