Home | History | Annotate | Download | only in frame
      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_FRAME_CUSTOM_FRAME_VIEW_ASH_H_
      6 #define ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_
      7 
      8 #include "ash/ash_export.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "ui/views/window/non_client_view.h"
     11 
     12 namespace ash {
     13 class FrameBorderHitTestController;
     14 class FrameCaptionButtonContainerView;
     15 class ImmersiveFullscreenController;
     16 }
     17 namespace views {
     18 class Widget;
     19 }
     20 
     21 namespace ash {
     22 
     23 // A NonClientFrameView used for packaged apps, dialogs and other non-browser
     24 // windows. It supports immersive fullscreen. When in immersive fullscreen, the
     25 // client view takes up the entire widget and the window header is an overlay.
     26 // The window header overlay slides onscreen when the user hovers the mouse at
     27 // the top of the screen. See also views::CustomFrameView and
     28 // BrowserNonClientFrameViewAsh.
     29 class ASH_EXPORT CustomFrameViewAsh : public views::NonClientFrameView {
     30  public:
     31   // Internal class name.
     32   static const char kViewClassName[];
     33 
     34   explicit CustomFrameViewAsh(views::Widget* frame);
     35   virtual ~CustomFrameViewAsh();
     36 
     37   // Inits |immersive_fullscreen_controller| so that the controller reveals
     38   // and hides |header_view_| in immersive fullscreen.
     39   // CustomFrameViewAsh does not take ownership of
     40   // |immersive_fullscreen_controller|.
     41   void InitImmersiveFullscreenControllerForView(
     42       ImmersiveFullscreenController* immersive_fullscreen_controller);
     43 
     44   // views::NonClientFrameView:
     45   virtual gfx::Rect GetBoundsForClientView() const OVERRIDE;
     46   virtual gfx::Rect GetWindowBoundsForClientBounds(
     47       const gfx::Rect& client_bounds) const OVERRIDE;
     48   virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE;
     49   virtual void GetWindowMask(const gfx::Size& size,
     50                              gfx::Path* window_mask) OVERRIDE;
     51   virtual void ResetWindowControls() OVERRIDE;
     52   virtual void UpdateWindowIcon() OVERRIDE;
     53   virtual void UpdateWindowTitle() OVERRIDE;
     54   virtual void SizeConstraintsChanged() OVERRIDE;
     55 
     56   // views::View:
     57   virtual gfx::Size GetPreferredSize() const OVERRIDE;
     58   virtual const char* GetClassName() const OVERRIDE;
     59   virtual gfx::Size GetMinimumSize() const OVERRIDE;
     60   virtual gfx::Size GetMaximumSize() const OVERRIDE;
     61   virtual void SchedulePaintInRect(const gfx::Rect& r) OVERRIDE;
     62   virtual void VisibilityChanged(views::View* starting_from,
     63                                  bool is_visible) OVERRIDE;
     64 
     65   // Get the view of the header.
     66   views::View* GetHeaderView();
     67 
     68   const views::View* GetAvatarIconViewForTest() const;
     69 
     70  private:
     71   class OverlayView;
     72   friend class TestWidgetConstraintsDelegate;
     73 
     74   // views::NonClientFrameView:
     75   virtual bool DoesIntersectRect(const views::View* target,
     76                                  const gfx::Rect& rect) const OVERRIDE;
     77 
     78   // Returns the container for the minimize/maximize/close buttons that is held
     79   // by the HeaderView. Used in testing.
     80   FrameCaptionButtonContainerView* GetFrameCaptionButtonContainerViewForTest();
     81 
     82   // Height from top of window to top of client area.
     83   int NonClientTopBorderHeight() const;
     84 
     85   // Not owned.
     86   views::Widget* frame_;
     87 
     88   // View which contains the title and window controls.
     89   class HeaderView;
     90   HeaderView* header_view_;
     91 
     92   // Updates the hittest bounds overrides based on the window state type.
     93   scoped_ptr<FrameBorderHitTestController> frame_border_hit_test_controller_;
     94 
     95   DISALLOW_COPY_AND_ASSIGN(CustomFrameViewAsh);
     96 };
     97 
     98 }  // namespace ash
     99 
    100 #endif  // ASH_FRAME_CUSTOM_FRAME_VIEW_ASH_H_
    101