fix: ora le forme sono drag&drop.
This commit is contained in:
1 parent
b06a0993d1
commit
56dcca57aa
1 file changed
+43
-7
@@ -1764,17 +1764,17 @@ const TicketDetailView = {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultW = 120;
|
// Interactive click-and-drag for rectangle, circle / ellipse, etc.
|
||||||
const defaultH = 80;
|
|
||||||
|
|
||||||
const newShapeObj = {
|
const newShapeObj = {
|
||||||
id: Date.now(),
|
id: Date.now(),
|
||||||
type: 'shape',
|
type: 'shape',
|
||||||
shapeType: shapeType,
|
shapeType: shapeType,
|
||||||
x: x - defaultW / 2,
|
startX: x,
|
||||||
y: y - defaultH / 2,
|
startY: y,
|
||||||
width: defaultW,
|
x: x,
|
||||||
height: defaultH,
|
y: y,
|
||||||
|
width: 0,
|
||||||
|
height: 0,
|
||||||
fillColor: fillColor,
|
fillColor: fillColor,
|
||||||
borderColor: borderColor,
|
borderColor: borderColor,
|
||||||
borderWidth: borderWidth
|
borderWidth: borderWidth
|
||||||
@@ -1782,6 +1782,8 @@ const TicketDetailView = {
|
|||||||
|
|
||||||
pageObjects.push(newShapeObj);
|
pageObjects.push(newShapeObj);
|
||||||
selectedObject = newShapeObj;
|
selectedObject = newShapeObj;
|
||||||
|
isResizingObj = true;
|
||||||
|
resizeHandleIndex = 99; // Dynamic 2D shape creation drag
|
||||||
redrawPageObjects();
|
redrawPageObjects();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1823,6 +1825,19 @@ const TicketDetailView = {
|
|||||||
const oldW = obj.width || 1;
|
const oldW = obj.width || 1;
|
||||||
const oldH = obj.height || 1;
|
const oldH = obj.height || 1;
|
||||||
|
|
||||||
|
if (obj.type === 'shape' && resizeHandleIndex === 99) {
|
||||||
|
// Dynamic creation box for rectangle, ellipse, etc.
|
||||||
|
const startX = obj.startX !== undefined ? obj.startX : obj.x;
|
||||||
|
const startY = obj.startY !== undefined ? obj.startY : obj.y;
|
||||||
|
|
||||||
|
obj.x = Math.min(startX, x);
|
||||||
|
obj.y = Math.min(startY, y);
|
||||||
|
obj.width = Math.abs(x - startX);
|
||||||
|
obj.height = Math.abs(y - startY);
|
||||||
|
redrawPageObjects();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (obj.type === 'shape' && (obj.shapeType === 'line' || obj.shapeType === 'arrow')) {
|
if (obj.type === 'shape' && (obj.shapeType === 'line' || obj.shapeType === 'arrow')) {
|
||||||
// Line / Arrow endpoint dragging
|
// Line / Arrow endpoint dragging
|
||||||
if (resizeHandleIndex === 0) { // Origin (P1: x, y)
|
if (resizeHandleIndex === 0) { // Origin (P1: x, y)
|
||||||
@@ -1976,6 +1991,26 @@ const TicketDetailView = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const stopDrawing = (e) => {
|
const stopDrawing = (e) => {
|
||||||
|
if (isResizingObj && selectedObject && selectedObject.type === 'shape') {
|
||||||
|
if (resizeHandleIndex === 99) {
|
||||||
|
if (selectedObject.width < 5 && selectedObject.height < 5) {
|
||||||
|
const defaultW = 120;
|
||||||
|
const defaultH = 80;
|
||||||
|
const startX = selectedObject.startX !== undefined ? selectedObject.startX : selectedObject.x;
|
||||||
|
const startY = selectedObject.startY !== undefined ? selectedObject.startY : selectedObject.y;
|
||||||
|
selectedObject.x = startX - defaultW / 2;
|
||||||
|
selectedObject.y = startY - defaultH / 2;
|
||||||
|
selectedObject.width = defaultW;
|
||||||
|
selectedObject.height = defaultH;
|
||||||
|
}
|
||||||
|
} else if (selectedObject.shapeType === 'line' || selectedObject.shapeType === 'arrow') {
|
||||||
|
if (Math.hypot(selectedObject.width, selectedObject.height) < 5) {
|
||||||
|
selectedObject.width = 120;
|
||||||
|
selectedObject.height = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (isDrawingStroke && pageObjects.length > 0) {
|
if (isDrawingStroke && pageObjects.length > 0) {
|
||||||
const activeObj = pageObjects[pageObjects.length - 1];
|
const activeObj = pageObjects[pageObjects.length - 1];
|
||||||
if (activeObj && activeObj.type === 'stroke') {
|
if (activeObj && activeObj.type === 'stroke') {
|
||||||
@@ -1990,6 +2025,7 @@ const TicketDetailView = {
|
|||||||
isDraggingObj = false;
|
isDraggingObj = false;
|
||||||
isResizingObj = false;
|
isResizingObj = false;
|
||||||
resizeHandleIndex = -1;
|
resizeHandleIndex = -1;
|
||||||
|
redrawPageObjects();
|
||||||
};
|
};
|
||||||
|
|
||||||
drawCanvas.onmouseup = stopDrawing;
|
drawCanvas.onmouseup = stopDrawing;
|
||||||
|
|||||||
Reference in new issue
Block a user