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

Side by Side Diff: chrome/browser/chromeos/status/network_menu.cc

Issue 6591017: Cache network connecting bitmaps. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 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/chromeos/status/network_menu.h" 5 #include "chrome/browser/chromeos/status/network_menu.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 }; 73 };
74 // static 74 // static
75 const int NetworkMenu::kBarsImagesVLowData[kNumBarsImages] = { 75 const int NetworkMenu::kBarsImagesVLowData[kNumBarsImages] = {
76 IDR_STATUSBAR_NETWORK_BARS1_RED, 76 IDR_STATUSBAR_NETWORK_BARS1_RED,
77 IDR_STATUSBAR_NETWORK_BARS2_RED, 77 IDR_STATUSBAR_NETWORK_BARS2_RED,
78 IDR_STATUSBAR_NETWORK_BARS3_RED, 78 IDR_STATUSBAR_NETWORK_BARS3_RED,
79 IDR_STATUSBAR_NETWORK_BARS4_RED, 79 IDR_STATUSBAR_NETWORK_BARS4_RED,
80 }; 80 };
81 */ 81 */
82 82
83 // static
84 const int NetworkMenu::kNumAnimatingImages = 10;
85
86 // static
87 SkBitmap NetworkMenu::kAnimatingImages[kNumAnimatingImages];
88
89 // static
90 SkBitmap NetworkMenu::kAnimatingImagesBlack[kNumAnimatingImages];
91
83 NetworkMenu::NetworkMenu() 92 NetworkMenu::NetworkMenu()
84 : min_width_(-1) { 93 : min_width_(-1) {
85 use_settings_ui_ = !CommandLine::ForCurrentProcess()->HasSwitch( 94 use_settings_ui_ = !CommandLine::ForCurrentProcess()->HasSwitch(
86 switches::kDisableTabbedOptions); 95 switches::kDisableTabbedOptions);
87 network_menu_.reset(NetworkMenuUI::CreateMenu2(this)); 96 network_menu_.reset(NetworkMenuUI::CreateMenu2(this));
88 } 97 }
89 98
90 NetworkMenu::~NetworkMenu() { 99 NetworkMenu::~NetworkMenu() {
91 } 100 }
92 101
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 network_menu_->CancelMenu(); 356 network_menu_->CancelMenu();
348 } 357 }
349 358
350 void NetworkMenu::UpdateMenu() { 359 void NetworkMenu::UpdateMenu() {
351 refreshing_menu_ = true; 360 refreshing_menu_ = true;
352 InitMenuItems(); 361 InitMenuItems();
353 network_menu_->Rebuild(); 362 network_menu_->Rebuild();
354 refreshing_menu_ = false; 363 refreshing_menu_ = false;
355 } 364 }
356 365
357 // static 366 // static
stevenjb 2011/02/28 23:02:37 nit: Because we rely on IconForFoo returning non-N
Charlie Lee 2011/02/28 23:54:13 Done.
358 SkBitmap NetworkMenu::IconForNetworkStrength(const WifiNetwork* wifi, 367 const SkBitmap* NetworkMenu::IconForNetworkStrength(const WifiNetwork* wifi,
359 bool black) { 368 bool black) {
360 DCHECK(wifi); 369 DCHECK(wifi);
361 if (wifi->strength() == 0) { 370 if (wifi->strength() == 0) {
362 return *ResourceBundle::GetSharedInstance().GetBitmapNamed( 371 return ResourceBundle::GetSharedInstance().GetBitmapNamed(
363 black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : 372 black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK :
364 IDR_STATUSBAR_NETWORK_BARS0); 373 IDR_STATUSBAR_NETWORK_BARS0);
365 } 374 }
366 int index = static_cast<int>(wifi->strength() / 100.0 * 375 int index = static_cast<int>(wifi->strength() / 100.0 *
367 nextafter(static_cast<float>(kNumBarsImages), 0)); 376 nextafter(static_cast<float>(kNumBarsImages), 0));
368 index = std::max(std::min(index, kNumBarsImages - 1), 0); 377 index = std::max(std::min(index, kNumBarsImages - 1), 0);
369 const int* images = black ? kBarsImagesBlack : kBarsImages; 378 const int* images = black ? kBarsImagesBlack : kBarsImages;
370 return *ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); 379 return ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]);
371 } 380 }
372 381
373 // static 382 // static
374 SkBitmap NetworkMenu::IconForNetworkStrength(const CellularNetwork* cellular, 383 const SkBitmap* NetworkMenu::IconForNetworkStrength(
375 bool black) { 384 const CellularNetwork* cellular, bool black) {
376 DCHECK(cellular); 385 DCHECK(cellular);
377 // If no data, then we show 0 bars. 386 // If no data, then we show 0 bars.
378 if (cellular->strength() == 0 || 387 if (cellular->strength() == 0 ||
379 cellular->data_left() == CellularNetwork::DATA_NONE) { 388 cellular->data_left() == CellularNetwork::DATA_NONE) {
380 return *ResourceBundle::GetSharedInstance().GetBitmapNamed( 389 return ResourceBundle::GetSharedInstance().GetBitmapNamed(
381 black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : 390 black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK :
382 IDR_STATUSBAR_NETWORK_BARS0); 391 IDR_STATUSBAR_NETWORK_BARS0);
383 } 392 }
384 int index = static_cast<int>(cellular->strength() / 100.0 * 393 int index = static_cast<int>(cellular->strength() / 100.0 *
385 nextafter(static_cast<float>(kNumBarsImages), 0)); 394 nextafter(static_cast<float>(kNumBarsImages), 0));
386 index = std::max(std::min(index, kNumBarsImages - 1), 0); 395 index = std::max(std::min(index, kNumBarsImages - 1), 0);
387 const int* images = black ? kBarsImagesBlack : kBarsImages; 396 const int* images = black ? kBarsImagesBlack : kBarsImages;
388 return *ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]); 397 return ResourceBundle::GetSharedInstance().GetBitmapNamed(images[index]);
389 } 398 }
390 399
391 // static 400 // static
392 SkBitmap NetworkMenu::IconForNetworkConnecting(double animation_value, 401 const SkBitmap* NetworkMenu::IconForNetworkConnecting(double animation_value,
393 bool black) { 402 bool black) {
394 // Draw animation of bars icon fading in and out. 403 // Draw animation of bars icon fading in and out.
395 // We are fading between 0 bars and a third of the opacity of 4 bars. 404 // We are fading between 0 bars and a third of the opacity of 4 bars.
396 // Use the current value of the animation to calculate the alpha value 405 // Use the current value of the animation to calculate the alpha value
397 // of how transparent the icon is. 406 // of how transparent the icon is.
398 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 407
399 return SkBitmapOperations::CreateBlendedBitmap( 408 int index = static_cast<int>(animation_value *
400 *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK : 409 nextafter(static_cast<float>(kNumAnimatingImages), 0));
401 IDR_STATUSBAR_NETWORK_BARS0), 410 index = std::max(std::min(index, kNumAnimatingImages - 1), 0);
402 *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS4_BLACK : 411
403 IDR_STATUSBAR_NETWORK_BARS4), 412 SkBitmap* images = black ? kAnimatingImagesBlack : kAnimatingImages;
404 animation_value / 3); 413 // Lazily cache images.
414 if (images[index].empty()) {
415 // Divide index (0-9) by 9 (assume kNumAnimatingImages==10) to get (0.0-1.0)
416 // Then we take a third of that for the alpha value.
417 double alpha = static_cast<double>(index) / (kNumAnimatingImages - 1) / 3;
stevenjb 2011/02/28 23:02:37 nit: parens are helpful around multiple / operator
Charlie Lee 2011/02/28 23:54:13 Done.
418 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
stevenjb 2011/02/28 23:02:37 nit: const&
Charlie Lee 2011/02/28 23:54:13 Can't. GetBitmapNamed is not a const function. On
419 images[index] = SkBitmapOperations::CreateBlendedBitmap(
420 *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS0_BLACK :
421 IDR_STATUSBAR_NETWORK_BARS0),
422 *rb.GetBitmapNamed(black ? IDR_STATUSBAR_NETWORK_BARS4_BLACK :
423 IDR_STATUSBAR_NETWORK_BARS4),
424 alpha);
425 }
426 return &images[index];
405 } 427 }
406 428
407 // static 429 // static
408 SkBitmap NetworkMenu::BadgeForNetworkTechnology( 430 const SkBitmap* NetworkMenu::BadgeForNetworkTechnology(
409 const CellularNetwork* cellular) { 431 const CellularNetwork* cellular) {
410 if (!cellular) 432 if (!cellular)
411 return SkBitmap(); 433 return NULL;
412 434
413 int id = -1; 435 int id = -1;
414 switch (cellular->network_technology()) { 436 switch (cellular->network_technology()) {
415 case NETWORK_TECHNOLOGY_EVDO: 437 case NETWORK_TECHNOLOGY_EVDO:
416 switch (cellular->data_left()) { 438 switch (cellular->data_left()) {
417 case CellularNetwork::DATA_NONE: 439 case CellularNetwork::DATA_NONE:
418 id = IDR_STATUSBAR_NETWORK_3G_ERROR; 440 id = IDR_STATUSBAR_NETWORK_3G_ERROR;
419 break; 441 break;
420 case CellularNetwork::DATA_VERY_LOW: 442 case CellularNetwork::DATA_VERY_LOW:
421 case CellularNetwork::DATA_LOW: 443 case CellularNetwork::DATA_LOW:
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 case NETWORK_TECHNOLOGY_LTE: 486 case NETWORK_TECHNOLOGY_LTE:
465 id = IDR_STATUSBAR_NETWORK_LTE; 487 id = IDR_STATUSBAR_NETWORK_LTE;
466 break; 488 break;
467 case NETWORK_TECHNOLOGY_LTE_ADVANCED: 489 case NETWORK_TECHNOLOGY_LTE_ADVANCED:
468 id = IDR_STATUSBAR_NETWORK_LTE_ADVANCED; 490 id = IDR_STATUSBAR_NETWORK_LTE_ADVANCED;
469 break; 491 break;
470 case NETWORK_TECHNOLOGY_UNKNOWN: 492 case NETWORK_TECHNOLOGY_UNKNOWN:
471 break; 493 break;
472 } 494 }
473 if (id == -1) 495 if (id == -1)
474 return SkBitmap(); 496 return NULL;
475 else 497 else
476 return *ResourceBundle::GetSharedInstance().GetBitmapNamed(id); 498 return ResourceBundle::GetSharedInstance().GetBitmapNamed(id);
477 } 499 }
478 500
479 // static 501 // static
480 SkBitmap NetworkMenu::IconForDisplay(SkBitmap icon, SkBitmap badge) { 502 SkBitmap NetworkMenu::IconForDisplay(const SkBitmap* icon,
503 const SkBitmap* badge) {
504 DCHECK(icon);
505 if (badge == NULL)
506 return *icon;
507
481 // Draw badge at (14,14). 508 // Draw badge at (14,14).
482 static const int kBadgeX = 14; 509 static const int kBadgeX = 14;
483 static const int kBadgeY = 14; 510 static const int kBadgeY = 14;
484 511
485 gfx::CanvasSkia canvas(icon.width(), icon.height(), false); 512 gfx::CanvasSkia canvas(icon->width(), icon->height(), false);
486 canvas.DrawBitmapInt(icon, 0, 0); 513 canvas.DrawBitmapInt(*icon, 0, 0);
487 if (!badge.empty()) 514 canvas.DrawBitmapInt(*badge, kBadgeX, kBadgeY);
488 canvas.DrawBitmapInt(badge, kBadgeX, kBadgeY);
489 return canvas.ExtractBitmap(); 515 return canvas.ExtractBitmap();
490 } 516 }
491 517
492 //////////////////////////////////////////////////////////////////////////////// 518 ////////////////////////////////////////////////////////////////////////////////
493 // NetworkMenu, views::ViewMenuDelegate implementation: 519 // NetworkMenu, views::ViewMenuDelegate implementation:
494 520
495 void NetworkMenu::RunMenu(views::View* source, const gfx::Point& pt) { 521 void NetworkMenu::RunMenu(views::View* source, const gfx::Point& pt) {
496 refreshing_menu_ = true; 522 refreshing_menu_ = true;
497 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); 523 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
498 cros->RequestWifiScan(); 524 cros->RequestWifiScan();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 bool ethernet_connecting = cros->ethernet_connecting(); 565 bool ethernet_connecting = cros->ethernet_connecting();
540 566
541 if (ethernet_connecting) { 567 if (ethernet_connecting) {
542 label = l10n_util::GetStringFUTF16( 568 label = l10n_util::GetStringFUTF16(
543 IDS_STATUSBAR_NETWORK_DEVICE_STATUS, 569 IDS_STATUSBAR_NETWORK_DEVICE_STATUS,
544 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET), 570 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET),
545 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING)); 571 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING));
546 } else { 572 } else {
547 label = l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); 573 label = l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
548 } 574 }
549 SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK); 575 const SkBitmap* icon = rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK);
550 SkBitmap badge = ethernet_connecting || ethernet_connected ? 576 const SkBitmap* badge = ethernet_connecting || ethernet_connected ?
551 SkBitmap() : *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); 577 NULL : rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED);
552 int flag = FLAG_ETHERNET; 578 int flag = FLAG_ETHERNET;
553 if (ethernet_connecting || ethernet_connected) 579 if (ethernet_connecting || ethernet_connected)
554 flag |= FLAG_ASSOCIATED; 580 flag |= FLAG_ASSOCIATED;
555 menu_items_.push_back( 581 menu_items_.push_back(
556 MenuItem(ui::MenuModel::TYPE_COMMAND, label, 582 MenuItem(ui::MenuModel::TYPE_COMMAND, label,
557 IconForDisplay(icon, badge), std::string(), flag)); 583 IconForDisplay(icon, badge), std::string(), flag));
558 } 584 }
559 585
560 // Wifi Networks 586 // Wifi Networks
561 bool wifi_available = cros->wifi_available(); 587 bool wifi_available = cros->wifi_available();
(...skipping 15 matching lines...) Expand all
577 } 603 }
578 604
579 // First add a separator if necessary. 605 // First add a separator if necessary.
580 if (!separator_added) { 606 if (!separator_added) {
581 separator_added = true; 607 separator_added = true;
582 if (!menu_items_.empty()) { // Don't add if first menu item. 608 if (!menu_items_.empty()) { // Don't add if first menu item.
583 menu_items_.push_back(MenuItem()); // Separator 609 menu_items_.push_back(MenuItem()); // Separator
584 } 610 }
585 } 611 }
586 612
587 SkBitmap icon = IconForNetworkStrength(wifi_networks[i], true); 613 const SkBitmap* icon = IconForNetworkStrength(wifi_networks[i], true);
588 SkBitmap badge = wifi_networks[i]->encrypted() ? 614 const SkBitmap* badge = wifi_networks[i]->encrypted() ?
589 *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : SkBitmap(); 615 rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : NULL;
590 int flag = FLAG_WIFI; 616 int flag = FLAG_WIFI;
591 if (!wifi_networks[i]->connectable()) 617 if (!wifi_networks[i]->connectable())
592 flag |= FLAG_DISABLED; 618 flag |= FLAG_DISABLED;
593 if (active_wifi 619 if (active_wifi
594 && wifi_networks[i]->service_path() == active_wifi->service_path()) 620 && wifi_networks[i]->service_path() == active_wifi->service_path())
595 flag |= FLAG_ASSOCIATED; 621 flag |= FLAG_ASSOCIATED;
596 menu_items_.push_back( 622 menu_items_.push_back(
597 MenuItem(ui::MenuModel::TYPE_COMMAND, label, 623 MenuItem(ui::MenuModel::TYPE_COMMAND, label,
598 IconForDisplay(icon, badge), 624 IconForDisplay(icon, badge),
599 wifi_networks[i]->service_path(), flag)); 625 wifi_networks[i]->service_path(), flag));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 } 663 }
638 664
639 // First add a separator if necessary. 665 // First add a separator if necessary.
640 if (!separator_added) { 666 if (!separator_added) {
641 separator_added = true; 667 separator_added = true;
642 if (!menu_items_.empty()) { // Don't add if first menu item. 668 if (!menu_items_.empty()) { // Don't add if first menu item.
643 menu_items_.push_back(MenuItem()); // Separator 669 menu_items_.push_back(MenuItem()); // Separator
644 } 670 }
645 } 671 }
646 672
647 SkBitmap icon = IconForNetworkStrength(cell_networks[i], true); 673 const SkBitmap* icon = IconForNetworkStrength(cell_networks[i], true);
648 SkBitmap badge = BadgeForNetworkTechnology(cell_networks[i]); 674 const SkBitmap* badge = BadgeForNetworkTechnology(cell_networks[i]);
649 int flag = FLAG_CELLULAR; 675 int flag = FLAG_CELLULAR;
650 if (!cell_networks[i]->connectable()) 676 if (!cell_networks[i]->connectable())
651 flag |= FLAG_DISABLED; 677 flag |= FLAG_DISABLED;
652 bool isActive = active_cellular && 678 bool isActive = active_cellular &&
653 cell_networks[i]->service_path() == active_cellular->service_path() && 679 cell_networks[i]->service_path() == active_cellular->service_path() &&
654 (cell_networks[i]->connecting() || cell_networks[i]->connected()); 680 (cell_networks[i]->connecting() || cell_networks[i]->connected());
655 if (isActive) 681 if (isActive)
656 flag |= FLAG_ASSOCIATED; 682 flag |= FLAG_ASSOCIATED;
657 menu_items_.push_back( 683 menu_items_.push_back(
658 MenuItem(ui::MenuModel::TYPE_COMMAND, label, 684 MenuItem(ui::MenuModel::TYPE_COMMAND, label,
(...skipping 26 matching lines...) Expand all
685 menu_items_.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, label, 711 menu_items_.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, label,
686 SkBitmap(), std::string(), FLAG_DISABLED)); 712 SkBitmap(), std::string(), FLAG_DISABLED));
687 } 713 }
688 714
689 // Add network. 715 // Add network.
690 if (wifi_available && wifi_enabled) { 716 if (wifi_available && wifi_enabled) {
691 menu_items_.push_back(MenuItem()); // Separator 717 menu_items_.push_back(MenuItem()); // Separator
692 menu_items_.push_back(MenuItem( 718 menu_items_.push_back(MenuItem(
693 ui::MenuModel::TYPE_COMMAND, 719 ui::MenuModel::TYPE_COMMAND,
694 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_OTHER_NETWORKS), 720 l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_OTHER_NETWORKS),
695 IconForDisplay(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0_BLACK), 721 *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0_BLACK),
696 SkBitmap()),
697 std::string(), FLAG_OTHER_NETWORK)); 722 std::string(), FLAG_OTHER_NETWORK));
698 } 723 }
699 724
700 // Enable / disable wireless. 725 // Enable / disable wireless.
701 if (wifi_available || cellular_available) { 726 if (wifi_available || cellular_available) {
702 menu_items_.push_back(MenuItem()); // Separator 727 menu_items_.push_back(MenuItem()); // Separator
703 728
704 if (wifi_available) { 729 if (wifi_available) {
705 // Add 'Scanning...' 730 // Add 'Scanning...'
706 if (cros->wifi_scanning()) { 731 if (cros->wifi_scanning()) {
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 chrome::kInternetOptionsSubPage, 822 chrome::kInternetOptionsSubPage,
798 chromeos::TYPE_WIFI); 823 chromeos::TYPE_WIFI);
799 browser->ShowOptionsTab(page); 824 browser->ShowOptionsTab(page);
800 } 825 }
801 } else { 826 } else {
802 ShowNetworkConfigView(new NetworkConfigView()); 827 ShowNetworkConfigView(new NetworkConfigView());
803 } 828 }
804 } 829 }
805 830
806 } // namespace chromeos 831 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698