From 6dbb387b1d9c3272ffb5c19d3a777bd5f2a661ac Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Fri, 17 Nov 2017 17:48:07 +0100 Subject: [PATCH] fix: blurry ripples for slide-toggle, radio, checkbox in MS edge. Fixes blurry ripples in the slide-toggle, radio and checkbox in Microsoft Edge. The ripples have been blurry because the `border-radius` in an absolute position seems to cause render problems for Edge. Since the ripples are circular by default, the `border-radius` can be removed and the ripple radius just needs to be set to the value that has been set through CSS before this change. This fixes the blurry ripples in MS Edge and might also improve rendering-stability of the ripples. Fixes #8392 --- src/lib/checkbox/checkbox.html | 5 ++++- src/lib/checkbox/checkbox.scss | 11 +++++------ src/lib/checkbox/checkbox.ts | 6 +++++- src/lib/radio/radio.html | 5 ++++- src/lib/radio/radio.scss | 11 +++++------ src/lib/radio/radio.ts | 6 +++++- src/lib/slide-toggle/slide-toggle.html | 6 ++++-- src/lib/slide-toggle/slide-toggle.scss | 1 - src/lib/slide-toggle/slide-toggle.ts | 6 +++++- 9 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/lib/checkbox/checkbox.html b/src/lib/checkbox/checkbox.html index e706b5c2940f..e1691a3d9955 100644 --- a/src/lib/checkbox/checkbox.html +++ b/src/lib/checkbox/checkbox.html @@ -18,7 +18,10 @@
+ [matRippleRadius]="_rippleConfig.radius" + [matRippleSpeedFactor]="_rippleConfig.speedFactor" + [matRippleCentered]="_rippleConfig.centered"> +
void = () => {}; + /** Ripple configuration for the mouse ripples and focus indicators. */ + private _rippleConfig: RippleConfig = {centered: true, radius: 25, speedFactor: 1.5}; + /** Reference to the focused state ripple. */ private _focusRipple: RippleRef | null; @@ -336,7 +340,7 @@ export class MatCheckbox extends _MatCheckboxMixinBase implements ControlValueAc /** Function is called whenever the focus changes for the input element. */ private _onInputFocusChange(focusOrigin: FocusOrigin) { if (!this._focusRipple && focusOrigin === 'keyboard') { - this._focusRipple = this._ripple.launch(0, 0, {persistent: true, centered: true}); + this._focusRipple = this._ripple.launch(0, 0, {persistent: true, ...this._rippleConfig}); } else if (!focusOrigin) { this._removeFocusRipple(); this.onTouched(); diff --git a/src/lib/radio/radio.html b/src/lib/radio/radio.html index bd68e10b34ff..4c77e164b2a2 100644 --- a/src/lib/radio/radio.html +++ b/src/lib/radio/radio.html @@ -8,7 +8,10 @@
+ [matRippleCentered]="_rippleConfig.centered" + [matRippleRadius]="_rippleConfig.radius" + [matRippleSpeedFactor]="_rippleConfig.speedFactor"> +
+ [matRippleDisabled]="disableRipple || disabled" + [matRippleCentered]="_rippleConfig.centered" + [matRippleRadius]="_rippleConfig.radius" + [matRippleSpeedFactor]="_rippleConfig.speedFactor"> diff --git a/src/lib/slide-toggle/slide-toggle.scss b/src/lib/slide-toggle/slide-toggle.scss index 8fd0e11da000..80b714f95b89 100644 --- a/src/lib/slide-toggle/slide-toggle.scss +++ b/src/lib/slide-toggle/slide-toggle.scss @@ -160,7 +160,6 @@ $mat-slide-toggle-bar-track-width: $mat-slide-toggle-bar-width - $mat-slide-togg left: $mat-slide-toggle-thumb-size / 2 - $mat-slide-toggle-ripple-radius; height: $mat-slide-toggle-ripple-radius * 2; width: $mat-slide-toggle-ripple-radius * 2; - border-radius: 50%; z-index: 1; pointer-events: none; } diff --git a/src/lib/slide-toggle/slide-toggle.ts b/src/lib/slide-toggle/slide-toggle.ts index 7d0110bbde97..c3cb1cbda2c6 100644 --- a/src/lib/slide-toggle/slide-toggle.ts +++ b/src/lib/slide-toggle/slide-toggle.ts @@ -38,6 +38,7 @@ import { mixinDisabled, mixinDisableRipple, mixinTabIndex, + RippleConfig, RippleRef, } from '@angular/material/core'; @@ -95,6 +96,9 @@ export class MatSlideToggle extends _MatSlideToggleMixinBase implements OnDestro private _required: boolean = false; private _checked: boolean = false; + /** Ripple configuration for the mouse ripples and focus indicators. */ + private _rippleConfig: RippleConfig = {centered: true, radius: 23, speedFactor: 1.5}; + /** Reference to the focus state ripple. */ private _focusRipple: RippleRef | null; @@ -232,7 +236,7 @@ export class MatSlideToggle extends _MatSlideToggleMixinBase implements OnDestro private _onInputFocusChange(focusOrigin: FocusOrigin) { if (!this._focusRipple && focusOrigin === 'keyboard') { // For keyboard focus show a persistent ripple as focus indicator. - this._focusRipple = this._ripple.launch(0, 0, {persistent: true, centered: true}); + this._focusRipple = this._ripple.launch(0, 0, {persistent: true, ...this._rippleConfig}); } else if (!focusOrigin) { this.onTouched();