| // Copyright (c) 2011 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_GFX_NATIVE_THEME_ANDROID_H_ |
| #define UI_GFX_NATIVE_THEME_ANDROID_H_ |
| |
| #include "base/basictypes.h" |
| #include "skia/ext/platform_canvas.h" |
| |
| namespace gfx { |
| class Rect; |
| class Size; |
| |
| // Android theming API. |
| class NativeThemeAndroid { |
| public: |
| // The part to be painted / sized. |
| enum Part { |
| SCROLLBAR_DOWN_ARROW, |
| SCROLLBAR_LEFT_ARROW, |
| SCROLLBAR_RIGHT_ARROW, |
| SCROLLBAR_UP_ARROW, |
| CHECKBOX, |
| RADIO, |
| PUSH_BUTTON, |
| TEXTFIELD, |
| MENU_LIST, |
| SLIDER_TRACK, |
| SLIDER_THUMB, |
| INNER_SPIN_BUTTON, |
| PROGRESS_BAR, |
| }; |
| |
| // The state of the part. |
| enum State { |
| DISABLED, |
| HOVERED, |
| NORMAL, |
| PRESSED, |
| }; |
| |
| struct ButtonExtraParams { |
| bool checked; |
| bool indeterminate; // Whether the button state is indeterminate. |
| bool is_default; // Whether the button is default button. |
| bool has_border; |
| SkColor background_color; |
| }; |
| |
| struct TextFieldExtraParams { |
| bool is_text_area; |
| bool is_listbox; |
| SkColor background_color; |
| }; |
| |
| struct MenuListExtraParams { |
| bool has_border; |
| bool has_border_radius; |
| 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 { |
| ButtonExtraParams button; |
| MenuListExtraParams menu_list; |
| SliderExtraParams slider; |
| TextFieldExtraParams text_field; |
| InnerSpinButtonExtraParams inner_spin; |
| ProgressBarExtraParams progress_bar; |
| }; |
| |
| // Gets our singleton instance. |
| static NativeThemeAndroid* instance(); |
| |
| // Return the size of the part. |
| gfx::Size GetPartSize(Part part) const; |
| |
| // Paint the part to the canvas. |
| void Paint(SkCanvas* canvas, |
| Part part, |
| State state, |
| const gfx::Rect& rect, |
| const ExtraParams& extra); |
| |
| private: |
| NativeThemeAndroid(); |
| virtual ~NativeThemeAndroid(); |
| |
| // Draw the arrow. Used by scrollbar and inner spin button. |
| void PaintArrowButton(SkCanvas* gc, |
| const gfx::Rect& rect, |
| Part direction, |
| State state); |
| |
| // Draw the checkbox. |
| void PaintCheckbox(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ButtonExtraParams& button); |
| |
| // Draw the radio. |
| void PaintRadio(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ButtonExtraParams& button); |
| |
| // Draw the push button. |
| void PaintButton(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ButtonExtraParams& button); |
| |
| // Draw the text field. |
| void PaintTextField(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const TextFieldExtraParams& text); |
| |
| // Draw the menu list. |
| void PaintMenuList(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const MenuListExtraParams& menu_list); |
| |
| // Draw the slider track. |
| void PaintSliderTrack(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const SliderExtraParams& slider); |
| |
| // Draw the slider thumb. |
| void PaintSliderThumb(SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const SliderExtraParams& slider); |
| |
| // Draw the inner spin button. |
| void PaintInnerSpinButton( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const InnerSpinButtonExtraParams& spin_button); |
| |
| // Draw the progress bar. |
| void PaintProgressBar( |
| SkCanvas* canvas, |
| State state, |
| const gfx::Rect& rect, |
| const ProgressBarExtraParams& progress_bar); |
| |
| // Return true if there is intersection between the |canvas| and the given |
| // rectangle. |
| bool IntersectsClipRectInt(SkCanvas* canvas, |
| int x, |
| int y, |
| int w, |
| int h); |
| |
| // Draw the dest rectangle with the given bitmap which might be scaled if its |
| // size is not same as target rectangle. |
| void DrawBitmapInt(SkCanvas* 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); |
| |
| // Draw the target rectangle with the |bitmap| accroding the given |
| // |tile_scale_x| and |tile_scale_y| |
| 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; |
| |
| // Return a new color which comes from the |hsv| by adjusting saturate and |
| // brighten according |saturate_amount| and |brighten_amount| |
| SkColor SaturateAndBrighten(SkScalar* hsv, |
| SkScalar saturate_amount, |
| SkScalar brighten_amount) const; |
| |
| 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; |
| |
| // Return the |value| if it is between |min| and |max|, otherwise the |min| |
| // or |max| is returned dependent on which is mostly near the |value|. |
| SkScalar Clamp(SkScalar value, SkScalar min, SkScalar max) const; |
| |
| // Used to return the color of scrollbar based on the color of thumb and |
| // track. |
| SkColor OutlineColor(SkScalar* hsv1, SkScalar* hsv2) const; |
| |
| DISALLOW_COPY_AND_ASSIGN(NativeThemeAndroid); |
| }; |
| |
| } // namespace gfx |
| |
| #endif // UI_GFX_NATIVE_THEME_ANDROID_H_ |