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

Side by Side Diff: chrome/browser/ui/views/bubble/bubble.cc

Issue 7834048: Preliminary work to allow Chrome to build with USE_AURA (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 3 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
11 #include "content/common/notification_service.h" 11 #include "content/common/notification_service.h"
12 #include "ui/base/animation/slide_animation.h" 12 #include "ui/base/animation/slide_animation.h"
13 #include "ui/base/keycodes/keyboard_codes.h" 13 #include "ui/base/keycodes/keyboard_codes.h"
14 #include "ui/gfx/color_utils.h" 14 #include "ui/gfx/color_utils.h"
15 #include "views/layout/fill_layout.h" 15 #include "views/layout/fill_layout.h"
16 #include "views/widget/widget.h" 16 #include "views/widget/widget.h"
17 #include "views/window/client_view.h" 17 #include "views/window/client_view.h"
18 18
19 #if defined(OS_CHROMEOS) 19 #if defined(OS_CHROMEOS)
20 #include "chrome/browser/chromeos/wm_ipc.h" 20 #include "chrome/browser/chromeos/wm_ipc.h"
21 #include "third_party/cros_system_api/window_manager/chromeos_wm_ipc_enums.h" 21 #include "third_party/cros_system_api/window_manager/chromeos_wm_ipc_enums.h"
22 #endif 22 #endif
23 23
24 #if defined(OS_WIN) 24 #if defined(OS_WIN) && !defined(USE_AURA)
25 #include "chrome/browser/ui/views/bubble/border_widget_win.h" 25 #include "chrome/browser/ui/views/bubble/border_widget_win.h"
26 #endif 26 #endif
27 27
28 using std::vector; 28 using std::vector;
29 29
30 // How long the fade should last for. 30 // How long the fade should last for.
31 static const int kHideFadeDurationMS = 200; 31 static const int kHideFadeDurationMS = 200;
32 32
33 // Background color of the bubble. 33 // Background color of the bubble.
34 #if defined(OS_WIN) 34 #if defined(OS_WIN) && !defined(USE_AURA)
35 const SkColor Bubble::kBackgroundColor = 35 const SkColor Bubble::kBackgroundColor =
36 color_utils::GetSysSkColor(COLOR_WINDOW); 36 color_utils::GetSysSkColor(COLOR_WINDOW);
37 #else 37 #else
38 // TODO(beng): source from theme provider. 38 // TODO(beng): source from theme provider.
39 const SkColor Bubble::kBackgroundColor = SK_ColorWHITE; 39 const SkColor Bubble::kBackgroundColor = SK_ColorWHITE;
40 #endif 40 #endif
41 41
42 // BubbleDelegate --------------------------------------------------------- 42 // BubbleDelegate ---------------------------------------------------------
43 43
44 std::wstring BubbleDelegate::accessible_name() { 44 std::wstring BubbleDelegate::accessible_name() {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 FadeOut(); 90 FadeOut();
91 else 91 else
92 DoClose(false); 92 DoClose(false);
93 } 93 }
94 94
95 void Bubble::AnimationEnded(const ui::Animation* animation) { 95 void Bubble::AnimationEnded(const ui::Animation* animation) {
96 if (static_cast<int>(animation_->GetCurrentValue()) == 0) { 96 if (static_cast<int>(animation_->GetCurrentValue()) == 0) {
97 // When fading out we just need to close the bubble at the end 97 // When fading out we just need to close the bubble at the end
98 DoClose(false); 98 DoClose(false);
99 } else { 99 } else {
100 #if defined(OS_WIN) 100 #if defined(OS_WIN) && !defined(USE_AURA)
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 // Set the opacity for the main contents window. 109 // Set the opacity for the main contents window.
110 unsigned char opacity = static_cast<unsigned char>( 110 unsigned char opacity = static_cast<unsigned char>(
111 animation_->GetCurrentValue() * 255); 111 animation_->GetCurrentValue() * 255);
112 #if defined(OS_WIN) 112 #if defined(USE_AURA)
113 // TODO(beng):
114 NOTIMPLEMENTED();
115 #elif defined(OS_WIN)
113 SetLayeredWindowAttributes(GetNativeView(), 0, 116 SetLayeredWindowAttributes(GetNativeView(), 0,
114 static_cast<byte>(opacity), LWA_ALPHA); 117 static_cast<byte>(opacity), LWA_ALPHA);
115 contents_->SchedulePaint(); 118 contents_->SchedulePaint();
116 119
117 // Also fade in/out the bubble border window. 120 // Also fade in/out the bubble border window.
118 border_->SetOpacity(opacity); 121 border_->SetOpacity(opacity);
119 border_->border_contents()->SchedulePaint(); 122 border_->border_contents()->SchedulePaint();
120 #else 123 #else
121 SetOpacity(opacity); 124 SetOpacity(opacity);
122 border_contents_->SchedulePaint(); 125 border_contents_->SchedulePaint();
123 #endif 126 #endif
124 } 127 }
125 128
126 Bubble::Bubble() 129 Bubble::Bubble()
127 : 130 :
128 #if defined(OS_WIN) 131 #if defined(USE_AURA)
132 views::NativeWidgetAura(new views::Widget),
133 #elif defined(OS_WIN)
129 views::NativeWidgetWin(new views::Widget), 134 views::NativeWidgetWin(new views::Widget),
130 #elif defined(TOOLKIT_USES_GTK) 135 #elif defined(TOOLKIT_USES_GTK)
131 views::NativeWidgetGtk(new views::Widget), 136 views::NativeWidgetGtk(new views::Widget),
132 #endif 137 #endif
133 #if defined(TOOLKIT_USES_GTK) 138 #if defined(USE_AURA)
139 #elif defined(TOOLKIT_USES_GTK)
134 border_contents_(NULL), 140 border_contents_(NULL),
135 #elif defined(OS_WIN) 141 #elif defined(OS_WIN)
136 border_(NULL), 142 border_(NULL),
137 #endif 143 #endif
138 delegate_(NULL), 144 delegate_(NULL),
139 show_status_(kOpen), 145 show_status_(kOpen),
140 fade_away_on_close_(false), 146 fade_away_on_close_(false),
141 #if defined(TOOLKIT_USES_GTK) 147 #if defined(TOOLKIT_USES_GTK)
142 type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS), 148 type_(views::Widget::InitParams::TYPE_WINDOW_FRAMELESS),
143 #endif 149 #endif
(...skipping 28 matching lines...) Expand all
172 views::BubbleBorder::ArrowLocation arrow_location, 178 views::BubbleBorder::ArrowLocation arrow_location,
173 views::View* contents, 179 views::View* contents,
174 BubbleDelegate* delegate) { 180 BubbleDelegate* delegate) {
175 delegate_ = delegate; 181 delegate_ = delegate;
176 position_relative_to_ = position_relative_to; 182 position_relative_to_ = position_relative_to;
177 arrow_location_ = arrow_location; 183 arrow_location_ = arrow_location;
178 contents_ = contents; 184 contents_ = contents;
179 const bool fade_in = delegate_ && delegate_->FadeInOnShow(); 185 const bool fade_in = delegate_ && delegate_->FadeInOnShow();
180 186
181 // Create the main window. 187 // Create the main window.
182 #if defined(OS_WIN) 188 #if defined(USE_AURA)
189 // TODO(beng):
190 NOTIMPLEMENTED();
191 #elif defined(OS_WIN)
183 views::Widget* parent_window = parent->GetTopLevelWidget(); 192 views::Widget* parent_window = parent->GetTopLevelWidget();
184 if (parent_window) 193 if (parent_window)
185 parent_window->DisableInactiveRendering(); 194 parent_window->DisableInactiveRendering();
186 set_window_style(WS_POPUP | WS_CLIPCHILDREN); 195 set_window_style(WS_POPUP | WS_CLIPCHILDREN);
187 int extended_style = WS_EX_TOOLWINDOW; 196 int extended_style = WS_EX_TOOLWINDOW;
188 // During FadeIn we need to turn on the layered window style to deal with 197 // During FadeIn we need to turn on the layered window style to deal with
189 // transparency. This flag needs to be reset after fading in is complete. 198 // transparency. This flag needs to be reset after fading in is complete.
190 if (fade_in) 199 if (fade_in)
191 extended_style |= WS_EX_LAYERED; 200 extended_style |= WS_EX_LAYERED;
192 set_window_ex_style(extended_style); 201 set_window_ex_style(extended_style);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 // (e.g. calling SetChecked() on checkboxes is safe). 246 // (e.g. calling SetChecked() on checkboxes is safe).
238 GetWidget()->SetContentsView(contents_view); 247 GetWidget()->SetContentsView(contents_view);
239 // Adding |contents| as a child has to be done before we call 248 // Adding |contents| as a child has to be done before we call
240 // contents->GetPreferredSize() below, since some supplied views don't 249 // contents->GetPreferredSize() below, since some supplied views don't
241 // actually initialize themselves until they're added to a hierarchy. 250 // actually initialize themselves until they're added to a hierarchy.
242 contents_view->AddChildView(contents); 251 contents_view->AddChildView(contents);
243 252
244 // Calculate and set the bounds for all windows and views. 253 // Calculate and set the bounds for all windows and views.
245 gfx::Rect window_bounds; 254 gfx::Rect window_bounds;
246 255
247 #if defined(OS_WIN) 256 #if defined(USE_AURA)
257 // TODO(beng):
258 NOTIMPLEMENTED();
259 #elif defined(OS_WIN)
248 // Initialize and position the border window. 260 // Initialize and position the border window.
249 window_bounds = border_->SizeAndGetBounds(position_relative_to, 261 window_bounds = border_->SizeAndGetBounds(position_relative_to,
250 arrow_location, 262 arrow_location,
251 contents->GetPreferredSize()); 263 contents->GetPreferredSize());
252 264
253 // Make |contents| take up the entire contents view. 265 // Make |contents| take up the entire contents view.
254 contents_view->SetLayoutManager(new views::FillLayout); 266 contents_view->SetLayoutManager(new views::FillLayout);
255 267
256 // Paint the background color behind the contents. 268 // Paint the background color behind the contents.
257 contents_view->set_background( 269 contents_view->set_background(
(...skipping 12 matching lines...) Expand all
270 282
271 // |contents_view| has no layout manager, so we have to explicitly position 283 // |contents_view| has no layout manager, so we have to explicitly position
272 // its children. 284 // its children.
273 border_contents_->SetBoundsRect( 285 border_contents_->SetBoundsRect(
274 gfx::Rect(gfx::Point(), window_bounds.size())); 286 gfx::Rect(gfx::Point(), window_bounds.size()));
275 contents->SetBoundsRect(contents_bounds); 287 contents->SetBoundsRect(contents_bounds);
276 #endif 288 #endif
277 GetWidget()->SetBounds(window_bounds); 289 GetWidget()->SetBounds(window_bounds);
278 290
279 // Show the window. 291 // Show the window.
280 #if defined(OS_WIN) 292 #if defined(USE_AURA)
293 // TODO(beng):
294 NOTIMPLEMENTED();
295 #elif defined(OS_WIN)
281 border_->ShowWindow(SW_SHOW); 296 border_->ShowWindow(SW_SHOW);
282 ShowWindow(SW_SHOW); 297 ShowWindow(SW_SHOW);
283 #elif defined(TOOLKIT_USES_GTK) 298 #elif defined(TOOLKIT_USES_GTK)
284 GetWidget()->Show(); 299 GetWidget()->Show();
285 #endif 300 #endif
286 301
287 if (fade_in) 302 if (fade_in)
288 FadeIn(); 303 FadeIn();
289 } 304 }
290 305
(...skipping 10 matching lines...) Expand all
301 accelerator_registered_ = false; 316 accelerator_registered_ = false;
302 } 317 }
303 318
304 BorderContents* Bubble::CreateBorderContents() { 319 BorderContents* Bubble::CreateBorderContents() {
305 return new BorderContents(); 320 return new BorderContents();
306 } 321 }
307 322
308 void Bubble::SizeToContents() { 323 void Bubble::SizeToContents() {
309 gfx::Rect window_bounds; 324 gfx::Rect window_bounds;
310 325
311 #if defined(OS_WIN) 326 #if defined(USE_AURA)
327 // TODO(beng):
328 NOTIMPLEMENTED();
329 #elif defined(OS_WIN)
312 // Initialize and position the border window. 330 // Initialize and position the border window.
313 window_bounds = border_->SizeAndGetBounds(position_relative_to_, 331 window_bounds = border_->SizeAndGetBounds(position_relative_to_,
314 arrow_location_, 332 arrow_location_,
315 contents_->GetPreferredSize()); 333 contents_->GetPreferredSize());
316 #else 334 #else
317 gfx::Rect contents_bounds; 335 gfx::Rect contents_bounds;
318 border_contents_->SizeAndGetBounds(position_relative_to_, 336 border_contents_->SizeAndGetBounds(position_relative_to_,
319 arrow_location_, false, contents_->GetPreferredSize(), 337 arrow_location_, false, contents_->GetPreferredSize(),
320 &contents_bounds, &window_bounds); 338 &contents_bounds, &window_bounds);
321 // |contents_view| has no layout manager, so we have to explicitly position 339 // |contents_view| has no layout manager, so we have to explicitly position
322 // its children. 340 // its children.
323 border_contents_->SetBoundsRect( 341 border_contents_->SetBoundsRect(
324 gfx::Rect(gfx::Point(), window_bounds.size())); 342 gfx::Rect(gfx::Point(), window_bounds.size()));
325 contents_->SetBoundsRect(contents_bounds); 343 contents_->SetBoundsRect(contents_bounds);
326 #endif 344 #endif
327 GetWidget()->SetBounds(window_bounds); 345 GetWidget()->SetBounds(window_bounds);
328 } 346 }
329 347
330 #if defined(OS_WIN) 348 #if defined(USE_AURA)
349 // TODO(beng):
350 #elif defined(OS_WIN)
331 void Bubble::OnActivate(UINT action, BOOL minimized, HWND window) { 351 void Bubble::OnActivate(UINT action, BOOL minimized, HWND window) {
332 // The popup should close when it is deactivated. 352 // The popup should close when it is deactivated.
333 if (action == WA_INACTIVE) { 353 if (action == WA_INACTIVE) {
334 GetWidget()->Close(); 354 GetWidget()->Close();
335 } else if (action == WA_ACTIVE) { 355 } else if (action == WA_ACTIVE) {
336 DCHECK(GetWidget()->GetRootView()->has_children()); 356 DCHECK(GetWidget()->GetRootView()->has_children());
337 GetWidget()->GetRootView()->child_at(0)->RequestFocus(); 357 GetWidget()->GetRootView()->child_at(0)->RequestFocus();
338 } 358 }
339 } 359 }
340 #elif defined(TOOLKIT_USES_GTK) 360 #elif defined(TOOLKIT_USES_GTK)
341 void Bubble::OnActiveChanged() { 361 void Bubble::OnActiveChanged() {
342 if (!GetWidget()->IsActive()) 362 if (!GetWidget()->IsActive())
343 GetWidget()->Close(); 363 GetWidget()->Close();
344 } 364 }
345 #endif 365 #endif
346 366
347 void Bubble::DoClose(bool closed_by_escape) { 367 void Bubble::DoClose(bool closed_by_escape) {
348 if (show_status_ == kClosed) 368 if (show_status_ == kClosed)
349 return; 369 return;
350 370
351 if (accelerator_registered_) 371 if (accelerator_registered_)
352 UnregisterEscapeAccelerator(); 372 UnregisterEscapeAccelerator();
353 if (delegate_) 373 if (delegate_)
354 delegate_->BubbleClosing(this, closed_by_escape); 374 delegate_->BubbleClosing(this, closed_by_escape);
355 show_status_ = kClosed; 375 show_status_ = kClosed;
356 #if defined(OS_WIN) 376 #if defined(USE_AURA)
377 // TODO(beng):
378 NOTIMPLEMENTED();
379 #elif defined(OS_WIN)
357 border_->Close(); 380 border_->Close();
358 #endif 381 #endif
359 #if defined(OS_WIN) 382 #if defined(USE_AURA)
383 // TODO(beng):
384 NOTIMPLEMENTED();
385 #elif defined(OS_WIN)
360 NativeWidgetWin::Close(); 386 NativeWidgetWin::Close();
361 #elif defined(TOOLKIT_USES_GTK) 387 #elif defined(TOOLKIT_USES_GTK)
362 NativeWidgetGtk::Close(); 388 NativeWidgetGtk::Close();
363 #endif 389 #endif
364 } 390 }
365 391
366 void Bubble::FadeIn() { 392 void Bubble::FadeIn() {
367 Fade(true); // |fade_in|. 393 Fade(true); // |fade_in|.
368 } 394 }
369 395
370 void Bubble::FadeOut() { 396 void Bubble::FadeOut() {
371 #if defined(OS_WIN) 397 #if defined(OS_WIN) && !defined(USE_AURA)
372 // The contents window cannot have the layered flag on by default, since its 398 // The contents window cannot have the layered flag on by default, since its
373 // content doesn't always work inside a layered window, but when animating it 399 // content doesn't always work inside a layered window, but when animating it
374 // is ok to set that style on the window for the purpose of fading it out. 400 // is ok to set that style on the window for the purpose of fading it out.
375 SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) | WS_EX_LAYERED); 401 SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) | WS_EX_LAYERED);
376 // This must be the very next call, otherwise we can get flicker on close. 402 // This must be the very next call, otherwise we can get flicker on close.
377 SetLayeredWindowAttributes(GetNativeView(), 0, 403 SetLayeredWindowAttributes(GetNativeView(), 0,
378 static_cast<byte>(255), LWA_ALPHA); 404 static_cast<byte>(255), LWA_ALPHA);
405 #elif defined(USE_AURA)
406 NOTIMPLEMENTED();
379 #endif 407 #endif
380 408
381 Fade(false); // |fade_in|. 409 Fade(false); // |fade_in|.
382 } 410 }
383 411
384 void Bubble::Fade(bool fade_in) { 412 void Bubble::Fade(bool fade_in) {
385 animation_.reset(new ui::SlideAnimation(this)); 413 animation_.reset(new ui::SlideAnimation(this));
386 animation_->SetSlideDuration(kHideFadeDurationMS); 414 animation_->SetSlideDuration(kHideFadeDurationMS);
387 animation_->SetTweenType(ui::Tween::LINEAR); 415 animation_->SetTweenType(ui::Tween::LINEAR);
388 416
389 animation_->Reset(fade_in ? 0.0 : 1.0); 417 animation_->Reset(fade_in ? 0.0 : 1.0);
390 if (fade_in) 418 if (fade_in)
391 animation_->Show(); 419 animation_->Show();
392 else 420 else
393 animation_->Hide(); 421 animation_->Hide();
394 } 422 }
395 423
396 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) { 424 bool Bubble::AcceleratorPressed(const views::Accelerator& accelerator) {
397 if (!delegate_ || delegate_->CloseOnEscape()) { 425 if (!delegate_ || delegate_->CloseOnEscape()) {
398 DoClose(true); 426 DoClose(true);
399 return true; 427 return true;
400 } 428 }
401 return false; 429 return false;
402 } 430 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/bubble/bubble.h ('k') | chrome/browser/ui/views/collected_cookies_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698