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 ASH_WM_PANELS_PANEL_FRAME_VIEW_H_ 6 #define ASH_WM_PANELS_PANEL_FRAME_VIEW_H_ 7 8 #include "ash/ash_export.h" 9 #include "base/basictypes.h" 10 #include "ui/views/window/non_client_view.h" 11 12 namespace views { 13 class ImageView; 14 } 15 16 namespace ash { 17 class DefaultHeaderPainter; 18 class FrameCaptionButtonContainerView; 19 class FrameBorderHitTestController; 20 21 class ASH_EXPORT PanelFrameView : public views::NonClientFrameView { 22 public: 23 // Internal class name. 24 static const char kViewClassName[]; 25 26 enum FrameType { 27 FRAME_NONE, 28 FRAME_ASH 29 }; 30 31 PanelFrameView(views::Widget* frame, FrameType frame_type); 32 virtual ~PanelFrameView(); 33 34 // Overridden from views::View: 35 virtual const char* GetClassName() const OVERRIDE; 36 37 private: 38 void InitHeaderPainter(); 39 40 // Height from top of window to top of client area. 41 int NonClientTopBorderHeight() const; 42 43 // Overridden from views::NonClientFrameView: 44 virtual gfx::Rect GetBoundsForClientView() const OVERRIDE; 45 virtual gfx::Rect GetWindowBoundsForClientBounds( 46 const gfx::Rect& client_bounds) const OVERRIDE; 47 virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE; 48 virtual void GetWindowMask(const gfx::Size& size, 49 gfx::Path* window_mask) OVERRIDE; 50 virtual void ResetWindowControls() OVERRIDE; 51 virtual void UpdateWindowIcon() OVERRIDE; 52 virtual void UpdateWindowTitle() OVERRIDE; 53 virtual void SizeConstraintsChanged() OVERRIDE; 54 55 // Overridden from views::View: 56 virtual gfx::Size GetMinimumSize() const OVERRIDE; 57 virtual void Layout() OVERRIDE; 58 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 59 60 // Child View class describing the panel's title bar behavior 61 // and buttons, owned by the view hierarchy 62 views::Widget* frame_; 63 FrameCaptionButtonContainerView* caption_button_container_; 64 views::ImageView* window_icon_; 65 gfx::Rect client_view_bounds_; 66 67 // Helper class for painting the header. 68 scoped_ptr<DefaultHeaderPainter> header_painter_; 69 70 // Updates the hittest bounds overrides based on the window state type. 71 scoped_ptr<FrameBorderHitTestController> frame_border_hit_test_controller_; 72 73 DISALLOW_COPY_AND_ASSIGN(PanelFrameView); 74 }; 75 76 } 77 78 #endif // ASH_WM_PANELS_PANEL_FRAME_VIEW_H_ 79