Gimp/tools/pdbgen/pdb/image.pdb
Michael Natterer df9e9e2609 Disable layer masks on group layers for the time being
Will enable it again when I fixed it properly, it's clearly a
non-trivial problem that needs some thinking. Disabled for now because
it causes crashes.
2009-09-05 15:37:48 +02:00

2726 lines
65 KiB
Text

# GIMP - The GNU Image Manipulation Program
# Copyright (C) 1995 Spencer Kimball and Peter Mattis
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# This program 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 General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# "Perlized" from C source by Manish Singh <yosh@gimp.org>
sub image_is_valid {
$blurb = 'Returns TRUE if the image is valid.';
$help = <<'HELP';
This procedure checks if the given image ID is valid and refers to an
existing image.
HELP
&neo_pdb_misc('2007', '2.4');
@inargs = (
{ name => 'image', type => 'image', no_validate => 1,
desc => 'The image to check' }
);
@outargs = (
{ name => 'valid', type => 'boolean',
desc => 'Whether the image ID is valid' }
);
%invoke = (
code => <<'CODE'
{
valid = GIMP_IS_IMAGE (image);
}
CODE
);
}
sub image_list {
$blurb = 'Returns the list of images currently open.';
$help = <<'HELP';
This procedure returns the list of images currently open in GIMP.
HELP
&std_pdb_misc;
@outargs = (
{ name => 'image_ids', type => 'int32array',
desc => 'The list of images currently open',
array => { name => 'num_images',
desc => 'The number of images currently open' } }
);
%invoke = (
code => <<CODE
{
GList *list = gimp_get_image_iter (gimp);
num_images = g_list_length (list);
if (num_images)
{
gint i;
image_ids = g_new (gint32, num_images);
for (i = 0; i < num_images; i++, list = g_list_next (list))
image_ids[i] = gimp_image_get_ID (GIMP_IMAGE (list->data));
}
}
CODE
);
}
sub image_new {
$blurb = 'Creates a new image with the specified width, height, and type.';
$help = <<'HELP';
Creates a new image, undisplayed with the specified extents and
type. A layer should be created and added before this image is
displayed, or subsequent calls to gimp_display_new() with this image
as an argument will fail. Layers can be created using the
gimp_layer_new() commands. They can be added to an image using the
gimp_image_add_layer() command.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'The width of the image' },
{ name => 'height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'The height of the image' },
{ name => 'type', type => 'enum GimpImageBaseType',
desc => 'The type of image' }
);
@outargs = (
{ name => 'image', type => 'image',
desc => 'The ID of the newly created image' }
);
%invoke = (
code => <<'CODE'
{
image = gimp_create_image (gimp, width, height, type, FALSE);
if (! image)
success = FALSE;
}
CODE
);
}
sub image_duplicate {
$blurb = 'Duplicate the specified image';
$help = <<'HELP';
This procedure duplicates the specified image, copying all layers, channels,
and image information.
HELP
&std_pdb_misc;
$date = '1997';
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'new_image', type => 'image',
desc => 'The new, duplicated image' }
);
%invoke = (
headers => [ qw("core/gimpimage-duplicate.h") ],
code => <<'CODE'
{
new_image = gimp_image_duplicate (image);
if (! new_image)
success = FALSE;
}
CODE
);
}
sub image_delete {
$blurb = 'Delete the specified image.';
$help = <<'HELP';
If there are no displays associated with this image it will be deleted.
This means that you can not delete an image through the PDB that was
created by the user. If the associated display was however created
through the PDB and you know the display ID, you may delete the display.
Removal of the last associated display will then delete the image.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
%invoke = (
code => <<'CODE'
{
if (image->disp_count == 0)
g_object_unref (image);
else
success = FALSE;
}
CODE
);
}
sub image_resize {
$blurb = 'Resize the image to the specified extents.';
$help = <<'HELP';
This procedure resizes the image so that it's new width and height are
equal to the supplied parameters. Offsets are also provided which
describe the position of the previous image's content. All channels
within the image are resized according to the specified parameters;
this includes the image selection mask. All layers within the image
are repositioned according to the specified offsets.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image width' },
{ name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image height' },
{ name => 'offx', type => 'int32',
desc => 'x offset between upper left corner of old and
new images: (new - old)' },
{ name => 'offy', type => 'int32',
desc => 'y offset between upper left corner of old and
new images: (new - old)' }
);
%invoke = (
headers => [ qw("core/gimpimage-resize.h") ],
code => <<'CODE'
{
gimp_image_resize (image, context,
new_width, new_height, offx, offy, NULL);
}
CODE
);
}
sub image_resize_to_layers {
$blurb = 'Resize the image to fit all layers.';
$help = <<'HELP';
This procedure resizes the image to the bounding box of all layers of
the image. All channels within the image are resized to the new size;
this includes the image selection mask. All layers within the image
are repositioned to the new image area.
HELP
&simon_pdb_misc('2004', '2.2');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
%invoke = (
headers => [ qw("core/gimpimage-resize.h") ],
code => <<'CODE'
{
gimp_image_resize_to_layers (image, context, NULL);
}
CODE
);
}
sub image_scale {
$blurb = 'Scale the image using the default interpolation method.';
$help = <<'HELP';
This procedure scales the image so that its new width and height are
equal to the supplied parameters. All layers and channels within the
image are scaled according to the specified parameters; this includes
the image selection mask. The default interpolation method is used.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image width' },
{ name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image height' }
);
%invoke = (
headers => [ qw("config/gimpcoreconfig.h" "core/gimpimage-scale.h") ],
code => <<'CODE'
{
if (progress)
gimp_progress_start (progress, _("Scaling"), FALSE);
gimp_image_scale (image, new_width, new_height,
gimp->config->interpolation_type,
progress);
if (progress)
gimp_progress_end (progress);
}
CODE
);
}
sub image_scale_full {
$blurb = 'Scale the image using a specific interpolation method.';
$help = <<'HELP';
This procedure scales the image so that its new width and height are
equal to the supplied parameters. All layers and channels within the
image are scaled according to the specified parameters; this includes
the image selection mask. This procedure allows you to specify the
interpolation method explicitly.
HELP
&neo_pdb_misc('2008', '2.6');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image width' },
{ name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image height' },
{ name => 'interpolation', type => 'enum GimpInterpolationType',
desc => 'Type of interpolation' }
);
%invoke = (
headers => [ qw("config/gimpcoreconfig.h" "core/gimpimage-scale.h") ],
code => <<'CODE'
{
if (progress)
gimp_progress_start (progress, _("Scaling"), FALSE);
gimp_image_scale (image, new_width, new_height, interpolation, progress);
if (progress)
gimp_progress_end (progress);
}
CODE
);
}
sub image_crop {
$blurb = 'Crop the image to the specified extents.';
$help = <<'HELP';
This procedure crops the image so that it's new width and height are
equal to the supplied parameters. Offsets are also provided which
describe the position of the previous image's content. All channels
and layers within the image are cropped to the new image extents; this
includes the image selection mask. If any parameters are out of range,
an error is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'new_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image width: (0 < new_width <= width)' },
{ name => 'new_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
desc => 'New image height: (0 < new_height <= height)' },
{ name => 'offx', type => '0 <= int32',
desc => 'X offset: (0 <= offx <= (width - new_width))' },
{ name => 'offy', type => '0 <= int32',
desc => 'Y offset: (0 <= offy <= (height - new_height))' }
);
%invoke = (
headers => [ qw("core/gimpimage-crop.h") ],
code => <<'CODE'
{
if (new_width > gimp_image_get_width (image) ||
new_height > gimp_image_get_height (image) ||
offx > (gimp_image_get_width (image) - new_width) ||
offy > (gimp_image_get_height (image) - new_height))
success = FALSE;
else
gimp_image_crop (image, context,
offx, offy, offx + new_width, offy + new_height,
FALSE, TRUE);
}
CODE
);
}
sub image_flip {
$blurb = 'Flips the image horizontally or vertically.';
$help = <<'HELP';
This procedure flips (mirrors) the image.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'flip_type',
type => 'enum GimpOrientationType (no GIMP_ORIENTATION_UNKNOWN)',
desc => 'Type of flip' }
);
%invoke = (
headers => [ qw("core/gimpimage-flip.h") ],
code => <<'CODE'
{
gimp_image_flip (image, context, flip_type, NULL);
}
CODE
);
}
sub image_rotate {
$blurb = 'Rotates the image by the specified degrees.';
$help = 'This procedure rotates the image.';
&mitch_pdb_misc('2003');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'rotate_type', type => 'enum GimpRotationType',
desc => 'Angle of rotation' }
);
%invoke = (
headers => [ qw("core/gimpimage-rotate.h") ],
code => <<'CODE'
{
if (progress)
gimp_progress_start (progress, _("Rotating"), FALSE);
gimp_image_rotate (image, context, rotate_type, progress);
if (progress)
gimp_progress_end (progress);
}
CODE
);
}
sub image_free_shadow {
&std_pdb_deprecated ('gimp-drawable-free-shadow');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
%invoke = (
code => <<'CODE'
{
}
CODE
);
}
sub image_get_layers {
$blurb = 'Returns the list of layers contained in the specified image.';
$help = <<HELP;
This procedure returns the list of layers contained in the specified image.
The order of layers is from topmost to bottommost.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'layer_ids', type => 'int32array',
desc => 'The list of layers contained in the image',
array => { name => 'num_layers',
desc => 'The number of layers contained in the image' } }
);
%invoke = (
code => <<'CODE'
{
GList *list = gimp_image_get_layer_iter (image);
num_layers = g_list_length (list);
if (num_layers)
{
gint i;
layer_ids = g_new (gint32, num_layers);
for (i = 0; i < num_layers; i++, list = g_list_next (list))
layer_ids[i] = gimp_item_get_ID (GIMP_ITEM (list->data));
}
}
CODE
);
}
sub image_get_channels {
$blurb = 'Returns the list of channels contained in the specified image.';
$help = <<HELP;
This procedure returns the list of channels contained in the specified image.
This does not include the selection mask, or layer masks. The order is from
topmost to bottommost.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'channel_ids', type => 'int32array',
desc => 'The list of channels contained in the image',
array => { name => 'num_channels',
desc => 'The number of channels contained in the image' } }
);
%invoke = (
code => <<'CODE'
{
GList *list = gimp_image_get_channel_iter (image);
num_channels = g_list_length (list);
if (num_channels)
{
gint i;
channel_ids = g_new (gint32, num_channels);
for (i = 0; i < num_channels; i++, list = g_list_next (list))
channel_ids[i] = gimp_item_get_ID (GIMP_ITEM (list->data));
}
}
CODE
);
}
sub image_get_vectors {
$blurb = 'Returns the list of vectors contained in the specified image.';
$help = <<HELP;
This procedure returns the list of vectors contained in the specified image.
HELP
&simon_pdb_misc('2005', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'vector_ids', type => 'int32array',
desc => 'The list of vectors contained in the image',
array => { name => 'num_vectors',
desc => 'The number of vectors contained in the image' } }
);
%invoke = (
code => <<'CODE'
{
GList *list = gimp_image_get_vectors_iter (image);
num_vectors = g_list_length (list);
if (num_vectors)
{
gint i;
vector_ids = g_new (gint32, num_vectors);
for (i = 0; i < num_vectors; i++, list = g_list_next (list))
vector_ids[i] = gimp_item_get_ID (GIMP_ITEM (list->data));
}
}
CODE
);
}
sub image_unset_active_channel {
$blurb = 'Unsets the active channel in the specified image.';
$help = <<'HELP';
If an active channel exists, it is unset. There then exists no active
channel, and if desired, one can be set through a call to 'Set Active
Channel'. No error is returned in the case of no existing active
channel.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
%invoke = (
code => <<'CODE'
{
gimp_image_unset_active_channel (image);
}
CODE
);
}
sub image_pick_color {
$blurb = <<'BLURB';
Determine the color at the given drawable coordinates
BLURB
$help = <<'HELP';
This tool determines the color at the specified coordinates. The
returned color is an RGB triplet even for grayscale and indexed
drawables. If the coordinates lie outside of the extents of the
specified drawable, then an error is returned. If the drawable has an
alpha channel, the algorithm examines the alpha value of the drawable
at the coordinates. If the alpha value is completely transparent (0),
then an error is returned. If the sample_merged parameter is TRUE,
the data of the composite image will be used instead of that for the
specified drawable. This is equivalent to sampling for colors after
merging all visible layers. In the case of a merged sampling, the
supplied drawable is ignored.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'drawable', type => 'drawable', none_ok => 1,
desc => 'The drawable to pick from' },
{ name => 'x', type => 'float',
desc => 'x coordinate of upper-left corner of rectangle' },
{ name => 'y', type => 'float',
desc => 'y coordinate of upper-left corner of rectangle' },
{ name => 'sample_merged', type => 'boolean',
desc => 'Use the composite image, not the drawable' },
{ name => 'sample_average', type => 'boolean',
desc => 'Average the color of all the pixels in a specified
radius' },
{ name => 'average_radius', type => '0 < float', no_validate => 1,
desc => 'The radius of pixels to average' }
);
@outargs = (
{ name => 'color', type => 'color', has_alpha => 1, void_ret => 1,
desc => 'The return color' }
);
%invoke = (
headers => [ qw("core/gimpimage-pick-color.h" "core/gimppickable.h") ],
code => <<'CODE'
{
if (!sample_merged)
if (!drawable || (gimp_item_get_image (GIMP_ITEM (drawable)) != image))
success = FALSE;
if (success && sample_average)
{
if (average_radius <= 0.0)
success = FALSE;
}
if (success)
{
if (sample_merged)
gimp_pickable_flush (GIMP_PICKABLE (gimp_image_get_projection (image)));
else
gimp_pickable_flush (GIMP_PICKABLE (drawable));
success = gimp_image_pick_color (image,
drawable,
(gint) x, (gint) y,
sample_merged,
sample_average,
average_radius,
NULL,
&color,
NULL);
}
}
CODE
);
}
sub image_pick_correlate_layer {
$blurb = 'Find the layer visible at the specified coordinates.';
$help = <<'HELP';
This procedure finds the layer which is visible at the specified
coordinates. Layers which do not qualify are those whose extents do
not pass within the specified coordinates, or which are transparent at
the specified coordinates. This procedure will return -1 if no layer
is found.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'x', type => 'int32',
desc => 'The x coordinate for the pick' },
{ name => 'y', type => 'int32',
desc => 'The y coordinate for the pick' }
);
@outargs = (
{ name => 'layer', type => 'layer',
desc => 'The layer found at the specified coordinates' }
);
%invoke = (
code => <<'CODE'
{
layer = gimp_image_pick_layer (image, x, y);
}
CODE
);
}
sub image_get_layer_position {
$blurb = 'Returns the position of the layer in the layer stack.';
$help = <<'HELP';
This procedure determines the position of the specified layer in the
images layer stack. If the layer doesn't exist in the image, an error
is returned.
HELP
&simon_pdb_misc('2006', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer' }
);
@outargs = (
{ name => 'position', type => 'int32',
desc => "The position of the layer in the layer stack" }
);
%invoke = (
code => <<'CODE'
{
position = gimp_container_get_child_index (GIMP_CONTAINER (image->layers),
GIMP_OBJECT (layer));
if (position < 0)
success = FALSE;
}
CODE
);
}
sub image_raise_layer {
$blurb = "Raise the specified layer in the image's layer stack";
$help = <<'HELP';
This procedure raises the specified layer one step in the existing layer stack.
The procecure call will fail if there is no layer above it.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer to raise' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_raise_layer (image, layer, error);
}
CODE
);
}
sub image_lower_layer {
$blurb = "Lower the specified layer in the image's layer stack";
$help = <<'HELP';
This procedure lowers the specified layer one step in the existing layer stack.
The procecure call will fail if there is no layer below it.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer to lower' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_lower_layer (image, layer, error);
}
CODE
);
}
sub image_raise_layer_to_top {
$blurb = <<'BLURB';
Raise the specified layer in the image's layer stack to top of stack
BLURB
$help = <<'HELP';
This procedure raises the specified layer to top of the existing layer stack.
It will not move the layer if there is no layer above it.
HELP
&wolfgang_pdb_misc('1998');
$author .= ", Sven Neumann";
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer to raise to top' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_raise_layer_to_top (image, layer);
}
CODE
);
}
sub image_lower_layer_to_bottom {
$blurb = <<'BLURB';
Lower the specified layer in the image's layer stack to bottom of stack
BLURB
$help = <<'HELP';
This procedure lowers the specified layer to bottom of the existing layer stack.
It will not move the layer if there is no layer below it.
HELP
&wolfgang_pdb_misc('1998');
$author .= ", Sven Neumann";
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer to lower to bottom' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_lower_layer_to_bottom (image, layer);
}
CODE
);
}
sub image_merge_visible_layers {
$blurb = 'Merge the visible image layers into one.';
$help = <<'HELP';
This procedure combines the visible layers into a single layer using
the specified merge type. A merge type of EXPAND_AS_NECESSARY expands
the final layer to encompass the areas of the visible layers. A merge
type of CLIP_TO_IMAGE clips the final layer to the extents of the
image. A merge type of CLIP_TO_BOTTOM_LAYER clips the final layer to
the size of the bottommost layer.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'merge_type',
type => 'enum GimpMergeType (no GIMP_FLATTEN_IMAGE)',
desc => 'The type of merge' }
);
@outargs = (
{ name => 'layer', type => 'layer',
desc => 'The resulting layer' }
);
%invoke = (
headers => [ qw("core/gimpimage-merge.h") ],
code => <<'CODE'
{
layer = gimp_image_merge_visible_layers (image, context, merge_type, FALSE);
if (! layer)
success = FALSE;
}
CODE
);
}
sub image_merge_down {
$blurb = 'Merge the layer passed and the first visible layer below.';
$help = <<'HELP';
This procedure combines the passed layer and the first visible layer
below it using the specified merge type. A merge type of
EXPAND_AS_NECESSARY expands the final layer to encompass the areas of
the visible layers. A merge type of CLIP_TO_IMAGE clips the final
layer to the extents of the image. A merge type of
CLIP_TO_BOTTOM_LAYER clips the final layer to the size of the
bottommost layer.
HELP
&larry_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'merge_layer', type => 'layer',
desc => 'The layer to merge down from' },
{ name => 'merge_type',
type => 'enum GimpMergeType (no GIMP_FLATTEN_IMAGE)',
desc => 'The type of merge' }
);
@outargs = (
{ name => 'layer', type => 'layer',
desc => 'The resulting layer' }
);
%invoke = (
headers => [ qw("core/gimpimage-merge.h") ],
code => <<'CODE'
{
if (gimp_pdb_item_is_attached (GIMP_ITEM (merge_layer), FALSE, error))
{
layer = gimp_image_merge_down (image, merge_layer, context, merge_type,
error);
if (! layer)
success = FALSE;
}
else
success = FALSE;
}
CODE
);
}
sub image_flatten {
$blurb = <<'BLURB';
Flatten all visible layers into a single layer. Discard all invisible layers.
BLURB
$help = <<'HELP';
This procedure combines the visible layers in a manner analogous to merging
with the CLIP_TO_IMAGE merge type. Non-visible layers are discarded, and the
resulting image is stripped of its alpha channel.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'layer', type => 'layer',
desc => 'The resulting layer' }
);
%invoke = (
headers => [ qw("core/gimpimage-merge.h") ],
code => <<'CODE'
{
layer = gimp_image_flatten (image, context);
if (! layer)
success = FALSE;
}
CODE
);
}
sub image_add_layer {
$blurb = 'Add the specified layer to the image.';
$help = <<'HELP';
This procedure adds the specified layer to the image at the given position.
If the position is specified as -1, then the layer is inserted above the
active layer. The layer type must be compatible with the image base type.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer' },
{ name => 'position', type => 'int32',
desc => 'The layer position' }
);
$invoke{code} = <<'CODE';
{
if (gimp_pdb_item_is_floating (GIMP_ITEM (layer), image, error) &&
gimp_pdb_image_is_base_type (image,
GIMP_IMAGE_TYPE_BASE_TYPE (gimp_drawable_type (GIMP_DRAWABLE (layer))),
error))
{
/* FIXME tree */
success = gimp_image_add_layer (image, layer,
NULL, MAX (position, -1), TRUE);
}
else
{
success = FALSE;
}
}
CODE
}
sub image_remove_layer {
$blurb = 'Remove the specified layer from the image.';
$help = <<'HELP';
This procedure removes the specified layer from the image. If the
layer doesn't exist, an error is returned. If there are no layers left
in the image, this call will fail. If this layer is the last layer
remaining, the image will become empty and have no active layer.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), FALSE, error))
gimp_image_remove_layer (image, layer, TRUE, NULL);
else
success = FALSE;
}
CODE
);
}
sub image_add_layer_mask {
&std_pdb_deprecated ('gimp-layer-add-mask');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer to receive the mask' },
{ name => 'mask', type => 'layer_mask',
desc => 'The mask to add to the layer' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_pdb_item_is_floating (GIMP_ITEM (mask), image, error) &&
gimp_pdb_item_is_not_group (GIMP_ITEM (layer), error))
success = (gimp_layer_add_mask (layer, mask, TRUE, error) == mask);
else
success = FALSE;
}
CODE
);
}
sub image_remove_layer_mask {
&std_pdb_deprecated ('gimp-layer-remove-mask');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'layer', type => 'layer',
desc => 'The layer from which to remove mask' },
{ name => 'mode', type => 'enum GimpMaskApplyMode',
desc => 'Removal mode' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), mode == GIMP_MASK_APPLY, error) &&
gimp_layer_get_mask (layer))
gimp_layer_apply_mask (layer, mode, TRUE);
else
success = FALSE;
}
CODE
);
}
sub image_get_channel_position {
$blurb = 'Returns the position of the channel in the channel stack.';
$help = <<'HELP';
This procedure determines the position of the specified channel in
the images channel stack. If the channel doesn't exist in the image,
an error is returned.
HELP
&simon_pdb_misc('2006', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'channel', type => 'channel',
desc => 'The channel' }
);
@outargs = (
{ name => 'position', type => 'int32',
desc => "The position of the channel in the channel stack" }
);
%invoke = (
code => <<'CODE'
{
position = gimp_container_get_child_index (GIMP_CONTAINER (image->channels),
GIMP_OBJECT (channel));
if (position < 0)
success = FALSE;
}
CODE
);
}
sub image_raise_channel {
$blurb = "Raise the specified channel in the image's channel stack";
$help = <<'HELP';
This procedure raises the specified channel one step in the existing
channel stack. The procecure call will fail if there is no channel
above it.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'channel', type => 'channel',
desc => 'The channel to raise' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_raise_channel (image, channel, error);
}
CODE
);
}
sub image_lower_channel {
$blurb = "Lower the specified channel in the image's channel stack";
$help = <<'HELP';
This procedure lowers the specified channel one step in the existing
channel stack. The procecure call will fail if there is no channel
below it.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'channel', type => 'channel',
desc => 'The channel to lower' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_lower_channel (image, channel, error);
}
CODE
);
}
sub image_add_channel {
$blurb = 'Add the specified channel to the image.';
$help = <<'HELP';
This procedure adds the specified channel to the image at the given position.
If the position is specified as -1, then the channel is inserted above the
active channel or, if no channel is active, at the top of the channel stack.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'channel', type => 'channel',
desc => 'The channel' },
{ name => 'position', type => 'int32',
desc => 'The channel position' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_pdb_item_is_floating (GIMP_ITEM (channel), image, error))
{
/* FIXME tree */
success = gimp_image_add_channel (image, channel,
NULL, MAX (position, -1), TRUE);
}
else
{
success = FALSE;
}
}
CODE
);
}
sub image_remove_channel {
$blurb = 'Remove the specified channel from the image.';
$help = <<'HELP';
This procedure removes the specified channel from the image. If the channel
doesn't exist, an error is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'channel', type => 'channel',
desc => 'The channel' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), FALSE, error))
gimp_image_remove_channel (image, channel, TRUE, NULL);
else
success = FALSE;
}
CODE
);
}
sub image_add_vectors {
$blurb = 'Add the specified vectors object to the image.';
$help = <<'HELP';
This procedure adds the specified vectors object to the image at the given
position. If the position is specified as -1, then the vectors object is
inserted at the top of the vectors stack.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object' },
{ name => 'position', type => 'int32',
desc => 'The vectors objects position' }
);
$invoke{code} = <<'CODE';
{
if (gimp_pdb_item_is_floating (GIMP_ITEM (vectors), image, error))
{
/* FIXME tree */
success = gimp_image_add_vectors (image, vectors,
NULL, MAX (position, -1), TRUE);
}
else
{
success = FALSE;
}
}
CODE
}
sub image_remove_vectors {
$blurb = 'Remove the specified path from the image.';
$help = <<'HELP';
This procedure removes the specified path from the image. If the path
doesn't exist, an error is returned.
HELP
&simon_pdb_misc('2005', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), FALSE, error))
gimp_image_remove_vectors (image, vectors, TRUE, NULL);
else
success = FALSE;
}
CODE
);
}
sub image_get_vectors_position {
$blurb = 'Returns the position of the vectors object in the vectors objects stack.';
$help = <<'HELP';
This procedure determines the position of the specified vectors object in the
images vectors object stack. If the vectors object doesn't exist in the image,
an error is returned.
HELP
&simon_pdb_misc('2006', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object' }
);
@outargs = (
{ name => 'position', type => 'int32',
desc => "The position of the vectors object in the vectors stack" }
);
%invoke = (
code => <<'CODE'
{
position = gimp_container_get_child_index (GIMP_CONTAINER (image->vectors),
GIMP_OBJECT (vectors));
if (position < 0)
success = FALSE;
}
CODE
);
}
sub image_raise_vectors {
$blurb = "Raise the specified vectors in the image's vectors stack";
$help = <<'HELP';
This procedure raises the specified vectors one step in the existing
vectors stack. The procecure call will fail if there is no vectors
above it.
HELP
&simon_pdb_misc('2005', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object to raise' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_raise_vectors (image, vectors, error);
}
CODE
);
}
sub image_lower_vectors {
$blurb = "Lower the specified vectors in the image's vectors stack";
$help = <<'HELP';
This procedure lowers the specified vectors one step in the existing
vectors stack. The procecure call will fail if there is no vectors
below it.
HELP
&simon_pdb_misc('2005', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object to lower' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_lower_vectors (image, vectors, error);
}
CODE
);
}
sub image_raise_vectors_to_top {
$blurb = <<'BLURB';
Raise the specified vectors in the image's vectors stack to top of stack
BLURB
$help = <<'HELP';
This procedure raises the specified vectors to top of the existing
vectors stack. It will not move the vectors if there is no vectors
above it.
HELP
&simon_pdb_misc('2005', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object to raise to top' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_raise_vectors_to_top (image, vectors);
}
CODE
);
}
sub image_lower_vectors_to_bottom {
$blurb = <<'BLURB';
Lower the specified vectors in the image's vectors stack to bottom of stack
BLURB
$help = <<'HELP';
This procedure lowers the specified vectors to bottom of the existing
vectors stack. It will not move the vectors if there is no vectors
below it.
HELP
&simon_pdb_misc('2005', '2.4');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'vectors', type => 'vectors',
desc => 'The vectors object to lower to bottom' }
);
%invoke = (
code => <<'CODE'
{
success = gimp_image_lower_vectors_to_bottom (image, vectors);
}
CODE
);
}
sub image_get_active_drawable {
$blurb = "Get the image's active drawable";
$help = <<'HELP';
This procedure returns the ID of the image's active drawable. This can be
either a layer, a channel, or a layer mask. The active drawable is specified by
the active image channel. If that is -1, then by the active image layer. If the
active image layer has a layer mask and the layer mask is in edit mode, then
the layer mask is the active drawable.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'drawable', type => 'drawable',
desc => 'The active drawable' }
);
%invoke = (
code => <<'CODE'
{
drawable = gimp_image_get_active_drawable (image);
}
CODE
);
}
sub image_base_type {
$blurb = 'Get the base type of the image.';
$help = <<'HELP';
This procedure returns the image's base type. Layers in the image must be of
this subtype, but can have an optional alpha channel.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'base_type', type => 'enum GimpImageBaseType',
desc => "The image's base type" }
);
%invoke = (
code => <<'CODE'
{
base_type = gimp_image_base_type (image);
}
CODE
);
}
sub image_get_colormap {
$blurb = "Returns the image's colormap";
$help = <<'HELP';
This procedure returns an actual pointer to the image's colormap, as well as
the number of bytes contained in the colormap. The actual number of colors in
the transmitted colormap will be 'num-bytes' / 3. If the image is not in
Indexed color mode, no colormap is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'colormap', type => 'int8array', wrap => 1,
desc => "The image's colormap",
array => { name => 'num_bytes',
desc => 'Number of bytes in the colormap array' } }
);
%invoke = (
headers => [ qw("core/gimpimage-colormap.h") ],
code => <<'CODE'
{
num_bytes = 3 * gimp_image_get_colormap_size (image);
colormap = g_memdup (gimp_image_get_colormap (image), num_bytes);
}
CODE
);
}
sub image_set_colormap {
$blurb = "Sets the entries in the image's colormap.";
$help = <<'HELP';
This procedure sets the entries in the specified image's colormap. The number
of entries is specified by the 'num-bytes' parameter and corresponds to the
number of INT8 triples that must be contained in the 'colormap' array. The
actual number of colors in the transmitted colormap is 'num-bytes' / 3.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'colormap', type => 'int8array', wrap => 1,
desc => 'The new colormap values',
array => { name => 'num_bytes', type => '0 <= int32 <= 768',
desc => 'Number of bytes in the colormap array' } }
);
%invoke = (
headers => [ qw("core/gimpimage-colormap.h") ],
code => <<'CODE'
{
gimp_image_set_colormap (image, colormap, num_bytes / 3, TRUE);
}
CODE
);
}
sub image_clean_all {
$blurb = 'Set the image dirty count to 0.';
$help = <<'HELP';
This procedure sets the specified image's dirty count to 0, allowing
operations to occur without having a 'dirtied' image. This is
especially useful for creating and loading images which should not
initially be considered dirty, even though layers must be created,
filled, and installed in the image. Note that save plug-ins must NOT
call this function themselves after saving the image.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
%invoke = (
code => <<'CODE'
{
gimp_image_clean_all (image);
}
CODE
);
}
sub image_is_dirty {
$blurb = 'Checks if the image has unsaved changes.';
$help = <<'HELP';
This procedure checks the specified image's dirty count to see if it
needs to be saved. Note that saving the image does not automatically
set the dirty count to 0, you need to call gimp_image_clean_all() after
calling a save procedure to make the image clean.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'dirty', type => 'boolean',
desc => 'TRUE if the image has unsaved changes.' }
);
%invoke = (
code => <<'CODE'
{
dirty = gimp_image_is_dirty (image);
}
CODE
);
}
sub image_get_floating_sel {
$blurb = 'Return the floating selection of the image.';
$help = <<'HELP';
This procedure returns the image's floating selection, if it exists.
If it doesn't exist, -1 is returned as the layer ID.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'floating_sel', type => 'layer',
desc => "The image's floating selection" }
);
%invoke = (
code => <<'CODE'
{
floating_sel = gimp_image_get_floating_selection (image);
}
CODE
);
}
sub image_floating_sel_attached_to {
$blurb = 'Return the drawable the floating selection is attached to.';
$help = <<'HELP';
This procedure returns the drawable the image's floating selection is attached
to, if it exists. If it doesn't exist, -1 is returned as the drawable ID.
HELP
&wolfgang_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'drawable', type => 'drawable',
desc => 'The drawable the floating selection is attached to' }
);
%invoke = (
code => <<'CODE'
{
GimpLayer *floating_sel = gimp_image_get_floating_selection (image);
if (floating_sel)
drawable = gimp_layer_get_floating_sel_drawable (floating_sel);
else
drawable = NULL;
}
CODE
);
}
sub image_width {
$blurb = 'Return the width of the image';
$help = <<'HELP';
This procedure returns the image's width. This value is independent of any of
the layers in this image. This is the "canvas" width.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'width', type => 'int32',
desc => "The image's width" }
);
%invoke = (
code => <<'CODE'
{
width = gimp_image_get_width (image);
}
CODE
);
}
sub image_height {
$blurb = 'Return the height of the image';
$help = <<'HELP';
This procedure returns the image's height. This value is independent of any of
the layers in this image. This is the "canvas" height.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'height', type => 'int32',
desc => "The image's height" }
);
%invoke = (
code => <<'CODE'
{
height = gimp_image_get_height (image);
}
CODE
);
}
sub image_get_active_layer {
$blurb = "Returns the specified image's active layer.";
$help = <<'HELP';
If there is an active layer, its ID will be returned, otherwise, -1. If a
channel is currently active, then no layer will be. If a layer mask is active,
then this will return the associated layer.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'active_layer', type => 'layer',
desc => 'The active layer' }
);
%invoke = (
code => <<'CODE'
{
active_layer = gimp_image_get_active_layer (image);
}
CODE
);
}
sub image_set_active_layer {
$blurb = "Sets the specified image's active layer.";
$help = <<'HELP';
If the layer exists, it is set as the active layer in the image. Any
previous active layer or channel is set to inactive. An exception is a
previously existing floating selection, in which case this procedure
will return an execution error.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'active_layer', type => 'layer',
desc => 'The new image active layer' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_image_set_active_layer (image, active_layer) != active_layer)
success = FALSE;
}
CODE
);
}
sub image_get_active_channel {
$blurb = "Returns the specified image's active channel.";
$help = <<'HELP';
If there is an active channel, this will return the channel ID, otherwise, -1.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'active_channel', type => 'channel',
desc => 'The active channel' }
);
%invoke = (
code => <<'CODE'
{
active_channel = gimp_image_get_active_channel (image);
}
CODE
);
}
sub image_set_active_channel {
$blurb = "Sets the specified image's active channel.";
$help = <<'HELP';
If the channel exists, it is set as the active channel in the
image. Any previous active channel or channel is set to inactive. An
exception is a previously existing floating selection, in which case
this procedure will return an execution error.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'active_channel', type => 'channel',
desc => 'The new image active channel' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_image_set_active_channel (image, active_channel) != active_channel)
success = FALSE;
}
CODE
);
}
sub image_get_active_vectors {
$blurb = "Returns the specified image's active vectors.";
$help = <<'HELP';
If there is an active path, its ID will be returned, otherwise, -1.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'active_vectors', type => 'vectors',
desc => 'The active vectors' }
);
%invoke = (
code => <<'CODE'
{
active_vectors = gimp_image_get_active_vectors (image);
}
CODE
);
}
sub image_set_active_vectors {
$blurb = "Sets the specified image's active vectors.";
$help = <<'HELP';
If the path exists, it is set as the active path in the image.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'active_vectors', type => 'vectors',
desc => 'The new image active vectors' }
);
%invoke = (
code => <<'CODE'
{
if (gimp_image_set_active_vectors (image, active_vectors) != active_vectors)
success = FALSE;
}
CODE
);
}
sub image_get_selection {
$blurb = "Returns the specified image's selection.";
$help = <<'HELP';
This will always return a valid ID for a selection -- which is represented as a
channel internally.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'selection', type => 'selection',
desc => 'The selection channel' }
);
%invoke = (
code => <<'CODE'
{
selection = GIMP_SELECTION (gimp_image_get_mask (image));
if (! selection)
success = FALSE;
}
CODE
);
}
sub image_get_component_active {
$blurb = "Returns if the specified image's image component is active.";
$help = <<'HELP';
This procedure returns if the specified image's image component
(i.e. Red, Green, Blue intensity channels in an RGB image) is active
or inactive -- whether or not it can be modified. If the specified
component is not valid for the image type, an error is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'component', type => 'enum GimpChannelType',
desc => 'The image component' }
);
@outargs = (
{ name => 'active', type => 'boolean',
desc => 'Component is active' }
);
%invoke = (
code => <<'CODE'
{
if (component == GIMP_GRAY_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
else if (component == GIMP_INDEXED_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
else
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
if (success)
active = gimp_image_get_component_active (image, component);
}
CODE
);
}
sub image_set_component_active {
$blurb = "Sets if the specified image's image component is active.";
$help = <<'HELP';
This procedure sets if the specified image's image component
(i.e. Red, Green, Blue intensity channels in an RGB image) is active
or inactive -- whether or not it can be modified. If the specified
component is not valid for the image type, an error is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'component', type => 'enum GimpChannelType',
desc => 'The image component' },
{ name => 'active', type => 'boolean',
desc => 'Component is active' }
);
%invoke = (
code => <<'CODE'
{
if (component == GIMP_GRAY_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
else if (component == GIMP_INDEXED_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
else
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
if (success)
gimp_image_set_component_active (image, component, active);
}
CODE
);
}
sub image_get_component_visible {
$blurb = "Returns if the specified image's image component is visible.";
$help = <<'HELP';
This procedure returns if the specified image's image component
(i.e. Red, Green, Blue intensity channels in an RGB image) is visible
or invisible -- whether or not it can be seen. If the specified
component is not valid for the image type, an error is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'component', type => 'enum GimpChannelType',
desc => 'The image component' }
);
@outargs = (
{ name => 'visible', type => 'boolean',
desc => 'Component is visible' }
);
%invoke = (
code => <<'CODE'
{
if (component == GIMP_GRAY_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
else if (component == GIMP_INDEXED_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
else
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
if (success)
visible = gimp_image_get_component_visible (image, component);
}
CODE
);
}
sub image_set_component_visible {
$blurb = "Sets if the specified image's image component is visible.";
$help = <<'HELP';
This procedure sets if the specified image's image component
(i.e. Red, Green, Blue intensity channels in an RGB image) is visible
or invisible -- whether or not it can be seen. If the specified
component is not valid for the image type, an error is returned.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'component', type => 'enum GimpChannelType',
desc => 'The image component' },
{ name => 'visible', type => 'boolean',
desc => 'Component is visible' }
);
%invoke = (
code => <<'CODE'
{
if (component == GIMP_GRAY_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_GRAY, error);
else if (component == GIMP_INDEXED_CHANNEL)
success = gimp_pdb_image_is_base_type (image, GIMP_INDEXED, error);
else
success = gimp_pdb_image_is_base_type (image, GIMP_RGB, error);
if (success)
gimp_image_set_component_visible (image, component, visible);
}
CODE
);
}
sub image_get_filename {
$blurb = "Returns the specified image's filename.";
$help = <<'HELP';
This procedure returns the specified image's filename in the
filesystem encoding. The image has a filename only if it was loaded
from a local filesystem or has since been saved locally. Otherwise,
this function returns %NULL. See also gimp_image_get_uri().
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'filename', type => 'string',
desc => 'The filename' }
);
%invoke = (
code => <<'CODE'
{
filename = gimp_image_get_filename (image);
}
CODE
);
}
sub image_set_filename {
$blurb = "Sets the specified image's filename.";
$help = <<'HELP';
This procedure sets the specified image's filename. The filename
should be in the filesystem encoding.
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'filename', type => 'string',
desc => 'The new image filename', allow_non_utf8 => 1 }
);
%invoke = (
code => <<'CODE'
{
/* verify that the filename can be converted to UTF-8 and back */
gchar *utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, error);
if (utf8)
{
gchar *tmp = g_filename_from_utf8 (utf8, -1, NULL, NULL, error);
if (tmp)
g_free (tmp);
else
success = FALSE;
g_free (utf8);
}
else
success = FALSE;
if (success)
gimp_image_set_filename (image, filename);
}
CODE
);
}
sub image_get_uri {
$blurb = "Returns the URI for the specified image.";
$help = <<'HELP';
This procedure returns the URI associated with the specified image.
The image has an URI only if it was loaded from a file or has since
been saved. Otherwise, this function returns %NULL.
HELP
&neo_pdb_misc('2009', '2.8');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'uri', type => 'string',
desc => 'The URI' }
);
%invoke = (
code => <<'CODE'
{
uri = g_strdup (gimp_object_get_name (image));
}
CODE
);
}
sub image_get_name {
$blurb = "Returns the specified image's name.";
$help = <<'HELP';
This procedure returns the image's name. If the image has a filename or
an URI, then this is the base name (the last component of the path).
Otherwise it is the translated string "Untitled".
HELP
&std_pdb_misc;
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'name', type => 'string',
desc => 'The name' }
);
%invoke = (
code => <<'CODE'
{
name = g_strdup (gimp_image_get_display_name (image));
}
CODE
);
}
sub image_get_resolution {
$blurb = "Returns the specified image's resolution.";
$help = <<'HELP';
This procedure returns the specified image's resolution in dots per inch.
This value is independent of any of the layers in this image.
HELP
&austin_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'xresolution', type => 'float', void_ret => 1,
desc => 'The resolution in the x-axis, in dots per inch' },
{ name => 'yresolution', type => 'float',
desc => 'The resolution in the y-axis, in dots per inch' }
);
%invoke = (
code => <<'CODE'
{
gimp_image_get_resolution (image, &xresolution, &yresolution);
}
CODE
);
}
sub image_set_resolution {
$blurb = "Sets the specified image's resolution.";
$help = <<'HELP';
This procedure sets the specified image's resolution in dots per inch.
This value is independent of any of the layers in this image.
No scaling or resizing is performed.
HELP
&austin_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'xresolution', type => 'float',
desc => 'The new image resolution in the x-axis, in dots per inch' },
{ name => 'yresolution', type => 'float',
desc => 'The new image resolution in the y-axis, in dots per inch' }
);
%invoke = (
code => <<'CODE'
{
if (! FINITE (xresolution) ||
xresolution < GIMP_MIN_RESOLUTION || xresolution > GIMP_MAX_RESOLUTION ||
! FINITE (yresolution) ||
yresolution < GIMP_MIN_RESOLUTION || yresolution > GIMP_MAX_RESOLUTION)
{
g_set_error_literal (error, GIMP_PDB_ERROR, GIMP_PDB_INVALID_ARGUMENT,
_("Image resolution is out of bounds, "
"using the default resolution instead."));
success = FALSE;
}
else
{
gimp_image_set_resolution (image, xresolution, yresolution);
}
}
CODE
);
}
sub image_get_unit {
$blurb = "Returns the specified image's unit.";
$help = <<'HELP';
This procedure returns the specified image's unit. This value is
independent of any of the layers in this image. See the gimp_unit_*()
procedure definitions for the valid range of unit IDs and a
description of the unit system.
HELP
&mitch_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'unit', type => 'unit',
desc => 'The unit' }
);
%invoke = (
code => <<'CODE'
{
unit = gimp_image_get_unit (image);
}
CODE
);
}
sub image_set_unit {
$blurb = "Sets the specified image's unit.";
$help = <<'HELP';
This procedure sets the specified image's unit. No scaling or resizing
is performed. This value is independent of any of the layers in this
image. See the gimp_unit_*() procedure definitions for the valid range
of unit IDs and a description of the unit system.
HELP
&mitch_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'unit', type => 'unit (min GIMP_UNIT_INCH)',
desc => 'The new image unit' }
);
%invoke = (
code => <<'CODE'
{
gimp_image_set_unit (image, unit);
}
CODE
);
}
sub image_get_tattoo_state {
$blurb = 'Returns the tattoo state associated with the image.';
$help = <<'HELP';
This procedure returns the tattoo state of the image. Use only by
save/load plugins that wish to preserve an images tattoo state. Using this
function at other times will produce unexpected results.
HELP
&andy_pdb_misc('2000');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' }
);
@outargs = (
{ name => 'tattoo_state', type => 'tattoo',
desc => 'The tattoo state' }
);
%invoke = (
code => <<'CODE'
{
tattoo_state = gimp_image_get_tattoo_state (image);
}
CODE
);
}
sub image_set_tattoo_state {
$blurb = 'Set the tattoo state associated with the image.';
$help = <<'HELP';
This procedure sets the tattoo state of the image. Use only by
save/load plugins that wish to preserve an images tattoo state. Using
this function at other times will produce unexpected results. A full
check of uniqueness of states in layers, channels and paths will be
performed by this procedure and a execution failure will be returned
if this fails. A failure will also be returned if the new tattoo state
value is less than the maximum tattoo value from all of the tattoos
from the paths, layers and channels. After the image data has been
loaded and all the tattoos have been set then this is the last
procedure that should be called. If effectively does a status check on
the tattoo values that have been set to make sure that all is OK.
HELP
&andy_pdb_misc('2000');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'tattoo_state', type => 'tattoo',
desc => 'The new image tattoo state' }
);
%invoke = (
code => <<'CODE'
{
gimp_image_set_tattoo_state (image, tattoo_state);
}
CODE
);
}
sub image_get_layer_by_tattoo {
$blurb = 'Find a layer with a given tattoo in an image.';
$help = <<'HELP';
This procedure returns the layer with the given tattoo in the specified image.
HELP
&jay_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'tattoo', type => 'tattoo',
desc => 'The tattoo of the layer to find' }
);
@outargs = (
{ name => 'layer', type => 'layer',
desc => 'The layer with the specified tattoo' }
);
%invoke = (
code => <<'CODE'
{
layer = gimp_image_get_layer_by_tattoo (image, tattoo);
}
CODE
);
}
sub image_get_channel_by_tattoo {
$blurb = 'Find a channel with a given tattoo in an image.';
$help = <<'HELP';
This procedure returns the channel with the given tattoo in the specified image.
HELP
&jay_pdb_misc('1998');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'tattoo', type => 'tattoo',
desc => 'The tattoo of the channel to find' }
);
@outargs = (
{ name => 'channel', type => 'channel',
desc => 'The channel with the specified tattoo' }
);
%invoke = (
code => <<'CODE'
{
channel = gimp_image_get_channel_by_tattoo (image, tattoo);
}
CODE
);
}
sub image_get_vectors_by_tattoo {
$blurb = 'Find a vectors with a given tattoo in an image.';
$help = <<'HELP';
This procedure returns the vectors with the given tattoo in the
specified image.
HELP
&simon_pdb_misc('2005', '2.6');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'tattoo', type => 'tattoo',
desc => 'The tattoo of the vectors to find' }
);
@outargs = (
{ name => 'vectors', type => 'vectors',
desc => 'The vectors with the specified tattoo' }
);
%invoke = (
code => <<'CODE'
{
vectors = gimp_image_get_vectors_by_tattoo (image, tattoo);
}
CODE
);
}
sub image_thumbnail {
$blurb = 'Get a thumbnail of an image.';
$help = <<'HELP';
This function gets data from which a thumbnail of an image preview can
be created. Maximum x or y dimension is 1024 pixels. The pixels are
returned in RGB[A] or GRAY[A] format. The bpp return value gives the
number of bits per pixel in the image.
HELP
&andy_pdb_misc('1999');
@inargs = (
{ name => 'image', type => 'image',
desc => 'The image' },
{ name => 'width', type => '1 <= int32 <= 1024',
desc => 'The requested thumbnail width' },
{ name => 'height', type => '1 <= int32 <= 1024',
desc => 'The requested thumbnail height' }
);
@outargs = (
{ name => 'actual_width', type => 'int32', void_ret => 1,
desc => 'The previews width' },
{ name => 'actual_height', type => 'int32',
desc => 'The previews height' },
{ name => 'bpp', type => 'int32',
desc => 'The previews bpp' },
{ name => 'thumbnail_data', type => 'int8array', wrap => 1,
desc => 'The thumbnail data',
array => { name => 'thumbnail_data_count',
desc => 'The number of bytes in thumbnail data' } }
);
%invoke = (
code => <<'CODE'
{
TempBuf *buf;
gint dwidth, dheight;
g_assert (GIMP_VIEWABLE_MAX_PREVIEW_SIZE >= 1024);
/* Adjust the width/height ratio */
dwidth = gimp_image_get_width (image);
dheight = gimp_image_get_height (image);
if (dwidth > dheight)
height = MAX (1, (width * dheight) / dwidth);
else
width = MAX (1, (height * dwidth) / dheight);
gimp_pickable_flush (GIMP_PICKABLE (gimp_image_get_projection (image)));
buf = gimp_viewable_get_new_preview (GIMP_VIEWABLE (image), context,
width, height);
if (buf)
{
actual_width = buf->width;
actual_height = buf->height;
bpp = buf->bytes;
thumbnail_data_count = actual_width * actual_height * bpp;
thumbnail_data = g_memdup (temp_buf_get_data (buf),
thumbnail_data_count);
temp_buf_free (buf);
}
else
success = FALSE;
}
CODE
);
}
$extra{app}->{code} = <<'CODE';
#if defined (HAVE_FINITE)
#define FINITE(x) finite(x)
#elif defined (HAVE_ISFINITE)
#define FINITE(x) isfinite(x)
#elif defined (G_OS_WIN32)
#define FINITE(x) _finite(x)
#else
#error "no FINITE() implementation available?!"
#endif
CODE
@headers = qw("libgimpmath/gimpmath.h"
"libgimpbase/gimpbase.h"
"base/temp-buf.h"
"core/gimp.h"
"core/gimpcontainer.h"
"core/gimpprogress.h"
"core/gimpunit.h"
"gimppdberror.h"
"gimppdb-utils.h"
"gimp-intl.h");
@procs = qw(image_is_valid
image_list
image_new image_duplicate image_delete
image_base_type
image_width image_height
image_free_shadow
image_resize image_resize_to_layers
image_scale image_scale_full
image_crop image_flip image_rotate
image_get_layers
image_get_channels
image_get_vectors
image_get_active_drawable
image_unset_active_channel
image_get_floating_sel
image_floating_sel_attached_to
image_pick_color
image_pick_correlate_layer
image_add_layer image_remove_layer
image_get_layer_position
image_raise_layer image_lower_layer
image_raise_layer_to_top image_lower_layer_to_bottom
image_add_channel image_remove_channel
image_get_channel_position
image_raise_channel image_lower_channel
image_add_vectors image_remove_vectors
image_get_vectors_position
image_raise_vectors image_lower_vectors
image_raise_vectors_to_top image_lower_vectors_to_bottom
image_flatten image_merge_visible_layers image_merge_down
image_add_layer_mask image_remove_layer_mask
image_get_colormap image_set_colormap
image_clean_all image_is_dirty
image_thumbnail
image_get_active_layer image_set_active_layer
image_get_active_channel image_set_active_channel
image_get_active_vectors image_set_active_vectors
image_get_selection
image_get_component_active image_set_component_active
image_get_component_visible image_set_component_visible
image_get_filename image_set_filename
image_get_uri
image_get_name
image_get_resolution image_set_resolution
image_get_unit image_set_unit
image_get_tattoo_state image_set_tattoo_state
image_get_layer_by_tattoo
image_get_channel_by_tattoo
image_get_vectors_by_tattoo);
%exports = (app => [@procs], lib => [@procs[0..46,49..77]]);
$desc = 'Image';
1;