| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 CHROME_BROWSER_UI_VIEWS_INFO_BUBBLE_H_ | 5 #ifndef CHROME_BROWSER_UI_VIEWS_INFO_BUBBLE_H_ |
| 6 #define CHROME_BROWSER_UI_VIEWS_INFO_BUBBLE_H_ | 6 #define CHROME_BROWSER_UI_VIEWS_INFO_BUBBLE_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "app/animation_delegate.h" | |
| 10 #include "third_party/skia/include/core/SkColor.h" | 9 #include "third_party/skia/include/core/SkColor.h" |
| 10 #include "ui/base/animation/animation_delegate.h" |
| 11 #include "views/accelerator.h" | 11 #include "views/accelerator.h" |
| 12 #include "views/view.h" | 12 #include "views/view.h" |
| 13 #include "chrome/browser/views/bubble_border.h" | 13 #include "chrome/browser/views/bubble_border.h" |
| 14 | 14 |
| 15 #if defined(OS_WIN) | 15 #if defined(OS_WIN) |
| 16 #include "views/widget/widget_win.h" | 16 #include "views/widget/widget_win.h" |
| 17 #elif defined(OS_LINUX) | 17 #elif defined(OS_LINUX) |
| 18 #include "views/widget/widget_gtk.h" | 18 #include "views/widget/widget_gtk.h" |
| 19 #endif | 19 #endif |
| 20 | 20 |
| 21 // InfoBubble is used to display an arbitrary view above all other windows. | 21 // InfoBubble is used to display an arbitrary view above all other windows. |
| 22 // Think of InfoBubble as a tooltip that allows you to embed an arbitrary view | 22 // Think of InfoBubble as a tooltip that allows you to embed an arbitrary view |
| 23 // in the tooltip. Additionally the InfoBubble renders an arrow pointing at | 23 // in the tooltip. Additionally the InfoBubble renders an arrow pointing at |
| 24 // the region the info bubble is providing the information about. | 24 // the region the info bubble is providing the information about. |
| 25 // | 25 // |
| 26 // To use an InfoBubble, invoke Show() and it'll take care of the rest. The | 26 // To use an InfoBubble, invoke Show() and it'll take care of the rest. The |
| 27 // InfoBubble insets the contents for you, so the contents typically shouldn't | 27 // InfoBubble insets the contents for you, so the contents typically shouldn't |
| 28 // have any additional margins. | 28 // have any additional margins. |
| 29 | 29 |
| 30 #if defined(OS_WIN) |
| 31 class BorderWidget; |
| 32 #endif |
| 30 class InfoBubble; | 33 class InfoBubble; |
| 34 |
| 35 namespace gfx { |
| 36 class Path; |
| 37 } |
| 38 |
| 39 namespace ui { |
| 31 class SlideAnimation; | 40 class SlideAnimation; |
| 41 } |
| 32 | 42 |
| 33 namespace views { | 43 namespace views { |
| 34 class Widget; | 44 class Widget; |
| 35 } | 45 } |
| 36 | 46 |
| 37 namespace gfx { | |
| 38 class Path; | |
| 39 } | |
| 40 | |
| 41 #if defined(OS_WIN) | |
| 42 class BorderWidget; | |
| 43 #endif | |
| 44 | |
| 45 // This is used to paint the border of the InfoBubble. Windows uses this via | 47 // This is used to paint the border of the InfoBubble. Windows uses this via |
| 46 // BorderWidget (see below), while others can use it directly in the bubble. | 48 // BorderWidget (see below), while others can use it directly in the bubble. |
| 47 class BorderContents : public views::View { | 49 class BorderContents : public views::View { |
| 48 public: | 50 public: |
| 49 BorderContents() : bubble_border_(NULL) { } | 51 BorderContents() : bubble_border_(NULL) { } |
| 50 | 52 |
| 51 // Must be called before this object can be used. | 53 // Must be called before this object can be used. |
| 52 void Init(); | 54 void Init(); |
| 53 | 55 |
| 54 // Given the size of the contents and the rect to point at, returns the bounds | 56 // Given the size of the contents and the rect to point at, returns the bounds |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 // TODO(sky): this code is ifdef-tastic. It might be cleaner to refactor the | 177 // TODO(sky): this code is ifdef-tastic. It might be cleaner to refactor the |
| 176 // WidgetFoo subclass into a separate class that calls into InfoBubble. | 178 // WidgetFoo subclass into a separate class that calls into InfoBubble. |
| 177 // That way InfoBubble has no (or very few) ifdefs. | 179 // That way InfoBubble has no (or very few) ifdefs. |
| 178 class InfoBubble | 180 class InfoBubble |
| 179 #if defined(OS_WIN) | 181 #if defined(OS_WIN) |
| 180 : public views::WidgetWin, | 182 : public views::WidgetWin, |
| 181 #elif defined(OS_LINUX) | 183 #elif defined(OS_LINUX) |
| 182 : public views::WidgetGtk, | 184 : public views::WidgetGtk, |
| 183 #endif | 185 #endif |
| 184 public views::AcceleratorTarget, | 186 public views::AcceleratorTarget, |
| 185 public AnimationDelegate { | 187 public ui::AnimationDelegate { |
| 186 public: | 188 public: |
| 187 // Shows the InfoBubble. |parent| is set as the parent window, |contents| are | 189 // Shows the InfoBubble. |parent| is set as the parent window, |contents| are |
| 188 // the contents shown in the bubble, and |position_relative_to| is a rect in | 190 // the contents shown in the bubble, and |position_relative_to| is a rect in |
| 189 // screen coordinates at which the InfoBubble will point. Show() takes | 191 // screen coordinates at which the InfoBubble will point. Show() takes |
| 190 // ownership of |contents| and deletes the created InfoBubble when another | 192 // ownership of |contents| and deletes the created InfoBubble when another |
| 191 // window is activated. You can explicitly close the bubble by invoking | 193 // window is activated. You can explicitly close the bubble by invoking |
| 192 // Close(). |arrow_location| specifies preferred bubble alignment. | 194 // Close(). |arrow_location| specifies preferred bubble alignment. |
| 193 // You may provide an optional |delegate| to: | 195 // You may provide an optional |delegate| to: |
| 194 // - Be notified when the InfoBubble is closed. | 196 // - Be notified when the InfoBubble is closed. |
| 195 // - Prevent the InfoBubble from being closed when the Escape key is | 197 // - Prevent the InfoBubble from being closed when the Escape key is |
| (...skipping 26 matching lines...) Expand all Loading... |
| 222 // we use FadeOut when the user selects something within the bubble that | 224 // we use FadeOut when the user selects something within the bubble that |
| 223 // causes the bubble to dismiss. We don't use it when the bubble gets | 225 // causes the bubble to dismiss. We don't use it when the bubble gets |
| 224 // deactivated as a result of clicking outside the bubble. | 226 // deactivated as a result of clicking outside the bubble. |
| 225 void set_fade_away_on_close(bool fade_away_on_close) { | 227 void set_fade_away_on_close(bool fade_away_on_close) { |
| 226 fade_away_on_close_ = fade_away_on_close; | 228 fade_away_on_close_ = fade_away_on_close; |
| 227 } | 229 } |
| 228 | 230 |
| 229 // Overridden from WidgetWin: | 231 // Overridden from WidgetWin: |
| 230 virtual void Close(); | 232 virtual void Close(); |
| 231 | 233 |
| 232 // Overridden from AnimationDelegate: | 234 // Overridden from ui::AnimationDelegate: |
| 233 virtual void AnimationEnded(const Animation* animation); | 235 virtual void AnimationEnded(const ui::Animation* animation); |
| 234 virtual void AnimationProgressed(const Animation* animation); | 236 virtual void AnimationProgressed(const ui::Animation* animation); |
| 235 | 237 |
| 236 static const SkColor kBackgroundColor; | 238 static const SkColor kBackgroundColor; |
| 237 | 239 |
| 238 protected: | 240 protected: |
| 239 InfoBubble(); | 241 InfoBubble(); |
| 240 #if defined(OS_CHROMEOS) | 242 #if defined(OS_CHROMEOS) |
| 241 InfoBubble(views::WidgetGtk::Type type, bool show_while_screen_is_locked); | 243 InfoBubble(views::WidgetGtk::Type type, bool show_while_screen_is_locked); |
| 242 #endif | 244 #endif |
| 243 virtual ~InfoBubble(); | 245 virtual ~InfoBubble(); |
| 244 | 246 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 // Animates to a visible/hidden state (visible if |fade_in| is true). | 290 // Animates to a visible/hidden state (visible if |fade_in| is true). |
| 289 void Fade(bool fade_in); | 291 void Fade(bool fade_in); |
| 290 | 292 |
| 291 // Overridden from AcceleratorTarget: | 293 // Overridden from AcceleratorTarget: |
| 292 virtual bool AcceleratorPressed(const views::Accelerator& accelerator); | 294 virtual bool AcceleratorPressed(const views::Accelerator& accelerator); |
| 293 | 295 |
| 294 // The delegate, if any. | 296 // The delegate, if any. |
| 295 InfoBubbleDelegate* delegate_; | 297 InfoBubbleDelegate* delegate_; |
| 296 | 298 |
| 297 // The animation used to fade the bubble out. | 299 // The animation used to fade the bubble out. |
| 298 scoped_ptr<SlideAnimation> animation_; | 300 scoped_ptr<ui::SlideAnimation> animation_; |
| 299 | 301 |
| 300 // The current visibility status of the bubble. | 302 // The current visibility status of the bubble. |
| 301 ShowStatus show_status_; | 303 ShowStatus show_status_; |
| 302 | 304 |
| 303 // Whether to fade away when the bubble closes. | 305 // Whether to fade away when the bubble closes. |
| 304 bool fade_away_on_close_; | 306 bool fade_away_on_close_; |
| 305 | 307 |
| 306 #if defined(OS_CHROMEOS) | 308 #if defined(OS_CHROMEOS) |
| 307 // Should we set a property telling the window manager to show this window | 309 // Should we set a property telling the window manager to show this window |
| 308 // onscreen even when the screen is locked? | 310 // onscreen even when the screen is locked? |
| 309 bool show_while_screen_is_locked_; | 311 bool show_while_screen_is_locked_; |
| 310 #endif | 312 #endif |
| 311 | 313 |
| 312 gfx::Rect position_relative_to_; | 314 gfx::Rect position_relative_to_; |
| 313 BubbleBorder::ArrowLocation arrow_location_; | 315 BubbleBorder::ArrowLocation arrow_location_; |
| 314 | 316 |
| 315 views::View* contents_; | 317 views::View* contents_; |
| 316 | 318 |
| 317 DISALLOW_COPY_AND_ASSIGN(InfoBubble); | 319 DISALLOW_COPY_AND_ASSIGN(InfoBubble); |
| 318 }; | 320 }; |
| 319 | 321 |
| 320 #endif // CHROME_BROWSER_UI_VIEWS_INFO_BUBBLE_H_ | 322 #endif // CHROME_BROWSER_UI_VIEWS_INFO_BUBBLE_H_ |
| OLD | NEW |