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

Unified Diff: ui/native_theme/native_theme_aura.cc

Issue 2421913002: Change Aura overlay scrollbars from solid color to painted scrollbars. (Closed)
Patch Set: Address pkasting@'s feedback 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 b6f47d402f4dc490dfe68bef799182ec07f9ac7e..a2628e2805d067a6f11ce3bd5b92ea2e098e855e 100644
--- a/ui/native_theme/native_theme_aura.cc
+++ b/ui/native_theme/native_theme_aura.cc
@@ -21,40 +21,33 @@
#include "ui/gfx/skia_util.h"
#include "ui/native_theme/common_theme.h"
#include "ui/native_theme/native_theme_switches.h"
+#include "ui/native_theme/overlay_scrollbar_constants_aura.h"
namespace ui {
namespace {
+// Constants for painting overlay scrollbars. Other properties needed outside
+// this painting code are defined in overlay_scrollbar_constants_aura.h.
+constexpr int kOverlayScrollbarStrokeWidth = 1;
+constexpr int kOverlayScrollbarMinimumLength = 12;
+constexpr SkAlpha kOverlayScrollbarAlphaNormal = 0x4D;
+constexpr SkAlpha kOverlayScrollbarAlphaHovered = 0x80;
+constexpr SkAlpha kOverlayScrollbarAlphaPressed = 0x80;
+const SkColor kOverlayScrollbarThumbColor = SkColorSetRGB(0x0, 0x0, 0x0);
Peter Kasting 2016/10/18 00:43:36 Nit: Use SK_ColorBLACK (and SK_ColorWHITE just bel
bokan 2016/10/18 20:34:49 Done.
+const SkColor kOverlayScrollbarStrokeColor = SkColorSetRGB(0xFF, 0xFF, 0xFF);
+
SkAlpha ThumbAlphaForState(NativeTheme::State state) {
bool overlay = IsOverlayScrollbarEnabled();
switch (state) {
case NativeTheme::kDisabled:
return 0x00;
case NativeTheme::kHovered:
- return overlay ? 0xB2 : 0x4D;
+ return overlay ? kOverlayScrollbarAlphaHovered : 0x4D;
case NativeTheme::kNormal:
- return overlay ? 0x8C : 0x33;
- case NativeTheme::kPressed:
- return overlay ? 0xB2 : 0x80;
- case NativeTheme::kNumStates:
- break;
- }
-
- NOTREACHED();
- return 0xFF;
-}
-
-SkAlpha ThumbStrokeAlphaForState(NativeTheme::State state) {
- DCHECK(IsOverlayScrollbarEnabled());
- switch (state) {
- case NativeTheme::kDisabled:
- return 0x00;
- case NativeTheme::kHovered:
+ return overlay ? kOverlayScrollbarAlphaNormal : 0x33;
case NativeTheme::kPressed:
- return 0x33;
- case NativeTheme::kNormal:
- return 0x26;
+ return overlay ? kOverlayScrollbarAlphaPressed : 0x80;
case NativeTheme::kNumStates:
break;
}
@@ -84,6 +77,11 @@ NativeThemeAura::NativeThemeAura() {
set_scrollbar_button_length(0);
#endif
+ if (IsOverlayScrollbarEnabled()) {
+ scrollbar_width_ =
+ kOverlayScrollbarThumbWidthPressed + kOverlayScrollbarStrokeWidth * 2;
+ }
+
// Images and alphas declarations assume the following order.
static_assert(kDisabled == 0, "states unexpectedly changed");
static_assert(kHovered == 1, "states unexpectedly changed");
@@ -197,19 +195,27 @@ void NativeThemeAura::PaintScrollbarThumbStateTransition(
double progress,
const gfx::Rect& rect) const {
gfx::Rect thumb_rect(rect);
+ SkColor thumb_color;
if (IsOverlayScrollbarEnabled()) {
// In overlay mode, draw a stroke (border).
- const int kStrokeWidth = 1;
+ constexpr int kStrokeWidth = kOverlayScrollbarStrokeWidth;
SkAlpha stroke_alpha = gfx::Tween::IntValueBetween(
- progress, ThumbStrokeAlphaForState(start_state),
- ThumbStrokeAlphaForState(end_state));
+ progress, ThumbAlphaForState(start_state),
+ ThumbAlphaForState(end_state));
SkPaint paint;
- paint.setColor(SkColorSetA(SK_ColorWHITE, stroke_alpha));
+ paint.setColor(SkColorSetA(kOverlayScrollbarStrokeColor, stroke_alpha));
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(kStrokeWidth);
- canvas->drawIRect(gfx::RectToSkIRect(thumb_rect), paint);
+ gfx::RectF stroke_rect(thumb_rect);
+ constexpr float kHalfStrokeWidth = kStrokeWidth / 2.f;
+ stroke_rect.Inset(kHalfStrokeWidth, kHalfStrokeWidth);
+ canvas->drawRect(gfx::RectFToSkRect(stroke_rect), paint);
aelias_OOO_until_Jul13 2016/10/18 20:37:00 As I mentioned on http://crbug.com/304869#c36, I t
+
+ // Inset the top and left edges for filling in the stroke below.
Peter Kasting 2016/10/18 00:43:36 Nit: Comment is inaccurate.
bokan 2016/10/18 20:34:49 Done.
thumb_rect.Inset(kStrokeWidth, kStrokeWidth, kStrokeWidth, kStrokeWidth);
Peter Kasting 2016/10/18 00:43:36 Nit: Just the two-arg version will work.
bokan 2016/10/18 20:34:49 Done.
+
+ thumb_color = kOverlayScrollbarThumbColor;
} else {
// If there are no scrollbuttons then provide some padding so that the thumb
// doesn't touch the top of the track.
@@ -220,12 +226,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);
}
@@ -239,4 +247,36 @@ void NativeThemeAura::PaintScrollbarCorner(SkCanvas* canvas,
canvas->drawIRect(RectToSkIRect(rect), paint);
}
+gfx::Size NativeThemeAura::GetPartSize(Part part,
+ State state,
+ const ExtraParams& extra) const {
+ if (IsOverlayScrollbarEnabled()) {
+ constexpr int minimum_length =
+ kOverlayScrollbarMinimumLength + 2 * kOverlayScrollbarStrokeWidth;
+
+ // Aura overlay scrollbars need a slight tweak from the base sizes.
+ switch (part) {
+ case kScrollbarDownArrow:
+ case kScrollbarUpArrow:
+ case kScrollbarLeftArrow:
+ case kScrollbarRightArrow:
+ case kScrollbarHorizontalTrack:
+ case kScrollbarVerticalTrack:
+ case kScrollbarHorizontalGripper:
+ case kScrollbarVerticalGripper:
+ // Aura overlay scrollbars only have a thumb.
+ NOTREACHED();
+ break;
+ case kScrollbarHorizontalThumb:
+ return gfx::Size(minimum_length, scrollbar_width_);
+ case kScrollbarVerticalThumb:
+ return gfx::Size(scrollbar_width_, minimum_length);
+ default:
+ break;
+ }
+ }
+
+ return NativeThemeBase::GetPartSize(part, state, extra);
+}
+
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698