-static
-void snap_seg2seg(float *x, float y, float xo, float yo, float st)
-{
- snap_var(x, y, 0, 0, st);
- snap_var(x, y, 0, yo, st);
- snap_var(x, y, xo, 0, st);
- snap_var(x, y, xo, yo, st);
+ Rect *rects = dynarray_data(layer->rects);
+ size_t rects_size = dynarray_count(layer->rects);
+
+ for (size_t i = 0; i < rects_size; ++i) {
+ if (i == (size_t) layer->selection) continue;
+
+ const Rect b = rects[i];
+
+ if (segment_overlap(vec(a->x, a->x + a->w), vec(b.x, b.x + b.w))) {
+ snap_var2seg(&a->y, b.y, 0, b.h, snapping_threshold);
+ }
+
+ if (segment_overlap(vec(a->y, a->y + a->h), vec(b.y, b.y + b.h))) {
+ snap_var2seg(&a->x, b.x, 0, b.w, snapping_threshold);
+ }
+ }