|
@@ -330,6 +330,7 @@ import {
|
|
|
getContainerElement,
|
|
|
getDefaultLineHeight,
|
|
|
getLineHeightInPx,
|
|
|
+ getMinTextElementWidth,
|
|
|
isMeasureTextSupported,
|
|
|
isValidTextContainer,
|
|
|
measureText,
|
|
@@ -1696,6 +1697,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
canvas={this.interactiveCanvas}
|
|
|
elementsMap={elementsMap}
|
|
|
visibleElements={visibleElements}
|
|
|
+ allElementsMap={allElementsMap}
|
|
|
selectedElements={selectedElements}
|
|
|
sceneNonce={sceneNonce}
|
|
|
selectionNonce={
|
|
@@ -4718,6 +4720,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
sceneY,
|
|
|
insertAtParentCenter = true,
|
|
|
container,
|
|
|
+ autoEdit = true,
|
|
|
}: {
|
|
|
/** X position to insert text at */
|
|
|
sceneX: number;
|
|
@@ -4726,6 +4729,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
/** whether to attempt to insert at element center if applicable */
|
|
|
insertAtParentCenter?: boolean;
|
|
|
container?: ExcalidrawTextContainer | null;
|
|
|
+ autoEdit?: boolean;
|
|
|
}) => {
|
|
|
let shouldBindToContainer = false;
|
|
|
|
|
@@ -4858,13 +4862,16 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- this.setState({
|
|
|
- editingElement: element,
|
|
|
- });
|
|
|
-
|
|
|
- this.handleTextWysiwyg(element, {
|
|
|
- isExistingElement: !!existingTextElement,
|
|
|
- });
|
|
|
+ if (autoEdit || existingTextElement || container) {
|
|
|
+ this.handleTextWysiwyg(element, {
|
|
|
+ isExistingElement: !!existingTextElement,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.setState({
|
|
|
+ draggingElement: element,
|
|
|
+ multiElement: null,
|
|
|
+ });
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
private handleCanvasDoubleClick = (
|
|
@@ -5899,7 +5906,6 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
|
|
|
if (this.state.activeTool.type === "text") {
|
|
|
this.handleTextOnPointerDown(event, pointerDownState);
|
|
|
- return;
|
|
|
} else if (
|
|
|
this.state.activeTool.type === "arrow" ||
|
|
|
this.state.activeTool.type === "line"
|
|
@@ -6020,6 +6026,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
);
|
|
|
const clicklength =
|
|
|
event.timeStamp - (this.lastPointerDownEvent?.timeStamp ?? 0);
|
|
|
+
|
|
|
if (this.device.editor.isMobile && clicklength < 300) {
|
|
|
const hitElement = this.getElementAtPosition(
|
|
|
scenePointer.x,
|
|
@@ -6693,6 +6700,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
sceneY,
|
|
|
insertAtParentCenter: !event.altKey,
|
|
|
container,
|
|
|
+ autoEdit: false,
|
|
|
});
|
|
|
|
|
|
resetCursor(this.interactiveCanvas);
|
|
@@ -8043,6 +8051,28 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (isTextElement(draggingElement)) {
|
|
|
+ const minWidth = getMinTextElementWidth(
|
|
|
+ getFontString({
|
|
|
+ fontSize: draggingElement.fontSize,
|
|
|
+ fontFamily: draggingElement.fontFamily,
|
|
|
+ }),
|
|
|
+ draggingElement.lineHeight,
|
|
|
+ );
|
|
|
+
|
|
|
+ if (draggingElement.width < minWidth) {
|
|
|
+ mutateElement(draggingElement, {
|
|
|
+ autoResize: true,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ this.resetCursor();
|
|
|
+
|
|
|
+ this.handleTextWysiwyg(draggingElement, {
|
|
|
+ isExistingElement: true,
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
if (
|
|
|
activeTool.type !== "selection" &&
|
|
|
draggingElement &&
|
|
@@ -9410,6 +9440,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
distance(pointerDownState.origin.y, pointerCoords.y),
|
|
|
shouldMaintainAspectRatio(event),
|
|
|
shouldResizeFromCenter(event),
|
|
|
+ this.state.zoom.value,
|
|
|
);
|
|
|
} else {
|
|
|
let [gridX, gridY] = getGridPoint(
|
|
@@ -9467,6 +9498,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
? !shouldMaintainAspectRatio(event)
|
|
|
: shouldMaintainAspectRatio(event),
|
|
|
shouldResizeFromCenter(event),
|
|
|
+ this.state.zoom.value,
|
|
|
aspectRatio,
|
|
|
this.state.originSnapOffset,
|
|
|
);
|