Skip to content

Commit 6437a2b

Browse files
authored
Improve the click targets for the skew triangles of the transform cage (#2703)
Extend the bounding box over triangle to extend beyond the triangle
1 parent 1b39e71 commit 6437a2b

File tree

1 file changed

+13
-35
lines changed

1 file changed

+13
-35
lines changed

editor/src/messages/tool/common_functionality/transformation_cage.rs

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -433,46 +433,24 @@ impl BoundingBoxManager {
433433
}
434434

435435
pub fn check_skew_handle(&self, cursor: DVec2, edge: EdgeBool) -> bool {
436-
if let Some([start, end]) = self.edge_endpoints_vector_from_edge_bool(edge) {
437-
if (end - start).length() < MIN_LENGTH_FOR_SKEW_TRIANGLE_VISIBILITY {
438-
return false;
439-
}
440-
441-
let touches_triangle = |base: DVec2, direction: DVec2, cursor: DVec2| -> bool {
442-
let normal = direction.perp();
443-
let top = base + direction * SKEW_TRIANGLE_SIZE;
444-
let edge1 = base + normal * SKEW_TRIANGLE_SIZE / 2.;
445-
let edge2 = base - normal * SKEW_TRIANGLE_SIZE / 2.;
446-
447-
let v0 = edge1 - top;
448-
let v1 = edge2 - top;
449-
let v2 = cursor - top;
450-
451-
let d00 = v0.dot(v0);
452-
let d01 = v0.dot(v1);
453-
let d11 = v1.dot(v1);
454-
let d20 = v2.dot(v0);
455-
let d21 = v2.dot(v1);
456-
457-
let denom = d00 * d11 - d01 * d01;
458-
let v = (d11 * d20 - d01 * d21) / denom;
459-
let w = (d00 * d21 - d01 * d20) / denom;
460-
let u = 1. - v - w;
436+
let Some([start, end]) = self.edge_endpoints_vector_from_edge_bool(edge) else { return false };
437+
if (end - start).length_squared() < MIN_LENGTH_FOR_SKEW_TRIANGLE_VISIBILITY.powi(2) {
438+
return false;
439+
};
461440

462-
u >= 0. && v >= 0. && w >= 0.
463-
};
441+
let edge_dir = (end - start).normalize();
442+
let mid = start.midpoint(end);
464443

465-
let edge_dir = (end - start).normalize();
466-
let mid = end.midpoint(start);
444+
for direction in [-edge_dir, edge_dir] {
445+
let base = mid + direction * (3. + SKEW_TRIANGLE_OFFSET + SKEW_TRIANGLE_SIZE / 2.);
446+
let extension = cursor - base;
447+
let along_edge = extension.dot(edge_dir).abs();
448+
let along_perp = extension.perp_dot(edge_dir).abs();
467449

468-
for direction in [edge_dir, -edge_dir] {
469-
let base = mid + direction * (3. + SKEW_TRIANGLE_OFFSET);
470-
if touches_triangle(base, direction, cursor) {
471-
return true;
472-
}
450+
if along_edge <= SKEW_TRIANGLE_SIZE / 2. && along_perp <= BOUNDS_SELECT_THRESHOLD {
451+
return true;
473452
}
474453
}
475-
476454
false
477455
}
478456

0 commit comments

Comments
 (0)