- xcb_button_press_event_t *event = extra;
- int32_t new_width = old_rect->width + (new_x - event->root_x);
- int32_t new_height = old_rect->height + (new_y - event->root_y);
+ struct resize_window_callback_params *params = extra;
+ xcb_button_press_event_t *event = params->event;
+ border_t corner = params->corner;
+
+ int32_t dest_x = client->rect.x;
+ int32_t dest_y = client->rect.y;
+ uint32_t dest_width;
+ uint32_t dest_height;
+
+ if (corner & BORDER_LEFT) {
+ dest_x = old_rect->x + (new_x - event->root_x);
+ dest_width = old_rect->width - (new_x - event->root_x);
+ } else dest_width = old_rect->width + (new_x - event->root_x);
+
+ if (corner & BORDER_TOP) {
+ dest_y = old_rect->y + (new_y - event->root_y);
+ dest_height = old_rect->height - (new_y - event->root_y);
+ } else dest_height = old_rect->height + (new_y - event->root_y);
+