|
|
|
|
@ -560,44 +560,20 @@ export class App extends React.Component<any, AppState> {
@@ -560,44 +560,20 @@ export class App extends React.Component<any, AppState> {
|
|
|
|
|
if ( |
|
|
|
|
// if no ClipboardEvent supplied, assume we're pasting via contextMenu
|
|
|
|
|
// thus these checks don't make sense
|
|
|
|
|
!event || |
|
|
|
|
(elementUnderCursor instanceof HTMLCanvasElement && |
|
|
|
|
!isWritableElement(target)) |
|
|
|
|
event && |
|
|
|
|
(!(elementUnderCursor instanceof HTMLCanvasElement) || |
|
|
|
|
isWritableElement(target)) |
|
|
|
|
) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
const data = await getClipboardContent(event); |
|
|
|
|
if (data.elements) { |
|
|
|
|
this.addElementsFromPaste(data.elements); |
|
|
|
|
} else if (data.text) { |
|
|
|
|
const { x, y } = viewportCoordsToSceneCoords( |
|
|
|
|
{ clientX: cursorX, clientY: cursorY }, |
|
|
|
|
this.state, |
|
|
|
|
this.canvas, |
|
|
|
|
window.devicePixelRatio, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
const element = newTextElement({ |
|
|
|
|
x: x, |
|
|
|
|
y: y, |
|
|
|
|
strokeColor: this.state.currentItemStrokeColor, |
|
|
|
|
backgroundColor: this.state.currentItemBackgroundColor, |
|
|
|
|
fillStyle: this.state.currentItemFillStyle, |
|
|
|
|
strokeWidth: this.state.currentItemStrokeWidth, |
|
|
|
|
roughness: this.state.currentItemRoughness, |
|
|
|
|
opacity: this.state.currentItemOpacity, |
|
|
|
|
text: data.text, |
|
|
|
|
font: this.state.currentItemFont, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
globalSceneState.replaceAllElements([ |
|
|
|
|
...globalSceneState.getAllElements(), |
|
|
|
|
element, |
|
|
|
|
]); |
|
|
|
|
this.setState({ selectedElementIds: { [element.id]: true } }); |
|
|
|
|
history.resumeRecording(); |
|
|
|
|
this.addTextFromPaste(data.text); |
|
|
|
|
} |
|
|
|
|
this.selectShapeTool("selection"); |
|
|
|
|
event?.preventDefault(); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
@ -639,6 +615,35 @@ export class App extends React.Component<any, AppState> {
@@ -639,6 +615,35 @@ export class App extends React.Component<any, AppState> {
|
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
private addTextFromPaste(text: any) { |
|
|
|
|
const { x, y } = viewportCoordsToSceneCoords( |
|
|
|
|
{ clientX: cursorX, clientY: cursorY }, |
|
|
|
|
this.state, |
|
|
|
|
this.canvas, |
|
|
|
|
window.devicePixelRatio, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
const element = newTextElement({ |
|
|
|
|
x: x, |
|
|
|
|
y: y, |
|
|
|
|
strokeColor: this.state.currentItemStrokeColor, |
|
|
|
|
backgroundColor: this.state.currentItemBackgroundColor, |
|
|
|
|
fillStyle: this.state.currentItemFillStyle, |
|
|
|
|
strokeWidth: this.state.currentItemStrokeWidth, |
|
|
|
|
roughness: this.state.currentItemRoughness, |
|
|
|
|
opacity: this.state.currentItemOpacity, |
|
|
|
|
text: text, |
|
|
|
|
font: this.state.currentItemFont, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
globalSceneState.replaceAllElements([ |
|
|
|
|
...globalSceneState.getAllElements(), |
|
|
|
|
element, |
|
|
|
|
]); |
|
|
|
|
this.setState({ selectedElementIds: { [element.id]: true } }); |
|
|
|
|
history.resumeRecording(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Collaboration
|
|
|
|
|
|
|
|
|
|
setAppState = (obj: any) => { |
|
|
|
|
|