Fix middle handles on mobile (#2459)

For rendering we always use mouse in order to check which handles to display but when doing the hit test, we used pointer which has a different size. So we couldn't use the middle handles for small shapes. This is now fixed.

cc @j-f1 as you added it in #790
This commit is contained in:
Christopher Chedeau 2020-12-05 16:35:44 -08:00 committed by GitHub
parent 2b6d1470f9
commit 533815c081
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 3 deletions

View File

@ -78,7 +78,7 @@ export const getTransformHandlesFromCoords = (
[x1, y1, x2, y2]: Bounds,
angle: number,
zoom: Zoom,
pointerType: PointerType = "mouse",
pointerType: PointerType,
omitSides: { [T in TransformHandleType]?: boolean } = {},
): TransformHandles => {
const size = transformHandleSizes[pointerType];
@ -160,7 +160,9 @@ export const getTransformHandlesFromCoords = (
};
// We only want to show height handles (all cardinal directions) above a certain size
const minimumSizeForEightHandles = (5 * size) / zoom.value;
// Note: we render using "mouse" size so we should also use "mouse" size for this check
const minimumSizeForEightHandles =
(5 * transformHandleSizes.mouse) / zoom.value;
if (Math.abs(width) > minimumSizeForEightHandles) {
if (!omitSides.n) {
transformHandles.n = generateTransformHandle(

View File

@ -371,6 +371,7 @@ export const renderScene = (
const transformHandles = getTransformHandles(
locallySelectedElements[0],
sceneState.zoom,
"mouse", // when we render we don't know which pointer type so use mouse
);
renderTransformHandles(
context,
@ -402,7 +403,7 @@ export const renderScene = (
[x1, y1, x2, y2],
0,
sceneState.zoom,
undefined,
"mouse",
OMIT_SIDES_FOR_MULTIPLE_ELEMENTS,
);
renderTransformHandles(context, sceneState, transformHandles, 0);