From e8097599c7728bf733c3f47e80c7d0140cfe3363 Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Thu, 10 Jun 2021 19:06:43 +0530 Subject: [PATCH 1/7] #584 the select button changes when working on a path --- src/editor/Editor.js | 9 ++------- src/editor/panels/TopPanel.js | 6 +++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/editor/Editor.js b/src/editor/Editor.js index 39234007..5c296d13 100644 --- a/src/editor/Editor.js +++ b/src/editor/Editor.js @@ -346,13 +346,8 @@ class Editor extends EditorStartup { $id('path_node_panel').style.display = (editmode) ? 'block' : 'none'; if (editmode) { // Change select icon - const elements = document.getElementsByClassName("tool_button_current"); - Array.from(elements).forEach(function (element) { - element.classList.add('tool_button_current'); - element.classList.remove('tool_button'); - }); - $id('tool_select').classList.add('tool_button_current'); - $id('tool_select').classList.remove('tool_button'); + $id('tool_path').pressed = false; + $id('tool_select').pressed = true; this.multiselected = false; if (elems.length) { this.selectedElement = elems[0]; diff --git a/src/editor/panels/TopPanel.js b/src/editor/panels/TopPanel.js index c8a03715..8a220856 100644 --- a/src/editor/panels/TopPanel.js +++ b/src/editor/panels/TopPanel.js @@ -634,8 +634,8 @@ class TopPanel { * @returns {void} */ linkControlPoints() { - const linked = $id("tool_node_link").pressed; - $id("tool_node_link").pressed = !linked; + $id("tool_node_link").pressed = ($id("tool_node_link").pressed) ? false : true; + const linked = ($id("tool_node_link").pressed) ? true : false; this.path.linkControlPoints(linked); } @@ -968,7 +968,7 @@ class TopPanel {
- +
From 86f70db5710479d7416d584296cb6de4e88aaec5 Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Fri, 11 Jun 2021 11:31:47 +0530 Subject: [PATCH 2/7] #584 icon change issue fixed --- src/editor/Editor.js | 3 ++- src/editor/panels/TopPanel.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/editor/Editor.js b/src/editor/Editor.js index 5c296d13..1e25086f 100644 --- a/src/editor/Editor.js +++ b/src/editor/Editor.js @@ -348,13 +348,14 @@ class Editor extends EditorStartup { // Change select icon $id('tool_path').pressed = false; $id('tool_select').pressed = true; + $id('tool_select').setAttribute('src', './images/select_node.svg'); this.multiselected = false; if (elems.length) { this.selectedElement = elems[0]; } } else { setTimeout(() => { - // setIcon('#tool_select', 'select'); + $id('tool_select').setAttribute('src', './images/select.svg'); }, 1000); } } diff --git a/src/editor/panels/TopPanel.js b/src/editor/panels/TopPanel.js index 8a220856..51507bf2 100644 --- a/src/editor/panels/TopPanel.js +++ b/src/editor/panels/TopPanel.js @@ -968,7 +968,7 @@ class TopPanel {
- +
From 9ba9d7ef7b3c94bc21a5763e56f187d3ea314dbc Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Fri, 11 Jun 2021 12:15:26 +0530 Subject: [PATCH 3/7] #584 pressed modified and committed --- src/editor/panels/TopPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editor/panels/TopPanel.js b/src/editor/panels/TopPanel.js index 51507bf2..32aa5523 100644 --- a/src/editor/panels/TopPanel.js +++ b/src/editor/panels/TopPanel.js @@ -968,7 +968,7 @@ class TopPanel {
- +
From 537b98f7cbe6ff968ae1b07bb6fcb67ad2fc1273 Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Fri, 11 Jun 2021 13:23:57 +0530 Subject: [PATCH 4/7] #584 attributeChangedCallback changed callback changes --- src/editor/components/seButton.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/editor/components/seButton.js b/src/editor/components/seButton.js index 7715d4fe..52e18f7b 100644 --- a/src/editor/components/seButton.js +++ b/src/editor/components/seButton.js @@ -87,10 +87,10 @@ export class ToolButton extends HTMLElement { this.$img.setAttribute('src', newValue); break; case 'pressed': - if (newValue) { - this.$div.classList.add('pressed'); - } else { + if (newValue === null) { this.$div.classList.remove('pressed'); + } else { + this.$div.classList.add('pressed'); } break; case 'size': @@ -145,7 +145,7 @@ export class ToolButton extends HTMLElement { if (value) { this.setAttribute('pressed', 'true'); } else { - this.removeAttribute('pressed', ''); + this.removeAttribute('pressed'); } } /** @@ -165,7 +165,7 @@ export class ToolButton extends HTMLElement { if (value) { this.setAttribute('disabled', 'true'); } else { - this.removeAttribute('disabled', ''); + this.removeAttribute('disabled'); } } /** From c7c028d3358b5e38be4a1e3103141611843a1ba3 Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Fri, 11 Jun 2021 20:00:15 +0530 Subject: [PATCH 5/7] #73 Panning won't stop when mouseup occurs outside drawing area issue fixed --- src/svgcanvas/event.js | 13 +++++++++++++ src/svgcanvas/svgcanvas.js | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/svgcanvas/event.js b/src/svgcanvas/event.js index 0b973c3e..5283a9d8 100644 --- a/src/svgcanvas/event.js +++ b/src/svgcanvas/event.js @@ -528,6 +528,19 @@ export const mouseMoveEvent = function (evt) { }); }; // mouseMove() +/** +* +* @returns {void} +*/ +export const mouseOutEvent = function () { + const svgCanvas = eventContext_.getCanvas(); + const { $id } = svgCanvas; + if(eventContext_.getCurrentMode() !== 'select' && eventContext_.getStarted()) { + const event = new Event("mouseup"); + $id('svgcanvas').dispatchEvent(event); + } +}; + // - in create mode, the element's opacity is set properly, we create an InsertElementCommand // and store it on the Undo stack // - in move/resize mode, the element's attributes which were affected by the move/resize are diff --git a/src/svgcanvas/svgcanvas.js b/src/svgcanvas/svgcanvas.js index 3998e52a..3ba97f4c 100644 --- a/src/svgcanvas/svgcanvas.js +++ b/src/svgcanvas/svgcanvas.js @@ -39,7 +39,7 @@ import { init as textActionsInit, textActionsMethod } from './text-actions.js'; import { - init as eventInit, mouseMoveEvent, mouseUpEvent, + init as eventInit, mouseMoveEvent, mouseUpEvent, mouseOutEvent, dblClickEvent, mouseDownEvent, DOMMouseScrollEvent } from './event.js'; import { init as jsonInit, getJsonFromSvgElements, addSVGElementsFromJson } from './json.js'; @@ -1313,6 +1313,7 @@ class SvgCanvas { * @returns {void} */ const mouseUp = mouseUpEvent; + const mouseOut = mouseOutEvent; const dblClick = dblClickEvent; @@ -1329,6 +1330,7 @@ class SvgCanvas { container.addEventListener('click', handleLinkInCanvas); container.addEventListener('dblclick', dblClick); container.addEventListener('mouseup', mouseUp); + container.addEventListener('mouseleave', mouseOut); // TODO(rafaelcastrocouto): User preference for shift key and zoom factor container.addEventListener('mousewheel', DOMMouseScrollEvent); From 638df11ec2a39e668d2ddb8c77ef542cf2404617 Mon Sep 17 00:00:00 2001 From: agriyadev5 Date: Tue, 6 Jul 2021 13:00:55 +0530 Subject: [PATCH 6/7] #546 ungrouping issue fixed --- src/svgcanvas/selected-elem.js | 11 +++++++---- src/svgcanvas/svg-exec.js | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/svgcanvas/selected-elem.js b/src/svgcanvas/selected-elem.js index 0fe11266..9b5014dd 100644 --- a/src/svgcanvas/selected-elem.js +++ b/src/svgcanvas/selected-elem.js @@ -571,16 +571,19 @@ export const pushGroupProperty = function (g, undoable) { // Clone the group's filter gfilter = drawing.copyElem(gfilter); findDefs().append(gfilter); + + // const filterElem = getRefElem(gfilter); + const blurElem = getFeGaussianBlur(gfilter); + // Change this in future for different filters + const suffix = (blurElem?.tagName === 'feGaussianBlur') ? 'blur' : 'filter'; + gfilter.id = elem.id + '_' + suffix; + elementContext_.changeSelectedAttribute('filter', 'url(#' + gfilter.id + ')', [ elem ]); } } else { gfilter = getRefElem(elem.getAttribute('filter')); } // const filterElem = getRefElem(gfilter); const blurElem = getFeGaussianBlur(gfilter); - // Change this in future for different filters - const suffix = (blurElem?.tagName === 'feGaussianBlur') ? 'blur' : 'filter'; - gfilter.id = elem.id + '_' + suffix; - elementContext_.changeSelectedAttribute('filter', 'url(#' + gfilter.id + ')', [ elem ]); // Update blur value if (cblur) { diff --git a/src/svgcanvas/svg-exec.js b/src/svgcanvas/svg-exec.js index 3052deb3..3d75c42c 100644 --- a/src/svgcanvas/svg-exec.js +++ b/src/svgcanvas/svg-exec.js @@ -368,6 +368,28 @@ export const setSvgString = function (xmlString, preventUndo) { svgCanvas.embedImage(val); } }); + // Duplicate id replace changes + const nodes = content.querySelectorAll('[id]'); + const ids = {}; + const totalNodes = nodes.length; + + for(let i=0; i { + if (value > 1) { + const nodes = content.querySelectorAll('[id="'+key+'"]'); + for(let i=1; i Date: Tue, 6 Jul 2021 17:56:28 +0530 Subject: [PATCH 7/7] #543 if you move the group and try to undo the move, the text does not undo correctly issue fixed --- src/svgcanvas/undo.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/svgcanvas/undo.js b/src/svgcanvas/undo.js index d0c0ec5a..d61e7809 100644 --- a/src/svgcanvas/undo.js +++ b/src/svgcanvas/undo.js @@ -98,6 +98,24 @@ export const getUndoManager = function () { // // Ok to replace above with this? `sib.before(elem);` // } // } + if (cmd.elem.tagName === 'text'){ + const [ dx, dy ] = [ cmd.newValues.x - cmd.oldValues.x, + cmd.newValues.y - cmd.oldValues.y ]; + + const tspans = cmd.elem.children; + + for (let i = 0; i < tspans.length; i++){ + let x = +tspans[i].getAttribute('x'); + let y = +tspans[i].getAttribute('y'); + + const unapply = (eventType === EventTypes.AFTER_UNAPPLY); + x = unapply? x - dx: x + dx; + y = unapply? y - dy: y + dy; + + tspans[i].setAttribute('x', x); + tspans[i].setAttribute('y', y); + } + } } } }