1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_HEADER_PAINTER_ASH_H_ 6#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_HEADER_PAINTER_ASH_H_ 7 8#include "ash/frame/header_painter.h" 9#include "base/basictypes.h" 10#include "base/compiler_specific.h" // OVERRIDE 11#include "base/memory/scoped_ptr.h" 12#include "ui/gfx/animation/animation_delegate.h" 13 14class BrowserView; 15 16namespace ash { 17class FrameCaptionButtonContainerView; 18} 19 20namespace gfx { 21class ImageSkia; 22class Rect; 23class SlideAnimation; 24} 25namespace views { 26class View; 27class Widget; 28} 29 30// Helper class for painting the browser window header. 31class BrowserHeaderPainterAsh : public ash::HeaderPainter, 32 public gfx::AnimationDelegate { 33 public: 34 BrowserHeaderPainterAsh(); 35 virtual ~BrowserHeaderPainterAsh(); 36 37 // BrowserHeaderPainterAsh does not take ownership of any of the parameters. 38 void Init( 39 views::Widget* frame, 40 BrowserView* browser_view, 41 views::View* header_view, 42 views::View* window_icon, 43 ash::FrameCaptionButtonContainerView* caption_button_container); 44 45 // ash::HeaderPainter overrides: 46 virtual int GetMinimumHeaderWidth() const OVERRIDE; 47 virtual void PaintHeader(gfx::Canvas* canvas, Mode mode) OVERRIDE; 48 virtual void LayoutHeader() OVERRIDE; 49 virtual int GetHeaderHeightForPainting() const OVERRIDE; 50 virtual void SetHeaderHeightForPainting(int height) OVERRIDE; 51 virtual void SchedulePaintForTitle() OVERRIDE; 52 virtual void UpdateLeftViewXInset(int left_view_x_inset) OVERRIDE; 53 54 private: 55 // gfx::AnimationDelegate override: 56 virtual void AnimationProgressed(const gfx::Animation* animation) OVERRIDE; 57 58 // Paints highlight around the edge of the header for restored windows. 59 void PaintHighlightForRestoredWindow(gfx::Canvas* canvas); 60 61 // Paints the title bar, primarily the title string. 62 void PaintTitleBar(gfx::Canvas* canvas); 63 64 // Sets |frame_image| and |frame_overlay_image| to the frame image and the 65 // frame overlay image respectivately which should be used to paint the 66 // header. 67 void GetFrameImages(Mode mode, 68 gfx::ImageSkia* frame_image, 69 gfx::ImageSkia* frame_overlay_image) const; 70 71 // Sets |frame_image| and |frame_overlay_image| to the frame image and the 72 // frame overlay image respectively that should be used to paint the header 73 // for tabbed browser windows. 74 void GetFrameImagesForTabbedBrowser( 75 Mode mode, 76 gfx::ImageSkia* frame_image, 77 gfx::ImageSkia* frame_overlay_image) const; 78 79 // Returns the frame image which should be used to paint the header for popup 80 // browser windows and for hosted app windows which show the toolbar. 81 gfx::ImageSkia GetFrameImageForNonTabbedBrowser(Mode mode) const; 82 83 // Updates the images used for the minimize, restore and close buttons. 84 void UpdateCaptionButtonImages(); 85 86 // Returns bounds of the region in |view_| which is painted with the header 87 // images. The region is assumed to start at the top left corner of |view_| 88 // and to have the same width as |view_|. 89 gfx::Rect GetPaintedBounds() const; 90 91 // Returns the bounds for the title. 92 gfx::Rect GetTitleBounds() const; 93 94 views::Widget* frame_; 95 96 // Whether the header is for a tabbed browser window. 97 bool is_tabbed_; 98 99 // Whether the header is for an incognito browser window. 100 bool is_incognito_; 101 102 // The header view. 103 views::View* view_; 104 105 views::View* window_icon_; 106 int window_icon_x_inset_; 107 ash::FrameCaptionButtonContainerView* caption_button_container_; 108 int painted_height_; 109 110 // Whether the header is painted for the first time. 111 bool initial_paint_; 112 113 // Whether the header should be painted as active. 114 Mode mode_; 115 116 scoped_ptr<gfx::SlideAnimation> activation_animation_; 117 118 DISALLOW_COPY_AND_ASSIGN(BrowserHeaderPainterAsh); 119}; 120 121#endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_HEADER_PAINTER_ASH_H_ 122