diff options
Diffstat (limited to 'gfx/native_theme_linux.h')
-rw-r--r-- | gfx/native_theme_linux.h | 149 |
1 files changed, 131 insertions, 18 deletions
diff --git a/gfx/native_theme_linux.h b/gfx/native_theme_linux.h index 4a79da3..0837d2a 100644 --- a/gfx/native_theme_linux.h +++ b/gfx/native_theme_linux.h @@ -28,13 +28,22 @@ class NativeThemeLinux { kScrollbarHorizontalThumb, kScrollbarVerticalThumb, kScrollbarHorizontalTrack, - kScrollbarVerticalTrack + kScrollbarVerticalTrack, + kCheckbox, + kRadio, + kPushButton, + kTextField, + kMenuList, + kSliderTrack, + kSliderThumb, + kInnerSpinButton, + kProgressBar, }; // The state of the part. enum State { kDisabled, - kHover, + kHovered, kNormal, kPressed, }; @@ -47,15 +56,58 @@ class NativeThemeLinux { int track_height; }; + struct ButtonExtraParams { + bool checked; + bool indeterminate; // Whether the button state is indeterminate. + bool is_default; // Whether the button is default button. + SkColor background_color; + }; + + struct TextFieldExtraParams { + bool is_text_area; + bool is_listbox; + SkColor background_color; + }; + + struct MenuListExtraParams { + int arrow_x; + int arrow_y; + SkColor background_color; + }; + + struct SliderExtraParams { + bool vertical; + bool in_drag; + }; + + struct InnerSpinButtonExtraParams { + bool spin_up; + bool read_only; + }; + + struct ProgressBarExtraParams { + bool determinate; + int value_rect_x; + int value_rect_y; + int value_rect_width; + int value_rect_height; + }; + union ExtraParams { ScrollbarTrackExtraParams scrollbar_track; + ButtonExtraParams button; + MenuListExtraParams menu_list; + SliderExtraParams slider; + TextFieldExtraParams text_field; + InnerSpinButtonExtraParams inner_spin; + ProgressBarExtraParams progress_bar; }; // Gets our singleton instance. static NativeThemeLinux* instance(); // Return the size of the part. - virtual gfx::Size GetSize(Part part) const; + virtual gfx::Size GetPartSize(Part part) const; // Paint the part to the canvas. virtual void Paint(skia::PlatformCanvas* canvas, Part part, @@ -71,23 +123,87 @@ class NativeThemeLinux { NativeThemeLinux(); virtual ~NativeThemeLinux(); - // Draw the arrow. + // Draw the arrow. Used by scrollbar and inner spin button. virtual void PaintArrowButton( skia::PlatformCanvas* gc, const gfx::Rect& rect, Part direction, State state); - // Paint the track. Done before the thumb so that it can contain alpha. - virtual void PaintTrack(skia::PlatformCanvas* canvas, - Part part, - State state, - const ScrollbarTrackExtraParams& extra_params, - const gfx::Rect& rect); - // Draw the thumb over the track. - virtual void PaintThumb(skia::PlatformCanvas* canvas, - Part part, - State state, - const gfx::Rect& rect); + // Paint the scrollbar track. Done before the thumb so that it can contain + // alpha. + virtual void PaintScrollbarTrack(skia::PlatformCanvas* canvas, + Part part, + State state, + const ScrollbarTrackExtraParams& extra_params, + const gfx::Rect& rect); + // Draw the scrollbar thumb over the track. + virtual void PaintScrollbarThumb(skia::PlatformCanvas* canvas, + Part part, + State state, + const gfx::Rect& rect); + // Draw the checkbox. + virtual void PaintCheckbox(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const ButtonExtraParams& button); + // Draw the radio. + virtual void PaintRadio(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const ButtonExtraParams& button); + // Draw the push button. + virtual void PaintButton(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const ButtonExtraParams& button); + // Draw the text field. + virtual void PaintTextField(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const TextFieldExtraParams& text); + // Draw the menu list. + virtual void PaintMenuList(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const MenuListExtraParams& menu_list); + // Draw the slider track. + virtual void PaintSliderTrack(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const SliderExtraParams& slider); + // Draw the slider thumb. + virtual void PaintSliderThumb(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const SliderExtraParams& slider); + // Draw the inner spin button. + virtual void PaintInnerSpinButton(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const InnerSpinButtonExtraParams& spin_button); + // Draw the progress bar. + virtual void PaintProgressBar(skia::PlatformCanvas* canvas, + State state, + const gfx::Rect& rect, + const ProgressBarExtraParams& progress_bar); + + protected: + bool IntersectsClipRectInt(skia::PlatformCanvas* canvas, + int x, int y, int w, int h); + + void DrawBitmapInt(skia::PlatformCanvas* canvas, const SkBitmap& bitmap, + int src_x, int src_y, int src_w, int src_h, + int dest_x, int dest_y, int dest_w, int dest_h); + + void DrawTiledImage(SkCanvas* canvas, + const SkBitmap& bitmap, + int src_x, int src_y, + double tile_scale_x, double 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, @@ -106,9 +222,6 @@ class NativeThemeLinux { SkScalar Clamp(SkScalar value, SkScalar min, SkScalar max) const; - SkColor SaturateAndBrighten(SkScalar* hsv, - SkScalar saturate_amount, - SkScalar brighten_amount) const; SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const; static unsigned int scrollbar_width_; |