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

Unified Diff: ui/native_theme/native_theme_aura.cc

Issue 2421913002: Change Aura overlay scrollbars from solid color to painted scrollbars. (Closed)
Patch Set: Rebase 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
« no previous file with comments | « ui/native_theme/native_theme_aura.h ('k') | ui/native_theme/native_theme_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..d03a0d3211edc0f216a157fa5ff93b7ce22cab68 100644
--- a/ui/native_theme/native_theme_aura.cc
+++ b/ui/native_theme/native_theme_aura.cc
@@ -8,6 +8,7 @@
#include <utility>
#include "base/logging.h"
+#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "ui/base/layout.h"
#include "ui/base/material_design/material_design_controller.h"
@@ -21,40 +22,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;
+constexpr SkColor kOverlayScrollbarThumbColor = SK_ColorBLACK;
+constexpr SkColor kOverlayScrollbarStrokeColor = SK_ColorWHITE;
+
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;
+ return overlay ? kOverlayScrollbarAlphaNormal : 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:
- case NativeTheme::kPressed:
- return 0x33;
- case NativeTheme::kNormal:
- return 0x26;
+ return overlay ? kOverlayScrollbarAlphaPressed : 0x80;
case NativeTheme::kNumStates:
break;
}
@@ -84,6 +78,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");
@@ -196,20 +195,28 @@ void NativeThemeAura::PaintScrollbarThumbStateTransition(
State end_state,
double progress,
const gfx::Rect& rect) const {
+ TRACE_EVENT0("blink", "NativeThemeAura::PaintScrollbarThumbStateTransition");
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);
- thumb_rect.Inset(kStrokeWidth, kStrokeWidth, kStrokeWidth, kStrokeWidth);
+ gfx::RectF stroke_rect(thumb_rect);
+ constexpr float kHalfStrokeWidth = kStrokeWidth / 2.f;
+ stroke_rect.Inset(kHalfStrokeWidth, kHalfStrokeWidth);
+ canvas->drawRect(gfx::RectFToSkRect(stroke_rect), paint);
+
+ // Inset the all the edges edges so we fill-in the stroke below.
+ thumb_rect.Inset(kStrokeWidth, kStrokeWidth);
+ 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 +227,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 +248,31 @@ 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 kScrollbarHorizontalThumb:
+ return gfx::Size(minimum_length, scrollbar_width_);
+ case kScrollbarVerticalThumb:
+ return gfx::Size(scrollbar_width_, minimum_length);
+ default:
+ // TODO(bokan): We should probably make sure code using overlay
+ // scrollbars isn't asking for part sizes that don't exist. This
+ // currently breaks in Views layout code which indicates they aren't
+ // overlay aware yet. The Views code should be fixed and either this
+ // branch return 0 for parts that don't exist or assert NOTREACHED.
+ // crbug.com/657159.
+ break;
+ }
+ }
+
+ return NativeThemeBase::GetPartSize(part, state, extra);
+}
+
} // namespace ui
« no previous file with comments | « ui/native_theme/native_theme_aura.h ('k') | ui/native_theme/native_theme_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698