diff options
author | saintlou@chromium.org <saintlou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-14 17:54:06 +0000 |
---|---|---|
committer | saintlou@chromium.org <saintlou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-14 17:54:06 +0000 |
commit | d7bc4d09f86ae10d7380176efeb0384f33e6f578 (patch) | |
tree | d13ad06ee8060c70f464fbb98edf95367e23da48 /ui | |
parent | a8520163c636999da6c04e3f32b3994c0316bce4 (diff) | |
download | chromium_src-d7bc4d09f86ae10d7380176efeb0384f33e6f578.zip chromium_src-d7bc4d09f86ae10d7380176efeb0384f33e6f578.tar.gz chromium_src-d7bc4d09f86ae10d7380176efeb0384f33e6f578.tar.bz2 |
Copying Scrollbar style from ChromeOS into Aura. It is very likely that the theme will continue to evolve on Aura so we want to make copies:
NativeThemeAura::PaintScrollbarTrack
NativeThemeAura::PaintArrowButton
NativeThemeAura::PaintScrollbarThumb
TBR=sky@chromium.org
BUG=100223
TEST=none
Review URL: http://codereview.chromium.org/8277026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105517 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gfx/native_theme_aura.cc | 136 | ||||
-rw-r--r-- | ui/gfx/native_theme_aura.h | 24 |
2 files changed, 160 insertions, 0 deletions
diff --git a/ui/gfx/native_theme_aura.cc b/ui/gfx/native_theme_aura.cc index 74691ef..07f359c 100644 --- a/ui/gfx/native_theme_aura.cc +++ b/ui/gfx/native_theme_aura.cc @@ -4,6 +4,11 @@ #include "ui/gfx/native_theme_aura.h" +#include "grit/gfx_resources.h" +#include "ui/base/resource/resource_bundle.h" +#include "ui/gfx/size.h" +#include "ui/gfx/skbitmap_operations.h" + namespace gfx { // static @@ -23,4 +28,135 @@ NativeThemeAura::NativeThemeAura() { NativeThemeAura::~NativeThemeAura() { } +void NativeThemeAura::PaintScrollbarTrack( + SkCanvas* canvas, + Part part, + State state, + const ScrollbarTrackExtraParams& extra_params, + const gfx::Rect& rect) const { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + if (part == kScrollbarVerticalTrack) { + SkBitmap* background = rb.GetBitmapNamed(IDR_SCROLL_BACKGROUND); + SkBitmap* border_up = rb.GetBitmapNamed(IDR_SCROLL_BACKGROUND_BORDER_UP); + SkBitmap* border_down = + rb.GetBitmapNamed(IDR_SCROLL_BACKGROUND_BORDER_DOWN); + // Draw track background. + DrawBitmapInt( + canvas, *background, + 0, 0, background->width(), 1, + rect.x(), rect.y(), rect.width(), rect.height()); + // Draw up button lower border. + canvas->drawBitmap(*border_up, extra_params.track_x, extra_params.track_y); + // Draw down button upper border. + canvas->drawBitmap( + *border_down, + extra_params.track_x, + extra_params.track_y + extra_params.track_height - border_down->height() + ); + } else { + SkBitmap* background = + GetHorizontalBitmapNamed(IDR_SCROLL_BACKGROUND); + SkBitmap* border_left = + GetHorizontalBitmapNamed(IDR_SCROLL_BACKGROUND_BORDER_UP); + SkBitmap* border_right = + GetHorizontalBitmapNamed(IDR_SCROLL_BACKGROUND_BORDER_DOWN); + // Draw track background. + DrawBitmapInt( + canvas, *background, + 0, 0, 1, background->height(), + rect.x(), rect.y(), rect.width(), rect.height()); + // Draw left button right border. + canvas->drawBitmap(*border_left,extra_params.track_x, extra_params.track_y); + // Draw right button left border. + canvas->drawBitmap( + *border_right, + extra_params.track_x + extra_params.track_width - border_right->width(), + extra_params.track_y); + } +} + +void NativeThemeAura::PaintArrowButton(SkCanvas* canvas, + const gfx::Rect& rect, Part part, State state) const { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + int resource_id = + (part == kScrollbarUpArrow || part == kScrollbarLeftArrow) ? + IDR_SCROLL_ARROW_UP : IDR_SCROLL_ARROW_DOWN; + if (state == kHovered) + resource_id++; + else if (state == kPressed) + resource_id += 2; + SkBitmap* bitmap; + if (part == kScrollbarUpArrow || part == kScrollbarDownArrow) + bitmap = rb.GetBitmapNamed(resource_id); + else + bitmap = GetHorizontalBitmapNamed(resource_id); + DrawBitmapInt(canvas, *bitmap, + 0, 0, bitmap->width(), bitmap->height(), + rect.x(), rect.y(), rect.width(), rect.height()); +} + +void NativeThemeAura::PaintScrollbarThumb(SkCanvas* canvas, + Part part, State state, const gfx::Rect& rect) const { + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + int resource_id = IDR_SCROLL_THUMB; + if (state == kHovered) + resource_id++; + else if (state == kPressed) + resource_id += 2; + if (part == kScrollbarVerticalThumb) { + SkBitmap* bitmap = rb.GetBitmapNamed(resource_id); + // Top + DrawBitmapInt( + canvas, *bitmap, + 0, 1, bitmap->width(), 5, + rect.x(), rect.y(), rect.width(), 5); + // Middle + DrawBitmapInt( + canvas, *bitmap, + 0, 7, bitmap->width(), 1, + rect.x(), rect.y() + 5, rect.width(), rect.height() - 10); + // Bottom + DrawBitmapInt( + canvas, *bitmap, + 0, 8, bitmap->width(), 5, + rect.x(), rect.y() + rect.height() - 5, rect.width(), 5); + } else { + SkBitmap* bitmap = GetHorizontalBitmapNamed(resource_id); + // Left + DrawBitmapInt( + canvas, *bitmap, + 1, 0, 5, bitmap->height(), + rect.x(), rect.y(), 5, rect.height()); + // Middle + DrawBitmapInt( + canvas, *bitmap, + 7, 0, 1, bitmap->height(), + rect.x() + 5, rect.y(), rect.width() - 10, rect.height()); + // Right + DrawBitmapInt( + canvas, *bitmap, + 8, 0, 5, bitmap->height(), + rect.x() + rect.width() - 5, rect.y(), 5, rect.height()); + } +} + +SkBitmap* NativeThemeAura::GetHorizontalBitmapNamed(int resource_id) const { + SkImageMap::const_iterator found = horizontal_bitmaps_.find(resource_id); + if (found != horizontal_bitmaps_.end()) + return found->second; + + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); + SkBitmap* vertical_bitmap = rb.GetBitmapNamed(resource_id); + + if (vertical_bitmap) { + SkBitmap transposed_bitmap = + SkBitmapOperations::CreateTransposedBtmap(*vertical_bitmap); + SkBitmap* horizontal_bitmap = new SkBitmap(transposed_bitmap); + + horizontal_bitmaps_[resource_id] = horizontal_bitmap; + return horizontal_bitmap; + } + return NULL; +} + } // namespace gfx diff --git a/ui/gfx/native_theme_aura.h b/ui/gfx/native_theme_aura.h index 97c6450..8719253 100644 --- a/ui/gfx/native_theme_aura.h +++ b/ui/gfx/native_theme_aura.h @@ -6,7 +6,12 @@ #define UI_GFX_NATIVE_THEME_AURA_H_ #pragma once +#include <map> +#include "base/compiler_specific.h" #include "ui/gfx/native_theme_base.h" +#include "ui/gfx/rect.h" + +class SkBitmap; namespace gfx { @@ -18,6 +23,25 @@ class NativeThemeAura : public NativeThemeBase { private: NativeThemeAura(); virtual ~NativeThemeAura(); + + // NativeThemeBase overrides + virtual void PaintScrollbarTrack(SkCanvas* canvas, + Part part, State state, + const ScrollbarTrackExtraParams& extra_params, + const gfx::Rect& rect) const OVERRIDE; + virtual void PaintArrowButton(SkCanvas* canvas, + const gfx::Rect& rect, Part direction, State state) const OVERRIDE; + virtual void PaintScrollbarThumb(SkCanvas* canvas, + Part part, State state, const gfx::Rect& rect) const OVERRIDE; + + SkBitmap* GetHorizontalBitmapNamed(int resource_id) const; + + // Cached images. Resource loader caches all retrieved bitmaps and keeps + // ownership of the pointers. + typedef std::map<int, SkBitmap*> SkImageMap; + mutable SkImageMap horizontal_bitmaps_; + + DISALLOW_COPY_AND_ASSIGN(NativeThemeAura); }; } // namespace gfx |