| 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 #include "chrome/browser/ui/views/bubble/bubble.h" | 5 #include "chrome/browser/ui/views/bubble/bubble.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "chrome/browser/ui/views/bubble/border_contents.h" | 9 #include "chrome/browser/ui/views/bubble/border_contents.h" |
| 10 #include "chrome/common/chrome_notification_types.h" | 10 #include "chrome/common/chrome_notification_types.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 } else { | 99 } else { |
| 100 #if defined(OS_WIN) | 100 #if defined(OS_WIN) |
| 101 // When fading in we need to remove the layered window style flag, since | 101 // When fading in we need to remove the layered window style flag, since |
| 102 // that style prevents some bubble content from working properly. | 102 // that style prevents some bubble content from working properly. |
| 103 SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) & ~WS_EX_LAYERED); | 103 SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) & ~WS_EX_LAYERED); |
| 104 #endif | 104 #endif |
| 105 } | 105 } |
| 106 } | 106 } |
| 107 | 107 |
| 108 void Bubble::AnimationProgressed(const ui::Animation* animation) { | 108 void Bubble::AnimationProgressed(const ui::Animation* animation) { |
| 109 #if defined(OS_WIN) | |
| 110 // Set the opacity for the main contents window. | 109 // Set the opacity for the main contents window. |
| 111 unsigned char opacity = static_cast<unsigned char>( | 110 unsigned char opacity = static_cast<unsigned char>( |
| 112 animation_->GetCurrentValue() * 255); | 111 animation_->GetCurrentValue() * 255); |
| 112 #if defined(OS_WIN) |
| 113 SetLayeredWindowAttributes(GetNativeView(), 0, | 113 SetLayeredWindowAttributes(GetNativeView(), 0, |
| 114 static_cast<byte>(opacity), LWA_ALPHA); | 114 static_cast<byte>(opacity), LWA_ALPHA); |
| 115 contents_->SchedulePaint(); | 115 contents_->SchedulePaint(); |
| 116 | 116 |
| 117 // Also fade in/out the bubble border window. | 117 // Also fade in/out the bubble border window. |
| 118 border_->SetOpacity(opacity); | 118 border_->SetOpacity(opacity); |
| 119 border_->border_contents()->SchedulePaint(); | 119 border_->border_contents()->SchedulePaint(); |
| 120 #else | 120 #else |
| 121 NOTIMPLEMENTED(); | 121 SetOpacity(opacity); |
| 122 border_contents_->SchedulePaint(); |
| 122 #endif | 123 #endif |
| 123 } | 124 } |
| 124 | 125 |
| 125 Bubble::Bubble() | 126 Bubble::Bubble() |
| 126 : | 127 : |
| 127 #if defined(OS_WIN) | 128 #if defined(OS_WIN) |
| 128 views::NativeWidgetWin(new views::Widget), | 129 views::NativeWidgetWin(new views::Widget), |
| 129 #elif defined(TOOLKIT_USES_GTK) | 130 #elif defined(TOOLKIT_USES_GTK) |
| 130 views::NativeWidgetGtk(new views::Widget), | 131 views::NativeWidgetGtk(new views::Widget), |
| 131 #endif | 132 #endif |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 | 169 |
| 169 void Bubble::InitBubble(views::Widget* parent, | 170 void Bubble::InitBubble(views::Widget* parent, |
| 170 const gfx::Rect& position_relative_to, | 171 const gfx::Rect& position_relative_to, |
| 171 BubbleBorder::ArrowLocation arrow_location, | 172 BubbleBorder::ArrowLocation arrow_location, |
| 172 views::View* contents, | 173 views::View* contents, |
| 173 BubbleDelegate* delegate) { | 174 BubbleDelegate* delegate) { |
| 174 delegate_ = delegate; | 175 delegate_ = delegate; |
| 175 position_relative_to_ = position_relative_to; | 176 position_relative_to_ = position_relative_to; |
| 176 arrow_location_ = arrow_location; | 177 arrow_location_ = arrow_location; |
| 177 contents_ = contents; | 178 contents_ = contents; |
| 179 const bool fade_in = delegate_ && delegate_->FadeInOnShow(); |
| 178 | 180 |
| 179 // Create the main window. | 181 // Create the main window. |
| 180 #if defined(OS_WIN) | 182 #if defined(OS_WIN) |
| 181 views::Widget* parent_window = parent->GetTopLevelWidget(); | 183 views::Widget* parent_window = parent->GetTopLevelWidget(); |
| 182 if (parent_window) | 184 if (parent_window) |
| 183 parent_window->DisableInactiveRendering(); | 185 parent_window->DisableInactiveRendering(); |
| 184 set_window_style(WS_POPUP | WS_CLIPCHILDREN); | 186 set_window_style(WS_POPUP | WS_CLIPCHILDREN); |
| 185 int extended_style = WS_EX_TOOLWINDOW; | 187 int extended_style = WS_EX_TOOLWINDOW; |
| 186 // During FadeIn we need to turn on the layered window style to deal with | 188 // During FadeIn we need to turn on the layered window style to deal with |
| 187 // transparency. This flag needs to be reset after fading in is complete. | 189 // transparency. This flag needs to be reset after fading in is complete. |
| 188 bool fade_in = delegate_ && delegate_->FadeInOnShow(); | |
| 189 if (fade_in) | 190 if (fade_in) |
| 190 extended_style |= WS_EX_LAYERED; | 191 extended_style |= WS_EX_LAYERED; |
| 191 set_window_ex_style(extended_style); | 192 set_window_ex_style(extended_style); |
| 192 | 193 |
| 193 DCHECK(!border_); | 194 DCHECK(!border_); |
| 194 border_ = new BorderWidgetWin(); | 195 border_ = new BorderWidgetWin(); |
| 195 | 196 |
| 196 border_->InitBorderWidgetWin(CreateBorderContents(), parent->GetNativeView()); | 197 border_->InitBorderWidgetWin(CreateBorderContents(), parent->GetNativeView()); |
| 197 border_->border_contents()->SetBackgroundColor(kBackgroundColor); | 198 border_->border_contents()->SetBackgroundColor(kBackgroundColor); |
| 198 | 199 |
| 199 // We make the BorderWidgetWin the owner of the Bubble HWND, so that the | 200 // We make the BorderWidgetWin the owner of the Bubble HWND, so that the |
| 200 // latter is displayed on top of the former. | 201 // latter is displayed on top of the former. |
| 201 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); | 202 views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); |
| 202 params.parent = border_->GetNativeView(); | 203 params.parent = border_->GetNativeView(); |
| 203 params.native_widget = this; | 204 params.native_widget = this; |
| 204 GetWidget()->Init(params); | 205 GetWidget()->Init(params); |
| 205 | 206 |
| 206 if (fade_in) { | 207 if (fade_in) { |
| 207 border_->SetOpacity(0); | 208 border_->SetOpacity(0); |
| 208 GetWidget()->SetOpacity(0); | 209 GetWidget()->SetOpacity(0); |
| 209 } | 210 } |
| 210 SetWindowText(GetNativeView(), delegate_->accessible_name().c_str()); | 211 SetWindowText(GetNativeView(), delegate_->accessible_name().c_str()); |
| 211 #elif defined(TOOLKIT_USES_GTK) | 212 #elif defined(TOOLKIT_USES_GTK) |
| 212 views::Widget::InitParams params(type_); | 213 views::Widget::InitParams params(type_); |
| 213 params.transparent = true; | 214 params.transparent = true; |
| 214 params.parent_widget = parent; | 215 params.parent_widget = parent; |
| 215 params.native_widget = this; | 216 params.native_widget = this; |
| 216 GetWidget()->Init(params); | 217 GetWidget()->Init(params); |
| 218 if (fade_in) |
| 219 SetOpacity(0); |
| 217 #if defined(OS_CHROMEOS) | 220 #if defined(OS_CHROMEOS) |
| 218 { | 221 { |
| 219 vector<int> params; | 222 vector<int> params; |
| 220 params.push_back(show_while_screen_is_locked_ ? 1 : 0); | 223 params.push_back(show_while_screen_is_locked_ ? 1 : 0); |
| 221 chromeos::WmIpc::instance()->SetWindowType( | 224 chromeos::WmIpc::instance()->SetWindowType( |
| 222 GetNativeView(), | 225 GetNativeView(), |
| 223 chromeos::WM_IPC_WINDOW_CHROME_INFO_BUBBLE, | 226 chromeos::WM_IPC_WINDOW_CHROME_INFO_BUBBLE, |
| 224 ¶ms); | 227 ¶ms); |
| 225 } | 228 } |
| 226 #endif | 229 #endif |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 | 278 |
| 276 // Done creating the bubble. | 279 // Done creating the bubble. |
| 277 NotificationService::current()->Notify( | 280 NotificationService::current()->Notify( |
| 278 chrome::NOTIFICATION_INFO_BUBBLE_CREATED, Source<Bubble>(this), | 281 chrome::NOTIFICATION_INFO_BUBBLE_CREATED, Source<Bubble>(this), |
| 279 NotificationService::NoDetails()); | 282 NotificationService::NoDetails()); |
| 280 | 283 |
| 281 // Show the window. | 284 // Show the window. |
| 282 #if defined(OS_WIN) | 285 #if defined(OS_WIN) |
| 283 border_->ShowWindow(SW_SHOW); | 286 border_->ShowWindow(SW_SHOW); |
| 284 ShowWindow(SW_SHOW); | 287 ShowWindow(SW_SHOW); |
| 285 if (fade_in) | |
| 286 FadeIn(); | |
| 287 #elif defined(TOOLKIT_USES_GTK) | 288 #elif defined(TOOLKIT_USES_GTK) |
| 288 GetWidget()->Show(); | 289 GetWidget()->Show(); |
| 289 #endif | 290 #endif |
| 291 |
| 292 if (fade_in) |
| 293 FadeIn(); |
| 290 } | 294 } |
| 291 | 295 |
| 292 void Bubble::RegisterEscapeAccelerator() { | 296 void Bubble::RegisterEscapeAccelerator() { |
| 293 GetWidget()->GetFocusManager()->RegisterAccelerator( | 297 GetWidget()->GetFocusManager()->RegisterAccelerator( |
| 294 views::Accelerator(ui::VKEY_ESCAPE, false, false, false), this); | 298 views::Accelerator(ui::VKEY_ESCAPE, false, false, false), this); |
| 295 accelerator_registered_ = true; | 299 accelerator_registered_ = true; |
| 296 } | 300 } |
| 297 | 301 |
| 298 void Bubble::UnregisterEscapeAccelerator() { | 302 void Bubble::UnregisterEscapeAccelerator() { |
| 299 DCHECK(accelerator_registered_); | 303 DCHECK(accelerator_registered_); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 animation_->Hide(); | 398 animation_->Hide(); |
| 395 } | 399 } |
| 396 | 400 |
| 397 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) { | 401 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) { |
| 398 if (!delegate_ || delegate_->CloseOnEscape()) { | 402 if (!delegate_ || delegate_->CloseOnEscape()) { |
| 399 DoClose(true); | 403 DoClose(true); |
| 400 return true; | 404 return true; |
| 401 } | 405 } |
| 402 return false; | 406 return false; |
| 403 } | 407 } |
| OLD | NEW |