| Index: chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| index 8677082ee000964b3c142d45d7387b5fdc9605ed..467f2901ad066503edcd66edce97e0fca256aa9c 100644
|
| --- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| +++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
|
| @@ -7,6 +7,7 @@
|
| #include "build/build_config.h"
|
| #include "chrome/browser/themes/theme_properties.h"
|
| #include "chrome/browser/themes/theme_service_factory.h"
|
| +#include "chrome/browser/ui/layout_constants.h"
|
| #include "chrome/browser/ui/views/frame/browser_frame.h"
|
| #include "chrome/browser/ui/views/frame/browser_view.h"
|
| #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
|
| @@ -22,7 +23,6 @@
|
| #include "ui/accessibility/ax_view_state.h"
|
| #include "ui/base/hit_test.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| -#include "ui/base/material_design/material_design_controller.h"
|
| #include "ui/base/theme_provider.h"
|
| #include "ui/gfx/canvas.h"
|
| #include "ui/gfx/font_list.h"
|
| @@ -405,13 +405,6 @@ gfx::Size OpaqueBrowserFrameView::GetTabstripPreferredSize() const {
|
| return s;
|
| }
|
|
|
| -int OpaqueBrowserFrameView::GetToolbarLeadingCornerClientWidth() const {
|
| - return browser_view()->GetToolbarBounds().x() -
|
| - OpaqueBrowserFrameViewLayout::kContentEdgeShadowThickness +
|
| - GetThemeProvider()->GetImageSkiaNamed(
|
| - IDR_CONTENT_TOP_LEFT_CORNER)->width();
|
| -}
|
| -
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // OpaqueBrowserFrameView, protected:
|
|
|
| @@ -560,6 +553,7 @@ void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(
|
| }
|
|
|
| void OpaqueBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) const {
|
| + // TODO(estade): can this be shared with OpaqueBrowserFrameView?
|
| gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
|
| if (toolbar_bounds.IsEmpty())
|
| return;
|
| @@ -568,170 +562,81 @@ void OpaqueBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) const {
|
| toolbar_bounds.set_origin(toolbar_origin);
|
|
|
| const ui::ThemeProvider* tp = GetThemeProvider();
|
| - const gfx::ImageSkia* const bg = tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR);
|
| - int x = toolbar_bounds.x();
|
| + const int x = toolbar_bounds.x();
|
| const int y = toolbar_bounds.y();
|
| - const int bg_y =
|
| - GetTopInset(false) + Tab::GetYInsetForActiveTabBackground();
|
| const int w = toolbar_bounds.width();
|
| - const int h = toolbar_bounds.height();
|
| - const SkColor separator_color =
|
| - tp->GetColor(ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR);
|
| - if (ui::MaterialDesignController::IsModeMaterial()) {
|
| - // Background. The top stroke is drawn above the toolbar bounds, so
|
| - // unlike in the non-Material Design code below, we don't need to exclude
|
| - // any region from having the background image drawn over it.
|
| - if (tp->HasCustomImage(IDR_THEME_TOOLBAR)) {
|
| - canvas->TileImageInt(*bg, x + GetThemeBackgroundXInset(), y - bg_y, x, y,
|
| - w, h);
|
| - } else {
|
| - canvas->FillRect(toolbar_bounds,
|
| - tp->GetColor(ThemeProperties::COLOR_TOOLBAR));
|
| - }
|
| -
|
| - // Material Design has no corners to mask out.
|
| -
|
| - // Top stroke. For Material Design, the toolbar has no side strokes.
|
| - gfx::Rect separator_rect(x, y, w, 0);
|
| - gfx::ScopedCanvas scoped_canvas(canvas);
|
| - gfx::Rect tabstrip_bounds(GetBoundsForTabStrip(browser_view()->tabstrip()));
|
| - tabstrip_bounds.set_x(GetMirroredXForRect(tabstrip_bounds));
|
| - canvas->ClipRect(tabstrip_bounds, SkRegion::kDifference_Op);
|
| - separator_rect.set_y(tabstrip_bounds.bottom());
|
| - BrowserView::Paint1pxHorizontalLine(canvas, GetToolbarTopSeparatorColor(),
|
| - separator_rect, true);
|
|
|
| - // Toolbar/content separator.
|
| - toolbar_bounds.Inset(kClientEdgeThickness, 0);
|
| - BrowserView::Paint1pxHorizontalLine(canvas, separator_color, toolbar_bounds,
|
| - true);
|
| + // Background.
|
| + if (tp->HasCustomImage(IDR_THEME_TOOLBAR)) {
|
| + canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR),
|
| + x + GetThemeBackgroundXInset(),
|
| + y - GetTopInset(false) - GetLayoutInsets(TAB).top(), x,
|
| + y, w, toolbar_bounds.height());
|
| } else {
|
| - const int kContentEdgeShadowThickness =
|
| - OpaqueBrowserFrameViewLayout::kContentEdgeShadowThickness;
|
| -
|
| - // Background. We need to create a separate layer so we can mask off the
|
| - // corners before compositing onto the frame.
|
| - canvas->sk_canvas()->saveLayer(
|
| - gfx::RectToSkRect(gfx::Rect(x - kContentEdgeShadowThickness, y,
|
| - w + kContentEdgeShadowThickness * 2, h)),
|
| - nullptr);
|
| -
|
| - // The top stroke is drawn using the IDR_CONTENT_TOP_XXX images, which
|
| - // overlay the toolbar. The top 2 px of these images is the actual top
|
| - // stroke + shadow, and is partly transparent, so the toolbar background
|
| - // shouldn't be drawn over it.
|
| - const int bg_dest_y = y + kContentEdgeShadowThickness;
|
| - canvas->TileImageInt(*bg, x + GetThemeBackgroundXInset(), bg_dest_y - bg_y,
|
| - x, bg_dest_y, w, h - kContentEdgeShadowThickness);
|
| -
|
| - // Mask out the corners.
|
| - const gfx::ImageSkia* const left =
|
| - tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER);
|
| - const int img_w = left->width();
|
| - x -= kContentEdgeShadowThickness;
|
| - SkPaint paint;
|
| - paint.setXfermodeMode(SkXfermode::kDstIn_Mode);
|
| - canvas->DrawImageInt(
|
| - *tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER_MASK), 0, 0, img_w,
|
| - h, x, y, img_w, h, false, paint);
|
| - const int right_x =
|
| - toolbar_bounds.right() + kContentEdgeShadowThickness - img_w;
|
| - canvas->DrawImageInt(
|
| - *tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER_MASK), 0, 0, img_w,
|
| - h, right_x, y, img_w, h, false, paint);
|
| - canvas->Restore();
|
| -
|
| - // Corner and side strokes.
|
| - canvas->DrawImageInt(*left, 0, 0, img_w, h, x, y, img_w, h, false);
|
| - canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER),
|
| - 0, 0, img_w, h, right_x, y, img_w, h, false);
|
| -
|
| - // Top stroke.
|
| - x += img_w;
|
| - canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_CENTER), x, y,
|
| - right_x - x, kContentEdgeShadowThickness);
|
| -
|
| - // Toolbar/content separator.
|
| - toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness,
|
| - kClientEdgeThickness, 0);
|
| - canvas->FillRect(toolbar_bounds, separator_color);
|
| + canvas->FillRect(toolbar_bounds,
|
| + tp->GetColor(ThemeProperties::COLOR_TOOLBAR));
|
| }
|
| +
|
| + // Top stroke.
|
| + gfx::Rect separator_rect(x, y, w, 0);
|
| + gfx::ScopedCanvas scoped_canvas(canvas);
|
| + gfx::Rect tabstrip_bounds(GetBoundsForTabStrip(browser_view()->tabstrip()));
|
| + tabstrip_bounds.set_x(GetMirroredXForRect(tabstrip_bounds));
|
| + canvas->sk_canvas()->clipRect(gfx::RectToSkRect(tabstrip_bounds),
|
| + SkRegion::kDifference_Op);
|
| + separator_rect.set_y(tabstrip_bounds.bottom());
|
| + BrowserView::Paint1pxHorizontalLine(canvas, GetToolbarTopSeparatorColor(),
|
| + separator_rect, true);
|
| +
|
| + // Toolbar/content separator.
|
| + BrowserView::Paint1pxHorizontalLine(
|
| + canvas, tp->GetColor(ThemeProperties::COLOR_TOOLBAR_BOTTOM_SEPARATOR),
|
| + toolbar_bounds, true);
|
| }
|
|
|
| void OpaqueBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) const {
|
| + const bool tabstrip_visible = browser_view()->IsTabStripVisible();
|
| gfx::Rect client_bounds =
|
| layout_->CalculateClientAreaBounds(width(), height());
|
| const int x = client_bounds.x();
|
| int y = client_bounds.y();
|
| const int w = client_bounds.width();
|
| - const int right = client_bounds.right();
|
| + // If the toolbar isn't going to draw a top edge for us, draw one ourselves.
|
| + if (!tabstrip_visible) {
|
| + client_bounds.Inset(-kClientEdgeThickness, -1, -kClientEdgeThickness,
|
| + client_bounds.height());
|
| + BrowserView::Paint1pxHorizontalLine(canvas, GetToolbarTopSeparatorColor(),
|
| + client_bounds, true);
|
| + }
|
| +
|
| + // In maximized mode, the only edge to draw is the top one, so we're done.
|
| + if (layout_->IsTitleBarCondensed())
|
| + return;
|
|
|
| - const bool tabstrip_visible = browser_view()->IsTabStripVisible();
|
| - SkColor toolbar_color;
|
| const ui::ThemeProvider* tp = GetThemeProvider();
|
| - const bool md = ui::MaterialDesignController::IsModeMaterial();
|
| const gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
|
| const bool incognito = browser_view()->IsIncognito();
|
| - const bool toolbar_visible = IsToolbarVisible();
|
| - int img_y_offset = 0;
|
| + SkColor toolbar_color;
|
| if (tabstrip_visible) {
|
| toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR);
|
|
|
| - // Pre-Material Design, the client edge images start below the toolbar. In
|
| - // MD the client edge images start at the top of the toolbar.
|
| - y += md ? toolbar_bounds.y() : toolbar_bounds.bottom();
|
| + // The client edge images start at the top of the toolbar.
|
| + y += toolbar_bounds.y();
|
| } else {
|
| // Note that windows without tabstrips are never themed, so we always use
|
| // the default colors in this section.
|
| toolbar_color = ThemeProperties::GetDefaultColor(
|
| ThemeProperties::COLOR_TOOLBAR, incognito);
|
| -
|
| - // The toolbar isn't going to draw a top edge for us, so draw one ourselves.
|
| - if (md) {
|
| - client_bounds.Inset(-kClientEdgeThickness, -1, -kClientEdgeThickness,
|
| - client_bounds.height());
|
| -
|
| - // Shadow.
|
| - BrowserView::Paint1pxHorizontalLine(canvas, GetToolbarTopSeparatorColor(),
|
| - client_bounds, true);
|
| - } else {
|
| - // Ensure the client edge rects are drawn to the top of the location bar.
|
| - img_y_offset = kClientEdgeThickness;
|
| -
|
| - // Shadow.
|
| - const gfx::ImageSkia* const top_left =
|
| - tp->GetImageSkiaNamed(IDR_APP_TOP_LEFT);
|
| - const int img_w = top_left->width();
|
| - const int height = top_left->height();
|
| - const int top_y = y + img_y_offset - height;
|
| - canvas->DrawImageInt(*top_left, 0, 0, img_w, height, x - img_w, top_y,
|
| - img_w, height, false);
|
| - canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_CENTER), 0, 0, x,
|
| - top_y, w, height);
|
| - canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_RIGHT), 0, 0,
|
| - img_w, height, right, top_y, img_w, height, false);
|
| - }
|
| }
|
|
|
| - // In maximized mode, the only edge to draw is the top one, so we're done.
|
| - if (layout_->IsTitleBarCondensed())
|
| - return;
|
| -
|
| - const int img_y = y + img_y_offset;
|
| - const int bottom = std::max(y, height() - NonClientBorderThickness());
|
| - const int height = bottom - y;
|
| - const int img_h = bottom - img_y;
|
| -
|
| - // Draw the client edge images. For non-MD, we fill the toolbar color
|
| - // underneath these images so they will lighten/darken it appropriately to
|
| - // create a "3D shaded" effect. For MD, where we want a flatter appearance,
|
| - // we do the filling afterwards so the user sees the unmodified toolbar color.
|
| - if (!md)
|
| - FillClientEdgeRects(x, y, w, height, true, toolbar_color, canvas);
|
| + // Draw the client edges.
|
| const gfx::ImageSkia* const right_image =
|
| tp->GetImageSkiaNamed(IDR_CONTENT_RIGHT_SIDE);
|
| const int img_w = right_image->width();
|
| - canvas->TileImageInt(*right_image, right, img_y, img_w, img_h);
|
| + const int right = client_bounds.right();
|
| + const int bottom = std::max(y, height() - NonClientBorderThickness());
|
| + const int height = bottom - y;
|
| + canvas->TileImageInt(*right_image, right, y, img_w, height);
|
| canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_RIGHT_CORNER),
|
| right, bottom);
|
| const gfx::ImageSkia* const bottom_image =
|
| @@ -740,13 +645,11 @@ void OpaqueBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) const {
|
| canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_LEFT_CORNER),
|
| x - img_w, bottom);
|
| canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE), x - img_w,
|
| - img_y, img_w, img_h);
|
| - if (md)
|
| - FillClientEdgeRects(x, y, w, height, true, toolbar_color, canvas);
|
| -
|
| + y, img_w, height);
|
| + FillClientEdgeRects(x, y, w, height, true, toolbar_color, canvas);
|
|
|
| // For popup windows, draw location bar sides.
|
| - if (!tabstrip_visible && toolbar_visible) {
|
| + if (!tabstrip_visible && IsToolbarVisible()) {
|
| FillClientEdgeRects(
|
| x, y, w, toolbar_bounds.height(), false,
|
| LocationBarView::GetBorderColor(incognito), canvas);
|
|
|