/* LIBPIKA - The PIKA Library
 * Copyright (C) 1995-2003 Peter Mattis and Spencer Kimball
 *
 * pikadrawableedit_pdb.c
 *
 * This library is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library.  If not, see
 * <https://www.gnu.org/licenses/>.
 */

/* NOTE: This file is auto-generated by pdbgen.pl */

#include "config.h"

#include "stamp-pdbgen.h"

#include "pika.h"


/**
 * SECTION: pikadrawableedit
 * @title: pikadrawableedit
 * @short_description: Drawable edit functions (clear, fill, gradient, stroke etc.)
 *
 * Drawable edit functions (clear, fill, gradient, stroke etc.)
 **/


/**
 * pika_drawable_edit_clear:
 * @drawable: The drawable to clear from.
 *
 * Clear selected area of drawable.
 *
 * This procedure clears the specified drawable. If the drawable has an
 * alpha channel, the cleared pixels will become transparent. If the
 * drawable does not have an alpha channel, cleared pixels will be set
 * to the background color. This procedure only affects regions within
 * a selection if there is a selection active.
 *
 * This procedure is affected by the following context setters:
 * pika_context_set_background().
 *
 * Returns: TRUE on success.
 **/
gboolean
pika_drawable_edit_clear (PikaDrawable *drawable)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_DRAWABLE, drawable,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-drawable-edit-clear",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}

/**
 * pika_drawable_edit_fill:
 * @drawable: The drawable to fill to.
 * @fill_type: The type of fill.
 *
 * Fill selected area of drawable.
 *
 * This procedure fills the specified drawable according to fill mode.
 * This procedure only affects regions within a selection if there is a
 * selection active. If you want to fill the whole drawable, regardless
 * of the selection, use pika_drawable_fill().
 *
 * This procedure is affected by the following context setters:
 * pika_context_set_opacity(), pika_context_set_paint_mode(),
 * pika_context_set_foreground(), pika_context_set_background(),
 * pika_context_set_pattern().
 *
 * Returns: TRUE on success.
 **/
gboolean
pika_drawable_edit_fill (PikaDrawable *drawable,
                         PikaFillType  fill_type)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_DRAWABLE, drawable,
                                          PIKA_TYPE_FILL_TYPE, fill_type,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-drawable-edit-fill",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}

/**
 * pika_drawable_edit_bucket_fill:
 * @drawable: The affected drawable.
 * @fill_type: The type of fill.
 * @x: The x coordinate of this bucket fill's application.
 * @y: The y coordinate of this bucket fill's application.
 *
 * Fill the area by a seed fill starting at the specified coordinates.
 *
 * This procedure does a seed fill at the specified coordinates, using
 * various parameters from the current context.
 * In the case of merged sampling, the x and y coordinates are relative
 * to the image's origin; otherwise, they are relative to the
 * drawable's origin.
 *
 * This procedure is affected by the following context setters:
 * pika_context_set_opacity(), pika_context_set_paint_mode(),
 * pika_context_set_foreground(), pika_context_set_background(),
 * pika_context_set_pattern(), pika_context_set_sample_threshold(),
 * pika_context_set_sample_merged(),
 * pika_context_set_sample_criterion(),
 * pika_context_set_diagonal_neighbors(), pika_context_set_antialias().
 *
 * Returns: TRUE on success.
 *
 * Since: 2.10
 **/
gboolean
pika_drawable_edit_bucket_fill (PikaDrawable *drawable,
                                PikaFillType  fill_type,
                                gdouble       x,
                                gdouble       y)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_DRAWABLE, drawable,
                                          PIKA_TYPE_FILL_TYPE, fill_type,
                                          G_TYPE_DOUBLE, x,
                                          G_TYPE_DOUBLE, y,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-drawable-edit-bucket-fill",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}

