194 lines
5.4 KiB
Plaintext
194 lines
5.4 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 floating_sel_remove {
|
|
$blurb = <<'BLURB';
|
|
Remove the specified floating selection from its associated drawable.
|
|
BLURB
|
|
|
|
$help = <<'HELP';
|
|
This procedure removes the floating selection completely, without any side
|
|
effects. The associated drawable is then set to active.
|
|
HELP
|
|
|
|
&std_pdb_misc;
|
|
|
|
@inargs = (
|
|
{ name => 'floating_sel', type => 'layer',
|
|
desc => 'The floating selection' }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
if (pika_layer_is_floating_sel (floating_sel))
|
|
{
|
|
pika_image_remove_layer (pika_item_get_image (PIKA_ITEM (floating_sel)),
|
|
floating_sel, TRUE, NULL);
|
|
}
|
|
else
|
|
{
|
|
g_set_error_literal (error, PIKA_PDB_ERROR,
|
|
PIKA_PDB_ERROR_INVALID_ARGUMENT,
|
|
_("Cannot remove this layer because "
|
|
"it is not a floating selection."));
|
|
success = FALSE;
|
|
}
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
sub floating_sel_anchor {
|
|
$blurb = <<'BLURB';
|
|
Anchor the specified floating selection to its associated drawable.
|
|
BLURB
|
|
|
|
$help = <<'HELP';
|
|
This procedure anchors the floating selection to its associated drawable. This
|
|
is similar to merging with a merge type of ClipToBottomLayer. The floating
|
|
selection layer is no longer valid after this operation.
|
|
HELP
|
|
|
|
&std_pdb_misc;
|
|
|
|
@inargs = (
|
|
{ name => 'floating_sel', type => 'layer',
|
|
desc => 'The floating selection' }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
if (pika_layer_is_floating_sel (floating_sel))
|
|
{
|
|
floating_sel_anchor (floating_sel);
|
|
}
|
|
else
|
|
{
|
|
g_set_error_literal (error, PIKA_PDB_ERROR,
|
|
PIKA_PDB_ERROR_INVALID_ARGUMENT,
|
|
_("Cannot anchor this layer because "
|
|
"it is not a floating selection."));
|
|
success = FALSE;
|
|
}
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
sub floating_sel_to_layer {
|
|
$blurb = 'Transforms the specified floating selection into a layer.';
|
|
|
|
$help = <<'HELP';
|
|
This procedure transforms the specified floating selection into a layer with
|
|
the same offsets and extents. The composited image will look precisely the
|
|
same, but the floating selection layer will no longer be clipped to the extents
|
|
of the drawable it was attached to. The floating selection will become the
|
|
active layer. This procedure will not work if the floating selection has a
|
|
different base type from the underlying image. This might be the case if the
|
|
floating selection is above an auxiliary channel or a layer mask.
|
|
HELP
|
|
|
|
&std_pdb_misc;
|
|
|
|
@inargs = (
|
|
{ name => 'floating_sel', type => 'layer',
|
|
desc => 'The floating selection' }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
if (pika_layer_is_floating_sel (floating_sel))
|
|
{
|
|
success = floating_sel_to_layer (floating_sel, error);
|
|
}
|
|
else
|
|
{
|
|
g_set_error_literal (error, PIKA_PDB_ERROR,
|
|
PIKA_PDB_ERROR_INVALID_ARGUMENT,
|
|
_("Cannot convert this layer to a normal layer "
|
|
"because it is not a floating selection."));
|
|
success = FALSE;
|
|
}
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
sub floating_sel_attach {
|
|
$blurb = <<'BLURB';
|
|
Attach the specified layer as floating to the specified drawable.
|
|
BLURB
|
|
|
|
$help = <<'HELP';
|
|
This procedure attaches the layer as floating selection to the drawable.
|
|
HELP
|
|
|
|
&std_pdb_misc;
|
|
|
|
@inargs = (
|
|
{ name => 'layer', type => 'layer',
|
|
desc => 'The layer (is attached as floating selection)' },
|
|
{ name => 'drawable', type => 'drawable',
|
|
desc => 'The drawable (where to attach the floating selection)' }
|
|
);
|
|
|
|
%invoke = (
|
|
code => <<'CODE'
|
|
{
|
|
if (pika_pdb_item_is_attached (PIKA_ITEM (drawable), NULL,
|
|
PIKA_PDB_ITEM_CONTENT, error) &&
|
|
pika_pdb_item_is_not_group (PIKA_ITEM (drawable), error))
|
|
{
|
|
/* see layer-new */
|
|
if (pika_drawable_is_gray (PIKA_DRAWABLE (layer)) &&
|
|
PIKA_IS_LAYER (drawable))
|
|
pika_layer_fix_format_space (layer, TRUE, FALSE);
|
|
|
|
floating_sel_attach (layer, drawable);
|
|
}
|
|
else
|
|
success = FALSE;
|
|
}
|
|
CODE
|
|
);
|
|
}
|
|
|
|
|
|
@headers = qw("core/pikaimage.h"
|
|
"core/pikalayer-floating-selection.h"
|
|
"pikapdberror.h"
|
|
"pikapdb-utils.h"
|
|
"pika-intl.h");
|
|
|
|
@procs = qw(floating_sel_remove
|
|
floating_sel_anchor
|
|
floating_sel_to_layer
|
|
floating_sel_attach);
|
|
|
|
%exports = (app => [@procs], lib => [@procs]);
|
|
|
|
$desc = 'Floating selections';
|
|
$doc_title = 'pikafloatingsel';
|
|
$doc_short_desc = 'Functions for removing or attaching floating selections.';
|
|
$doc_long_desc = 'Functions for removing or attaching floating selections.';
|
|
|
|
1;
|