Index: ui/native_theme/native_theme_aura.cc |
diff --git a/ui/native_theme/native_theme_aura.cc b/ui/native_theme/native_theme_aura.cc |
index ec192d2352b0c246e57c430b1210cdd97fbd0c1c..74fe09b57d357e61274f0ff602f99958c0f6e6d8 100644 |
--- a/ui/native_theme/native_theme_aura.cc |
+++ b/ui/native_theme/native_theme_aura.cc |
@@ -208,6 +208,30 @@ void NativeThemeAura::PaintScrollbarThumb(SkCanvas* sk_canvas, |
thumb_rect); |
} |
+void NativeThemeAura::PaintScrollbarThumbStateTransition( |
+ SkCanvas* canvas, |
+ State startState, |
+ State endState, |
+ double progress, |
+ const gfx::Rect& rect) const { |
+ // Only Overlay scrollbars should have state transition animation. |
+ DCHECK(IsOverlayScrollbarEnabled()); |
+ if (!scrollbar_overlay_thumb_painter_) { |
+ scrollbar_overlay_thumb_painter_ = |
+ CreateDualPainter(kScrollbarOverlayThumbFillImages, |
+ kScrollbarOverlayThumbFillAlphas, |
+ kScrollbarOverlayThumbStrokeImages, |
+ kScrollbarOverlayThumbStrokeAlphas); |
+ } |
+ |
+ PaintDualPainterTransition(scrollbar_overlay_thumb_painter_.get(), |
+ canvas, |
+ rect, |
+ startState, |
+ endState, |
+ progress); |
+} |
+ |
void NativeThemeAura::PaintScrollbarCorner(SkCanvas* canvas, |
State state, |
const gfx::Rect& rect) const { |
@@ -269,6 +293,28 @@ void NativeThemeAura::PaintDualPainter( |
canvas.get(), rect, dual_painter->stroke_alphas[state]); |
} |
+void NativeThemeAura::PaintDualPainterTransition( |
+ NativeThemeAura::DualPainter* dual_painter, |
+ SkCanvas* sk_canvas, |
+ const gfx::Rect& rect, |
+ State startState, |
+ State endState, |
+ double progress) const { |
+ DCHECK(dual_painter); |
+ scoped_ptr<gfx::Canvas> canvas(CreateCanvas(sk_canvas)); |
+ uint8 fill_alpha = dual_painter->fill_alphas[startState] + |
+ (dual_painter->fill_alphas[endState] - |
+ dual_painter->fill_alphas[startState]) * |
+ progress; |
+ uint8 stroke_alpha = dual_painter->stroke_alphas[startState] + |
+ (dual_painter->stroke_alphas[endState] - |
+ dual_painter->stroke_alphas[startState]) * |
+ progress; |
+ |
+ dual_painter->fill_painter->Paint(canvas.get(), rect, fill_alpha); |
+ dual_painter->stroke_painter->Paint(canvas.get(), rect, stroke_alpha); |
+} |
+ |
NativeThemeAura::DualPainter::DualPainter( |
scoped_ptr<NineImagePainter> fill_painter, |
const uint8 fill_alphas[kMaxState], |