Index: chrome/browser/speech/speech_input_extension_notification.cc |
=================================================================== |
--- chrome/browser/speech/speech_input_extension_notification.cc (revision 109388) |
+++ chrome/browser/speech/speech_input_extension_notification.cc (working copy) |
@@ -1,154 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/speech/speech_input_extension_notification.h" |
- |
-#include "base/lazy_instance.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/status_icons/status_icon.h" |
-#include "chrome/browser/status_icons/status_tray.h" |
-#include "chrome/common/extensions/extension.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "grit/theme_resources.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/canvas_skia.h" |
-#include "ui/gfx/rect.h" |
-#include "ui/gfx/skbitmap_operations.h" |
- |
-namespace { |
- |
-// Number of volume steps used when rendering the VU meter icon. |
-const int kVolumeSteps = 6; |
- |
-// A lazily initialized singleton to hold all the images used by the |
-// notification icon and safely destroy them on exit. |
-class NotificationTrayImages { |
- public: |
- SkBitmap* mic_full() { return mic_full_; } |
- SkBitmap* mic_empty() { return mic_empty_; } |
- SkBitmap* balloon_icon() { return balloon_icon_; } |
- |
- private: |
- // Private constructor to enforce singleton. |
- friend struct base::DefaultLazyInstanceTraits<NotificationTrayImages>; |
- NotificationTrayImages(); |
- |
- // These bitmaps are owned by ResourceBundle and need not be destroyed. |
- SkBitmap* mic_full_; // Tray mic image with full volume. |
- SkBitmap* mic_empty_; // Tray mic image with zero volume. |
- SkBitmap* balloon_icon_; // High resolution mic for the notification balloon. |
-}; |
- |
-NotificationTrayImages::NotificationTrayImages() { |
- mic_empty_ = ResourceBundle::GetSharedInstance().GetBitmapNamed( |
- IDR_SPEECH_INPUT_TRAY_MIC_EMPTY); |
- mic_full_ = ResourceBundle::GetSharedInstance().GetBitmapNamed( |
- IDR_SPEECH_INPUT_TRAY_MIC_FULL); |
- balloon_icon_ = ResourceBundle::GetSharedInstance().GetBitmapNamed( |
- IDR_SPEECH_INPUT_TRAY_BALLOON_ICON); |
-} |
- |
-base::LazyInstance<NotificationTrayImages> g_images(base::LINKER_INITIALIZED); |
- |
-} // namespace |
- |
-SpeechInputExtensionNotification::SpeechInputExtensionNotification( |
- Profile* profile) |
- : profile_(profile), |
- tray_icon_(NULL) { |
- mic_image_.reset(new SkBitmap()); |
- mic_image_->setConfig(SkBitmap::kARGB_8888_Config, |
- g_images.Get().mic_empty()->width(), |
- g_images.Get().mic_empty()->height()); |
- mic_image_->allocPixels(); |
- |
- buffer_image_.reset(new SkBitmap()); |
- buffer_image_->setConfig(SkBitmap::kARGB_8888_Config, |
- g_images.Get().mic_empty()->width(), |
- g_images.Get().mic_empty()->height()); |
- buffer_image_->allocPixels(); |
-} |
- |
-SpeechInputExtensionNotification::~SpeechInputExtensionNotification() { |
-} |
- |
-void SpeechInputExtensionNotification::DrawVolume( |
- SkCanvas* canvas, |
- const SkBitmap& bitmap, |
- float volume) { |
- buffer_image_->eraseARGB(0, 0, 0, 0); |
- |
- int width = mic_image_->width(); |
- int height = mic_image_->height(); |
- SkCanvas buffer_canvas(*buffer_image_); |
- |
- SkScalar clip_top = |
- (((1.0f - volume) * (height * (kVolumeSteps + 1))) - height) / |
- kVolumeSteps; |
- buffer_canvas.clipRect(SkRect::MakeLTRB(0, clip_top, |
- SkIntToScalar(width), SkIntToScalar(height))); |
- buffer_canvas.drawBitmap(bitmap, 0, 0); |
- |
- canvas->drawBitmap(*buffer_image_.get(), 0, 0); |
-} |
- |
-void SpeechInputExtensionNotification::SetVUMeterVolume(float volume) { |
- if (!tray_icon_) |
- return; |
- |
- mic_image_->eraseARGB(0, 0, 0, 0); |
- SkCanvas canvas(*mic_image_); |
- |
- // Draw the empty volume image first and the current volume image on top. |
- canvas.drawBitmap(*g_images.Get().mic_empty(), 0, 0); |
- DrawVolume(&canvas, *g_images.Get().mic_full(), volume); |
- |
- tray_icon_->SetImage(*mic_image_.get()); |
-} |
- |
-void SpeechInputExtensionNotification::Show(const Extension* extension, |
- bool show_balloon) { |
- if (StatusTray* status_tray = g_browser_process->status_tray()) { |
- DCHECK(!tray_icon_); |
- tray_icon_ = status_tray->CreateStatusIcon(); |
- DCHECK(tray_icon_); |
- VLOG(1) << "Tray icon added."; |
- |
- SetVUMeterVolume(0.0f); |
- tray_icon_->SetToolTip(l10n_util::GetStringFUTF16( |
- IDS_SPEECH_INPUT_TRAY_TOOLTIP, |
- UTF8ToUTF16(extension->name()), |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME))); |
- } else { |
- VLOG(1) << "This platform doesn't support notification icons."; |
- return; |
- } |
- |
- if (show_balloon) |
- ShowNotificationBalloon(extension); |
-} |
- |
-void SpeechInputExtensionNotification::Hide() { |
- if (StatusTray* status_tray = g_browser_process->status_tray()) { |
- DCHECK(tray_icon_); |
- status_tray->RemoveStatusIcon(tray_icon_); |
- tray_icon_ = NULL; |
- VLOG(1) << "Tray icon removed."; |
- } |
-} |
- |
-void SpeechInputExtensionNotification::ShowNotificationBalloon( |
- const Extension* extension) { |
- string16 title = l10n_util::GetStringUTF16( |
- IDS_SPEECH_INPUT_TRAY_BALLOON_TITLE); |
- string16 message = l10n_util::GetStringFUTF16( |
- IDS_SPEECH_INPUT_TRAY_BALLOON_BODY, |
- UTF8ToUTF16(extension->name()), |
- l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
- |
- tray_icon_->DisplayBalloon(*g_images.Get().balloon_icon(), title, message); |
-} |