blob: 20a70311fff60c1040767b73d0c62c348dbdf02b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_TRAY_TRAY_BACKGROUND_VIEW_H_
#define ASH_SYSTEM_TRAY_TRAY_BACKGROUND_VIEW_H_
#include "ash/ash_export.h"
#include "ash/launcher/background_animator.h"
#include "ash/system/tray/tray_views.h"
#include "ash/wm/shelf_types.h"
namespace ash {
namespace internal {
class StatusAreaWidget;
class TrayBackground;
class TrayLayerAnimationObserver;
// Base class for children of StatusAreaWidget: SystemTray, WebNotificationTray.
// This class handles setting and animating the background when the Launcher
// his shown/hidden. It also inherits from ActionableView so that the tray
// items can override PerformAction when clicked on.
class ASH_EXPORT TrayBackgroundView : public internal::ActionableView,
public BackgroundAnimatorDelegate {
public:
// Base class for tray containers. Sets the border and layout. The container
// auto-resizes the widget when necessary.
class TrayContainer : public views::View {
public:
explicit TrayContainer(ShelfAlignment alignment);
virtual ~TrayContainer() {}
void SetAlignment(ShelfAlignment alignment);
void set_size(const gfx::Size& size) { size_ = size; }
// Overridden from views::View.
virtual gfx::Size GetPreferredSize() OVERRIDE;
protected:
// Overridden from views::View.
virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
virtual void ChildVisibilityChanged(View* child) OVERRIDE;
virtual void ViewHierarchyChanged(bool is_add,
View* parent,
View* child) OVERRIDE;
private:
void UpdateLayout();
ShelfAlignment alignment_;
gfx::Size size_;
DISALLOW_COPY_AND_ASSIGN(TrayContainer);
};
explicit TrayBackgroundView(internal::StatusAreaWidget* status_area_widget);
virtual ~TrayBackgroundView();
// Called after the tray has been added to the widget containing it.
virtual void Initialize();
// Overridden from views::View.
virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE;
virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE;
virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE;
virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
virtual void AboutToRequestFocusFromTabTraversal(bool reverse) OVERRIDE;
// Overridden from internal::ActionableView.
virtual bool PerformAction(const ui::Event& event) OVERRIDE;
// Overridden from internal::BackgroundAnimatorDelegate.
virtual void UpdateBackground(int alpha) OVERRIDE;
// Called whenever the shelf alignment changes.
virtual void SetShelfAlignment(ShelfAlignment alignment);
// Called when the anchor (tray or bubble) may have moved or changed.
virtual void AnchorUpdated() {}
virtual string16 GetAccessibleName() = 0;
// Sets |contents| as a child and sets its background to |background_|.
void SetContents(views::View* contents);
// Sets whether the tray paints a background. Default is true, but is set to
// false if a window overlaps the shelf.
void SetPaintsBackground(
bool value,
internal::BackgroundAnimator::ChangeType change_type);
// Convenience function to call same function in status_area_widget_.
void UpdateShouldShowLauncher();
StatusAreaWidget* status_area_widget() {
return status_area_widget_;
}
TrayContainer* tray_container() const { return tray_container_; }
ShelfAlignment shelf_alignment() const { return shelf_alignment_; }
private:
friend class TrayLayerAnimationObserver;
// Called from Initialize after all status area trays have been created.
// Sets the border based on the position of the view.
void SetBorder();
// Unowned pointer to parent widget.
StatusAreaWidget* status_area_widget_;
// Convenience pointer to the contents view.
TrayContainer* tray_container_;
// Shelf alignment.
ShelfAlignment shelf_alignment_;
// Owned by the view passed to SetContents().
internal::TrayBackground* background_;
internal::BackgroundAnimator hide_background_animator_;
internal::BackgroundAnimator hover_background_animator_;
scoped_ptr<internal::TrayLayerAnimationObserver>
layer_animation_observer_;
DISALLOW_COPY_AND_ASSIGN(TrayBackgroundView);
};
} // namespace internal
} // namespace ash
#endif // ASH_SYSTEM_TRAY_TRAY_BACKGROUND_VIEW_H_
|