/**
 * pika_drawable_edit_gradient_fill:
 * @drawable: The affected drawable.
 * @gradient_type: The type of gradient.
 * @offset: Offset relates to the starting and ending coordinates specified for the blend. This parameter is mode dependent.
 * @supersample: Do adaptive supersampling.
 * @supersample_max_depth: Maximum recursion levels for supersampling.
 * @supersample_threshold: Supersampling threshold.
 * @dither: Use dithering to reduce banding.
 * @x1: The x coordinate of this gradient's starting point.
 * @y1: The y coordinate of this gradient's starting point.
 * @x2: The x coordinate of this gradient's ending point.
 * @y2: The y coordinate of this gradient's ending point.
 *
 * Draw a gradient between the starting and ending coordinates with the
 * specified gradient type.
 *
 * This tool requires information on the gradient type. It creates the
 * specified variety of gradient using the starting and ending
 * coordinates as defined for each gradient type. For shapeburst
 * gradient types, the context's distance metric is also relevant and
 * can be updated with pika_context_set_distance_metric().
 *
 * This procedure is affected by the following context setters:
 * pika_context_set_opacity(), pika_context_set_paint_mode(),
 * pika_context_set_foreground(), pika_context_set_background(),
 * pika_context_set_gradient() and all gradient property settings,
 * pika_context_set_distance_metric().
 *
 * Returns: TRUE on success.
 *
 * Since: 2.10
 **/
gboolean
pika_drawable_edit_gradient_fill (PikaDrawable     *drawable,
                                  PikaGradientType  gradient_type,
                                  gdouble           offset,
                                  gboolean          supersample,
                                  gint              supersample_max_depth,
                                  gdouble           supersample_threshold,
                                  gboolean          dither,
                                  gdouble           x1,
                                  gdouble           y1,
                                  gdouble           x2,
                                  gdouble           y2)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_DRAWABLE, drawable,
                                          PIKA_TYPE_GRADIENT_TYPE, gradient_type,
                                          G_TYPE_DOUBLE, offset,
                                          G_TYPE_BOOLEAN, supersample,
                                          G_TYPE_INT, supersample_max_depth,
                                          G_TYPE_DOUBLE, supersample_threshold,
                                          G_TYPE_BOOLEAN, dither,
                                          G_TYPE_DOUBLE, x1,
                                          G_TYPE_DOUBLE, y1,
                                          G_TYPE_DOUBLE, x2,
                                          G_TYPE_DOUBLE, y2,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-drawable-edit-gradient-fill",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}

/**
 * pika_drawable_edit_stroke_selection:
 * @drawable: The drawable to stroke to.
 *
 * Stroke the current selection
 *
 * This procedure strokes the current selection, painting along the
 * selection boundary with the active paint method and brush, or using
 * a plain line with configurable properties. The paint is applied to
 * the specified drawable regardless of the active selection.
 *
 * This procedure is affected by the following context setters:
 * pika_context_set_opacity(), pika_context_set_paint_mode(),
 * pika_context_set_paint_method(), pika_context_set_stroke_method(),
 * pika_context_set_foreground(), pika_context_set_brush() and all
 * brush property settings, pika_context_set_gradient() and all
 * gradient property settings, pika_context_set_line_width() and all
 * line property settings, pika_context_set_antialias().
 *
 * Returns: TRUE on success.
 **/
gboolean
pika_drawable_edit_stroke_selection (PikaDrawable *drawable)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_DRAWABLE, drawable,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-drawable-edit-stroke-selection",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}

/**
 * pika_drawable_edit_stroke_item:
 * @drawable: The drawable to stroke to.
 * @item: The item to stroke.
 *
 * Stroke the specified item
 *
 * This procedure strokes the specified item, painting along its
 * outline (e.g. along a path, or along a channel's boundary), with the
 * active paint method and brush, or using a plain line with
 * configurable properties.
 *
 * This procedure is affected by the following context setters:
 * pika_context_set_opacity(), pika_context_set_paint_mode(),
 * pika_context_set_paint_method(), pika_context_set_stroke_method(),
 * pika_context_set_foreground(), pika_context_set_brush() and all
 * brush property settings, pika_context_set_gradient() and all
 * gradient property settings, pika_context_set_line_width() and all
 * line property settings, pika_context_set_antialias().
 *
 * Returns: TRUE on success.
 *
 * Since: 2.10
 **/
gboolean
pika_drawable_edit_stroke_item (PikaDrawable *drawable,
                                PikaItem     *item)
{
  PikaValueArray *args;
  PikaValueArray *return_vals;
  gboolean success = TRUE;

  args = pika_value_array_new_from_types (NULL,
                                          PIKA_TYPE_DRAWABLE, drawable,
                                          PIKA_TYPE_ITEM, item,
                                          G_TYPE_NONE);

  return_vals = _pika_pdb_run_procedure_array (pika_get_pdb (),
                                               "pika-drawable-edit-stroke-item",
                                               args);
  pika_value_array_unref (args);

  success = PIKA_VALUES_GET_ENUM (return_vals, 0) == PIKA_PDB_SUCCESS;

  pika_value_array_unref (return_vals);

  return success;
}
