From fa993f7e7b075843c834a5ab545242b63599640b Mon Sep 17 00:00:00 2001 From: paul Date: Fri, 13 Sep 2024 16:03:58 +0530 Subject: [PATCH] working on toolbar --- src/App.js | 2 +- src/canvas/canvas.js | 96 ++++++++++++--------- src/canvas/{ => fabricjs_test}/main.js | 2 +- src/canvas/{ => fabricjs_test}/mainClass.js | 0 src/canvas/toolbar.js | 39 +++++++++ src/canvas/widgets/base.js | 10 +++ src/sidebar/sidebar.js | 5 +- src/utils/common.js | 11 +++ 8 files changed, 118 insertions(+), 47 deletions(-) rename src/canvas/{ => fabricjs_test}/main.js (99%) rename src/canvas/{ => fabricjs_test}/mainClass.js (100%) create mode 100644 src/canvas/toolbar.js diff --git a/src/App.js b/src/App.js index 8b4b232..099bf56 100644 --- a/src/App.js +++ b/src/App.js @@ -43,7 +43,7 @@ function App() { content: setSidebarWidgets(widgets)}/> }, { - name: "Extensions", + name: "Plugins", icon: , content: <> }, diff --git a/src/canvas/canvas.js b/src/canvas/canvas.js index 76cb632..d790ae8 100644 --- a/src/canvas/canvas.js +++ b/src/canvas/canvas.js @@ -10,6 +10,7 @@ import Widget from "./widgets/base" import Cursor from "./constants/cursor" import { UID } from "../utils/uid" import { removeDuplicateObjects } from "../utils/common" +import CanvasToolBar from "./toolbar" const CanvasModes = { @@ -50,10 +51,11 @@ class Canvas extends React.Component { isPanning: false, currentTranslate: { x: 0, y: 0 }, canvasSize: { width: 500, height: 500 }, - contextMenuItems: [] - } + contextMenuItems: [], + toolbarOpen: true, - this.selectedWidgets = [] + selectedWidgets: [] + } this._onWidgetListUpdated = onWidgetListUpdated // a function callback when the widget is added to the canvas @@ -118,12 +120,6 @@ class Canvas extends React.Component { this.canvasContainerRef.current.addEventListener("mouseup", this.mouseUpEvent) this.canvasContainerRef.current.addEventListener("mousemove", this.mouseMoveEvent) - - // this.canvasRef.current.addEventListener("selection:created", () => { - // console.log("selected") - // this.currentMode = Modes.DEFAULT - // }) - this.canvasContainerRef.current.addEventListener('wheel', (event) => { this.wheelZoom(event) }) @@ -163,15 +159,20 @@ class Canvas extends React.Component { // if the widget is selected don't pan, instead move the widget if (!selectedWidget._disableSelection){ - const selectedLength = this.selectedWidgets.length + const selectedLength = this.state.selectedWidgets.length - if (selectedLength === 0 || (selectedLength === 1 && selectedWidget.__id !== this.selectedWidgets[0].__id)){ - this.selectedWidgets[0]?.deSelect() // deselect the previous widget before adding the new one - this.selectedWidgets[0]?.setZIndex(0) + if (selectedLength === 0 || (selectedLength === 1 && selectedWidget.__id !== this.state.selectedWidgets[0].__id)){ + this.state.selectedWidgets[0]?.deSelect() // deselect the previous widget before adding the new one + this.state.selectedWidgets[0]?.setZIndex(0) selectedWidget.setZIndex(1000) selectedWidget.select() - this.selectedWidgets[0] = selectedWidget + + this.setState({ + selectedWidgets: [selectedWidget] + }) + + console.log("selected") } this.currentMode = CanvasModes.MOVE_WIDGET } @@ -187,7 +188,8 @@ class Canvas extends React.Component { } this.setState({ - contextMenuItems: [] + contextMenuItems: [], + toolbarOpen: true }) // this.setState({ // showContextMenu: false @@ -195,13 +197,16 @@ class Canvas extends React.Component { }else if (event.button === 2){ //right click - if (this.selectedWidgets.length > 0 && this.selectedWidgets[0].__id !== selectedWidget.__id){ + if (this.state.selectedWidgets.length > 0 && this.state.selectedWidgets[0].__id !== selectedWidget.__id){ this.clearSelections() } if (selectedWidget) - this.selectedWidgets[0] = selectedWidget - console.log("renaming: ", selectedWidget) + + this.setState({ + selectedWidget: [selectedWidget] + }) + this.setState({ contextMenuItems: [ { @@ -229,8 +234,7 @@ class Canvas extends React.Component { const deltaX = event.clientX - this.mousePos.x const deltaY = event.clientY - this.mousePos.y - - if (this.selectedWidgets.length === 0){ + if (this.state.selectedWidgets.length === 0){ // if there aren't any selected widgets, then pan the canvas this.setState(prevState => ({ currentTranslate: { @@ -241,7 +245,7 @@ class Canvas extends React.Component { }else{ // update the widgets position - this.selectedWidgets.forEach(widget => { + this.state.selectedWidgets.forEach(widget => { const {x, y} = widget.getPos() const newPosX = x + (deltaX/this.state.zoom) // account for the zoom, since the widget is relative to canvas @@ -363,7 +367,11 @@ class Canvas extends React.Component { this.getActiveObjects().forEach(widget => { widget.current?.deSelect() }) - this.selectedWidgets = [] + + this.setState({ + selectedWidgets: [] + }) + } /** @@ -420,11 +428,11 @@ class Canvas extends React.Component { return {id, widgetRef} } - deleteSelectedWidgets(widgets){ + deleteSelectedWidgets(widgets=[]){ - let activeWidgets = removeDuplicateObjects([...widgets, ...this.selectedWidgets], "__id") - console.log("active widget: ", widgets, activeWidgets) + let activeWidgets = removeDuplicateObjects([...widgets, ...this.state.selectedWidgets], "__id") + const widgetIds = activeWidgets.map(widget => widget.__id) for (let widgetId of widgetIds){ @@ -489,30 +497,32 @@ class Canvas extends React.Component {