コード例 #1
0
ファイル: gimpsamplepointundo.c プロジェクト: jiapei100/gimp
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;
}
コード例 #2
0
static void
gimp_sample_point_undo_pop (GimpUndo              *undo,
                            GimpUndoMode           undo_mode,
                            GimpUndoAccumulator   *accum)
{
  GimpSamplePointUndo *sample_point_undo = GIMP_SAMPLE_POINT_UNDO (undo);
  gint                 x;
  gint                 y;

  GIMP_UNDO_CLASS (parent_class)->pop (undo, undo_mode, accum);

  x = sample_point_undo->sample_point->x;
  y = sample_point_undo->sample_point->y;

  if (x == -1)
    {
      gimp_image_add_sample_point (undo->image,
                                   sample_point_undo->sample_point,
                                   sample_point_undo->x,
                                   sample_point_undo->y);
    }
  else if (sample_point_undo->x == -1)
    {
      gimp_image_remove_sample_point (undo->image,
                                      sample_point_undo->sample_point, FALSE);
    }
  else
    {
      sample_point_undo->sample_point->x = sample_point_undo->x;
      sample_point_undo->sample_point->y = sample_point_undo->y;

      gimp_image_sample_point_moved (undo->image,
                                     sample_point_undo->sample_point);
    }

  sample_point_undo->x = x;
  sample_point_undo->y = y;
}
コード例 #3
0
GimpSamplePoint *
gimp_image_add_sample_point_at_pos (GimpImage *image,
                                    gint       x,
                                    gint       y,
                                    gboolean   push_undo)
{
  GimpSamplePoint *sample_point;

  g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
  g_return_val_if_fail (x >= 0 && x < gimp_image_get_width  (image), NULL);
  g_return_val_if_fail (y >= 0 && y < gimp_image_get_height (image), NULL);

  sample_point = gimp_sample_point_new (image->gimp->next_sample_point_ID++);

  if (push_undo)
    gimp_image_undo_push_sample_point (image, _("Add Sample Point"),
                                       sample_point);

  gimp_image_add_sample_point (image, sample_point, x, y);
  gimp_sample_point_unref (sample_point);

  return sample_point;
}