| // Copyright (c) 2012 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. |
| |
| #ifndef UI_NATIVE_THEME_NATIVE_THEME_BASE_H_ |
| #define UI_NATIVE_THEME_NATIVE_THEME_BASE_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "skia/ext/platform_canvas.h" |
| #include "ui/native_theme/native_theme.h" |
| |
| namespace gfx { |
| class ImageSkia; |
| class Rect; |
| class Size; |
| } |
| |
| namespace ui { |
| |
| // Theme support for non-Windows toolkits. |
| class NATIVE_THEME_EXPORT NativeThemeBase : public NativeTheme { |
| public: |
| // NativeTheme implementation: |
| virtual gfx::Size GetPartSize(Part part, |
| State state, |
| const ExtraParams& extra) const OVERRIDE; |
| virtual void Paint(SkCanvas* canvas, |
| Part part, |
| State state, |
| const gfx::Rect& rect, |
| const ExtraParams& extra) const OVERRIDE; |
| |
| protected: |
| NativeThemeBase(); |
| virtual ~NativeThemeBase(); |
| |
| // Draw the arrow. Used by scrollbar and inner spin button. |
| virtual void PaintArrowButton( |
| SkCanvas* gc, |
| const gfx::Rect& rect, |
| Part direction, |
| State state) const; |
| // Paint the scrollbar track. Done before the thumb so that it can contain |
| // alpha. |
| virtual void PaintScrollbarTrack( |
| SkCanvas* canvas, |
| Part part, |
| State state, |
| const ScrollbarTrackExtraParams& extra_params, |
| const gfx::Rect& rect) const; |
| // Draw the scrollbar thumb over the track. |
| virtual void PaintScrollbarThumb( |
| SkCanvas* canvas, |
| Part part, |
| State state, |
| const gfx::Rect& rect) const; |
| |
| virtual void PaintCheckbox( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ButtonExtraParams& button) const; |
| |
| virtual void PaintRadio( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ButtonExtraParams& button) const; |
| |
| virtual void PaintButton( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ButtonExtraParams& button) const; |
| |
| virtual void PaintTextField( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const TextFieldExtraParams& text) const; |
| |
| virtual void PaintMenuList( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const MenuListExtraParams& menu_list) const; |
| |
| virtual void PaintMenuPopupBackground( |
| SkCanvas* canvas, |
| const gfx::Size& size, |
| const MenuBackgroundExtraParams& menu_background) const; |
| |
| virtual void PaintMenuItemBackground( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const MenuListExtraParams& menu_list) const; |
| |
| virtual void PaintSliderTrack( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const SliderExtraParams& slider) const; |
| |
| virtual void PaintSliderThumb( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const SliderExtraParams& slider) const; |
| |
| virtual void PaintInnerSpinButton( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const InnerSpinButtonExtraParams& spin_button) const; |
| |
| virtual void PaintProgressBar( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ProgressBarExtraParams& progress_bar) const; |
| |
| protected: |
| void set_scrollbar_button_length(unsigned int length) { |
| scrollbar_button_length_ = length; |
| } |
| |
| bool IntersectsClipRectInt(SkCanvas* canvas, |
| int x, int y, int w, int h) const; |
| |
| void DrawImageInt(SkCanvas* canvas, const gfx::ImageSkia& image, |
| int src_x, int src_y, int src_w, int src_h, |
| int dest_x, int dest_y, int dest_w, int dest_h) const; |
| |
| void DrawTiledImage(SkCanvas* canvas, |
| const gfx::ImageSkia& image, |
| int src_x, int src_y, |
| float tile_scale_x, float tile_scale_y, |
| int dest_x, int dest_y, int w, int h) const; |
| |
| SkColor SaturateAndBrighten(SkScalar* hsv, |
| SkScalar saturate_amount, |
| SkScalar brighten_amount) const; |
| private: |
| void DrawVertLine(SkCanvas* canvas, |
| int x, |
| int y1, |
| int y2, |
| const SkPaint& paint) const; |
| void DrawHorizLine(SkCanvas* canvas, |
| int x1, |
| int x2, |
| int y, |
| const SkPaint& paint) const; |
| void DrawBox(SkCanvas* canvas, |
| const gfx::Rect& rect, |
| const SkPaint& paint) const; |
| SkScalar Clamp(SkScalar value, |
| SkScalar min, |
| SkScalar max) const; |
| SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const; |
| |
| // Paint the common parts of the checkboxes and radio buttons. |
| // borderRadius specifies how rounded the corners should be. |
| SkRect PaintCheckboxRadioCommon( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const SkScalar borderRadius) const; |
| |
| unsigned int scrollbar_width_; |
| unsigned int scrollbar_button_length_; |
| |
| DISALLOW_COPY_AND_ASSIGN(NativeThemeBase); |
| }; |
| |
| } // namespace ui |
| |
| #endif // UI_NATIVE_THEME_NATIVE_THEME_BASE_H_ |