| Index: chrome/browser/ui/views/tabs/tab.cc
|
| ===================================================================
|
| --- chrome/browser/ui/views/tabs/tab.cc (revision 184139)
|
| +++ chrome/browser/ui/views/tabs/tab.cc (working copy)
|
| @@ -510,15 +510,18 @@
|
| StartCrashAnimation();
|
| #endif
|
| }
|
| -
|
| } else if ((data_.capture_state == TabRendererData::CAPTURE_STATE_NONE) &&
|
| (old.capture_state != TabRendererData::CAPTURE_STATE_NONE)) {
|
| StopRecordingAnimation();
|
| -
|
| } else if ((data_.capture_state != TabRendererData::CAPTURE_STATE_NONE) &&
|
| (old.capture_state == TabRendererData::CAPTURE_STATE_NONE)) {
|
| StartRecordingAnimation();
|
| -
|
| + } else if ((data_.audio_state == TabRendererData::AUDIO_STATE_NONE) &&
|
| + (old.audio_state != TabRendererData::AUDIO_STATE_NONE)) {
|
| + StopAudioPlayingAnimation();
|
| + } else if ((data_.audio_state != TabRendererData::AUDIO_STATE_NONE) &&
|
| + (old.audio_state == TabRendererData::AUDIO_STATE_NONE)) {
|
| + StartAudioPlayingAnimation();
|
| } else {
|
| if (IsPerformingCrashAnimation())
|
| StopCrashAnimation();
|
| @@ -1365,7 +1368,8 @@
|
| int icon_size = frames.height();
|
| int image_offset = loading_animation_frame_ * icon_size;
|
| DrawIconCenter(canvas, frames, image_offset,
|
| - icon_size, icon_size, bounds, false, SkPaint());
|
| + icon_size, icon_size,
|
| + bounds, false, SkPaint());
|
| return;
|
| }
|
|
|
| @@ -1378,7 +1382,8 @@
|
| bounds.set_y(bounds.y() + favicon_hiding_offset_);
|
| DrawIconCenter(canvas, crashed_favicon, 0,
|
| crashed_favicon.width(),
|
| - crashed_favicon.height(), bounds, true, SkPaint());
|
| + crashed_favicon.height(),
|
| + bounds, true, SkPaint());
|
| } else {
|
| if (!data().favicon.isNull()) {
|
| if (data().capture_state == TabRendererData::CAPTURE_STATE_PROJECTING) {
|
| @@ -1398,25 +1403,38 @@
|
| resized_bounds.set_y(resized_bounds.y() - 1);
|
|
|
| DrawIconCenter(canvas, resized_icon, 0,
|
| - resized_icon.width(),
|
| - resized_icon.height(),
|
| - resized_bounds, true, SkPaint());
|
| + resized_icon.width(),
|
| + resized_icon.height(),
|
| + resized_bounds, true, SkPaint());
|
|
|
| ui::ThemeProvider* tp = GetThemeProvider();
|
| gfx::ImageSkia projection_screen(
|
| *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE));
|
| -
|
| DrawIconCenter(canvas, projection_screen, 0,
|
| - data().favicon.width(),
|
| - data().favicon.height(),
|
| - bounds, true, SkPaint());
|
| + data().favicon.width(),
|
| + data().favicon.height(),
|
| + bounds, true, SkPaint());
|
| } else {
|
| - // TODO(pkasting): Use code in tab_icon_view.cc:PaintIcon() (or switch
|
| - // to using that class to render the favicon).
|
| DrawIconCenter(canvas, data().favicon, 0,
|
| - data().favicon.width(),
|
| - data().favicon.height(),
|
| - bounds, true, SkPaint());
|
| + data().favicon.width(),
|
| + data().favicon.height(),
|
| + bounds, true, SkPaint());
|
| +
|
| + if (data().audio_state == TabRendererData::AUDIO_STATE_PLAYING) {
|
| + // If audio is playing, we draw on top of the icon the
|
| + // current equalizer animiation frame.
|
| + ui::ThemeProvider* tp = GetThemeProvider();
|
| + gfx::ImageSkia equalizer(*tp->GetImageSkiaNamed(IDR_AUDIO_ANIMATION));
|
| + int icon_size = equalizer.height();
|
| + int number_of_frames = equalizer.width() / icon_size;
|
| + int frame = static_cast<int>(
|
| + icon_animation_->GetCurrentValue() * number_of_frames);
|
| + int image_offset = frame * icon_size;
|
| + DrawIconAtLocation(canvas, equalizer, image_offset,
|
| + bounds.x(), bounds.y() + 1,
|
| + icon_size, icon_size,
|
| + false, SkPaint());
|
| + }
|
| }
|
| }
|
| }
|
| @@ -1603,6 +1621,21 @@
|
| icon_animation_.reset();
|
| }
|
|
|
| +void Tab::StartAudioPlayingAnimation() {
|
| + ui::ThrobAnimation* animation = new ui::ThrobAnimation(this);
|
| + animation->SetTweenType(ui::Tween::LINEAR);
|
| + animation->SetThrobDuration(2000);
|
| + animation->StartThrobbing(-1);
|
| + icon_animation_.reset(animation);
|
| +}
|
| +
|
| +void Tab::StopAudioPlayingAnimation() {
|
| + if (!icon_animation_.get())
|
| + return;
|
| + icon_animation_->Stop();
|
| + icon_animation_.reset();
|
| +}
|
| +
|
| bool Tab::IsPerformingCrashAnimation() const {
|
| return icon_animation_.get() && data_.IsCrashed();
|
| }
|
|
|