Home | History | Annotate | Download | only in panels
      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 
     13 class PanelView;
     14 class TabIconView;
     15 
     16 namespace views {
     17 class ImageButton;
     18 class Label;
     19 }
     20 
     21 class 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