mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 20:48:11 +08:00
Improve the distribution part of the snapping system (#2626)
* fix distribution snapper visualization going far from layers * fix bugs * Remove traces * remove comment * Fix tests * Rename distribution snapper variables from x, y to horizontal, vertical * Fix tests * Fix bug where center point and corner point have to be enabled for distribution_snapper to work * Cleanup --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
Keavon Chambers
parent
ddb2d744d4
commit
66a297df2c
@@ -114,13 +114,13 @@ fn get_closest_point(points: Vec<SnappedPoint>) -> Option<SnappedPoint> {
|
||||
(Some(result), None) | (None, Some(result)) => Some(result),
|
||||
(Some(mut result), Some(align)) => {
|
||||
let SnapTarget::DistributeEvenly(distribution) = result.target else { return Some(result) };
|
||||
if distribution.is_x() && align.alignment_target_x.is_some() {
|
||||
if distribution.is_x() && align.alignment_target_horizontal.is_some() {
|
||||
result.snapped_point_document.y = align.snapped_point_document.y;
|
||||
result.alignment_target_x = align.alignment_target_x;
|
||||
result.alignment_target_horizontal = align.alignment_target_horizontal;
|
||||
}
|
||||
if distribution.is_y() && align.alignment_target_y.is_some() {
|
||||
if distribution.is_y() && align.alignment_target_vertical.is_some() {
|
||||
result.snapped_point_document.x = align.snapped_point_document.x;
|
||||
result.alignment_target_y = align.alignment_target_y;
|
||||
result.alignment_target_vertical = align.alignment_target_vertical;
|
||||
}
|
||||
|
||||
Some(result)
|
||||
@@ -456,10 +456,10 @@ impl SnapManager {
|
||||
}
|
||||
let viewport = to_viewport.transform_point2(ind.snapped_point_document);
|
||||
|
||||
Self::alignment_x_overlay(&ind.distribution_boxes_x, to_viewport, overlay_context);
|
||||
Self::alignment_y_overlay(&ind.distribution_boxes_y, to_viewport, overlay_context);
|
||||
Self::alignment_x_overlay(&ind.distribution_boxes_horizontal, to_viewport, overlay_context);
|
||||
Self::alignment_y_overlay(&ind.distribution_boxes_vertical, to_viewport, overlay_context);
|
||||
|
||||
let align = [ind.alignment_target_x, ind.alignment_target_y].map(|target| target.map(|target| to_viewport.transform_point2(target)));
|
||||
let align = [ind.alignment_target_horizontal, ind.alignment_target_vertical].map(|target| target.map(|target| to_viewport.transform_point2(target)));
|
||||
let any_align = align.iter().flatten().next().is_some();
|
||||
for &target in align.iter().flatten() {
|
||||
overlay_context.line(viewport, target, None, None);
|
||||
@@ -471,7 +471,7 @@ impl SnapManager {
|
||||
overlay_context.manipulator_handle(viewport, false, None);
|
||||
}
|
||||
|
||||
if !any_align && ind.distribution_equal_distance_x.is_none() && ind.distribution_equal_distance_y.is_none() {
|
||||
if !any_align && ind.distribution_equal_distance_horizontal.is_none() && ind.distribution_equal_distance_vertical.is_none() {
|
||||
let text = format!("[{}] from [{}]", ind.target, ind.source);
|
||||
let transform = DAffine2::from_translation(viewport - DVec2::new(0., 4.));
|
||||
overlay_context.text(&text, COLOR_OVERLAY_WHITE, Some(COLOR_OVERLAY_LABEL_BACKGROUND), transform, 4., [Pivot::Start, Pivot::End]);
|
||||
|
||||
Reference in New Issue
Block a user