diff --git a/assets/css/main.css b/assets/css/main.css index 4089917e..8e7dfc3c 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -2096,6 +2096,30 @@ ul.button-group.disabled > li, ul.button-group > li.disabled { width: 38%; padding: 0 5px 0 5px; } +.gradient-controls .gradient-rotation-knob { + user-select: none; + width: 75px; + height: 75px; +} +.gradient-controls .gradient-rotation-knob circle, +.gradient-controls .gradient-rotation-knob line { + stroke: var(--base-strong); + stroke-width: 1px; + cursor: pointer; +} +.gradient-controls .gradient-rotation-knob circle.center { + stroke-width: 1px; + fill: var(--base-strong); + stroke: none +} +.gradient-controls .gradient-rotation-knob circle.full { + fill: var(--base-strong); +} +.gradient-controls .gradient-rotation-knob-container { + padding-left: 20px; + padding-top: 10px; +} + .gradient-color-picker { float: left; width: 60%; diff --git a/src/ui/components/editor/AdvancedColorEditor.vue b/src/ui/components/editor/AdvancedColorEditor.vue index 1ee9e5a1..7a66f7b5 100644 --- a/src/ui/components/editor/AdvancedColorEditor.vue +++ b/src/ui/components/editor/AdvancedColorEditor.vue @@ -28,7 +28,7 @@

- +
@@ -76,14 +76,27 @@
Direction
- + + +
+
+ + + + + + + + +
+
Invert
- +
@@ -100,6 +113,7 @@ import {parseColor, encodeColor} from '../../colors'; import utils from '../../utils'; import StoreUtils from '../../store/StoreUtils'; import myMath from '../../myMath'; +import { getPageCoordsFromEvent } from '../../dragndrop'; /** @@ -133,7 +147,7 @@ export default { disabled : {type: Boolean, default : false}, }, - components: {'color-picker': VueColor.Chrome, Modal, NumberTextfield}, + components: {'ColorPicker': VueColor.Chrome, Modal, NumberTextfield}, beforeMount() { this.updateCurrentColor(this.value); @@ -186,6 +200,41 @@ export default { }, methods: { + onGradientRotationKnobMouseDown(originalEvent) { + let mouseMoveEventName = originalEvent.touches ? 'touchmove' : 'mousemove'; + let mouseUpEventName = originalEvent.touches ? 'touchend' : 'mouseup'; + + const onMouseMove = (event) => { + if (event.buttons === 0) { + reset(event); + return; + } + const rect = this.$refs.gradientRotationKnob.getBoundingClientRect(); + const coords = getPageCoordsFromEvent(event); + const x = coords.pageX - rect.left - rect.width/2; + const y = coords.pageY - rect.top - rect.height/2; + if (Math.abs(x) + Math.abs(y) < 1) { + return; + } + + this.color.gradient.direction = Math.round(myMath.fullAngleForVector(x, y) * 180 / Math.PI) + 90; + this.emitChange(); + }; + const onMouseUp = (event) => { + reset(); + onMouseMove(event); + }; + + const reset = () => { + document.removeEventListener(mouseMoveEventName, onMouseMove); + document.removeEventListener(mouseUpEventName, onMouseUp); + }; + document.addEventListener(mouseMoveEventName, onMouseMove); + document.addEventListener(mouseUpEventName, onMouseUp); + + onMouseMove(originalEvent); + }, + showModal() { if (this.disabled) { return; diff --git a/src/ui/dragndrop.js b/src/ui/dragndrop.js index 40c9cde7..73e0d693 100644 --- a/src/ui/dragndrop.js +++ b/src/ui/dragndrop.js @@ -1,4 +1,4 @@ -function getPageCoordsFromEvent(event) { +export function getPageCoordsFromEvent(event) { if (event.changedTouches && event.changedTouches.length > 0) { return { pageX: event.changedTouches[0].pageX,