OLD | NEW |
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 #include "ui/views/bubble/bubble_delegate.h" | 5 #include "ui/views/bubble/bubble_delegate.h" |
6 | 6 |
7 #include "ui/base/animation/slide_animation.h" | 7 #include "ui/base/animation/slide_animation.h" |
8 #include "ui/gfx/color_utils.h" | 8 #include "ui/gfx/color_utils.h" |
9 #include "ui/views/bubble/bubble_frame_view.h" | 9 #include "ui/views/bubble/bubble_frame_view.h" |
10 #include "ui/views/widget/widget.h" | 10 #include "ui/views/widget/widget.h" |
11 | 11 |
12 // The duration of the fade animation in milliseconds. | 12 // The duration of the fade animation in milliseconds. |
13 static const int kHideFadeDurationMS = 200; | 13 static const int kHideFadeDurationMS = 200; |
14 | 14 |
15 // The defaut margin between the content and the inside border, in pixels. | 15 // The defaut margin between the content and the inside border, in pixels. |
16 static const int kDefaultMargin = 6; | 16 static const int kDefaultMargin = 6; |
17 | 17 |
18 namespace views { | 18 namespace views { |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 // Create a widget to host the bubble. | 22 // Create a widget to host the bubble. |
23 Widget* CreateBubbleWidget(BubbleDelegateView* bubble) { | 23 Widget* CreateBubbleWidget(BubbleDelegateView* bubble) { |
24 Widget* bubble_widget = new Widget(); | 24 Widget* bubble_widget = new Widget(); |
25 Widget::InitParams bubble_params(Widget::InitParams::TYPE_BUBBLE); | 25 Widget::InitParams bubble_params(Widget::InitParams::TYPE_BUBBLE); |
26 bubble_params.delegate = bubble; | 26 bubble_params.delegate = bubble; |
27 bubble_params.transparent = true; | 27 bubble_params.transparent = true; |
28 bubble_params.close_on_deactivate = bubble->close_on_deactivate(); | |
29 if (bubble->parent_window()) | 28 if (bubble->parent_window()) |
30 bubble_params.parent = bubble->parent_window(); | 29 bubble_params.parent = bubble->parent_window(); |
31 else | 30 else |
32 bubble_params.parent_widget = bubble->anchor_widget(); | 31 bubble_params.parent_widget = bubble->anchor_widget(); |
33 if (bubble->use_focusless()) | 32 if (bubble->use_focusless()) |
34 bubble_params.can_activate = false; | 33 bubble_params.can_activate = false; |
35 #if defined(OS_WIN) && !defined(USE_AURA) | 34 #if defined(OS_WIN) && !defined(USE_AURA) |
36 bubble_params.type = Widget::InitParams::TYPE_WINDOW_FRAMELESS; | 35 bubble_params.type = Widget::InitParams::TYPE_WINDOW_FRAMELESS; |
37 bubble_params.transparent = false; | 36 bubble_params.transparent = false; |
38 #endif | 37 #endif |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 if (anchor_widget() && anchor_widget()->GetTopLevelWidget()) | 205 if (anchor_widget() && anchor_widget()->GetTopLevelWidget()) |
207 anchor_widget()->GetTopLevelWidget()->DisableInactiveRendering(); | 206 anchor_widget()->GetTopLevelWidget()->DisableInactiveRendering(); |
208 } else { | 207 } else { |
209 if (border_widget_) | 208 if (border_widget_) |
210 border_widget_->Hide(); | 209 border_widget_->Hide(); |
211 if (anchor_widget()) | 210 if (anchor_widget()) |
212 anchor_widget()->RemoveObserver(this); | 211 anchor_widget()->RemoveObserver(this); |
213 } | 212 } |
214 } | 213 } |
215 | 214 |
| 215 void BubbleDelegateView::OnWidgetActivationChanged(Widget* widget, |
| 216 bool active) { |
| 217 if (close_on_deactivate() && widget == GetWidget() && !active) |
| 218 GetWidget()->Close(); |
| 219 } |
| 220 |
216 void BubbleDelegateView::OnWidgetMoved(Widget* widget) { | 221 void BubbleDelegateView::OnWidgetMoved(Widget* widget) { |
217 if (move_with_anchor() && anchor_widget() == widget) | 222 if (move_with_anchor() && anchor_widget() == widget) |
218 SizeToContents(); | 223 SizeToContents(); |
219 } | 224 } |
220 | 225 |
221 gfx::Rect BubbleDelegateView::GetAnchorRect() { | 226 gfx::Rect BubbleDelegateView::GetAnchorRect() { |
222 return anchor_view() ? anchor_view()->GetScreenBounds() : gfx::Rect(); | 227 return anchor_view() ? anchor_view()->GetScreenBounds() : gfx::Rect(); |
223 } | 228 } |
224 | 229 |
225 void BubbleDelegateView::Show() { | 230 void BubbleDelegateView::Show() { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 | 331 |
327 #if defined(OS_WIN) && !defined(USE_AURA) | 332 #if defined(OS_WIN) && !defined(USE_AURA) |
328 gfx::Rect BubbleDelegateView::GetBubbleClientBounds() const { | 333 gfx::Rect BubbleDelegateView::GetBubbleClientBounds() const { |
329 gfx::Rect client_bounds(GetBubbleFrameView()->GetBoundsForClientView()); | 334 gfx::Rect client_bounds(GetBubbleFrameView()->GetBoundsForClientView()); |
330 client_bounds.Offset(border_widget_->GetWindowScreenBounds().origin()); | 335 client_bounds.Offset(border_widget_->GetWindowScreenBounds().origin()); |
331 return client_bounds; | 336 return client_bounds; |
332 } | 337 } |
333 #endif | 338 #endif |
334 | 339 |
335 } // namespace views | 340 } // namespace views |
OLD | NEW |