static void flip_items (Sheet *sheet, GList *items, IDFlip direction) { GList *iter, *item_data_list; Coords center, b1, b2; Coords after; item_data_list = NULL; for (iter = items; iter; iter = iter->next) { item_data_list = g_list_prepend (item_data_list, sheet_item_get_data (iter->data)); } item_data_list_get_absolute_bbox (item_data_list, &b1, &b2); // FIXME center is currently not used by item_data_flip (part.c implentation) center.x = (b2.x + b1.x) / 2; center.y = (b2.y + b1.y) / 2; // FIXME - registering an item after flipping it still creates an offset as the position is still 0 for (iter = item_data_list; iter; iter = iter->next) { ItemData *item_data = iter->data; if (sheet->state == SHEET_STATE_NONE) item_data_unregister (item_data); item_data_flip (item_data, direction, ¢er); // Make sure we snap to grid. item_data_get_pos (item_data, &after); snap_to_grid (sheet->grid, &after.x, &after.y); item_data_set_pos (item_data, &after); if (sheet->state == SHEET_STATE_NONE) item_data_register (item_data); } g_list_free (item_data_list); }
static void flip_items (Sheet *sheet, GList *items, gboolean horizontal) { GList *list, *item_data_list; SheetPos center, b1, b2; SheetPos after; item_data_list = NULL; for (list = items; list; list = list->next) { item_data_list = g_list_prepend (item_data_list, sheet_item_get_data (list->data)); } item_data_list_get_absolute_bbox (item_data_list, &b1, &b2); center.x = (b2.x + b1.x) / 2; center.y = (b2.y + b1.y) / 2; for (list = item_data_list; list; list = list->next) { ItemData *item_data = list->data; if (sheet->state == SHEET_STATE_NONE) item_data_unregister (item_data); item_data_flip (item_data, horizontal, ¢er); // Make sure we snap to grid. item_data_get_pos (item_data, &after); snap_to_grid (sheet->grid, &after.x, &after.y); item_data_move (item_data, &after); if (sheet->state == SHEET_STATE_NONE) item_data_register (item_data); } g_list_free (item_data_list); g_list_free_full (list, g_object_unref); }