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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 // that style prevents some bubble content from working properly. | 104 // that style prevents some bubble content from working properly. |
105 SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) & ~WS_EX_LAYERED); | 105 SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) & ~WS_EX_LAYERED); |
106 #endif | 106 #endif |
107 } | 107 } |
108 } | 108 } |
109 | 109 |
110 void Bubble::AnimationProgressed(const ui::Animation* animation) { | 110 void Bubble::AnimationProgressed(const ui::Animation* animation) { |
111 // Set the opacity for the main contents window. | 111 // Set the opacity for the main contents window. |
112 unsigned char opacity = static_cast<unsigned char>( | 112 unsigned char opacity = static_cast<unsigned char>( |
113 animation_->GetCurrentValue() * 255); | 113 animation_->GetCurrentValue() * 255); |
114 #if defined(USE_AURA) | 114 #if defined(OS_WIN) && !defined(USE_AURA) |
115 // TODO(beng): | |
116 (void)opacity; | |
117 NOTIMPLEMENTED(); | |
118 #elif defined(OS_WIN) | |
119 SetLayeredWindowAttributes(GetNativeView(), 0, | 115 SetLayeredWindowAttributes(GetNativeView(), 0, |
120 static_cast<byte>(opacity), LWA_ALPHA); | 116 static_cast<byte>(opacity), LWA_ALPHA); |
121 contents_->SchedulePaint(); | 117 contents_->SchedulePaint(); |
122 | 118 |
123 // Also fade in/out the bubble border window. | 119 // Also fade in/out the bubble border window. |
124 border_->SetOpacity(opacity); | 120 border_->SetOpacity(opacity); |
125 border_->border_contents()->SchedulePaint(); | 121 border_->border_contents()->SchedulePaint(); |
126 #else | 122 #else |
127 SetOpacity(opacity); | 123 SetOpacity(opacity); |
128 border_contents_->SchedulePaint(); | 124 border_contents_->SchedulePaint(); |
129 #endif | 125 #endif |
130 } | 126 } |
131 | 127 |
132 Bubble::Bubble() | 128 Bubble::Bubble() |
133 : | 129 : |
134 #if defined(USE_AURA) | 130 #if defined(USE_AURA) |
135 views::NativeWidgetAura(new views::Widget), | 131 views::NativeWidgetAura(new views::Widget), |
136 #elif defined(OS_WIN) | 132 #elif defined(OS_WIN) |
137 views::NativeWidgetWin(new views::Widget), | 133 views::NativeWidgetWin(new views::Widget), |
138 #elif defined(TOUCH_UI) | 134 #elif defined(TOUCH_UI) |
139 views::NativeWidgetViews(new views::Widget), | 135 views::NativeWidgetViews(new views::Widget), |
140 #elif defined(TOOLKIT_USES_GTK) | 136 #elif defined(TOOLKIT_USES_GTK) |
141 views::NativeWidgetGtk(new views::Widget), | 137 views::NativeWidgetGtk(new views::Widget), |
142 #endif | 138 #endif |
143 #if defined(USE_AURA) | 139 #if defined(OS_WIN) && !defined(USE_AURA) |
144 #elif defined(TOOLKIT_USES_GTK) | 140 border_(NULL), |
| 141 #else |
145 border_contents_(NULL), | 142 border_contents_(NULL), |
146 #elif defined(OS_WIN) | |
147 border_(NULL), | |
148 #endif | 143 #endif |
149 delegate_(NULL), | 144 delegate_(NULL), |
150 show_status_(kOpen), | 145 show_status_(kOpen), |
151 fade_away_on_close_(false), | 146 fade_away_on_close_(false), |
152 close_on_deactivate_(true), | 147 close_on_deactivate_(true), |
153 #if defined(TOOLKIT_USES_GTK) | 148 #if defined(TOOLKIT_USES_GTK) |
154 type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS), | 149 type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS), |
155 #endif | 150 #endif |
156 #if defined(OS_CHROMEOS) | 151 #if defined(OS_CHROMEOS) |
157 show_while_screen_is_locked_(false), | 152 show_while_screen_is_locked_(false), |
158 #endif | 153 #endif |
159 arrow_location_(views::BubbleBorder::NONE), | 154 arrow_location_(views::BubbleBorder::NONE), |
160 contents_(NULL), | 155 contents_(NULL), |
161 accelerator_registered_(false) { | 156 accelerator_registered_(false) { |
162 } | 157 } |
163 | 158 |
164 #if defined(OS_CHROMEOS) | 159 #if defined(OS_CHROMEOS) |
165 Bubble::Bubble(views::Widget::InitParams::Type type, | 160 Bubble::Bubble(views::Widget::InitParams::Type type, |
166 bool show_while_screen_is_locked) | 161 bool show_while_screen_is_locked) |
167 #if defined(USE_AURA) | 162 #if defined(USE_AURA) |
168 : views::NativeWidgetAura(new views::Widget), | 163 : views::NativeWidgetAura(new views::Widget), |
169 #elif defined(TOUCH_UI) | 164 #elif defined(TOUCH_UI) |
170 : views::NativeWidgetViews(new views::Widget), | 165 : views::NativeWidgetViews(new views::Widget), |
171 #else | 166 #else |
172 : views::NativeWidgetGtk(new views::Widget), | 167 : views::NativeWidgetGtk(new views::Widget), |
173 #endif | 168 #endif |
174 #if defined(TOOLKIT_USES_GTK) | |
175 border_contents_(NULL), | 169 border_contents_(NULL), |
176 #endif | |
177 delegate_(NULL), | 170 delegate_(NULL), |
178 show_status_(kOpen), | 171 show_status_(kOpen), |
179 fade_away_on_close_(false), | 172 fade_away_on_close_(false), |
180 #if defined(TOOLKIT_USES_GTK) | 173 #if defined(TOOLKIT_USES_GTK) |
181 type_(type), | 174 type_(type), |
182 #endif | 175 #endif |
183 show_while_screen_is_locked_(show_while_screen_is_locked), | 176 show_while_screen_is_locked_(show_while_screen_is_locked), |
184 arrow_location_(views::BubbleBorder::NONE), | 177 arrow_location_(views::BubbleBorder::NONE), |
185 contents_(NULL), | 178 contents_(NULL), |
186 accelerator_registered_(false) { | 179 accelerator_registered_(false) { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 // (e.g. calling SetChecked() on checkboxes is safe). | 266 // (e.g. calling SetChecked() on checkboxes is safe). |
274 GetWidget()->SetContentsView(contents_view); | 267 GetWidget()->SetContentsView(contents_view); |
275 // Adding |contents| as a child has to be done before we call | 268 // Adding |contents| as a child has to be done before we call |
276 // contents->GetPreferredSize() below, since some supplied views don't | 269 // contents->GetPreferredSize() below, since some supplied views don't |
277 // actually initialize themselves until they're added to a hierarchy. | 270 // actually initialize themselves until they're added to a hierarchy. |
278 contents_view->AddChildView(contents); | 271 contents_view->AddChildView(contents); |
279 | 272 |
280 // Calculate and set the bounds for all windows and views. | 273 // Calculate and set the bounds for all windows and views. |
281 gfx::Rect window_bounds; | 274 gfx::Rect window_bounds; |
282 | 275 |
283 #if defined(USE_AURA) | 276 #if defined(OS_WIN) && !defined(USE_AURA) |
284 // TODO(beng): | |
285 NOTIMPLEMENTED(); | |
286 #elif defined(OS_WIN) | |
287 // Initialize and position the border window. | 277 // Initialize and position the border window. |
288 window_bounds = border_->SizeAndGetBounds(position_relative_to, | 278 window_bounds = border_->SizeAndGetBounds(position_relative_to, |
289 arrow_location, | 279 arrow_location, |
290 contents->GetPreferredSize()); | 280 contents->GetPreferredSize()); |
291 | 281 |
292 // Make |contents| take up the entire contents view. | 282 // Make |contents| take up the entire contents view. |
293 contents_view->SetLayoutManager(new views::FillLayout); | 283 contents_view->SetLayoutManager(new views::FillLayout); |
294 | 284 |
295 // Paint the background color behind the contents. | 285 // Paint the background color behind the contents. |
296 contents_view->set_background( | 286 contents_view->set_background( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 accelerator_registered_ = false; | 332 accelerator_registered_ = false; |
343 } | 333 } |
344 | 334 |
345 BorderContents* Bubble::CreateBorderContents() { | 335 BorderContents* Bubble::CreateBorderContents() { |
346 return new BorderContents(); | 336 return new BorderContents(); |
347 } | 337 } |
348 | 338 |
349 void Bubble::SizeToContents() { | 339 void Bubble::SizeToContents() { |
350 gfx::Rect window_bounds; | 340 gfx::Rect window_bounds; |
351 | 341 |
352 #if defined(USE_AURA) | 342 #if defined(OS_WIN) && !defined(USE_AURA) |
353 // TODO(beng): | |
354 NOTIMPLEMENTED(); | |
355 #elif defined(OS_WIN) | |
356 // Initialize and position the border window. | 343 // Initialize and position the border window. |
357 window_bounds = border_->SizeAndGetBounds(position_relative_to_, | 344 window_bounds = border_->SizeAndGetBounds(position_relative_to_, |
358 arrow_location_, | 345 arrow_location_, |
359 contents_->GetPreferredSize()); | 346 contents_->GetPreferredSize()); |
360 #else | 347 #else |
361 gfx::Rect contents_bounds; | 348 gfx::Rect contents_bounds; |
362 border_contents_->SizeAndGetBounds(position_relative_to_, | 349 border_contents_->SizeAndGetBounds(position_relative_to_, |
363 arrow_location_, false, contents_->GetPreferredSize(), | 350 arrow_location_, false, contents_->GetPreferredSize(), |
364 &contents_bounds, &window_bounds); | 351 &contents_bounds, &window_bounds); |
365 // |contents_view| has no layout manager, so we have to explicitly position | 352 // |contents_view| has no layout manager, so we have to explicitly position |
366 // its children. | 353 // its children. |
367 border_contents_->SetBoundsRect( | 354 border_contents_->SetBoundsRect( |
368 gfx::Rect(gfx::Point(), window_bounds.size())); | 355 gfx::Rect(gfx::Point(), window_bounds.size())); |
369 contents_->SetBoundsRect(contents_bounds); | 356 contents_->SetBoundsRect(contents_bounds); |
370 #endif | 357 #endif |
371 GetWidget()->SetBounds(window_bounds); | 358 GetWidget()->SetBounds(window_bounds); |
372 } | 359 } |
373 | 360 |
374 #if defined(USE_AURA) | 361 #if defined(USE_AURA) |
375 // TODO(beng): | 362 void Bubble::OnLostActive() { |
| 363 GetWidget()->Close(); |
| 364 } |
376 #elif defined(OS_WIN) | 365 #elif defined(OS_WIN) |
377 void Bubble::OnActivate(UINT action, BOOL minimized, HWND window) { | 366 void Bubble::OnActivate(UINT action, BOOL minimized, HWND window) { |
378 // The popup should close when it is deactivated. | 367 // The popup should close when it is deactivated. |
379 if (action == WA_INACTIVE) { | 368 if (action == WA_INACTIVE) { |
380 if (close_on_deactivate_) | 369 if (close_on_deactivate_) |
381 GetWidget()->Close(); | 370 GetWidget()->Close(); |
382 } else if (action == WA_ACTIVE) { | 371 } else if (action == WA_ACTIVE) { |
383 DCHECK(GetWidget()->GetRootView()->has_children()); | 372 DCHECK(GetWidget()->GetRootView()->has_children()); |
384 GetWidget()->GetRootView()->child_at(0)->RequestFocus(); | 373 GetWidget()->GetRootView()->child_at(0)->RequestFocus(); |
385 } | 374 } |
(...skipping 12 matching lines...) Expand all Loading... |
398 void Bubble::DoClose(bool closed_by_escape) { | 387 void Bubble::DoClose(bool closed_by_escape) { |
399 if (show_status_ == kClosed) | 388 if (show_status_ == kClosed) |
400 return; | 389 return; |
401 | 390 |
402 if (accelerator_registered_) | 391 if (accelerator_registered_) |
403 UnregisterEscapeAccelerator(); | 392 UnregisterEscapeAccelerator(); |
404 if (delegate_) | 393 if (delegate_) |
405 delegate_->BubbleClosing(this, closed_by_escape); | 394 delegate_->BubbleClosing(this, closed_by_escape); |
406 FOR_EACH_OBSERVER(Observer, observer_list_, OnBubbleClosing()); | 395 FOR_EACH_OBSERVER(Observer, observer_list_, OnBubbleClosing()); |
407 show_status_ = kClosed; | 396 show_status_ = kClosed; |
408 #if defined(USE_AURA) | 397 #if defined(OS_WIN) && !defined(USE_AURA) |
409 // TODO(beng): | |
410 NOTIMPLEMENTED(); | |
411 #elif defined(OS_WIN) | |
412 border_->Close(); | 398 border_->Close(); |
413 #endif | 399 #endif |
414 #if defined(USE_AURA) | 400 #if defined(USE_AURA) |
415 // TODO(beng): | 401 NativeWidgetAura::Close(); |
416 NOTIMPLEMENTED(); | |
417 #elif defined(OS_WIN) | 402 #elif defined(OS_WIN) |
418 NativeWidgetWin::Close(); | 403 NativeWidgetWin::Close(); |
419 #elif defined(TOUCH_UI) | 404 #elif defined(TOUCH_UI) |
420 NativeWidgetViews::Close(); | 405 NativeWidgetViews::Close(); |
421 #elif defined(TOOLKIT_USES_GTK) | 406 #elif defined(TOOLKIT_USES_GTK) |
422 NativeWidgetGtk::Close(); | 407 NativeWidgetGtk::Close(); |
423 #endif | 408 #endif |
424 } | 409 } |
425 | 410 |
426 void Bubble::FadeIn() { | 411 void Bubble::FadeIn() { |
(...skipping 28 matching lines...) Expand all Loading... |
455 animation_->Hide(); | 440 animation_->Hide(); |
456 } | 441 } |
457 | 442 |
458 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) { | 443 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) { |
459 if (!delegate_ || delegate_->CloseOnEscape()) { | 444 if (!delegate_ || delegate_->CloseOnEscape()) { |
460 DoClose(true); | 445 DoClose(true); |
461 return true; | 446 return true; |
462 } | 447 } |
463 return false; | 448 return false; |
464 } | 449 } |
OLD | NEW |