| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 VIEWS_BUBBLE_BUBBLE_DELEGATE_H_ | 5 #ifndef VIEWS_BUBBLE_BUBBLE_DELEGATE_H_ |
| 6 #define VIEWS_BUBBLE_BUBBLE_DELEGATE_H_ | 6 #define VIEWS_BUBBLE_BUBBLE_DELEGATE_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/gtest_prod_util.h" | 9 #include "ui/views/bubble/bubble_delegate.h" |
| 10 #include "ui/base/animation/animation_delegate.h" | 10 // TODO(tfarina): remove this file once all includes have been updated. |
| 11 #include "views/bubble/bubble_border.h" | |
| 12 #include "views/widget/widget.h" | |
| 13 #include "views/widget/widget_delegate.h" | |
| 14 | |
| 15 namespace ui { | |
| 16 class SlideAnimation; | |
| 17 } // namespace ui | |
| 18 | |
| 19 namespace views { | |
| 20 | |
| 21 class BubbleFrameView; | |
| 22 | |
| 23 // BubbleDelegateView creates frame and client views for bubble Widgets. | |
| 24 // BubbleDelegateView itself is the client's contents view. | |
| 25 // | |
| 26 /////////////////////////////////////////////////////////////////////////////// | |
| 27 class VIEWS_EXPORT BubbleDelegateView : public WidgetDelegateView, | |
| 28 public ui::AnimationDelegate, | |
| 29 public Widget::Observer { | |
| 30 public: | |
| 31 BubbleDelegateView(); | |
| 32 BubbleDelegateView(View* anchor_view, | |
| 33 BubbleBorder::ArrowLocation arrow_location, | |
| 34 const SkColor& color); | |
| 35 virtual ~BubbleDelegateView(); | |
| 36 | |
| 37 // Create and initialize the bubble Widget(s) with proper bounds. | |
| 38 static Widget* CreateBubble(BubbleDelegateView* bubble_delegate); | |
| 39 | |
| 40 // WidgetDelegate overrides: | |
| 41 virtual View* GetInitiallyFocusedView() OVERRIDE; | |
| 42 virtual BubbleDelegateView* AsBubbleDelegate() OVERRIDE; | |
| 43 virtual View* GetContentsView() OVERRIDE; | |
| 44 virtual NonClientFrameView* CreateNonClientFrameView() OVERRIDE; | |
| 45 | |
| 46 // Widget::Observer overrides: | |
| 47 virtual void OnWidgetActivationChanged(Widget* widget, bool active) OVERRIDE; | |
| 48 | |
| 49 bool close_on_esc() const { return close_on_esc_; } | |
| 50 void set_close_on_esc(bool close_on_esc) { close_on_esc_ = close_on_esc; } | |
| 51 | |
| 52 bool close_on_deactivate() const { return close_on_deactivate_; } | |
| 53 void set_close_on_deactivate(bool close_on_deactivate) { | |
| 54 close_on_deactivate_ = close_on_deactivate; | |
| 55 } | |
| 56 | |
| 57 bool allow_bubble_offscreen() const { return allow_bubble_offscreen_; } | |
| 58 void set_allow_bubble_offscreen(bool allow_bubble_offscreen) { | |
| 59 allow_bubble_offscreen_ = allow_bubble_offscreen; | |
| 60 } | |
| 61 | |
| 62 View* anchor_view() const { return anchor_view_; } | |
| 63 | |
| 64 bool use_focusless() const { return use_focusless_; } | |
| 65 void set_use_focusless(bool use_focusless) { | |
| 66 use_focusless_ = use_focusless; | |
| 67 } | |
| 68 | |
| 69 // Get the arrow's anchor point in screen space. | |
| 70 virtual gfx::Point GetAnchorPoint(); | |
| 71 | |
| 72 // Get the arrow's location on the bubble. | |
| 73 virtual BubbleBorder::ArrowLocation GetArrowLocation() const; | |
| 74 | |
| 75 // Get the color used for the background and border. | |
| 76 virtual SkColor GetColor() const; | |
| 77 | |
| 78 // Show the bubble's widget (and |border_widget_| on Windows). | |
| 79 void Show(); | |
| 80 | |
| 81 // Fade the bubble in or out via Widget transparency. | |
| 82 // Fade in calls Widget::Show; fade out calls Widget::Close upon completion. | |
| 83 void StartFade(bool fade_in); | |
| 84 | |
| 85 // Reset fade and opacity of bubble. Restore the opacity of the | |
| 86 // bubble to the setting before StartFade() was called. | |
| 87 void ResetFade(); | |
| 88 | |
| 89 protected: | |
| 90 // View overrides: | |
| 91 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; | |
| 92 | |
| 93 // ui::AnimationDelegate overrides: | |
| 94 virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE; | |
| 95 virtual void AnimationProgressed(const ui::Animation* animation) OVERRIDE; | |
| 96 | |
| 97 // Perform view initialization on the contents for bubble sizing. | |
| 98 virtual void Init(); | |
| 99 | |
| 100 // Resizes and potentially moves the Bubble to best accommodate the | |
| 101 // contents preferred size. | |
| 102 void SizeToContents(); | |
| 103 | |
| 104 private: | |
| 105 FRIEND_TEST_ALL_PREFIXES(BubbleFrameViewBasicTest, NonClientHitTest); | |
| 106 FRIEND_TEST_ALL_PREFIXES(BubbleDelegateTest, CreateDelegate); | |
| 107 | |
| 108 BubbleFrameView* GetBubbleFrameView() const; | |
| 109 | |
| 110 // Get bubble bounds from the anchor point and client view's preferred size. | |
| 111 gfx::Rect GetBubbleBounds(); | |
| 112 | |
| 113 #if defined(OS_WIN) && !defined(USE_AURA) | |
| 114 // Get bounds for the Windows-only widget that hosts the bubble's contents. | |
| 115 gfx::Rect GetBubbleClientBounds() const; | |
| 116 #endif | |
| 117 | |
| 118 // Fade animation for bubble. | |
| 119 scoped_ptr<ui::SlideAnimation> fade_animation_; | |
| 120 | |
| 121 // Flags controlling bubble closure on the escape key and deactivation. | |
| 122 bool close_on_esc_; | |
| 123 bool close_on_deactivate_; | |
| 124 | |
| 125 // Whether the bubble is allowed to be displayed offscreen, or if auto | |
| 126 // re-positioning should be performed. | |
| 127 bool allow_bubble_offscreen_; | |
| 128 | |
| 129 // The view hosting this bubble; the arrow is anchored to this view. | |
| 130 View* anchor_view_; | |
| 131 | |
| 132 // The arrow's location on the bubble. | |
| 133 BubbleBorder::ArrowLocation arrow_location_; | |
| 134 | |
| 135 // The background color of the bubble. | |
| 136 SkColor color_; | |
| 137 | |
| 138 // Original opacity of the bubble. | |
| 139 int original_opacity_; | |
| 140 | |
| 141 // The widget hosting the border for this bubble (non-Aura Windows only). | |
| 142 Widget* border_widget_; | |
| 143 | |
| 144 // Create a popup window for focusless bubbles on Linux/ChromeOS. | |
| 145 // These bubbles are not interactive and should not gain focus. | |
| 146 bool use_focusless_; | |
| 147 | |
| 148 DISALLOW_COPY_AND_ASSIGN(BubbleDelegateView); | |
| 149 }; | |
| 150 | |
| 151 } // namespace views | |
| 152 | 11 |
| 153 #endif // VIEWS_BUBBLE_BUBBLE_DELEGATE_H_ | 12 #endif // VIEWS_BUBBLE_BUBBLE_DELEGATE_H_ |
| OLD | NEW |