static void gimp_image_rotate_sample_points (GimpImage *image, GimpRotationType rotate_type) { GList *list; /* Rotate all sample points */ for (list = gimp_image_get_sample_points (image); list; list = g_list_next (list)) { GimpSamplePoint *sample_point = list->data; gint old_x; gint old_y; gimp_image_undo_push_sample_point (image, NULL, sample_point); gimp_sample_point_get_position (sample_point, &old_x, &old_y); switch (rotate_type) { case GIMP_ROTATE_90: gimp_sample_point_set_position (sample_point, gimp_image_get_height (image) - old_y, old_x); break; case GIMP_ROTATE_180: gimp_sample_point_set_position (sample_point, gimp_image_get_width (image) - old_x, gimp_image_get_height (image) - old_y); break; case GIMP_ROTATE_270: gimp_sample_point_set_position (sample_point, old_y, gimp_image_get_width (image) - old_x); break; } } }
static void gimp_sample_point_undo_pop (GimpUndo *undo, GimpUndoMode undo_mode, GimpUndoAccumulator *accum) { GimpSamplePointUndo *sample_point_undo = GIMP_SAMPLE_POINT_UNDO (undo); GimpSamplePoint *sample_point; gint x; gint y; GimpColorPickMode pick_mode; GIMP_UNDO_CLASS (parent_class)->pop (undo, undo_mode, accum); sample_point = GIMP_SAMPLE_POINT (GIMP_AUX_ITEM_UNDO (undo)->aux_item); gimp_sample_point_get_position (sample_point, &x, &y); pick_mode = gimp_sample_point_get_pick_mode (sample_point); if (x == GIMP_SAMPLE_POINT_POSITION_UNDEFINED) { gimp_image_add_sample_point (undo->image, sample_point, sample_point_undo->x, sample_point_undo->y); } else if (sample_point_undo->x == GIMP_SAMPLE_POINT_POSITION_UNDEFINED) { gimp_image_remove_sample_point (undo->image, sample_point, FALSE); } else { gimp_sample_point_set_position (sample_point, sample_point_undo->x, sample_point_undo->y); gimp_sample_point_set_pick_mode (sample_point, sample_point_undo->pick_mode); gimp_image_sample_point_moved (undo->image, sample_point); } sample_point_undo->x = x; sample_point_undo->y = y; sample_point_undo->pick_mode = pick_mode; }