diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-14 21:16:40 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-14 21:16:40 +0000 |
commit | 9df1e88e20b950bf62e2f2a0f0ecb60d523b7559 (patch) | |
tree | 3d080460d1812910c2e220e7b051f137ea78b5c1 /ash/frame | |
parent | 74f778ee567a5e18ae6766416711b92fc6e7f39a (diff) | |
download | chromium_src-9df1e88e20b950bf62e2f2a0f0ecb60d523b7559.zip chromium_src-9df1e88e20b950bf62e2f2a0f0ecb60d523b7559.tar.gz chromium_src-9df1e88e20b950bf62e2f2a0f0ecb60d523b7559.tar.bz2 |
Fixes bugs wrt to painting window header
- Fixes bug where we paint the maximized task manager window title white (a relic from when the task manager had a black header background when maximized)
- Fixes painting of the border highlight. There are bugs in painting the border highlight for both browser and non-browser windows.
- Split up HeaderPainter::PainterBorder() to HeaderPainter::PaintHighlightForRestoredBrowserWindow() and HeaderPainter::PaintHighlightForInactiveRestoredWindow() in preparation for refactor in https://codereview.chromium.org/189463013/
BUG=352042
TEST=None
Review URL: https://codereview.chromium.org/199283004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257201 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/frame')
-rw-r--r-- | ash/frame/header_painter.cc | 149 | ||||
-rw-r--r-- | ash/frame/header_painter.h | 9 |
2 files changed, 86 insertions, 72 deletions
diff --git a/ash/frame/header_painter.cc b/ash/frame/header_painter.cc index 6e18d95..4a9195f 100644 --- a/ash/frame/header_painter.cc +++ b/ash/frame/header_painter.cc @@ -39,10 +39,12 @@ const int kTitleLogoSpacing = 5; const int kTitleIconOffsetX = 5; // Space between window edge and title text, when there is no icon. const int kTitleNoIconOffsetX = 8; -// Color for the non-maximized window title text. -const SkColor kNonMaximizedWindowTitleTextColor = SkColorSetRGB(40, 40, 40); -// Color for the maximized window title text. -const SkColor kMaximizedWindowTitleTextColor = SK_ColorWHITE; +// Color for the non-browser window title text. +const SkColor kWindowTitleTextColor = SkColorSetRGB(40, 40, 40); +// Color for the restored browser window title text. +const SkColor kRestoredBrowserWindowTitleTextColor = SkColorSetRGB(40, 40, 40); +// Color for the maximized browser window title text. +const SkColor kMaximizedBrowserWindowTitleTextColor = SK_ColorWHITE; // Size of header/content separator line below the header image for non-browser // windows. const int kHeaderContentSeparatorSize = 1; @@ -308,7 +310,14 @@ void HeaderPainter::PaintHeader(gfx::Canvas* canvas, previous_theme_frame_id_ = theme_frame_id; previous_theme_frame_overlay_id_ = theme_frame_overlay_id; - PaintBorder(canvas, mode); + if (!frame_->IsMaximized() && !frame_->IsFullscreen()) { + if (style_ == STYLE_BROWSER) { + PaintHighlightForRestoredBrowserWindow(canvas); + } else { + if (mode == MODE_INACTIVE) + PaintHighlightForInactiveRestoredWindow(canvas); + } + } } void HeaderPainter::PaintHeaderContentSeparator(gfx::Canvas* canvas, @@ -336,8 +345,12 @@ void HeaderPainter::PaintTitleBar(gfx::Canvas* canvas, if (delegate && delegate->ShouldShowWindowTitle()) { gfx::Rect title_bounds = GetTitleBounds(title_font_list); title_bounds.set_x(header_view_->GetMirroredXForRect(title_bounds)); - SkColor title_color = (frame_->IsMaximized() || frame_->IsFullscreen()) ? - kMaximizedWindowTitleTextColor : kNonMaximizedWindowTitleTextColor; + SkColor title_color = kWindowTitleTextColor; + if (style_ == STYLE_BROWSER) { + title_color = (frame_->IsMaximized() || frame_->IsFullscreen()) ? + kMaximizedBrowserWindowTitleTextColor : + kRestoredBrowserWindowTitleTextColor; + } canvas->DrawStringRectWithFlags(delegate->GetWindowTitle(), title_font_list, title_color, @@ -402,86 +415,82 @@ void HeaderPainter::AnimationProgressed(const gfx::Animation* animation) { /////////////////////////////////////////////////////////////////////////////// // HeaderPainter, private: -void HeaderPainter::PaintBorder(gfx::Canvas* canvas, Mode mode) { - if (frame_->IsMaximized() || - frame_->IsFullscreen() || - (style_ == STYLE_OTHER && mode == MODE_ACTIVE)) { - return; - } - - gfx::ImageSkia top_left_corner; - gfx::ImageSkia top_right_corner; - gfx::ImageSkia top_edge; - gfx::ImageSkia left_edge; - gfx::ImageSkia right_edge; - gfx::ImageSkia bottom_edge; - +void HeaderPainter::PaintHighlightForRestoredBrowserWindow( + gfx::Canvas* canvas) { ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); - if (style_ == STYLE_BROWSER) { - top_left_corner = *rb.GetImageSkiaNamed( - IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_LEFT); - top_right_corner = *rb.GetImageSkiaNamed( - IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_RIGHT); - top_edge = *rb.GetImageSkiaNamed(IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP); - left_edge = *rb.GetImageSkiaNamed( - IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_LEFT); - right_edge = *rb.GetImageSkiaNamed( - IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_RIGHT); - } else { - top_edge = *rb.GetImageSkiaNamed( - IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_TOP); - left_edge = *rb.GetImageSkiaNamed( - IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_LEFT); - right_edge = *rb.GetImageSkiaNamed( - IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_RIGHT); - bottom_edge = *rb.GetImageSkiaNamed( - IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_BOTTOM); - } - - DCHECK(!top_edge.isNull()); - DCHECK(!left_edge.isNull()); - DCHECK(!right_edge.isNull()); + gfx::ImageSkia top_left_corner = *rb.GetImageSkiaNamed( + IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_LEFT); + gfx::ImageSkia top_right_corner = *rb.GetImageSkiaNamed( + IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_RIGHT); + gfx::ImageSkia top_edge = *rb.GetImageSkiaNamed( + IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP); + gfx::ImageSkia left_edge = *rb.GetImageSkiaNamed( + IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_LEFT); + gfx::ImageSkia right_edge = *rb.GetImageSkiaNamed( + IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_RIGHT); int top_left_width = top_left_corner.width(); int top_left_height = top_left_corner.height(); - if (!top_left_corner.isNull()) { - canvas->DrawImageInt(top_left_corner, 0, 0); - } + canvas->DrawImageInt(top_left_corner, 0, 0); + int top_right_width = top_right_corner.width(); int top_right_height = top_right_corner.height(); - if (!top_right_corner.isNull()) { - canvas->DrawImageInt(top_right_corner, - header_view_->width() - top_right_corner.width(), - top_right_height); - } + canvas->DrawImageInt(top_right_corner, + header_view_->width() - top_right_width, + 0); - canvas->TileImageInt(top_edge, + canvas->TileImageInt( + top_edge, top_left_width, 0, - header_view_->width() - top_left_width - top_right_corner.width(), + header_view_->width() - top_left_width - top_right_width, top_edge.height()); - // TODO(pkotwicz): Compute |bottom| more accurately. The computation is - // inaccurate for browser windows. - int bottom = header_height_ - kHeaderContentSeparatorSize; - int bottom_height = bottom_edge.height(); - if (!bottom_edge.isNull()) { - canvas->TileImageInt(bottom_edge, - 0, bottom - bottom_height, - header_view_->width(), bottom_height); - } - - int left_edge_height = bottom - bottom_height - top_left_height; canvas->TileImageInt(left_edge, - 0, top_left_height, - left_edge.width(), left_edge_height); + 0, + top_left_height, + left_edge.width(), + header_height_ - top_left_height); - int right_edge_height = bottom - bottom_height - top_right_height; canvas->TileImageInt(right_edge, header_view_->width() - right_edge.width(), top_right_height, right_edge.width(), - right_edge_height); + header_height_ - top_right_height); +} + +void HeaderPainter::PaintHighlightForInactiveRestoredWindow( + gfx::Canvas* canvas) { + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); + gfx::ImageSkia top_edge = *rb.GetImageSkiaNamed( + IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_TOP); + gfx::ImageSkia left_edge = *rb.GetImageSkiaNamed( + IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_LEFT); + gfx::ImageSkia right_edge = *rb.GetImageSkiaNamed( + IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_RIGHT); + gfx::ImageSkia bottom_edge = *rb.GetImageSkiaNamed( + IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_BOTTOM); + + int left_edge_width = left_edge.width(); + int right_edge_width = right_edge.width(); + canvas->DrawImageInt(left_edge, 0, 0); + canvas->DrawImageInt(right_edge, header_view_->width() - right_edge_width, 0); + canvas->TileImageInt( + top_edge, + left_edge_width, + 0, + header_view_->width() - left_edge_width - right_edge_width, + top_edge.height()); + + DCHECK_EQ(left_edge.height(), right_edge.height()); + int bottom = left_edge.height(); + int bottom_height = bottom_edge.height(); + canvas->TileImageInt( + bottom_edge, + left_edge_width, + bottom - bottom_height, + header_view_->width() - left_edge_width - right_edge_width, + bottom_height); } void HeaderPainter::UpdateCaptionButtonImages() { diff --git a/ash/frame/header_painter.h b/ash/frame/header_painter.h index 5207583..f4f8d36 100644 --- a/ash/frame/header_painter.h +++ b/ash/frame/header_painter.h @@ -129,8 +129,13 @@ class ASH_EXPORT HeaderPainter : public gfx::AnimationDelegate { private: FRIEND_TEST_ALL_PREFIXES(HeaderPainterTest, TitleIconAlignment); - // Paints the border around the header. - void PaintBorder(gfx::Canvas* canvas, Mode mode); + // Paints highlight around the edge of the header for restored browser + // windows. + void PaintHighlightForRestoredBrowserWindow(gfx::Canvas* canvas); + + // Paints highlight around the edge of the header for inactive restored + // non-browser windows. + void PaintHighlightForInactiveRestoredWindow(gfx::Canvas* canvas); // Updates the images used for the minimize, restore and close buttons. void UpdateCaptionButtonImages(); |