| Index: chrome/browser/ui/views/tabs/base_tab.cc
|
| diff --git a/chrome/browser/ui/views/tabs/base_tab.cc b/chrome/browser/ui/views/tabs/base_tab.cc
|
| index 845d95d7a70b02108fce4ef4747ae9ef772055d1..d9c7eae120c04a4d959c44ac6f343f0dac010175 100644
|
| --- a/chrome/browser/ui/views/tabs/base_tab.cc
|
| +++ b/chrome/browser/ui/views/tabs/base_tab.cc
|
| @@ -41,6 +41,9 @@ static const int kPulseDurationMs = 200;
|
| // How long the hover state takes.
|
| static const int kHoverDurationMs = 400;
|
|
|
| +// How long the recording button takes to fade in/out.
|
| +static const int kRecordingDurationMs = 1000;
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // TabCloseButton
|
| //
|
| @@ -114,7 +117,8 @@ void DrawIconCenter(gfx::Canvas* canvas,
|
| int icon_width,
|
| int icon_height,
|
| const gfx::Rect& bounds,
|
| - bool filter) {
|
| + bool filter,
|
| + const SkPaint& paint) {
|
| // Center the image within bounds.
|
| int dst_x = bounds.x() - (icon_width - bounds.width()) / 2;
|
| int dst_y = bounds.y() - (icon_height - bounds.height()) / 2;
|
| @@ -124,7 +128,7 @@ void DrawIconCenter(gfx::Canvas* canvas,
|
| canvas->DrawImageInt(image,
|
| image_offset, 0, icon_width, icon_height,
|
| dst_x, dst_y, icon_width, icon_height,
|
| - filter);
|
| + filter, paint);
|
| canvas->Restore();
|
| }
|
|
|
| @@ -525,7 +529,7 @@ void BaseTab::PaintIcon(gfx::Canvas* canvas) {
|
| int icon_size = frames.height();
|
| int image_offset = loading_animation_frame_ * icon_size;
|
| DrawIconCenter(canvas, frames, image_offset,
|
| - icon_size, icon_size, bounds, false);
|
| + icon_size, icon_size, bounds, false, SkPaint());
|
| } else {
|
| canvas->Save();
|
| canvas->ClipRect(GetLocalBounds());
|
| @@ -535,7 +539,7 @@ void BaseTab::PaintIcon(gfx::Canvas* canvas) {
|
| bounds.set_y(bounds.y() + favicon_hiding_offset_);
|
| DrawIconCenter(canvas, crashed_favicon, 0,
|
| crashed_favicon.width(),
|
| - crashed_favicon.height(), bounds, true);
|
| + crashed_favicon.height(), bounds, true, SkPaint());
|
| } else {
|
| if (!data().favicon.isNull()) {
|
| // TODO(pkasting): Use code in tab_icon_view.cc:PaintIcon() (or switch
|
| @@ -543,10 +547,31 @@ void BaseTab::PaintIcon(gfx::Canvas* canvas) {
|
| DrawIconCenter(canvas, data().favicon, 0,
|
| data().favicon.width(),
|
| data().favicon.height(),
|
| - bounds, true);
|
| + bounds, true, SkPaint());
|
| }
|
| }
|
| canvas->Restore();
|
| +
|
| + // If recording, fade the recording icon on top of the favicon.
|
| + if (data().recording) {
|
| + if (!recording_animation_.get()) {
|
| + recording_animation_.reset(new ui::ThrobAnimation(this));
|
| + recording_animation_->SetTweenType(ui::Tween::EASE_IN_OUT);
|
| + recording_animation_->SetThrobDuration(kRecordingDurationMs);
|
| + recording_animation_->StartThrobbing(-1);
|
| + }
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + U8CPU alpha = recording_animation_->GetCurrentValue() * 0xff;
|
| + paint.setAlpha(alpha);
|
| + ui::ThemeProvider* tp = GetThemeProvider();
|
| + gfx::ImageSkia recording_dot(*tp->GetImageSkiaNamed(IDR_TAB_RECORDING));
|
| + DrawIconCenter(canvas, recording_dot, 0,
|
| + recording_dot.width(), recording_dot.height(),
|
| + bounds, false, paint);
|
| + } else {
|
| + recording_animation_.reset();
|
| + }
|
| }
|
| }
|
|
|
|
|