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

Unified Diff: chrome/browser/ui/views/frame/opaque_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 side-by-side diff with in-line comments
Download patch
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 019b455de868a1067f2cca23d71b56c16377d784..6ec0f447c8f7a748948a913b4051791c42b8bce1 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -32,7 +32,6 @@
#include "ui/base/hit_test.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/material_design/material_design_controller.h"
-#include "ui/base/resource/resource_bundle.h"
#include "ui/base/theme_provider.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/font_list.h"
@@ -620,26 +619,13 @@ void OpaqueBrowserFrameView::PaintRestoredFrameBorder(gfx::Canvas* canvas) {
}
void OpaqueBrowserFrameView::PaintMaximizedFrameBorder(gfx::Canvas* canvas) {
- ui::ThemeProvider* tp = GetThemeProvider();
frame_background_->set_frame_color(GetFrameColor());
frame_background_->set_theme_image(GetFrameImage());
frame_background_->set_theme_overlay_image(GetFrameOverlayImage());
frame_background_->set_top_area_height(GetTopAreaHeight());
frame_background_->set_maximized_top_inset(
GetTopInset(true) - GetTopInset(false));
-
frame_background_->PaintMaximized(canvas, this);
-
- // TODO(jamescook): Migrate this into FrameBackground.
- if (!browser_view()->IsToolbarVisible()) {
- // There's no toolbar to edge the frame border, so we need to draw a bottom
- // edge. The graphic we use for this has a built in client edge, so we clip
- // it off the bottom.
- gfx::ImageSkia* top_center = tp->GetImageSkiaNamed(IDR_APP_TOP_CENTER);
- int edge_height = top_center->height() - kClientEdgeThickness;
- canvas->TileImageInt(*top_center, 0,
- frame()->client_view()->y() - edge_height, width(), edge_height);
- }
}
void OpaqueBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) {
@@ -649,121 +635,103 @@ void OpaqueBrowserFrameView::PaintToolbarBackground(gfx::Canvas* canvas) {
gfx::Point toolbar_origin(toolbar_bounds.origin());
ConvertPointToTarget(browser_view(), this, &toolbar_origin);
toolbar_bounds.set_origin(toolbar_origin);
- int x = toolbar_bounds.x();
- const int y = toolbar_bounds.y();
- const int w = toolbar_bounds.width();
const int h = toolbar_bounds.height();
+ ui::ThemeProvider* tp = GetThemeProvider();
+ const SkColor separator_color =
+ tp->GetColor(ThemeProperties::COLOR_TOOLBAR_SEPARATOR);
// Background.
- const bool normal_mode = browser_view()->IsTabStripVisible();
- if (normal_mode) {
+ if (browser_view()->IsTabStripVisible()) {
// We need to create a separate layer to hold the background, so we can mask
// off the corners before compositing onto the frame.
+ int x = toolbar_bounds.x();
+ const int y = toolbar_bounds.y();
+ const int w = toolbar_bounds.width();
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. Furthermore, the toolbar may be in popup mode, where we
- // don't want rounded corners at all, and in that case dividing the toolbar
- // assets at this point, plus manipulating the horizontal offset of the top
- // pieces, lets us make the toolbar look almost as if it's intended to have
- // square corners.
- const int split_point = std::min(kContentEdgeShadowThickness, h);
- int split_y = y + split_point;
- int split_h = h - split_point;
- ui::ThemeProvider* tp = GetThemeProvider();
- if (split_h) {
- // Tile the toolbar image starting at the frame edge on the left and where
- // the horizontal tabstrip is (or would be) on the top.
- const int kToolbarBackground = IDR_THEME_TOOLBAR;
- // Avoid theming popup or app windows.
- gfx::ImageSkia* bg = normal_mode ?
- tp->GetImageSkiaNamed(kToolbarBackground) :
- ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
- kToolbarBackground);
- const int bg_y =
- GetTopInset(false) + Tab::GetYInsetForActiveTabBackground();
- canvas->TileImageInt(*bg, x + GetThemeBackgroundXInset(), split_y - bg_y, x,
- split_y, w, split_h);
- }
+ // 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 split_point = std::min(kContentEdgeShadowThickness, h);
+ if (h > split_point) {
+ // Tile the toolbar image starting at the frame edge on the left and where
+ // the tabstrip is on the top.
+ const int split_y = y + split_point;
+ const int bg_y =
+ GetTopInset(false) + Tab::GetYInsetForActiveTabBackground();
+ canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR),
+ x + GetThemeBackgroundXInset(), split_y - bg_y, x,
+ split_y, w, h - split_point);
+ }
- gfx::ImageSkia* left = tp->GetImageSkiaNamed(IDR_CONTENT_TOP_LEFT_CORNER);
- const int left_x = x - kContentEdgeShadowThickness;
- int img_w = left->width();
- gfx::ImageSkia* right = tp->GetImageSkiaNamed(IDR_CONTENT_TOP_RIGHT_CORNER);
- int right_x = toolbar_bounds.right() + kContentEdgeShadowThickness - img_w;
- if (normal_mode) {
// Mask out the corners.
+ gfx::ImageSkia* 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, left_x, y, img_w, h, false, paint);
+ 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, left_x, y, img_w, h, false);
- canvas->DrawImageInt(*right, 0, 0, img_w, h, right_x, y, img_w, h, false);
- } else {
- // Corner and side strokes.
- if (split_h) {
- const int img_h = left->height() - split_h;
- canvas->DrawImageInt(*left, 0, img_h, img_w, split_h, left_x, split_y,
- img_w, split_h, false);
- canvas->DrawImageInt(*right, 0, img_h, img_w, split_h, right_x, split_y,
- img_w, split_h, false);
+ 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, split_point);
+
+ if (ui::MaterialDesignController::IsModeMaterial()) {
+ // Toolbar/content separator.
+ toolbar_bounds.Inset(kClientEdgeThickness, 0);
+ BrowserView::Paint1pxHorizontalLine(canvas, separator_color,
+ toolbar_bounds);
+ return;
}
- --img_w;
- canvas->DrawImageInt(*left, 1, 0, img_w, split_point, left_x, y, img_w,
- split_point, false);
- ++right_x;
- canvas->DrawImageInt(*right, 0, 0, img_w, split_point, right_x, y, img_w,
- split_point, false);
}
- // Top stroke.
- x = left_x + img_w;
- canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_TOP_CENTER), x, y,
- right_x - x, split_point);
-
// Toolbar/content separator.
- const SkColor separator_color =
- tp->GetColor(ThemeProperties::COLOR_TOOLBAR_SEPARATOR);
- if (ui::MaterialDesignController::IsModeMaterial()) {
- toolbar_bounds.Inset(kClientEdgeThickness, 0);
- BrowserView::Paint1pxHorizontalLine(canvas, separator_color,
- toolbar_bounds);
- } else {
- toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness,
- kClientEdgeThickness, 0);
- canvas->FillRect(toolbar_bounds, separator_color);
- }
+ toolbar_bounds.Inset(kClientEdgeThickness, h - kClientEdgeThickness,
+ kClientEdgeThickness, 0);
+ canvas->FillRect(toolbar_bounds, separator_color);
}
void OpaqueBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) {
- ui::ThemeProvider* tp = GetThemeProvider();
- int y = frame()->client_view()->y();
-
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();
- const SkColor toolbar_color = tp->GetColor(ThemeProperties::COLOR_TOOLBAR);
+ const bool normal_mode = browser_view()->IsTabStripVisible();
+ ui::ThemeProvider* tp = GetThemeProvider();
+ const SkColor toolbar_color = normal_mode ?
+ tp->GetColor(ThemeProperties::COLOR_TOOLBAR) :
+ ThemeProperties::GetDefaultColor(ThemeProperties::COLOR_TOOLBAR);
- if (IsToolbarVisible()) {
+ const gfx::Rect toolbar_bounds(browser_view()->GetToolbarBounds());
+ if (normal_mode) {
// The client edge images start below the toolbar.
- y += browser_view()->GetToolbarBounds().bottom();
+ y += toolbar_bounds.bottom();
} else {
// The toolbar isn't going to draw a top edge for us, so draw one ourselves.
+ if (IsToolbarVisible()) {
+ y += toolbar_bounds.y() + kContentEdgeShadowThickness +
+ kClientEdgeThickness;
+ }
gfx::ImageSkia* top_left = tp->GetImageSkiaNamed(IDR_APP_TOP_LEFT);
const int img_w = top_left->width();
const int height = top_left->height();
@@ -774,6 +742,7 @@ void OpaqueBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) {
top_y, w, height);
canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_APP_TOP_RIGHT), 0, 0, img_w,
height, right, top_y, img_w, height, false);
+ client_bounds.set_y(y);
client_bounds.Inset(-kClientEdgeThickness, -kClientEdgeThickness,
-kClientEdgeThickness, client_bounds.height());
canvas->FillRect(client_bounds, toolbar_color);
@@ -797,8 +766,8 @@ void OpaqueBrowserFrameView::PaintClientEdge(gfx::Canvas* canvas) {
canvas->TileImageInt(*bottom_image, x, bottom, w, bottom_image->height());
canvas->DrawImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_BOTTOM_LEFT_CORNER),
x - img_w, bottom);
- gfx::ImageSkia* left_image = tp->GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE);
- canvas->TileImageInt(*left_image, x - img_w, y, img_w, height);
+ canvas->TileImageInt(*tp->GetImageSkiaNamed(IDR_CONTENT_LEFT_SIDE), x - img_w,
+ y, img_w, height);
// Draw the toolbar color so that the client edges show the right color even
// where not covered by the toolbar image. NOTE: We do this after drawing the
« no previous file with comments | « chrome/browser/ui/views/frame/glass_browser_frame_view.cc ('k') | chrome/browser/ui/views/layout_constants.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698