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.
5 #ifndef ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_
6 #define ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_
8 #include "ash/ash_export.h"
9 #include "ui/gfx/animation/animation_delegate.h"
10 #include "ui/views/view.h"
24 // Base-class for items in the tray. It makes sure the widget is updated
25 // correctly when the visibility/size of the tray item changes. It also adds
26 // animation when showing/hiding the item in the tray.
27 class ASH_EXPORT TrayItemView
: public views::View
,
28 public gfx::AnimationDelegate
{
30 explicit TrayItemView(SystemTrayItem
* owner
);
31 ~TrayItemView() override
;
33 static void DisableAnimationsForTest();
35 // Convenience function for creating a child Label or ImageView.
37 void CreateImageView();
39 SystemTrayItem
* owner() const { return owner_
; }
40 views::Label
* label() const { return label_
; }
41 views::ImageView
* image_view() const { return image_view_
; }
43 // Overridden from views::View.
44 void SetVisible(bool visible
) override
;
45 gfx::Size
GetPreferredSize() const override
;
46 int GetHeightForWidth(int width
) const override
;
49 // Makes sure the widget relayouts after the size/visibility of the view
53 // This should return the desired size of the view. For most views, this
54 // returns GetPreferredSize. But since this class overrides GetPreferredSize
55 // for animation purposes, we allow a different way to get this size, and do
56 // not allow GetPreferredSize to be overridden.
57 virtual gfx::Size
DesiredSize() const;
59 // The default animation duration is 200ms. But each view can customize this.
60 virtual int GetAnimationDurationMS();
63 // Overridden from views::View.
64 void ChildPreferredSizeChanged(View
* child
) override
;
66 // Overridden from gfx::AnimationDelegate.
67 void AnimationProgressed(const gfx::Animation
* animation
) override
;
68 void AnimationEnded(const gfx::Animation
* animation
) override
;
69 void AnimationCanceled(const gfx::Animation
* animation
) override
;
71 SystemTrayItem
* owner_
;
72 scoped_ptr
<gfx::SlideAnimation
> animation_
;
74 views::ImageView
* image_view_
;
76 DISALLOW_COPY_AND_ASSIGN(TrayItemView
);
81 #endif // ASH_SYSTEM_TRAY_TRAY_ITEM_VIEW_H_