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