From 3b13b37205887bc1d1a2753a4f0dab53463c513f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yi=C4=9Fit=20FINDIKLI?= Date: Wed, 3 Mar 2021 11:08:49 +0300 Subject: [PATCH] Fixed #8566 - Touch support for ColorPicker --- src/app/components/colorpicker/colorpicker.ts | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/src/app/components/colorpicker/colorpicker.ts b/src/app/components/colorpicker/colorpicker.ts index 5e8db9fae95..cd0706d4a8f 100755 --- a/src/app/components/colorpicker/colorpicker.ts +++ b/src/app/components/colorpicker/colorpicker.ts @@ -21,12 +21,12 @@ export const COLORPICKER_VALUE_ACCESSOR: any = { [@overlayAnimation]="{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}" [@.disabled]="inline === true" (@overlayAnimation.start)="onOverlayAnimationStart($event)" (@overlayAnimation.done)="onOverlayAnimationEnd($event)">
-
+
-
+
@@ -158,10 +158,28 @@ export class ColorPicker implements ControlValueAccessor, OnDestroy { this.pickHue(event); } - pickHue(event: MouseEvent) { + onHueTouchStart(event) { + if (this.disabled) { + return; + } + + this.hueDragging = true; + this.pickHue(event); + } + + onColorTouchStart(event) { + if (this.disabled) { + return; + } + + this.colorDragging = true; + this.pickColor(event); + } + + pickHue(event) { let top: number = this.hueViewChild.nativeElement.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); this.value = this.validateHSB({ - h: Math.floor(360 * (150 - Math.max(0, Math.min(150, (event.pageY - top)))) / 150), + h: Math.floor(360 * (150 - Math.max(0, Math.min(150, ((event.pageY || event.changedTouches[0].pageY) - top)))) / 150), s: this.value.s, b: this.value.b }); @@ -184,12 +202,32 @@ export class ColorPicker implements ControlValueAccessor, OnDestroy { this.pickColor(event); } - pickColor(event: MouseEvent) { + onMove(event) { + if (this.colorDragging) { + this.pickColor(event); + event.preventDefault(); + } + + if (this.hueDragging) { + this.pickHue(event); + event.preventDefault(); + } + } + + onDragEnd() { + this.colorDragging = false; + this.hueDragging = false; + + this.unbindDocumentMousemoveListener(); + this.unbindDocumentMouseupListener(); + } + + pickColor(event) { let rect = this.colorSelectorViewChild.nativeElement.getBoundingClientRect(); let top = rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); let left = rect.left + document.body.scrollLeft; - let saturation = Math.floor(100 * (Math.max(0, Math.min(150, (event.pageX - left)))) / 150); - let brightness = Math.floor(100 * (150 - Math.max(0, Math.min(150, (event.pageY - top)))) / 150); + let saturation = Math.floor(100 * (Math.max(0, Math.min(150, ((event.pageX || event.changedTouches[0].pageX)- left)))) / 150); + let brightness = Math.floor(100 * (150 - Math.max(0, Math.min(150, ((event.pageY || event.changedTouches[0].pageY) - top)))) / 150); this.value = this.validateHSB({ h: this.value.h, s: saturation,