+static
+void snap_rect_resize_if_enabled(RectLayer *layer, Rect *a, float snapping_threshold)
+{
+ trace_assert(layer);
+ trace_assert(layer->selection >= 0);
+ trace_assert(a);
+
+ if (!layer->snapping_enabled) return;
+
+ 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);
+ }
+ }
+}
+