diff options
Diffstat (limited to 'chromium/ui/native_theme/native_theme_aura.h')
-rw-r--r-- | chromium/ui/native_theme/native_theme_aura.h | 86 |
1 files changed, 83 insertions, 3 deletions
diff --git a/chromium/ui/native_theme/native_theme_aura.h b/chromium/ui/native_theme/native_theme_aura.h index b3417b353ce..b63556c0284 100644 --- a/chromium/ui/native_theme/native_theme_aura.h +++ b/chromium/ui/native_theme/native_theme_aura.h @@ -9,6 +9,10 @@ #include "base/compiler_specific.h" #include "ui/native_theme/fallback_theme.h" +namespace gfx { +class NineImagePainter; +} + namespace ui { // Aura implementation of native theme support. @@ -16,7 +20,7 @@ class NATIVE_THEME_EXPORT NativeThemeAura : public FallbackTheme { public: static NativeThemeAura* instance(); - private: + protected: NativeThemeAura(); virtual ~NativeThemeAura(); @@ -30,16 +34,92 @@ class NATIVE_THEME_EXPORT NativeThemeAura : public FallbackTheme { State state, const gfx::Rect& rect, const MenuListExtraParams& menu_list) const OVERRIDE; + virtual void PaintArrowButton(SkCanvas* gc, + const gfx::Rect& rect, + Part direction, + State state) const OVERRIDE; virtual void PaintScrollbarTrack( - SkCanvas* canvas, + SkCanvas* sk_canvas, Part part, State state, const ScrollbarTrackExtraParams& extra_params, const gfx::Rect& rect) const OVERRIDE; - virtual void PaintScrollbarThumb(SkCanvas* canvas, + virtual void PaintScrollbarThumb(SkCanvas* sk_canvas, Part part, State state, const gfx::Rect& rect) const OVERRIDE; + virtual void PaintScrollbarCorner(SkCanvas* canvas, + State state, + const gfx::Rect& rect) const OVERRIDE; + + virtual void PaintScrollbarThumbStateTransition(SkCanvas* canvas, + State startState, + State endState, + double progress, + const gfx::Rect& rect) const + OVERRIDE; + + // Returns the NineImagePainter used to paint the specified state, creating if + // necessary. If no image is provided for the specified state the normal state + // images are used. + gfx::NineImagePainter* GetOrCreatePainter( + const int image_ids[kMaxState][9], + State state, + scoped_ptr<gfx::NineImagePainter> painters[kMaxState]) const; + + // Paints |painter| into the canvas using |rect|. + void PaintPainter(gfx::NineImagePainter* painter, + SkCanvas* sk_canvas, + const gfx::Rect& rect) const; + + mutable scoped_ptr<gfx::NineImagePainter> scrollbar_track_painter_; + + mutable scoped_ptr<gfx::NineImagePainter> + scrollbar_thumb_painters_[kMaxState]; + + mutable scoped_ptr<gfx::NineImagePainter> + scrollbar_arrow_button_painters_[kMaxState]; + + private: + struct DualPainter { + // For overlay scrollbar thumbs, fill and stroke are controlled separately, + // and each state is achieved by painting with different opacity. This + // struct bundles information of painter generated using assets and alpha + // value associated with each state, so that a DualPainter for overlay + // scrollbar thumb would only need state as input to paint correctly. + DualPainter(scoped_ptr<gfx::NineImagePainter> fill_painter, + const uint8 fill_alphas[kMaxState], + scoped_ptr<gfx::NineImagePainter> stroke_painter, + const uint8 stroke_alphas[kMaxState]); + ~DualPainter(); + + scoped_ptr<gfx::NineImagePainter> fill_painter; + const uint8* const fill_alphas; + scoped_ptr<gfx::NineImagePainter> stroke_painter; + const uint8* const stroke_alphas; + }; + + // Returns DualPainter from specific fill and stroke, creating if necessary. + scoped_ptr<DualPainter> CreateDualPainter( + const int fill_image_ids[9], + const uint8 fill_alphas[kMaxState], + const int stroke_image_ids[9], + const uint8 stroke_alphas[kMaxState]) const; + + // Paints |dualPainter| into the canvas using |rect| and specific alpha. + void PaintDualPainter(DualPainter* dual_painter, + SkCanvas* sk_canvas, + const gfx::Rect& rect, + State state) const; + + void PaintDualPainterTransition(DualPainter* dual_painter, + SkCanvas* sk_canvas, + const gfx::Rect& rect, + State startState, + State endState, + double progress) const; + + mutable scoped_ptr<DualPainter> scrollbar_overlay_thumb_painter_; DISALLOW_COPY_AND_ASSIGN(NativeThemeAura); }; |