summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorsaintlou@chromium.org <saintlou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-14 17:54:06 +0000
committersaintlou@chromium.org <saintlou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-14 17:54:06 +0000
commitd7bc4d09f86ae10d7380176efeb0384f33e6f578 (patch)
treed13ad06ee8060c70f464fbb98edf95367e23da48 /ui
parenta8520163c636999da6c04e3f32b3994c0316bce4 (diff)
downloadchromium_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.cc136
-rw-r--r--ui/gfx/native_theme_aura.h24
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