1// Copyright (c) 2012 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_PANELS_PANEL_FRAME_VIEW_H_ 6#define CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_ 7 8#include "chrome/browser/ui/panels/panel_constants.h" 9#include "chrome/browser/ui/views/tab_icon_view_model.h" 10#include "ui/views/controls/button/button.h" 11#include "ui/views/window/non_client_view.h" 12 13class PanelView; 14class TabIconView; 15 16namespace views { 17class ImageButton; 18class Label; 19} 20 21class PanelFrameView : public views::NonClientFrameView, 22 public views::ButtonListener, 23 public chrome::TabIconViewModel { 24 public: 25 enum PaintState { 26 PAINT_AS_INACTIVE, 27 PAINT_AS_ACTIVE, 28 PAINT_AS_MINIMIZED, 29 PAINT_FOR_ATTENTION 30 }; 31 32 explicit PanelFrameView(PanelView* panel_view); 33 virtual ~PanelFrameView(); 34 35 void Init(); 36 void UpdateTitle(); 37 void UpdateIcon(); 38 void UpdateThrobber(); 39 void UpdateTitlebarMinimizeRestoreButtonVisibility(); 40 void SetWindowCornerStyle(panel::CornerStyle corner_style); 41 42 // Returns the size of the non-client area, that is, the window size minus 43 // the size of the client area. 44 gfx::Size NonClientAreaSize() const; 45 46 int BorderThickness() const; 47 48 PaintState GetPaintState() const; 49 50 views::ImageButton* close_button() const { return close_button_; } 51 views::ImageButton* minimize_button() const { return minimize_button_; } 52 views::ImageButton* restore_button() const { return restore_button_; } 53 TabIconView* title_icon() const { return title_icon_; } 54 views::Label* title_label() const { return title_label_; } 55 panel::CornerStyle corner_style() const { return corner_style_; } 56 57 private: 58 // Overridden from views::NonClientFrameView: 59 virtual gfx::Rect GetBoundsForClientView() const OVERRIDE; 60 virtual gfx::Rect GetWindowBoundsForClientBounds( 61 const gfx::Rect& client_bounds) const OVERRIDE; 62 virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; 63 virtual void GetWindowMask(const gfx::Size& size, 64 gfx::Path* window_mask) OVERRIDE; 65 virtual void ResetWindowControls() OVERRIDE; 66 virtual void UpdateWindowIcon() OVERRIDE; 67 virtual void UpdateWindowTitle() OVERRIDE; 68 virtual void SizeConstraintsChanged() OVERRIDE; 69 70 // Overridden from views::View: 71 virtual gfx::Size GetPreferredSize() const OVERRIDE; 72 virtual const char* GetClassName() const OVERRIDE; 73 virtual gfx::Size GetMinimumSize() const OVERRIDE; 74 virtual gfx::Size GetMaximumSize() const OVERRIDE; 75 virtual void Layout() OVERRIDE; 76 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 77 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE; 78 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE; 79 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE; 80 virtual void OnMouseCaptureLost() OVERRIDE; 81 82 // Overridden from views::ButtonListener: 83 virtual void ButtonPressed(views::Button* sender, const ui::Event& event) 84 OVERRIDE; 85 86 // Overridden from chrome::TabIconViewModel: 87 virtual bool ShouldTabIconViewAnimate() const OVERRIDE; 88 virtual gfx::ImageSkia GetFaviconForTabIconView() OVERRIDE; 89 90 int TitlebarHeight() const; 91 92 const gfx::ImageSkia* GetFrameBackground(PaintState paint_state) const; 93 94 // Update control styles to indicate if the titlebar is active or not. 95 void UpdateControlStyles(PaintState paint_state); 96 97 // Custom draw the frame. 98 void PaintFrameBackground(gfx::Canvas* canvas); 99 void PaintFrameEdge(gfx::Canvas* canvas); 100 101 // Retrieves the drawing metrics based on the current painting state. 102 SkColor GetTitleColor(PaintState paint_state) const; 103 104 // Returns true if |mouse_location| is within the panel's resizing area. 105 bool IsWithinResizingArea(const gfx::Point& mouse_location) const; 106 107 static const char kViewClassName[]; 108 109 bool is_frameless_; 110 PanelView* panel_view_; 111 views::ImageButton* close_button_; 112 views::ImageButton* minimize_button_; 113 views::ImageButton* restore_button_; 114 TabIconView* title_icon_; 115 views::Label* title_label_; 116 panel::CornerStyle corner_style_; 117 118 DISALLOW_COPY_AND_ASSIGN(PanelFrameView); 119}; 120 121#endif // CHROME_BROWSER_UI_VIEWS_PANELS_PANEL_FRAME_VIEW_H_ 122