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

Unified Diff: ui/native_theme/native_theme_aura.cc

Issue 2426793002: Aura overlay scrollbars adjust color for dark backgrounds (Closed)
Patch Set: update Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: ui/native_theme/native_theme_aura.cc
diff --git a/ui/native_theme/native_theme_aura.cc b/ui/native_theme/native_theme_aura.cc
index 6587ec1060157f7d69f0ee2227e92754c2046ace..51f81da8115be2f9d563aaa6551d67adaac3bb30 100644
--- a/ui/native_theme/native_theme_aura.cc
+++ b/ui/native_theme/native_theme_aura.cc
@@ -20,6 +20,7 @@
#include "ui/gfx/path.h"
#include "ui/gfx/skia_util.h"
#include "ui/native_theme/common_theme.h"
+#include "ui/native_theme/material_design_constants.h"
#include "ui/native_theme/native_theme_switches.h"
namespace ui {
@@ -32,11 +33,11 @@ SkAlpha ThumbAlphaForState(NativeTheme::State state) {
case NativeTheme::kDisabled:
return 0x00;
case NativeTheme::kHovered:
- return overlay ? 0xB2 : 0x4D;
+ return overlay ? kMDScrollbarAlphaHovered : 0x4D;
case NativeTheme::kNormal:
- return overlay ? 0x8C : 0x33;
+ return overlay ? kMDScrollbarAlphaNormal : 0x33;
case NativeTheme::kPressed:
- return overlay ? 0xB2 : 0x80;
+ return overlay ? kMDScrollbarAlphaPressed : 0x80;
case NativeTheme::kNumStates:
break;
}
@@ -51,10 +52,11 @@ SkAlpha ThumbStrokeAlphaForState(NativeTheme::State state) {
case NativeTheme::kDisabled:
return 0x00;
case NativeTheme::kHovered:
+ return kMDScrollbarAlphaHovered;
case NativeTheme::kPressed:
- return 0x33;
+ return kMDScrollbarAlphaPressed;
case NativeTheme::kNormal:
- return 0x26;
+ return kMDScrollbarAlphaNormal;
case NativeTheme::kNumStates:
break;
}
@@ -84,6 +86,11 @@ NativeThemeAura::NativeThemeAura() {
set_scrollbar_button_length(0);
#endif
+ if (IsOverlayScrollbarEnabled()) {
+ scrollbar_width_ =
+ kMDScrollbarThumbWidthPressed + kMDScrollbarStrokeWidth * 2;
+ }
+
// Images and alphas declarations assume the following order.
static_assert(kDisabled == 0, "states unexpectedly changed");
static_assert(kHovered == 1, "states unexpectedly changed");
@@ -181,12 +188,14 @@ void NativeThemeAura::PaintScrollbarTrack(
void NativeThemeAura::PaintScrollbarThumb(SkCanvas* canvas,
Part part,
State state,
- const gfx::Rect& rect) const {
+ const gfx::Rect& rect,
+ ScrollbarOverlayStyle style) const {
// Do not paint if state is disabled.
if (state == kDisabled)
return;
- PaintScrollbarThumbStateTransition(canvas, part, state, state, 1.0, rect);
+ PaintScrollbarThumbStateTransition(canvas, part, state, state, 1.0, rect,
+ style);
}
void NativeThemeAura::PaintScrollbarThumbStateTransition(
@@ -195,21 +204,35 @@ void NativeThemeAura::PaintScrollbarThumbStateTransition(
State start_state,
State end_state,
double progress,
- const gfx::Rect& rect) const {
+ const gfx::Rect& rect,
+ ScrollbarOverlayStyle style) const {
gfx::Rect thumb_rect(rect);
+ SkColor thumb_color;
if (IsOverlayScrollbarEnabled()) {
// In overlay mode, draw a stroke (border).
- const int kStrokeWidth = 1;
+ const int kStrokeWidth = kMDScrollbarStrokeWidth;
SkAlpha stroke_alpha = gfx::Tween::IntValueBetween(
progress, ThumbStrokeAlphaForState(start_state),
ThumbStrokeAlphaForState(end_state));
SkPaint paint;
- paint.setColor(SkColorSetA(SK_ColorWHITE, stroke_alpha));
+ paint.setColor(SkColorSetA(kMDScrollbarStrokeColor, stroke_alpha));
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(kStrokeWidth);
+
+ // When stroking in skia, there's some surprising behavior so we need to
+ // inset the right and bottom edges first. See the discussion here:
+ // https://groups.google.com/forum/#!topic/skia-discuss/HGZcc3Z7w1Q
+ thumb_rect.Inset(0, 0, kStrokeWidth, kStrokeWidth);
canvas->drawIRect(gfx::RectToSkIRect(thumb_rect), paint);
- thumb_rect.Inset(kStrokeWidth, kStrokeWidth, kStrokeWidth, kStrokeWidth);
+ // Inset the top and left edges for filling in the stroke below.
+ thumb_rect.Inset(kStrokeWidth, kStrokeWidth, 0, 0);
+
+ // thumb_color = kMDScrollbarThumbColor;
+ if (style == ScrollbarOverlayStyleLight)
+ thumb_color = SK_ColorWHITE;
+ else
+ thumb_color = SK_ColorBLACK;
} else {
// If there are no scrollbuttons then provide some padding so that the thumb
// doesn't touch the top of the track.
@@ -220,12 +243,14 @@ void NativeThemeAura::PaintScrollbarThumbStateTransition(
thumb_rect.Inset(kThumbPadding, extra_padding);
else
thumb_rect.Inset(extra_padding, kThumbPadding);
+
+ thumb_color = SK_ColorBLACK;
}
SkPaint paint;
SkAlpha alpha = gfx::Tween::IntValueBetween(
progress, ThumbAlphaForState(start_state), ThumbAlphaForState(end_state));
- paint.setColor(SkColorSetA(SK_ColorBLACK, alpha));
+ paint.setColor(SkColorSetA(thumb_color, alpha));
canvas->drawIRect(gfx::RectToSkIRect(thumb_rect), paint);
}

Powered by Google App Engine
This is Rietveld 408576698