Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(889)

Side by Side Diff: ui/native_theme/native_theme_aurawin.cc

Issue 143953007: Changes look for scrollbars on windows (2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/native_theme/native_theme_aurawin.h ('k') | ui/native_theme/native_theme_base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/native_theme/native_theme_aurawin.h"
6
7 #include "grit/ui_resources.h"
8 #include "third_party/skia/include/core/SkCanvas.h"
9 #include "ui/base/nine_image_painter_factory.h"
10 #include "ui/base/resource/resource_bundle.h"
11 #include "ui/gfx/canvas.h"
12 #include "ui/gfx/nine_image_painter.h"
13 #include "ui/gfx/skia_util.h"
14 #include "ui/gfx/win/dpi.h"
15 #include "ui/native_theme/common_theme.h"
16 #include "ui/native_theme/native_theme_win.h"
17
18 using gfx::NineImagePainter;
19
20 #define EMPTY_IMAGE_GRID { 0, 0, 0, 0, 0, 0, 0, 0, 0 }
21
22 namespace ui {
23
24 namespace {
25
26 const int kScrollbarThumbImages[NativeTheme::kMaxState][9] = {
27 EMPTY_IMAGE_GRID,
28 IMAGE_GRID(IDR_SCROLLBAR_THUMB_BASE_HOVER),
29 IMAGE_GRID(IDR_SCROLLBAR_THUMB_BASE_NORMAL),
30 IMAGE_GRID(IDR_SCROLLBAR_THUMB_BASE_PRESSED)
31 };
32
33 const int kScrollbarArrowButtonImages[NativeTheme::kMaxState][9] = {
34 EMPTY_IMAGE_GRID,
35 IMAGE_GRID(IDR_SCROLLBAR_ARROW_BUTTON_BASE_HOVER),
36 IMAGE_GRID(IDR_SCROLLBAR_ARROW_BUTTON_BASE_NORMAL),
37 IMAGE_GRID(IDR_SCROLLBAR_ARROW_BUTTON_BASE_PRESSED)
38 };
39
40 const int kScrollbarTrackImages[9] = IMAGE_GRID(IDR_SCROLLBAR_BASE);
41
42 } // namespace
43
44 // static
45 NativeTheme* NativeTheme::instance() {
46 return NativeThemeAuraWin::instance();
47 }
48
49 // static
50 NativeThemeAura* NativeThemeAura::instance() {
51 return NativeThemeAuraWin::instance();
52 }
53
54 // static
55 NativeThemeAuraWin* NativeThemeAuraWin::instance() {
56 CR_DEFINE_STATIC_LOCAL(NativeThemeAuraWin, s_native_theme, ());
57 return &s_native_theme;
58 }
59
60 NativeThemeAuraWin::NativeThemeAuraWin() {
61 // Image declarations assume the following order.
62 COMPILE_ASSERT(kDisabled == 0, states_unexepctedly_changed);
63 COMPILE_ASSERT(kHovered == 1, states_unexepctedly_changed);
64 COMPILE_ASSERT(kNormal == 2, states_unexepctedly_changed);
65 COMPILE_ASSERT(kPressed == 3, states_unexepctedly_changed);
66 COMPILE_ASSERT(kMaxState == 4, states_unexepctedly_changed);
67 }
68
69 NativeThemeAuraWin::~NativeThemeAuraWin() {
70 }
71
72 gfx::Size NativeThemeAuraWin::GetPartSize(Part part,
73 State state,
74 const ExtraParams& extra) const {
75 gfx::Size part_size = CommonThemeGetPartSize(part, state, extra);
76 if (!part_size.IsEmpty())
77 return part_size;
78
79 // We want aura on windows to use the same size for scrollbars as we would in
80 // the native theme.
81 switch (part) {
82 case kScrollbarDownArrow:
83 case kScrollbarLeftArrow:
84 case kScrollbarRightArrow:
85 case kScrollbarUpArrow:
86 case kScrollbarHorizontalThumb:
87 case kScrollbarVerticalThumb:
88 case kScrollbarHorizontalTrack:
89 case kScrollbarVerticalTrack:
90 return NativeThemeWin::instance()->GetPartSize(part, state, extra);
91 default:
92 break;
93 }
94
95 return NativeThemeAura::GetPartSize(part, state, extra);
96 }
97
98 void NativeThemeAuraWin::PaintArrowButton(
99 SkCanvas* gc,
100 const gfx::Rect& rect,
101 Part direction,
102 State state) const {
103 if (direction == kInnerSpinButton) {
104 NativeThemeAura::PaintArrowButton(gc, rect, direction, state);
105 return;
106 }
107 PaintPainter(GetOrCreatePainter(
108 kScrollbarArrowButtonImages, state,
109 scrollbar_arrow_button_painters_),
110 gc, rect);
111
112 // The arrow is slightly offset to better balance with the thumb.
113 gfx::Rect arrow_rect(rect);
114 if (direction == kScrollbarDownArrow || direction == kScrollbarUpArrow)
115 arrow_rect.Offset(1, 0);
116 else
117 arrow_rect.Offset(0, 1);
118
119 // Aura-win uses slightly different arrow colors.
120 SkColor arrow_color = GetArrowColor(state);
121 switch (state) {
122 case kHovered:
123 case kNormal:
124 arrow_color = SkColorSetRGB(0x50, 0x50, 0x50);
125 break;
126 case kPressed:
127 arrow_color = SK_ColorWHITE;
128 default:
129 break;
130 }
131 PaintArrow(gc, arrow_rect, direction, arrow_color);
132 }
133
134 void NativeThemeAuraWin::PaintScrollbarTrack(
135 SkCanvas* sk_canvas,
136 Part part,
137 State state,
138 const ScrollbarTrackExtraParams& extra_params,
139 const gfx::Rect& rect) const {
140 if (!scrollbar_track_painter_)
141 scrollbar_track_painter_ = CreateNineImagePainter(kScrollbarTrackImages);
142 PaintPainter(scrollbar_track_painter_.get(), sk_canvas, rect);
143 }
144
145 void NativeThemeAuraWin::PaintScrollbarThumb(SkCanvas* sk_canvas,
146 Part part,
147 State state,
148 const gfx::Rect& rect) const {
149 gfx::Rect thumb_rect(rect);
150 if (part == NativeTheme::kScrollbarVerticalThumb)
151 thumb_rect.Inset(3, 0, 1, 0);
152 else
153 thumb_rect.Inset(0, 3, 0, 1);
154 PaintPainter(GetOrCreatePainter(
155 kScrollbarThumbImages, state, scrollbar_thumb_painters_),
156 sk_canvas, thumb_rect);
157 }
158
159 NineImagePainter* NativeThemeAuraWin::GetOrCreatePainter(
160 const int images[kMaxState][9],
161 State state,
162 scoped_ptr<NineImagePainter> painters[kMaxState]) const {
163 if (painters[state])
164 return painters[state].get();
165 if (images[state][0] == 0) {
166 // Must always provide normal state images.
167 DCHECK_NE(kNormal, state);
168 return GetOrCreatePainter(images, kNormal, painters);
169 }
170 painters[state] = CreateNineImagePainter(images[state]);
171 return painters[state].get();
172 }
173
174 void NativeThemeAuraWin::PaintPainter(NineImagePainter* painter,
175 SkCanvas* sk_canvas,
176 const gfx::Rect& rect) const {
177 DCHECK(painter);
178 scoped_ptr<gfx::Canvas> canvas(CreateCanvas(sk_canvas));
179 painter->Paint(canvas.get(), rect);
180 }
181
182 } // namespace ui
OLDNEW
« no previous file with comments | « ui/native_theme/native_theme_aurawin.h ('k') | ui/native_theme/native_theme_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698