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

Unified Diff: chrome/browser/ui/views/bubble/bubble.cc

Issue 8761012: Remove the old views bubble code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync. Created 9 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/views/bubble/bubble.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/bubble/bubble.cc
diff --git a/chrome/browser/ui/views/bubble/bubble.cc b/chrome/browser/ui/views/bubble/bubble.cc
deleted file mode 100644
index 6cf7d2248257262d27eff49a69bb4829bd20cbf9..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/views/bubble/bubble.cc
+++ /dev/null
@@ -1,442 +0,0 @@
-// Copyright (c) 2011 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.
-
-#include "chrome/browser/ui/views/bubble/bubble.h"
-
-#include <vector>
-
-#include "chrome/browser/ui/views/bubble/border_contents.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "ui/base/animation/slide_animation.h"
-#include "ui/base/keycodes/keyboard_codes.h"
-#include "ui/gfx/color_utils.h"
-#include "ui/views/layout/fill_layout.h"
-#include "ui/views/widget/widget.h"
-#include "ui/views/window/client_view.h"
-
-#if defined(OS_CHROMEOS) && defined(TOOLKIT_USES_GTK)
-#include "chrome/browser/chromeos/legacy_window_manager/wm_ipc.h"
-#include "third_party/cros_system_api/window_manager/chromeos_wm_ipc_enums.h"
-#endif
-
-#if defined(OS_WIN) && !defined(USE_AURA)
-#include "chrome/browser/ui/views/bubble/border_widget_win.h"
-#endif
-
-using std::vector;
-
-// How long the fade should last for.
-static const int kHideFadeDurationMS = 200;
-
-// Background color of the bubble.
-#if defined(OS_WIN) && !defined(USE_AURA)
-const SkColor Bubble::kBackgroundColor =
- color_utils::GetSysSkColor(COLOR_WINDOW);
-#else
-// TODO(beng): source from theme provider.
-const SkColor Bubble::kBackgroundColor = SK_ColorWHITE;
-#endif
-
-// BubbleDelegate ---------------------------------------------------------
-
-string16 BubbleDelegate::GetAccessibleName() {
- return string16();
-}
-
-// Bubble -----------------------------------------------------------------
-
-// static
-Bubble* Bubble::Show(views::Widget* parent,
- const gfx::Rect& position_relative_to,
- views::BubbleBorder::ArrowLocation arrow_location,
- views::BubbleBorder::BubbleAlignment alignment,
- views::View* contents,
- BubbleDelegate* delegate) {
- Bubble* bubble = new Bubble;
- bubble->InitBubble(parent, position_relative_to, arrow_location, alignment,
- contents, delegate);
-
- // Register the Escape accelerator for closing.
- bubble->RegisterEscapeAccelerator();
-
- if (delegate)
- delegate->BubbleShown();
-
- return bubble;
-}
-
-#if defined(OS_CHROMEOS)
-// static
-Bubble* Bubble::ShowFocusless(
- views::Widget* parent,
- const gfx::Rect& position_relative_to,
- views::BubbleBorder::ArrowLocation arrow_location,
- views::BubbleBorder::BubbleAlignment alignment,
- views::View* contents,
- BubbleDelegate* delegate,
- bool show_while_screen_is_locked) {
- Bubble* bubble = new Bubble(views::Widget::InitParams::TYPE_POPUP,
- show_while_screen_is_locked);
- bubble->InitBubble(parent, position_relative_to, arrow_location, alignment,
- contents, delegate);
- return bubble;
-}
-#endif
-
-void Bubble::Close() {
- if (show_status_ != kOpen)
- return;
-
- show_status_ = kClosing;
-
- if (fade_away_on_close_)
- FadeOut();
- else
- DoClose(false);
-}
-
-void Bubble::AnimationEnded(const ui::Animation* animation) {
- if (static_cast<int>(animation_->GetCurrentValue()) == 0) {
- // When fading out we just need to close the bubble at the end
- DoClose(false);
- } else {
-#if defined(OS_WIN) && !defined(USE_AURA)
- // When fading in we need to remove the layered window style flag, since
- // that style prevents some bubble content from working properly.
- SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) & ~WS_EX_LAYERED);
-#endif
- }
-}
-
-void Bubble::AnimationProgressed(const ui::Animation* animation) {
- // Set the opacity for the main contents window.
- unsigned char opacity = static_cast<unsigned char>(
- animation_->GetCurrentValue() * 255);
-#if defined(OS_WIN) && !defined(USE_AURA)
- SetLayeredWindowAttributes(GetNativeView(), 0,
- static_cast<byte>(opacity), LWA_ALPHA);
- contents_->SchedulePaint();
-
- // Also fade in/out the bubble border window.
- border_->SetOpacity(opacity);
- border_->border_contents()->SchedulePaint();
-#else
- SetOpacity(opacity);
- border_contents_->SchedulePaint();
-#endif
-}
-
-Bubble::Bubble()
- :
-#if defined(USE_AURA)
- views::NativeWidgetAura(new views::Widget),
-#elif defined(OS_WIN)
- views::NativeWidgetWin(new views::Widget),
-#elif defined(TOOLKIT_USES_GTK)
- views::NativeWidgetGtk(new views::Widget),
-#endif
-#if defined(OS_WIN) && !defined(USE_AURA)
- border_(NULL),
-#else
- border_contents_(NULL),
-#endif
- delegate_(NULL),
- show_status_(kOpen),
- fade_away_on_close_(false),
- close_on_deactivate_(true),
-#if defined(TOOLKIT_USES_GTK)
- type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS),
-#endif
-#if defined(OS_CHROMEOS)
- show_while_screen_is_locked_(false),
-#endif
- arrow_location_(views::BubbleBorder::NONE),
- contents_(NULL),
- accelerator_registered_(false) {
-}
-
-#if defined(OS_CHROMEOS)
-Bubble::Bubble(views::Widget::InitParams::Type type,
- bool show_while_screen_is_locked)
-#if defined(USE_AURA)
- : views::NativeWidgetAura(new views::Widget),
-#else
- : views::NativeWidgetGtk(new views::Widget),
-#endif
- border_contents_(NULL),
- delegate_(NULL),
- show_status_(kOpen),
- fade_away_on_close_(false),
-#if defined(TOOLKIT_USES_GTK)
- type_(type),
-#endif
- show_while_screen_is_locked_(show_while_screen_is_locked),
- arrow_location_(views::BubbleBorder::NONE),
- contents_(NULL),
- accelerator_registered_(false) {
-}
-#endif
-
-Bubble::~Bubble() {
-}
-
-void Bubble::InitBubble(views::Widget* parent,
- const gfx::Rect& position_relative_to,
- views::BubbleBorder::ArrowLocation arrow_location,
- views::BubbleBorder::BubbleAlignment alignment,
- views::View* contents,
- BubbleDelegate* delegate) {
- delegate_ = delegate;
- position_relative_to_ = position_relative_to;
- arrow_location_ = arrow_location;
- contents_ = contents;
- const bool fade_in = delegate_ && delegate_->FadeInOnShow();
-
- // Create the main window.
-#if defined(USE_AURA)
- views::Widget* parent_window = parent->GetTopLevelWidget();
- if (parent_window)
- parent_window->DisableInactiveRendering();
- views::Widget::InitParams params;
- params.transparent = true;
- params.parent_widget = parent;
- params.native_widget = this;
- GetWidget()->Init(params);
- if (fade_in)
- SetOpacity(0);
-#elif defined(OS_WIN)
- views::Widget* parent_window = parent->GetTopLevelWidget();
- if (parent_window)
- parent_window->DisableInactiveRendering();
- set_window_style(WS_POPUP | WS_CLIPCHILDREN);
- int extended_style = WS_EX_TOOLWINDOW;
- // During FadeIn we need to turn on the layered window style to deal with
- // transparency. This flag needs to be reset after fading in is complete.
- if (fade_in)
- extended_style |= WS_EX_LAYERED;
- set_window_ex_style(extended_style);
-
- DCHECK(!border_);
- border_ = new BorderWidgetWin();
-
- border_->InitBorderWidgetWin(CreateBorderContents(), parent->GetNativeView());
- border_->border_contents()->SetBackgroundColor(kBackgroundColor);
- border_->border_contents()->SetAlignment(alignment);
-
- // We make the BorderWidgetWin the owner of the Bubble HWND, so that the
- // latter is displayed on top of the former.
- views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
- params.parent = border_->GetNativeView();
- params.native_widget = this;
- GetWidget()->Init(params);
-
- if (fade_in) {
- border_->SetOpacity(0);
- GetWidget()->SetOpacity(0);
- }
- SetWindowText(GetNativeView(), delegate_->GetAccessibleName().c_str());
-#elif defined(TOOLKIT_USES_GTK)
- views::Widget::InitParams params(type_);
- params.transparent = true;
- params.parent_widget = parent;
- params.native_widget = this;
- GetWidget()->Init(params);
- if (fade_in)
- SetOpacity(0);
-#if defined(OS_CHROMEOS) && defined(TOOLKIT_USES_GTK)
- {
- vector<int> params;
- params.push_back(show_while_screen_is_locked_ ? 1 : 0);
- chromeos::WmIpc::instance()->SetWindowType(
- GetNativeView(),
- chromeos::WM_IPC_WINDOW_CHROME_INFO_BUBBLE,
- &params);
- }
-#endif
-#endif
-
- // Create a View to hold the contents of the main window.
- views::View* contents_view = new views::View;
- // We add |contents_view| to ourselves before the AddChildView() call below so
- // that when |contents| gets added, it will already have a widget, and thus
- // any NativeButtons it creates in ViewHierarchyChanged() will be functional
- // (e.g. calling SetChecked() on checkboxes is safe).
- GetWidget()->SetContentsView(contents_view);
- // Adding |contents| as a child has to be done before we call
- // contents->GetPreferredSize() below, since some supplied views don't
- // actually initialize themselves until they're added to a hierarchy.
- contents_view->AddChildView(contents);
-
- // Calculate and set the bounds for all windows and views.
- gfx::Rect window_bounds;
-
-#if defined(OS_WIN) && !defined(USE_AURA)
- // Initialize and position the border window.
- window_bounds = border_->SizeAndGetBounds(position_relative_to,
- arrow_location,
- contents->GetPreferredSize());
-
- // Make |contents| take up the entire contents view.
- contents_view->SetLayoutManager(new views::FillLayout);
-
- // Paint the background color behind the contents.
- contents_view->set_background(
- views::Background::CreateSolidBackground(kBackgroundColor));
-#else
- // Create a view to paint the border and background.
- border_contents_ = CreateBorderContents();
- border_contents_->Init();
- border_contents_->SetBackgroundColor(kBackgroundColor);
- border_contents_->SetAlignment(alignment);
- gfx::Rect contents_bounds;
- border_contents_->SizeAndGetBounds(position_relative_to,
- arrow_location, false, contents->GetPreferredSize(),
- &contents_bounds, &window_bounds);
- // This new view must be added before |contents| so it will paint under it.
- contents_view->AddChildViewAt(border_contents_, 0);
-
- // |contents_view| has no layout manager, so we have to explicitly position
- // its children.
- border_contents_->SetBoundsRect(
- gfx::Rect(gfx::Point(), window_bounds.size()));
- contents->SetBoundsRect(contents_bounds);
-#endif
- GetWidget()->SetBounds(window_bounds);
-
- // Show the window.
-#if defined(USE_AURA)
- GetWidget()->Show();
-#elif defined(OS_WIN)
- border_->ShowWindow(SW_SHOW);
- ShowWindow(SW_SHOW);
-#elif defined(TOOLKIT_USES_GTK)
- GetWidget()->Show();
-#endif
-
- if (fade_in)
- FadeIn();
-}
-
-void Bubble::RegisterEscapeAccelerator() {
- GetWidget()->GetFocusManager()->RegisterAccelerator(
- ui::Accelerator(ui::VKEY_ESCAPE, false, false, false), this);
- accelerator_registered_ = true;
-}
-
-void Bubble::UnregisterEscapeAccelerator() {
- DCHECK(accelerator_registered_);
- GetWidget()->GetFocusManager()->UnregisterAccelerator(
- ui::Accelerator(ui::VKEY_ESCAPE, false, false, false), this);
- accelerator_registered_ = false;
-}
-
-BorderContents* Bubble::CreateBorderContents() {
- return new BorderContents();
-}
-
-void Bubble::SizeToContents() {
- gfx::Rect window_bounds;
-
-#if defined(OS_WIN) && !defined(USE_AURA)
- // Initialize and position the border window.
- window_bounds = border_->SizeAndGetBounds(position_relative_to_,
- arrow_location_,
- contents_->GetPreferredSize());
-#else
- gfx::Rect contents_bounds;
- border_contents_->SizeAndGetBounds(position_relative_to_,
- arrow_location_, false, contents_->GetPreferredSize(),
- &contents_bounds, &window_bounds);
- // |contents_view| has no layout manager, so we have to explicitly position
- // its children.
- border_contents_->SetBoundsRect(
- gfx::Rect(gfx::Point(), window_bounds.size()));
- contents_->SetBoundsRect(contents_bounds);
-#endif
- GetWidget()->SetBounds(window_bounds);
-}
-
-#if defined(USE_AURA)
-void Bubble::OnLostActive() {
- GetWidget()->Close();
-}
-#elif defined(OS_WIN)
-void Bubble::OnActivate(UINT action, BOOL minimized, HWND window) {
- // The popup should close when it is deactivated.
- if (action == WA_INACTIVE) {
- if (close_on_deactivate_)
- GetWidget()->Close();
- } else if (action == WA_ACTIVE) {
- DCHECK(GetWidget()->GetRootView()->has_children());
- GetWidget()->GetRootView()->child_at(0)->RequestFocus();
- }
-}
-#elif defined(TOOLKIT_USES_GTK)
-void Bubble::OnActiveChanged() {
- if (!GetWidget()->IsActive())
- GetWidget()->Close();
-}
-#endif
-
-void Bubble::DoClose(bool closed_by_escape) {
- if (show_status_ == kClosed)
- return;
-
- if (accelerator_registered_)
- UnregisterEscapeAccelerator();
- if (delegate_)
- delegate_->BubbleClosing(this, closed_by_escape);
- FOR_EACH_OBSERVER(Observer, observer_list_, OnBubbleClosing());
- show_status_ = kClosed;
-#if defined(OS_WIN) && !defined(USE_AURA)
- border_->Close();
-#endif
-#if defined(USE_AURA)
- NativeWidgetAura::Close();
-#elif defined(OS_WIN)
- NativeWidgetWin::Close();
-#elif defined(TOOLKIT_USES_GTK)
- NativeWidgetGtk::Close();
-#endif
-}
-
-void Bubble::FadeIn() {
- Fade(true); // |fade_in|.
-}
-
-void Bubble::FadeOut() {
-#if defined(OS_WIN) && !defined(USE_AURA)
- // The contents window cannot have the layered flag on by default, since its
- // content doesn't always work inside a layered window, but when animating it
- // is ok to set that style on the window for the purpose of fading it out.
- SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) | WS_EX_LAYERED);
- // This must be the very next call, otherwise we can get flicker on close.
- SetLayeredWindowAttributes(GetNativeView(), 0,
- static_cast<byte>(255), LWA_ALPHA);
-#elif defined(USE_AURA)
- NOTIMPLEMENTED();
-#endif
-
- Fade(false); // |fade_in|.
-}
-
-void Bubble::Fade(bool fade_in) {
- animation_.reset(new ui::SlideAnimation(this));
- animation_->SetSlideDuration(kHideFadeDurationMS);
- animation_->SetTweenType(ui::Tween::LINEAR);
-
- animation_->Reset(fade_in ? 0.0 : 1.0);
- if (fade_in)
- animation_->Show();
- else
- animation_->Hide();
-}
-
-bool Bubble::AcceleratorPressed(const ui::Accelerator& accelerator) {
- if (!delegate_ || delegate_->CloseOnEscape()) {
- DoClose(true);
- return true;
- }
- return false;
-}
« no previous file with comments | « chrome/browser/ui/views/bubble/bubble.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698