Home | History | Annotate | Download | only in user
      1 // Copyright 2014 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_SYSTEM_USER_BUTTON_FROM_VIEW_H_
      6 #define ASH_SYSTEM_USER_BUTTON_FROM_VIEW_H_
      7 
      8 #include "base/macros.h"
      9 #include "ui/gfx/insets.h"
     10 #include "ui/views/controls/button/custom_button.h"
     11 
     12 namespace ash {
     13 namespace tray {
     14 
     15 // This view is used to wrap it's content and transform it into button.
     16 class ButtonFromView : public views::CustomButton {
     17  public:
     18   // The |content| is the content which is shown within the button. The
     19   // |button_listener| will be informed - if provided - when a button was
     20   // pressed. If |highlight_on_hover| is set to true, the button will be
     21   // highlighted upon hover and show the accessibility caret.
     22   // The |tab_frame_inset| will be used to inset the blue tab frame inside the
     23   // button.
     24   ButtonFromView(views::View* content,
     25                  views::ButtonListener* listener,
     26                  bool highlight_on_hover,
     27                  const gfx::Insets& tab_frame_inset);
     28   virtual ~ButtonFromView();
     29 
     30   // Called when the border should remain even in the non highlighted state.
     31   void ForceBorderVisible(bool show);
     32 
     33   // Overridden from views::View
     34   virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE;
     35   virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
     36   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
     37   virtual void OnFocus() OVERRIDE;
     38   virtual void OnBlur() OVERRIDE;
     39 
     40   // Check if the item is hovered.
     41   bool is_hovered_for_test() { return button_hovered_; }
     42 
     43  private:
     44   // Change the hover/active state of the "button" when the status changes.
     45   void ShowActive();
     46 
     47   // Content of button.
     48   views::View* content_;
     49 
     50   // Whether button should be highligthed on hover.
     51   bool highlight_on_hover_;
     52 
     53   // True if button is hovered.
     54   bool button_hovered_;
     55 
     56   // True if the border should be always visible.
     57   bool show_border_;
     58 
     59   // The insets which get used for the drawn accessibility (tab) frame.
     60   gfx::Insets tab_frame_inset_;
     61 
     62   DISALLOW_COPY_AND_ASSIGN(ButtonFromView);
     63 };
     64 
     65 }  // namespace tray
     66 }  // namespace ash
     67 
     68 #endif  // ASH_SYSTEM_USER_BUTTON_FROM_VIEW_H_
     69