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

Side by Side Diff: ui/native_theme/native_theme_mac.mm

Issue 456473002: MacViews: Implement scrollbar theming. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/native_theme/native_theme_mac.h" 5 #include "ui/native_theme/native_theme_mac.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
11 #include "base/mac/scoped_cftyperef.h" 11 #include "base/mac/scoped_cftyperef.h"
12 #include "base/mac/sdk_forward_declarations.h" 12 #include "base/mac/sdk_forward_declarations.h"
13 #include "ui/native_theme/common_theme.h" 13 #include "ui/native_theme/common_theme.h"
14 #import "skia/ext/skia_utils_mac.h" 14 #import "skia/ext/skia_utils_mac.h"
15 #include "ui/gfx/geometry/rect.h"
15 #include "ui/gfx/skia_util.h" 16 #include "ui/gfx/skia_util.h"
16 17
17 namespace { 18 namespace {
18 19
20 const SkColor kScrollerTrackColor = SkColorSetRGB(0xF8, 0xF8, 0xF8);
tapted 2014/08/11 01:00:58 Can we make this a horizontal 3-stage gradient, to
Andre 2014/08/12 21:42:38 Done.
21 const SkColor kScrollerTrackBorderColor = SkColorSetRGB(0xE4, 0xE4, 0xE4);
22 const SkColor kScrollerThumbColor = SkColorSetRGB(0xC3, 0xC3, 0xC3);
tapted 2014/08/11 01:00:58 These should have an alpha component, so the track
Andre 2014/08/12 21:42:37 Added alpha component, although the effect is very
23 const SkColor kScrollerThumbHoverColor = SkColorSetRGB(0x7E, 0x7E, 0x7E);
24 const int kScrollerTrackBorderWidth = 1;
25 const int kScrollerThumbInset = 3;
26
19 // Values calculated by reading pixels and solving simultaneous equations 27 // Values calculated by reading pixels and solving simultaneous equations
20 // derived from "A over B" alpha compositing. Steps: Sample the semi-transparent 28 // derived from "A over B" alpha compositing. Steps: Sample the semi-transparent
21 // pixel over two backgrounds; P1, P2 over backgrounds B1, B2. Use the color 29 // pixel over two backgrounds; P1, P2 over backgrounds B1, B2. Use the color
22 // value between 0.0 and 1.0 (i.e. divide by 255.0). Then, 30 // value between 0.0 and 1.0 (i.e. divide by 255.0). Then,
23 // alpha = (P2 - P1 + B1 - B2) / (B1 - B2) 31 // alpha = (P2 - P1 + B1 - B2) / (B1 - B2)
24 // color = (P1 - B1 + alpha * B1) / alpha. 32 // color = (P1 - B1 + alpha * B1) / alpha.
25 const SkColor kMenuPopupBackgroundColor = SkColorSetARGB(251, 255, 255, 255); 33 const SkColor kMenuPopupBackgroundColor = SkColorSetARGB(251, 255, 255, 255);
26 const SkColor kMenuSeparatorColor = SkColorSetARGB(243, 228, 228, 228); 34 const SkColor kMenuSeparatorColor = SkColorSetARGB(243, 228, 228, 228);
27 const SkColor kMenuBorderColor = SkColorSetARGB(60, 0, 0, 0); 35 const SkColor kMenuBorderColor = SkColorSetARGB(60, 0, 0, 0);
28 36
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 // and is a good shade of gray, it's not blue enough for the Blue theme. 217 // and is a good shade of gray, it's not blue enough for the Blue theme.
210 paint.setColor(GetSystemColor(kColorId_HoverMenuItemBackgroundColor)); 218 paint.setColor(GetSystemColor(kColorId_HoverMenuItemBackgroundColor));
211 canvas->drawRect(gfx::RectToSkRect(rect), paint); 219 canvas->drawRect(gfx::RectToSkRect(rect), paint);
212 break; 220 break;
213 default: 221 default:
214 NOTREACHED(); 222 NOTREACHED();
215 break; 223 break;
216 } 224 }
217 } 225 }
218 226
227 void NativeThemeMac::PaintScrollbarTrack(
tapted 2014/08/11 01:00:58 (nit: move up in the .mm file too)
Andre 2014/08/12 21:42:37 Done.
228 SkCanvas* canvas,
229 Part part,
230 State state,
231 const ScrollbarTrackExtraParams& extra_params,
232 const gfx::Rect& rect) const {
233 SkPaint paint;
234 paint.setColor(track_color_);
tapted 2014/08/11 01:00:58 probably something like paint.setShader(SkGradient
Andre 2014/08/12 21:42:38 Done.
235 SkIRect track_rect;
236 track_rect.set(rect.x(), rect.y(), rect.right(), rect.bottom());
237 canvas->drawIRect(track_rect, paint);
238
239 // Draw line border next to content area.
240 paint.setColor(kScrollerTrackBorderColor);
241 if (part == kScrollbarVerticalTrack) {
242 canvas->drawRectCoords(track_rect.left(),
243 track_rect.top(),
244 track_rect.left() + kScrollerTrackBorderWidth,
245 track_rect.bottom(),
246 paint);
247 } else {
248 canvas->drawRectCoords(track_rect.left(),
249 track_rect.top(),
250 track_rect.right(),
251 track_rect.top() + kScrollerTrackBorderWidth,
252 paint);
253 }
254 }
255
256 void NativeThemeMac::PaintScrollbarThumb(SkCanvas* canvas,
257 Part part,
258 State state,
259 const gfx::Rect& rect) const {
260 gfx::Rect thumb_rect(rect);
261 if (part == kScrollbarVerticalThumb)
tapted 2014/08/11 01:00:58 Maybe a switch statement here, with NOTREACHED().
Andre 2014/08/12 21:42:38 Done.
262 thumb_rect.Inset(kScrollerTrackBorderWidth, 0, 0, 0);
263 else
264 thumb_rect.Inset(0, kScrollerTrackBorderWidth, 0, 0);
265
266 thumb_rect.Inset(kScrollerThumbInset, kScrollerThumbInset);
267
268 SkPaint paint;
269 paint.setColor(state == kHovered ? thumb_active_color_
270 : thumb_inactive_color_);
271 SkRect skrect;
272 skrect.set(
273 thumb_rect.x(), thumb_rect.y(), thumb_rect.right(), thumb_rect.bottom());
274 const SkScalar radius = std::min(skrect.width(), skrect.height());
275 canvas->drawRoundRect(skrect, radius, radius, paint);
276 }
277
219 NativeThemeMac::NativeThemeMac() { 278 NativeThemeMac::NativeThemeMac() {
279 set_scrollbar_button_length(0);
tapted 2014/08/11 01:00:58 Perhaps also override PaintArrowButton to be a no-
Andre 2014/08/12 21:42:38 I've added a scrollbar_button_length_ check in Nat
tapted 2014/08/13 01:13:29 lg
280 SetScrollbarColors(
281 kScrollerThumbColor, kScrollerThumbHoverColor, kScrollerTrackColor);
220 } 282 }
221 283
222 NativeThemeMac::~NativeThemeMac() { 284 NativeThemeMac::~NativeThemeMac() {
223 } 285 }
224 286
225 } // namespace ui 287 } // namespace ui
OLDNEW
« ui/native_theme/native_theme_mac.h ('K') | « ui/native_theme/native_theme_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698