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

Side by Side Diff: ash/system/tray/system_tray_bubble.cc

Issue 10407080: Add NetworkNotificationView to tray_network. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ash/system/tray/system_tray_bubble.h" 5 #include "ash/system/tray/system_tray_bubble.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ash/shell_window_ids.h" 8 #include "ash/shell_window_ids.h"
9 #include "ash/system/tray/system_tray.h" 9 #include "ash/system/tray/system_tray.h"
10 #include "ash/system/tray/system_tray_delegate.h" 10 #include "ash/system/tray/system_tray_delegate.h"
(...skipping 30 matching lines...) Expand all
41 const int kSystemTrayBubbleVerticalInset = 1; 41 const int kSystemTrayBubbleVerticalInset = 1;
42 42
43 const int kArrowHeight = 10; 43 const int kArrowHeight = 10;
44 const int kArrowWidth = 20; 44 const int kArrowWidth = 20;
45 const int kArrowPaddingFromRight = 20; 45 const int kArrowPaddingFromRight = 20;
46 const int kArrowPaddingFromBottom = 17; 46 const int kArrowPaddingFromBottom = 17;
47 const int kMinArrowOffset = 12; 47 const int kMinArrowOffset = 12;
48 48
49 const int kAnimationDurationForPopupMS = 200; 49 const int kAnimationDurationForPopupMS = 200;
50 50
51 // Normally a detailed view is the same size as the default view. However,
52 // when showing a detailed view directly (e.g. clicking on a notification),
53 // we may not know the height of the default view, or the default view may
54 // be too short, so we use this as a default and minimum height for any
55 // detailed view.
56 const int kDetailedBubbleMaxHeight = kTrayPopupItemHeight * 5;
57
51 const SkColor kShadowColor = SkColorSetARGB(0xff, 0, 0, 0); 58 const SkColor kShadowColor = SkColorSetARGB(0xff, 0, 0, 0);
52 59
53 void DrawBlurredShadowAroundView(gfx::Canvas* canvas, 60 void DrawBlurredShadowAroundView(gfx::Canvas* canvas,
54 int top, 61 int top,
55 int bottom, 62 int bottom,
56 int width, 63 int width,
57 const gfx::Insets& inset) { 64 const gfx::Insets& inset) {
58 SkPath path; 65 SkPath path;
59 path.incReserve(4); 66 path.incReserve(4);
60 path.moveTo(SkIntToScalar(inset.left() + kShadowThickness), 67 path.moveTo(SkIntToScalar(inset.left() + kShadowThickness),
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 263
257 DISALLOW_COPY_AND_ASSIGN(SystemTrayBubbleBorder); 264 DISALLOW_COPY_AND_ASSIGN(SystemTrayBubbleBorder);
258 }; 265 };
259 266
260 } // namespace 267 } // namespace
261 268
262 namespace internal { 269 namespace internal {
263 270
264 // SystemTrayBubbleView 271 // SystemTrayBubbleView
265 272
266 SystemTrayBubbleView::SystemTrayBubbleView(views::View* anchor, 273 SystemTrayBubbleView::SystemTrayBubbleView(
274 views::View* anchor,
267 views::BubbleBorder::ArrowLocation arrow_location, 275 views::BubbleBorder::ArrowLocation arrow_location,
268 SystemTrayBubble* host, 276 SystemTrayBubble* host,
269 bool can_activate) 277 bool can_activate)
270 : views::BubbleDelegateView(anchor, arrow_location), 278 : views::BubbleDelegateView(anchor, arrow_location),
271 host_(host), 279 host_(host),
272 can_activate_(can_activate) { 280 can_activate_(can_activate),
281 max_height_(0) {
273 set_margin(0); 282 set_margin(0);
274 set_parent_window(ash::Shell::GetInstance()->GetContainer( 283 set_parent_window(ash::Shell::GetInstance()->GetContainer(
275 ash::internal::kShellWindowId_SettingBubbleContainer)); 284 ash::internal::kShellWindowId_SettingBubbleContainer));
276 set_notify_enter_exit_on_child(true); 285 set_notify_enter_exit_on_child(true);
277 } 286 }
278 287
279 SystemTrayBubbleView::~SystemTrayBubbleView() { 288 SystemTrayBubbleView::~SystemTrayBubbleView() {
280 // Inform host items (models) that their views are being destroyed. 289 // Inform host items (models) that their views are being destroyed.
281 if (host_) 290 if (host_)
282 host_->DestroyItemViews(); 291 host_->DestroyItemViews();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 IDS_ASH_STATUS_TRAY_ACCESSIBLE_NAME); 338 IDS_ASH_STATUS_TRAY_ACCESSIBLE_NAME);
330 } 339 }
331 } 340 }
332 341
333 bool SystemTrayBubbleView::CanActivate() const { 342 bool SystemTrayBubbleView::CanActivate() const {
334 return can_activate_; 343 return can_activate_;
335 } 344 }
336 345
337 gfx::Size SystemTrayBubbleView::GetPreferredSize() { 346 gfx::Size SystemTrayBubbleView::GetPreferredSize() {
338 gfx::Size size = views::BubbleDelegateView::GetPreferredSize(); 347 gfx::Size size = views::BubbleDelegateView::GetPreferredSize();
339 return gfx::Size(kTrayPopupWidth, size.height()); 348 int height = size.height();
349 if (max_height_ != 0 && height > max_height_)
350 height = max_height_;
351 return gfx::Size(kTrayPopupWidth, height);
340 } 352 }
341 353
342 void SystemTrayBubbleView::OnMouseEntered(const views::MouseEvent& event) { 354 void SystemTrayBubbleView::OnMouseEntered(const views::MouseEvent& event) {
343 if (host_) 355 if (host_)
344 host_->StopAutoCloseTimer(); 356 host_->StopAutoCloseTimer();
345 } 357 }
346 358
347 void SystemTrayBubbleView::OnMouseExited(const views::MouseEvent& event) { 359 void SystemTrayBubbleView::OnMouseExited(const views::MouseEvent& event) {
348 if (host_) 360 if (host_)
349 host_->RestartAutoCloseTimer(); 361 host_->RestartAutoCloseTimer();
350 } 362 }
351 363
352 // SystemTrayBubble::InitParams 364 // SystemTrayBubble::InitParams
353 SystemTrayBubble::InitParams::InitParams( 365 SystemTrayBubble::InitParams::InitParams(
354 SystemTrayBubble::AnchorType anchor_type, 366 SystemTrayBubble::AnchorType anchor_type,
355 ShelfAlignment shelf_alignment) 367 ShelfAlignment shelf_alignment)
356 : anchor(NULL), 368 : anchor(NULL),
357 anchor_type(anchor_type), 369 anchor_type(anchor_type),
358 can_activate(false), 370 can_activate(false),
359 login_status(ash::user::LOGGED_IN_NONE), 371 login_status(ash::user::LOGGED_IN_NONE),
360 arrow_offset( 372 arrow_offset(
361 (shelf_alignment == SHELF_ALIGNMENT_BOTTOM ? 373 (shelf_alignment == SHELF_ALIGNMENT_BOTTOM ?
362 kArrowPaddingFromRight : kArrowPaddingFromBottom) 374 kArrowPaddingFromRight : kArrowPaddingFromBottom)
363 + kArrowWidth / 2) { 375 + kArrowWidth / 2),
376 max_height(0) {
364 } 377 }
365 378
366 // SystemTrayBubble 379 // SystemTrayBubble
367 380
368 SystemTrayBubble::SystemTrayBubble( 381 SystemTrayBubble::SystemTrayBubble(
369 ash::SystemTray* tray, 382 ash::SystemTray* tray,
370 const std::vector<ash::SystemTrayItem*>& items, 383 const std::vector<ash::SystemTrayItem*>& items,
371 BubbleType bubble_type) 384 BubbleType bubble_type)
372 : tray_(tray), 385 : tray_(tray),
373 bubble_view_(NULL), 386 bubble_view_(NULL),
(...skipping 24 matching lines...) Expand all
398 const std::vector<ash::SystemTrayItem*>& items, 411 const std::vector<ash::SystemTrayItem*>& items,
399 BubbleType bubble_type) { 412 BubbleType bubble_type) {
400 DestroyItemViews(); 413 DestroyItemViews();
401 bubble_view_->RemoveAllChildViews(true); 414 bubble_view_->RemoveAllChildViews(true);
402 415
403 items_ = items; 416 items_ = items;
404 bubble_type_ = bubble_type; 417 bubble_type_ = bubble_type;
405 CreateItemViews(Shell::GetInstance()->tray_delegate()->GetUserLoginStatus()); 418 CreateItemViews(Shell::GetInstance()->tray_delegate()->GetUserLoginStatus());
406 bubble_widget_->GetContentsView()->Layout(); 419 bubble_widget_->GetContentsView()->Layout();
407 // Make sure that the bubble is large enough for the default view. 420 // Make sure that the bubble is large enough for the default view.
408 if (bubble_type_ == BUBBLE_TYPE_DEFAULT) 421 if (bubble_type_ == BUBBLE_TYPE_DEFAULT) {
422 bubble_view_->set_max_height(0); // Clear max height limit.
409 bubble_view_->SizeToContents(); 423 bubble_view_->SizeToContents();
424 }
410 } 425 }
411 426
412 void SystemTrayBubble::InitView(const InitParams& init_params) { 427 void SystemTrayBubble::InitView(const InitParams& init_params) {
413 DCHECK(bubble_view_ == NULL); 428 DCHECK(bubble_view_ == NULL);
414 anchor_type_ = init_params.anchor_type; 429 anchor_type_ = init_params.anchor_type;
415 views::BubbleBorder::ArrowLocation arrow_location; 430 views::BubbleBorder::ArrowLocation arrow_location;
416 if (anchor_type_ == ANCHOR_TYPE_TRAY) { 431 if (anchor_type_ == ANCHOR_TYPE_TRAY) {
417 if (tray_->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) { 432 if (tray_->shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) {
418 arrow_location = views::BubbleBorder::BOTTOM_RIGHT; 433 arrow_location = views::BubbleBorder::BOTTOM_RIGHT;
419 } else if (tray_->shelf_alignment() == SHELF_ALIGNMENT_LEFT) { 434 } else if (tray_->shelf_alignment() == SHELF_ALIGNMENT_LEFT) {
420 arrow_location = views::BubbleBorder::LEFT_BOTTOM; 435 arrow_location = views::BubbleBorder::LEFT_BOTTOM;
421 } else { 436 } else {
422 arrow_location = views::BubbleBorder::RIGHT_BOTTOM; 437 arrow_location = views::BubbleBorder::RIGHT_BOTTOM;
423 } 438 }
424 } else { 439 } else {
425 arrow_location = views::BubbleBorder::NONE; 440 arrow_location = views::BubbleBorder::NONE;
426 } 441 }
427 bubble_view_ = new SystemTrayBubbleView( 442 bubble_view_ = new SystemTrayBubbleView(
428 init_params.anchor, arrow_location, this, init_params.can_activate); 443 init_params.anchor, arrow_location, this, init_params.can_activate);
429 if (bubble_type_ == BUBBLE_TYPE_NOTIFICATION) 444 if (bubble_type_ == BUBBLE_TYPE_NOTIFICATION)
430 bubble_view_->set_close_on_deactivate(false); 445 bubble_view_->set_close_on_deactivate(false);
446 int max_height = init_params.max_height;
447 if (bubble_type_ == BUBBLE_TYPE_DETAILED &&
448 max_height < kDetailedBubbleMaxHeight)
449 max_height = kDetailedBubbleMaxHeight;
450 bubble_view_->set_max_height(max_height);
431 451
432 CreateItemViews(init_params.login_status); 452 CreateItemViews(init_params.login_status);
433 453
434 DCHECK(bubble_widget_ == NULL); 454 DCHECK(bubble_widget_ == NULL);
435 bubble_widget_ = views::BubbleDelegateView::CreateBubble(bubble_view_); 455 bubble_widget_ = views::BubbleDelegateView::CreateBubble(bubble_view_);
436 456
437 // Must occur after call to CreateBubble() 457 // Must occur after call to CreateBubble()
438 bubble_view_->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE); 458 bubble_view_->SetAlignment(views::BubbleBorder::ALIGN_EDGE_TO_ANCHOR_EDGE);
439 bubble_widget_->non_client_view()->frame_view()->set_background(NULL); 459 bubble_widget_->non_client_view()->frame_view()->set_background(NULL);
440 SystemTrayBubbleBorder* bubble_border = new SystemTrayBubbleBorder( 460 SystemTrayBubbleBorder* bubble_border = new SystemTrayBubbleBorder(
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 void SystemTrayBubble::OnWidgetVisibilityChanged(views::Widget* widget, 600 void SystemTrayBubble::OnWidgetVisibilityChanged(views::Widget* widget,
581 bool visible) { 601 bool visible) {
582 if (!visible) 602 if (!visible)
583 MessageLoopForUI::current()->RemoveObserver(this); 603 MessageLoopForUI::current()->RemoveObserver(this);
584 else 604 else
585 MessageLoopForUI::current()->AddObserver(this); 605 MessageLoopForUI::current()->AddObserver(this);
586 } 606 }
587 607
588 } // namespace internal 608 } // namespace internal
589 } // namespace ash 609 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698