203 lines
5.7 KiB
Plaintext
203 lines
5.7 KiB
Plaintext
# PIKA - Photo and Image Kooker Application
|
|
# 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 <https://www.gnu.org/licenses/>.
|
|
|
|
# "Perlized" from C source by Manish Singh <yosh@gimp.org>
|
|
|
|
sub image_add_sample_point {
|
|
$blurb = 'Add a sample point to an image.';
|
|
|
|
$help = <<HELP;
|
|
This procedure adds a sample point to an image. It takes the input
|
|
image and the position of the new sample points as parameters. It
|
|
returns the sample point ID of the new sample point.
|
|
HELP
|
|
|
|
&mitch_pdb_misc('2016', '2.10');
|
|
|
|
@inargs = (
|
|
{ name => 'image', type => 'image',
|
|
desc => 'The image' },
|
|
{ name => 'position_x', type => '0 <= int32',
|
|
desc => "The sample point's x-offset from left of image" },
|
|
{ name => 'position_y', type => '0 <= int32',
|
|
desc => "The sample point's y-offset from top of image" }
|
|
);
|
|
|
|
@outargs = (
|
|
{ name => 'sample_point', type => 'sample_point',
|
|
desc => 'The new sample point' }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
if (position_x <= pika_image_get_width (image) &&
|
|
position_y <= pika_image_get_height (image))
|
|
{
|
|
PikaSamplePoint *sp;
|
|
|
|
sp = pika_image_add_sample_point_at_pos (image, position_x, position_y,
|
|
TRUE);
|
|
sample_point = pika_aux_item_get_id (PIKA_AUX_ITEM (sp));
|
|
}
|
|
else
|
|
success = FALSE;
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
sub image_delete_sample_point {
|
|
$blurb = 'Deletes a sample point from an image.';
|
|
|
|
$help = <<'HELP';
|
|
This procedure takes an image and a sample point ID as input and
|
|
removes the specified sample point from the specified image.
|
|
HELP
|
|
|
|
&mitch_pdb_misc('2016', '2.10');
|
|
|
|
@inargs = (
|
|
{ name => 'image', type => 'image',
|
|
desc => 'The image' },
|
|
{ name => 'sample_point', type => 'sample_point',
|
|
desc => 'The ID of the sample point to be removed' }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
PikaSamplePoint *sp = pika_pdb_image_get_sample_point (image, sample_point,
|
|
error);
|
|
|
|
if (sp)
|
|
pika_image_remove_sample_point (image, sp, TRUE);
|
|
else
|
|
success = FALSE;
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
sub image_find_next_sample_point {
|
|
$blurb = 'Find next sample point on an image.';
|
|
|
|
$help = <<'HELP';
|
|
This procedure takes an image and a sample point ID as input and finds
|
|
the sample point ID of the successor of the given sample point ID in
|
|
the image's sample point list. If the supplied sample point ID is 0,
|
|
the procedure will return the first sample point. The procedure will
|
|
return 0 if given the final sample point ID as an argument or the
|
|
image has no sample points.
|
|
HELP
|
|
|
|
&mitch_pdb_misc('2016', '2.10');
|
|
|
|
@inargs = (
|
|
{ name => 'image', type => 'image',
|
|
desc => 'The image' },
|
|
{ name => 'sample_point', type => 'sample_point', no_validate => 1,
|
|
desc => 'The ID of the current sample point (0 if first invocation)' }
|
|
);
|
|
|
|
@outargs = (
|
|
{ name => 'next_sample_point', type => 'sample_point',
|
|
desc => "The next sample point's ID" }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
PikaSamplePoint *sp = pika_image_get_next_sample_point (image, sample_point,
|
|
&success);
|
|
|
|
if (sp)
|
|
next_sample_point = pika_aux_item_get_id (PIKA_AUX_ITEM (sp));
|
|
|
|
if (! success)
|
|
g_set_error (error, PIKA_PDB_ERROR, PIKA_PDB_ERROR_INVALID_ARGUMENT,
|
|
_("Image '%s' (%d) does not contain sample point with ID %d"),
|
|
pika_image_get_display_name (image),
|
|
pika_image_get_id (image),
|
|
sample_point);
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
sub image_get_sample_point_position {
|
|
$blurb = 'Get position of a sample point on an image.';
|
|
|
|
$help = <<'HELP';
|
|
This procedure takes an image and a sample point ID as input and
|
|
returns the position of the sample point relative to the top and left
|
|
of the image.
|
|
HELP
|
|
|
|
&mitch_pdb_misc('2016', '2.10');
|
|
|
|
@inargs = (
|
|
{ name => 'image', type => 'image',
|
|
desc => 'The image' },
|
|
{ name => 'sample_point', type => 'sample_point',
|
|
desc => 'The guide' }
|
|
);
|
|
|
|
@outargs = (
|
|
{ name => 'position_x', type => 'int32',
|
|
libdef => 'G_MININT',
|
|
desc => "The sample point's x-offset relative to left of image" },
|
|
{ name => 'position_y', type => 'int32',
|
|
libdef => 'G_MININT',
|
|
desc => "The sample point's y-offset relative to top of image" }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
PikaSamplePoint *sp = pika_pdb_image_get_sample_point (image, sample_point,
|
|
error);
|
|
|
|
if (sp)
|
|
pika_sample_point_get_position (sp, &position_x, &position_y);
|
|
else
|
|
success = FALSE;
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
|
|
@headers = qw("core/pikasamplepoint.h"
|
|
"core/pikaimage-sample-points.h"
|
|
"pikapdb-utils.h"
|
|
"pikapdberror.h"
|
|
"pika-intl.h");
|
|
|
|
@procs = qw(image_add_sample_point
|
|
image_delete_sample_point
|
|
image_find_next_sample_point
|
|
image_get_sample_point_position);
|
|
|
|
%exports = (app => [@procs], lib => [@procs]);
|
|
|
|
$desc = 'Image Sample Point procedures';
|
|
$doc_title = 'pikaimagesamplepoints';
|
|
$doc_short_desc = 'Functions for manipulating an image\'s sample points.';
|
|
$doc_long_desc = 'Functions for manipulating an image\'s sample points.';
|
|
|
|
1;
|