ensure editingLinearElement handles are rendered on top (#1967)

This commit is contained in:
David Luzar 2020-07-26 20:52:25 +02:00 committed by GitHub
parent df4e903bd6
commit f295550940
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 10 deletions

View File

@ -12,7 +12,9 @@ import { SceneHistory } from "../history";
import { globalSceneState } from "../scene";
export class LinearElementEditor {
public elementId: ExcalidrawElement["id"];
public elementId: ExcalidrawElement["id"] & {
_brand: "excalidrawLinearElementId";
};
public activePointIndex: number | null;
public draggingElementPointIndex: number | null;
public lastUncommittedPoint: Point | null;
@ -20,7 +22,9 @@ export class LinearElementEditor {
constructor(element: NonDeleted<ExcalidrawLinearElement>) {
LinearElementEditor.normalizePoints(element);
this.elementId = element.id;
this.elementId = element.id as string & {
_brand: "excalidrawLinearElementId";
};
this.activePointIndex = null;
this.lastUncommittedPoint = null;
this.draggingElementPointIndex = null;
@ -32,7 +36,11 @@ export class LinearElementEditor {
static POINT_HANDLE_SIZE = 20;
static getElement(id: ExcalidrawElement["id"]) {
/**
* @param id the `elementId` from the instance of this class (so that we can
* statically guarantee this method returns an ExcalidrawLinearElement)
*/
static getElement(id: InstanceType<typeof LinearElementEditor>["elementId"]) {
const element = globalSceneState.getNonDeletedElement(id);
if (element) {
return element as NonDeleted<ExcalidrawLinearElement>;

View File

@ -30,7 +30,6 @@ import { getSelectedElements } from "../scene/selection";
import { renderElement, renderElementToSvg } from "./renderElement";
import { getClientColors } from "../clients";
import { isLinearElement } from "../element/typeChecks";
import { LinearElementEditor } from "../element/linearElementEditor";
import {
isSelectedViaGroup,
@ -220,14 +219,16 @@ export const renderScene = (
visibleElements.forEach((element) => {
renderElement(element, rc, context, renderOptimizations, sceneState);
if (
isLinearElement(element) &&
appState.editingLinearElement &&
appState.editingLinearElement.elementId === element.id
) {
});
if (appState.editingLinearElement) {
const element = LinearElementEditor.getElement(
appState.editingLinearElement.elementId,
);
if (element) {
renderLinearPointHandles(context, appState, sceneState, element);
}
});
}
// Paint selection element
if (selectionElement) {