Chromium Code Reviews| 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..f1134082080d7d1639e312fd9e4bff3f2db4f536 |
| --- /dev/null |
| +++ b/ui/gfx/native_theme_android.h |
| @@ -0,0 +1,247 @@ |
| +// 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 { |
| + kDisabled, |
|
sky
2011/11/11 00:14:16
This should be ALL_CAPS too.
michaelbai
2011/11/11 00:33:28
Done.
|
| + kHovered, |
| + kNormal, |
| + kPressed, |
| + }; |
| + |
| + 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); |
| + |
| + protected: |
| + NativeThemeAndroid(); |
| + virtual ~NativeThemeAndroid(); |
| + |
| + // Draw the arrow. Used by scrollbar and inner spin button. |
| + virtual void PaintArrowButton(SkCanvas* gc, |
|
sky
2011/11/11 00:14:16
Same comment on virtual as earlier. If it's not ne
michaelbai
2011/11/11 00:33:28
Done.
|
| + const gfx::Rect& rect, |
| + Part direction, |
| + State state); |
| + |
| + // Draw the checkbox. |
| + virtual void PaintCheckbox(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const ButtonExtraParams& button); |
| + |
| + // Draw the radio. |
| + virtual void PaintRadio(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const ButtonExtraParams& button); |
| + |
| + // Draw the push button. |
| + virtual void PaintButton(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const ButtonExtraParams& button); |
| + |
| + // Draw the text field. |
| + virtual void PaintTextField(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const TextFieldExtraParams& text); |
| + |
| + // Draw the menu list. |
| + virtual void PaintMenuList(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const MenuListExtraParams& menu_list); |
| + |
| + // Draw the slider track. |
| + virtual void PaintSliderTrack(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const SliderExtraParams& slider); |
| + |
| + // Draw the slider thumb. |
| + virtual void PaintSliderThumb(SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const SliderExtraParams& slider); |
| + |
| + // Draw the inner spin button. |
| + virtual void PaintInnerSpinButton( |
| + SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const InnerSpinButtonExtraParams& spin_button); |
| + |
| + // Draw the progress bar. |
| + virtual void PaintProgressBar( |
| + SkCanvas* canvas, |
| + State state, |
| + const gfx::Rect& rect, |
| + const ProgressBarExtraParams& progress_bar); |
| + |
| +private: |
| + // 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; |
| + |
| + static unsigned int scrollbar_width_; |
|
sky
2011/11/11 00:14:16
Is there a reason these aren't const too? It doesn
michaelbai
2011/11/11 00:33:28
Done.
|
| + static unsigned int button_length_; |
| + static unsigned int thumb_inactive_color_; |
| + static unsigned int thumb_active_color_; |
| + static unsigned int track_color_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NativeThemeAndroid); |
| +}; |
| + |
| +} // namespace gfx |
| + |
| +#endif // UI_GFX_NATIVE_THEME_ANDROID_H_ |