{
let description = describe(`updates the rectangle \`rect_keys\``);
let current_x = current_coords.x;
let current_y = current_coords.y;
if (is_constrained) {
let deltaX = current_coords.x - initial_coords.x;
let deltaY = current_coords.y - initial_coords.y;
let delta = Math.max(Math.abs(deltaX), Math.abs(deltaY));
current_x = initial_coords.x + (Math.sign(deltaX) || 1) * delta;
current_y = initial_coords.y + (Math.sign(deltaY) || 1) * delta;
}
let x, y;
let width = Math.abs(current_x - initial_coords.x);
let height = Math.abs(current_y - initial_coords.y);
if (is_from_center) {
let reflected_x = 2 * initial_coords.x - current_x;
let reflected_y = 2 * initial_coords.y - current_y;
x = Math.min(reflected_x, current_x);
y = Math.min(reflected_y, current_y);
width = 2 * width;
height = 2 * height;
} else {
x = Math.min(initial_coords.x, current_x);
y = Math.min(initial_coords.y, current_y);
}
rect_keys.setAttribute('x', x);
rect_keys.setAttribute('y', y);
rect_keys.setAttribute('width', width);
rect_keys.setAttribute('height', height);
return description;
}