Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: ui/views/bubble/tray_bubble_view.h

Issue 2491033006: Adjust positioning of cros tray bubbles. (Closed)
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/message_center/views/message_center_bubble.cc ('k') | ui/views/bubble/tray_bubble_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_VIEWS_BUBBLE_TRAY_BUBBLE_VIEW_H_ 5 #ifndef UI_VIEWS_BUBBLE_TRAY_BUBBLE_VIEW_H_
6 #define UI_VIEWS_BUBBLE_TRAY_BUBBLE_VIEW_H_ 6 #define UI_VIEWS_BUBBLE_TRAY_BUBBLE_VIEW_H_
7 7
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "ui/views/bubble/bubble_dialog_delegate.h" 11 #include "ui/views/bubble/bubble_dialog_delegate.h"
12 #include "ui/views/mouse_watcher.h" 12 #include "ui/views/mouse_watcher.h"
13 #include "ui/views/views_export.h" 13 #include "ui/views/views_export.h"
14 14
15 namespace views { 15 namespace views {
16 class View; 16 class View;
17 class Widget; 17 class Widget;
18 } 18 }
19 19
20 namespace views { 20 namespace views {
21 21
22 namespace internal { 22 namespace internal {
23 class TrayBubbleBorder;
24 class TrayBubbleContentMask; 23 class TrayBubbleContentMask;
25 } 24 }
26 25
27 // Specialized bubble view for bubbles associated with a tray icon (e.g. the 26 // Specialized bubble view for bubbles associated with a tray icon (e.g. the
28 // Ash status area). Mostly this handles custom anchor location and arrow and 27 // Ash status area). Mostly this handles custom anchor location and arrow and
29 // border rendering. This also has its own delegate for handling mouse events 28 // border rendering. This also has its own delegate for handling mouse events
30 // and other implementation specific details. 29 // and other implementation specific details.
31 class VIEWS_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView, 30 class VIEWS_EXPORT TrayBubbleView : public views::BubbleDialogDelegateView,
32 public views::MouseWatcherListener { 31 public views::MouseWatcherListener {
33 public: 32 public:
34 // AnchorType differentiates between bubbles that are anchored on a tray
35 // element (ANCHOR_TYPE_TRAY) and display an arrow, or that are floating on
36 // the screen away from the tray (ANCHOR_TYPE_BUBBLE).
37 enum AnchorType {
38 ANCHOR_TYPE_TRAY,
39 ANCHOR_TYPE_BUBBLE,
40 };
41
42 // AnchorAlignment determines to which side of the anchor the bubble will 33 // AnchorAlignment determines to which side of the anchor the bubble will
43 // align itself. 34 // align itself.
44 enum AnchorAlignment { 35 enum AnchorAlignment {
45 ANCHOR_ALIGNMENT_BOTTOM, 36 ANCHOR_ALIGNMENT_BOTTOM,
46 ANCHOR_ALIGNMENT_LEFT, 37 ANCHOR_ALIGNMENT_LEFT,
47 ANCHOR_ALIGNMENT_RIGHT, 38 ANCHOR_ALIGNMENT_RIGHT,
48 ANCHOR_ALIGNMENT_TOP
49 }; 39 };
50 40
51 class VIEWS_EXPORT Delegate { 41 class VIEWS_EXPORT Delegate {
52 public: 42 public:
53 typedef TrayBubbleView::AnchorType AnchorType;
54 typedef TrayBubbleView::AnchorAlignment AnchorAlignment; 43 typedef TrayBubbleView::AnchorAlignment AnchorAlignment;
55 44
56 Delegate() {} 45 Delegate() {}
57 virtual ~Delegate() {} 46 virtual ~Delegate() {}
58 47
59 // Called when the view is destroyed. Any pointers to the view should be 48 // Called when the view is destroyed. Any pointers to the view should be
60 // cleared when this gets called. 49 // cleared when this gets called.
61 virtual void BubbleViewDestroyed() = 0; 50 virtual void BubbleViewDestroyed() = 0;
62 51
63 // Called when the mouse enters/exits the view. 52 // Called when the mouse enters/exits the view.
64 // Note: This event will only be called if the mouse gets actively moved by 53 // Note: This event will only be called if the mouse gets actively moved by
65 // the user to enter the view. 54 // the user to enter the view.
66 virtual void OnMouseEnteredView() = 0; 55 virtual void OnMouseEnteredView() = 0;
67 virtual void OnMouseExitedView() = 0; 56 virtual void OnMouseExitedView() = 0;
68 57
69 // Called from GetAccessibleNodeData(); should return the appropriate 58 // Called from GetAccessibleNodeData(); should return the appropriate
70 // accessible name for the bubble. 59 // accessible name for the bubble.
71 virtual base::string16 GetAccessibleNameForBubble() = 0; 60 virtual base::string16 GetAccessibleNameForBubble() = 0;
72 61
73 // Passes responsibility for BubbleDialogDelegateView::GetAnchorRect to the
74 // delegate.
75 virtual gfx::Rect GetAnchorRect(
76 views::Widget* anchor_widget,
77 AnchorType anchor_type,
78 AnchorAlignment anchor_alignment) const = 0;
79
80 // Called before Widget::Init() on |bubble_widget|. Allows |params| to be 62 // Called before Widget::Init() on |bubble_widget|. Allows |params| to be
81 // modified. 63 // modified.
82 virtual void OnBeforeBubbleWidgetInit(Widget* anchor_widget, 64 virtual void OnBeforeBubbleWidgetInit(Widget* anchor_widget,
83 Widget* bubble_widget, 65 Widget* bubble_widget,
84 Widget::InitParams* params) const = 0; 66 Widget::InitParams* params) const = 0;
85 67
86 // Called when a bubble wants to hide/destroy itself (e.g. last visible 68 // Called when a bubble wants to hide/destroy itself (e.g. last visible
87 // child view was closed). 69 // child view was closed).
88 virtual void HideBubble(const TrayBubbleView* bubble_view) = 0; 70 virtual void HideBubble(const TrayBubbleView* bubble_view) = 0;
89 71
90 private: 72 private:
91 DISALLOW_COPY_AND_ASSIGN(Delegate); 73 DISALLOW_COPY_AND_ASSIGN(Delegate);
92 }; 74 };
93 75
94 struct VIEWS_EXPORT InitParams { 76 struct VIEWS_EXPORT InitParams {
95 static const int kArrowDefaultOffset; 77 InitParams(AnchorAlignment anchor_alignment, int min_width, int max_width);
96
97 InitParams(AnchorType anchor_type,
98 AnchorAlignment anchor_alignment,
99 int min_width,
100 int max_width);
101 InitParams(const InitParams& other); 78 InitParams(const InitParams& other);
102 AnchorType anchor_type;
103 AnchorAlignment anchor_alignment; 79 AnchorAlignment anchor_alignment;
104 int min_width; 80 int min_width;
105 int max_width; 81 int max_width;
106 int max_height; 82 int max_height;
107 bool can_activate; 83 bool can_activate;
108 bool close_on_deactivate; 84 bool close_on_deactivate;
109 SkColor arrow_color; 85 SkColor bg_color;
110 bool first_item_has_no_margin;
111 views::BubbleBorder::Arrow arrow;
112 int arrow_offset;
113 views::BubbleBorder::ArrowPaintType arrow_paint_type;
114 views::BubbleBorder::Shadow shadow;
115 views::BubbleBorder::BubbleAlignment arrow_alignment;
116 }; 86 };
117 87
118 // Constructs and returns a TrayBubbleView. |init_params| may be modified. 88 // Constructs and returns a TrayBubbleView. |init_params| may be modified.
119 static TrayBubbleView* Create(views::View* anchor, 89 static TrayBubbleView* Create(views::View* anchor,
120 Delegate* delegate, 90 Delegate* delegate,
121 InitParams* init_params); 91 InitParams* init_params);
122 92
123 ~TrayBubbleView() override; 93 ~TrayBubbleView() override;
124 94
125 // Sets up animations, and show the bubble. Must occur after CreateBubble() 95 // Sets up animations, and show the bubble. Must occur after CreateBubble()
126 // is called. 96 // is called.
127 void InitializeAndShowBubble(); 97 void InitializeAndShowBubble();
128 98
129 // Called whenever the bubble size or location may have changed. 99 // Called whenever the bubble size or location may have changed.
130 void UpdateBubble(); 100 void UpdateBubble();
131 101
132 // Sets the maximum bubble height and resizes the bubble. 102 // Sets the maximum bubble height and resizes the bubble.
133 void SetMaxHeight(int height); 103 void SetMaxHeight(int height);
134 104
135 // Sets the bubble width. 105 // Sets the bubble width.
136 void SetWidth(int width); 106 void SetWidth(int width);
137 107
138 // Sets whether or not to paint the bubble border arrow.
139 void SetArrowPaintType(views::BubbleBorder::ArrowPaintType arrow_paint_type);
140
141 // Returns the border insets. Called by TrayEventFilter. 108 // Returns the border insets. Called by TrayEventFilter.
142 gfx::Insets GetBorderInsets() const; 109 gfx::Insets GetBorderInsets() const;
143 110
144 // Called when the delegate is destroyed. 111 // Called when the delegate is destroyed.
145 void reset_delegate() { delegate_ = NULL; } 112 void reset_delegate() { delegate_ = NULL; }
146 113
147 Delegate* delegate() { return delegate_; } 114 Delegate* delegate() { return delegate_; }
148 115
149 void set_gesture_dragging(bool dragging) { is_gesture_dragging_ = dragging; } 116 void set_gesture_dragging(bool dragging) { is_gesture_dragging_ = dragging; }
150 bool is_gesture_dragging() const { return is_gesture_dragging_; } 117 bool is_gesture_dragging() const { return is_gesture_dragging_; }
151 118
152 // Overridden from views::WidgetDelegate. 119 // Overridden from views::WidgetDelegate.
153 views::NonClientFrameView* CreateNonClientFrameView( 120 views::NonClientFrameView* CreateNonClientFrameView(
154 views::Widget* widget) override; 121 views::Widget* widget) override;
155 bool WidgetHasHitTestMask() const override; 122 bool WidgetHasHitTestMask() const override;
156 void GetWidgetHitTestMask(gfx::Path* mask) const override; 123 void GetWidgetHitTestMask(gfx::Path* mask) const override;
157 base::string16 GetAccessibleWindowTitle() const override; 124 base::string16 GetAccessibleWindowTitle() const override;
158 125
159 // Overridden from views::BubbleDialogDelegateView. 126 // Overridden from views::BubbleDialogDelegateView.
160 gfx::Rect GetAnchorRect() const override;
161 void OnBeforeBubbleWidgetInit(Widget::InitParams* params, 127 void OnBeforeBubbleWidgetInit(Widget::InitParams* params,
162 Widget* bubble_widget) const override; 128 Widget* bubble_widget) const override;
163 129
164 // Overridden from views::View. 130 // Overridden from views::View.
165 gfx::Size GetPreferredSize() const override; 131 gfx::Size GetPreferredSize() const override;
166 gfx::Size GetMaximumSize() const override; 132 gfx::Size GetMaximumSize() const override;
167 int GetHeightForWidth(int width) const override; 133 int GetHeightForWidth(int width) const override;
168 void OnMouseEntered(const ui::MouseEvent& event) override; 134 void OnMouseEntered(const ui::MouseEvent& event) override;
169 void OnMouseExited(const ui::MouseEvent& event) override; 135 void OnMouseExited(const ui::MouseEvent& event) override;
170 void GetAccessibleNodeData(ui::AXNodeData* node_data) override; 136 void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
(...skipping 14 matching lines...) Expand all
185 void ChildPreferredSizeChanged(View* child) override; 151 void ChildPreferredSizeChanged(View* child) override;
186 void ViewHierarchyChanged( 152 void ViewHierarchyChanged(
187 const ViewHierarchyChangedDetails& details) override; 153 const ViewHierarchyChangedDetails& details) override;
188 154
189 private: 155 private:
190 InitParams params_; 156 InitParams params_;
191 Delegate* delegate_; 157 Delegate* delegate_;
192 int preferred_width_; 158 int preferred_width_;
193 // |bubble_border_| and |owned_bubble_border_| point to the same thing, but 159 // |bubble_border_| and |owned_bubble_border_| point to the same thing, but
194 // the latter ensures we don't leak it before passing off ownership. 160 // the latter ensures we don't leak it before passing off ownership.
195 internal::TrayBubbleBorder* bubble_border_; 161 BubbleBorder* bubble_border_;
196 std::unique_ptr<views::BubbleBorder> owned_bubble_border_; 162 std::unique_ptr<views::BubbleBorder> owned_bubble_border_;
197 std::unique_ptr<internal::TrayBubbleContentMask> bubble_content_mask_; 163 std::unique_ptr<internal::TrayBubbleContentMask> bubble_content_mask_;
198 bool is_gesture_dragging_; 164 bool is_gesture_dragging_;
199 165
200 // True once the mouse cursor was actively moved by the user over the bubble. 166 // True once the mouse cursor was actively moved by the user over the bubble.
201 // Only then the OnMouseExitedView() event will get passed on to listeners. 167 // Only then the OnMouseExitedView() event will get passed on to listeners.
202 bool mouse_actively_entered_; 168 bool mouse_actively_entered_;
203 169
204 // Used to find any mouse movements. 170 // Used to find any mouse movements.
205 std::unique_ptr<MouseWatcher> mouse_watcher_; 171 std::unique_ptr<MouseWatcher> mouse_watcher_;
206 172
207 DISALLOW_COPY_AND_ASSIGN(TrayBubbleView); 173 DISALLOW_COPY_AND_ASSIGN(TrayBubbleView);
208 }; 174 };
209 175
210 } // namespace views 176 } // namespace views
211 177
212 #endif // UI_VIEWS_BUBBLE_TRAY_BUBBLE_VIEW_H_ 178 #endif // UI_VIEWS_BUBBLE_TRAY_BUBBLE_VIEW_H_
OLDNEW
« no previous file with comments | « ui/message_center/views/message_center_bubble.cc ('k') | ui/views/bubble/tray_bubble_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698