1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_header_painter_ash.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/frame/caption_buttons/frame_caption_button_container_view.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/frame/header_painter_util.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h" // DCHECK 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_frame.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "grit/theme_resources.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/skia/include/core/SkCanvas.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/skia/include/core/SkPaint.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/skia/include/core/SkPath.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/theme_provider.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/animation/slide_animation.h" 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/canvas.h" 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/image/image_skia.h" 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/rect.h" 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/gfx/skia_util.h" 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/view.h" 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/widget/widget.h" 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h" 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using views::Widget; 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace { 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Color for the window title text. 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst SkColor kWindowTitleTextColor = SkColorSetRGB(40, 40, 40); 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Duration of crossfade animation for activating and deactivating frame. 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kActivationCrossfadeDurationMs = 200; 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Tiles an image into an area, rounding the top corners. Samples |image| 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// starting |image_inset_x| pixels from the left of the image. 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void TileRoundRect(gfx::Canvas* canvas, 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::ImageSkia& image, 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const SkPaint& paint, 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::Rect& bounds, 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_left_corner_radius, 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_right_corner_radius, 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int image_inset_x) { 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkRect rect = gfx::RectToSkRect(bounds); 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const SkScalar kTopLeftRadius = SkIntToScalar(top_left_corner_radius); 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const SkScalar kTopRightRadius = SkIntToScalar(top_right_corner_radius); 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkScalar radii[8] = { 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kTopLeftRadius, kTopLeftRadius, // top-left 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kTopRightRadius, kTopRightRadius, // top-right 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 0, // bottom-right 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 0}; // bottom-left 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkPath path; 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) path.addRoundRect(rect, radii, SkPath::kCW_Direction); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->DrawImageInPath(image, -image_inset_x, 0, path, paint); 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Tiles |frame_image| and |frame_overlay_image| into an area, rounding the top 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// corners. 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void PaintFrameImagesInRoundRect(gfx::Canvas* canvas, 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::ImageSkia& frame_image, 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::ImageSkia& frame_overlay_image, 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const SkPaint& paint, 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::Rect& bounds, 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int corner_radius, 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int image_inset_x) { 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkXfermode::Mode normal_mode; 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkXfermode::AsMode(NULL, &normal_mode); 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If |paint| is using an unusual SkXfermode::Mode (this is the case while 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // crossfading), we must create a new canvas to overlay |frame_image| and 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |frame_overlay_image| using |normal_mode| and then paint the result 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // using the unusual mode. We try to avoid this because creating a new 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // browser-width canvas is expensive. 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool fast_path = (frame_overlay_image.isNull() || 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkXfermode::IsMode(paint.getXfermode(), normal_mode)); 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (fast_path) { 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TileRoundRect(canvas, frame_image, paint, bounds, corner_radius, 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) corner_radius, image_inset_x); 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!frame_overlay_image.isNull()) { 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Adjust |bounds| such that |frame_overlay_image| is not tiled. 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect overlay_bounds = bounds; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) overlay_bounds.Intersect( 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect(bounds.origin(), frame_overlay_image.size())); 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_left_corner_radius = corner_radius; 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_right_corner_radius = corner_radius; 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (overlay_bounds.width() < bounds.width() - corner_radius) 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_right_corner_radius = 0; 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TileRoundRect(canvas, frame_overlay_image, paint, overlay_bounds, 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_left_corner_radius, top_right_corner_radius, 0); 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Canvas temporary_canvas(bounds.size(), canvas->image_scale(), false); 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) temporary_canvas.TileImageInt(frame_image, 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) image_inset_x, 0, 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 0, 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bounds.width(), bounds.height()); 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) temporary_canvas.DrawImageInt(frame_overlay_image, 0, 0); 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TileRoundRect(canvas, gfx::ImageSkia(temporary_canvas.ExtractImageRep()), 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) paint, bounds, corner_radius, corner_radius, 0); 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// BrowserHeaderPainterAsh, public: 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)BrowserHeaderPainterAsh::BrowserHeaderPainterAsh() 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : frame_(NULL), 113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_tabbed_(false), 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_incognito_(false), 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_(NULL), 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window_icon_(NULL), 11703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) window_icon_x_inset_(ash::HeaderPainterUtil::GetDefaultLeftViewXInset()), 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_(NULL), 119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) painted_height_(0), 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) initial_paint_(true), 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mode_(MODE_INACTIVE), 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) activation_animation_(new gfx::SlideAnimation(this)) { 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)BrowserHeaderPainterAsh::~BrowserHeaderPainterAsh() { 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::Init( 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::Widget* frame, 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BrowserView* browser_view, 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::View* header_view, 132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::View* window_icon, 133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::FrameCaptionButtonContainerView* caption_button_container) { 134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(frame); 135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(browser_view); 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(header_view); 137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // window_icon may be NULL. 138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(caption_button_container); 139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_ = frame; 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_tabbed_ = browser_view->browser()->is_type_tabbed(); 142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_incognito_ = !browser_view->IsRegularOrGuestSession(); 143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_ = header_view; 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) window_icon_ = window_icon; 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_ = caption_button_container; 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int BrowserHeaderPainterAsh::GetMinimumHeaderWidth() const { 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Ensure we have enough space for the window icon and buttons. We allow 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the title string to collapse to zero width. 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return GetTitleBounds().x() + 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_->GetMinimumSize().width(); 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::PaintHeader(gfx::Canvas* canvas, Mode mode) { 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Mode old_mode = mode_; 158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mode_ = mode; 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (mode_ != old_mode) { 161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!initial_paint_ && 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::HeaderPainterUtil::CanAnimateActivation(frame_)) { 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) activation_animation_->SetSlideDuration(kActivationCrossfadeDurationMs); 164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (mode_ == MODE_ACTIVE) 165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) activation_animation_->Show(); 166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else 167a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) activation_animation_->Hide(); 168a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 169a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (mode_ == MODE_ACTIVE) 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) activation_animation_->Reset(1); 171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else 172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) activation_animation_->Reset(0); 173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) initial_paint_ = false; 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int corner_radius = (frame_->IsMaximized() || frame_->IsFullscreen()) ? 178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0 : ash::HeaderPainterUtil::GetTopCornerRadiusWhenRestored(); 179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int active_alpha = activation_animation_->CurrentValueBetween(0, 255); 181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int inactive_alpha = 255 - active_alpha; 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SkPaint paint; 184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (inactive_alpha > 0) { 185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (active_alpha > 0) 186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) paint.setXfermodeMode(SkXfermode::kPlus_Mode); 187a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 188a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia inactive_frame_image; 189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia inactive_frame_overlay_image; 190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFrameImages(MODE_INACTIVE, &inactive_frame_image, 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &inactive_frame_overlay_image); 192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) paint.setAlpha(inactive_alpha); 194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PaintFrameImagesInRoundRect( 195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas, 196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) inactive_frame_image, 197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) inactive_frame_overlay_image, 198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) paint, 199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetPaintedBounds(), 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) corner_radius, 201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::HeaderPainterUtil::GetThemeBackgroundXInset()); 202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 204a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (active_alpha > 0) { 205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia active_frame_image; 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia active_frame_overlay_image; 207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFrameImages(MODE_ACTIVE, &active_frame_image, 208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) &active_frame_overlay_image); 209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) paint.setAlpha(active_alpha); 211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PaintFrameImagesInRoundRect( 212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas, 213a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) active_frame_image, 214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) active_frame_overlay_image, 215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) paint, 216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetPaintedBounds(), 217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) corner_radius, 218a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ash::HeaderPainterUtil::GetThemeBackgroundXInset()); 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!frame_->IsMaximized() && !frame_->IsFullscreen()) 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PaintHighlightForRestoredWindow(canvas); 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (frame_->widget_delegate() && 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_->widget_delegate()->ShouldShowWindowTitle()) { 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) PaintTitleBar(canvas); 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::LayoutHeader() { 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Purposefully set |painted_height_| to an invalid value. We cannot use 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // |painted_height_| because the computation of |painted_height_| may depend 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // on having laid out the window controls. 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) painted_height_ = -1; 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) UpdateCaptionButtonImages(); 2366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) caption_button_container_->Layout(); 237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Size caption_button_container_size = 239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_->GetPreferredSize(); 240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_->SetBounds( 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_->width() - caption_button_container_size.width(), 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_size.width(), 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_size.height()); 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (window_icon_) { 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Vertically center the window icon with respect to the caption button 248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // container. 24903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) gfx::Size icon_size(window_icon_->GetPreferredSize()); 25003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int icon_offset_y = (caption_button_container_->height() - 25103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) icon_size.height()) / 2; 25203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) window_icon_->SetBounds(window_icon_x_inset_, 25303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) icon_offset_y, 25403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) icon_size.width(), 25503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) icon_size.height()); 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 259a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int BrowserHeaderPainterAsh::GetHeaderHeightForPainting() const { 260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return painted_height_; 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::SetHeaderHeightForPainting(int height) { 264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) painted_height_ = height; 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::SchedulePaintForTitle() { 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_->SchedulePaintInRect(GetTitleBounds()); 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void BrowserHeaderPainterAsh::UpdateLeftViewXInset(int left_view_x_inset) { 27203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) window_icon_x_inset_ = left_view_x_inset; 27303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 27403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 276a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// gfx::AnimationDelegate overrides: 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::AnimationProgressed( 279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::Animation* animation) { 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_->SchedulePaintInRect(GetPaintedBounds()); 281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 284a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// BrowserHeaderPainterAsh, private: 285a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::PaintHighlightForRestoredWindow( 287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Canvas* canvas) { 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia top_left_corner = *rb.GetImageSkiaNamed( 290c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_TOP_LEFT); 291a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia top_right_corner = *rb.GetImageSkiaNamed( 292c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_TOP_RIGHT); 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia top_edge = *rb.GetImageSkiaNamed( 294c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_TOP); 295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia left_edge = *rb.GetImageSkiaNamed( 296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_LEFT); 297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia right_edge = *rb.GetImageSkiaNamed( 298c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IDR_ASH_BROWSER_WINDOW_HEADER_SHADE_RIGHT); 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 300a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_left_width = top_left_corner.width(); 301a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_left_height = top_left_corner.height(); 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->DrawImageInt(top_left_corner, 0, 0); 303a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 304a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_right_width = top_right_corner.width(); 305a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int top_right_height = top_right_corner.height(); 306a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->DrawImageInt(top_right_corner, 307a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_->width() - top_right_width, 308a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0); 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 310a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->TileImageInt( 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_edge, 312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_left_width, 313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 314a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_->width() - top_left_width - top_right_width, 315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_edge.height()); 316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->TileImageInt(left_edge, 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, 319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_left_height, 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) left_edge.width(), 321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) painted_height_ - top_left_height); 322a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 323a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->TileImageInt(right_edge, 324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) view_->width() - right_edge.width(), 325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) top_right_height, 326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) right_edge.width(), 327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) painted_height_ - top_right_height); 328a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::PaintTitleBar(gfx::Canvas* canvas) { 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // The window icon is painted by its own views::View. 332a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Rect title_bounds = GetTitleBounds(); 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) title_bounds.set_x(view_->GetMirroredXForRect(title_bounds)); 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) canvas->DrawStringRectWithFlags(frame_->widget_delegate()->GetWindowTitle(), 335a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) BrowserFrame::GetTitleFontList(), 3360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch kWindowTitleTextColor, 337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) title_bounds, 338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::Canvas::NO_SUBPIXEL_RENDERING); 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::GetFrameImages( 342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Mode mode, 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia* frame_image, 344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia* frame_overlay_image) const { 345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (is_tabbed_) { 346a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetFrameImagesForTabbedBrowser(mode, frame_image, frame_overlay_image); 347a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 348a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *frame_image = GetFrameImageForNonTabbedBrowser(mode); 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *frame_overlay_image = gfx::ImageSkia(); 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::GetFrameImagesForTabbedBrowser( 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Mode mode, 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia* frame_image, 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia* frame_overlay_image) const { 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int frame_image_id = 0; 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int frame_overlay_image_id = 0; 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::ThemeProvider* tp = frame_->GetThemeProvider(); 361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (tp->HasCustomImage(IDR_THEME_FRAME_OVERLAY) && !is_incognito_) { 362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_overlay_image_id = (mode == MODE_ACTIVE) ? 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDR_THEME_FRAME_OVERLAY : IDR_THEME_FRAME_OVERLAY_INACTIVE; 364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 365a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (mode == MODE_ACTIVE) { 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_image_id = is_incognito_ ? 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME; 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) frame_image_id = is_incognito_ ? 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE; 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *frame_image = *tp->GetImageSkiaNamed(frame_image_id); 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *frame_overlay_image = (frame_overlay_image_id == 0) ? 376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) gfx::ImageSkia() : *tp->GetImageSkiaNamed(frame_overlay_image_id); 377a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 378a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::ImageSkia BrowserHeaderPainterAsh::GetFrameImageForNonTabbedBrowser( 380a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Mode mode) const { 3810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Request the images from the ResourceBundle (and not from the ThemeProvider) 3820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // in order to get the default non-themed assets. 383a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (mode == MODE_ACTIVE) { 385a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return *rb.GetImageSkiaNamed(is_incognito_ ? 3860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_THEME_FRAME_INCOGNITO : IDR_THEME_FRAME); 387a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 388a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return *rb.GetImageSkiaNamed(is_incognito_ ? 3890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_THEME_FRAME_INCOGNITO_INACTIVE : IDR_THEME_FRAME_INACTIVE); 390a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void BrowserHeaderPainterAsh::UpdateCaptionButtonImages() { 3930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int hover_background_id = 0; 3940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch int pressed_background_id = 0; 395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (frame_->IsMaximized() || frame_->IsFullscreen()) { 3960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id = 3970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H; 3980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id = 3990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_P; 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 4010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id = 4020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_H; 4030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id = 4040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_BACKGROUND_RESTORED_P; 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 4060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch caption_button_container_->SetButtonImages( 4070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ash::CAPTION_BUTTON_ICON_MINIMIZE, 4080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MINIMIZE, 4090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MINIMIZE, 4100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id, 4110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id); 41203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 41303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int size_icon_id = 0; 41403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (frame_->IsMaximized() || frame_->IsFullscreen()) 41503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size_icon_id = IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RESTORE; 41603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) else 41703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size_icon_id = IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZE; 4180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch caption_button_container_->SetButtonImages( 4190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ash::CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE, 42003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size_icon_id, 42103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) size_icon_id, 4220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id, 4230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id); 42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch caption_button_container_->SetButtonImages( 4260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ash::CAPTION_BUTTON_ICON_CLOSE, 4270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_CLOSE, 4280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_CLOSE, 4290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id, 4300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id); 4310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch caption_button_container_->SetButtonImages( 4320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ash::CAPTION_BUTTON_ICON_LEFT_SNAPPED, 4330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_LEFT_SNAPPED, 4340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_LEFT_SNAPPED, 4350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id, 4360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id); 4370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch caption_button_container_->SetButtonImages( 4380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ash::CAPTION_BUTTON_ICON_RIGHT_SNAPPED, 4390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RIGHT_SNAPPED, 4400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch IDR_ASH_BROWSER_WINDOW_CONTROL_ICON_RIGHT_SNAPPED, 4410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch hover_background_id, 4420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch pressed_background_id); 443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 445a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::Rect BrowserHeaderPainterAsh::GetPaintedBounds() const { 446a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return gfx::Rect(view_->width(), painted_height_); 447a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 448a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 449a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)gfx::Rect BrowserHeaderPainterAsh::GetTitleBounds() const { 450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ash::HeaderPainterUtil::GetTitleBounds(window_icon_, 451a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) caption_button_container_, BrowserFrame::GetTitleFontList()); 452a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 453