Index: ui/gfx/native_theme_android.h |
diff --git a/ui/gfx/native_theme_android.h b/ui/gfx/native_theme_android.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c4dcafa2574aefb8de81c6ac1f00e5ed3e644db |
--- /dev/null |
+++ b/ui/gfx/native_theme_android.h |
@@ -0,0 +1,240 @@ |
+// 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_TNUMB, |
+ 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_ |