channel.pdb 8.41 KB
Newer Older
1
# GIMP - The GNU Image Manipulation Program
Manish Singh's avatar
Manish Singh committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# "Perlized" from C source by Manish Singh <yosh@gimp.org>

sub channel_new {
    $blurb = 'Create a new channel.';

    $help = <<'HELP';
This procedure creates a new channel with the specified width and height. Name,
opacity, and color are also supplied parameters. The new channel still needs to
be added to the image, as this is not automatic. Add the new channel with the
27
gimp_image_add_channel() command. Other attributes such as channel show masked,
Manish Singh's avatar
Manish Singh committed
28 29 30 31 32 33 34
should be set with explicit procedure calls. The channel's contents are
undefined initially.
HELP

    &std_pdb_misc;

    @inargs = (
35 36
	{ name => 'image', type => 'image',
	  desc => 'The image to which to add the channel' },
37
	{ name => 'width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
38
	  desc => 'The channel width' },
39
	{ name => 'height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE',
40
	  desc => 'The channel height' },
Manish Singh's avatar
Manish Singh committed
41
	{ name => 'name', type => 'string',
42
	  desc => 'The channel name' },
Manish Singh's avatar
Manish Singh committed
43
	{ name => 'opacity', type => '0 <= float <= 100',
44
	  desc => 'The channel opacity' },
Manish Singh's avatar
Manish Singh committed
45
	{ name => 'color', type => 'color',
46 47
	  desc => 'The channel compositing color'
	}
Manish Singh's avatar
Manish Singh committed
48 49 50
    );

    @outargs = (
51
	{ name => 'channel', type => 'channel', wrap => 1,
52
	  desc => 'The newly created channel' }
Manish Singh's avatar
Manish Singh committed
53 54 55 56 57
    );

    %invoke = (
	code => <<'CODE'
{
Sven Neumann's avatar
Sven Neumann committed
58
  GimpRGB rgb_color = color;
59 60

  rgb_color.a = opacity / 100.0;
61 62 63 64
  channel = gimp_channel_new (image, width, height, name, &rgb_color);

  if (! channel)
    success = FALSE;
Manish Singh's avatar
Manish Singh committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78
}
CODE
    );
}

sub channel_copy {
    $blurb = 'Copy a channel.';

    $help = <<'HELP';
This procedure copies the specified channel and returns the copy.
HELP

    &std_pdb_misc;

79 80 81 82
    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel to copy' }
    );
Manish Singh's avatar
Manish Singh committed
83 84

    @outargs = (
85
	{ name => 'channel_copy', type => 'channel',
86
	  desc => 'The newly copied channel' }
Manish Singh's avatar
Manish Singh committed
87 88
    );

89 90 91 92 93
    %invoke = (
	code => <<'CODE'
{
  channel_copy = GIMP_CHANNEL (gimp_item_duplicate (GIMP_ITEM (channel),
                               G_TYPE_FROM_INSTANCE (channel), FALSE));
94 95 96

  if (! channel_copy)
    success = FALSE;
97 98 99
}
CODE
    );
Manish Singh's avatar
Manish Singh committed
100 101
}

102 103 104 105 106 107 108 109 110 111
sub channel_combine_masks {
    $blurb = 'Combine two channel masks.';

    $help = <<'HELP';
This procedure combines two channel masks.  The result is stored
in the first channel.
HELP

    &std_pdb_misc;

112 113 114 115 116 117
    @inargs = (
	{ name => 'channel1', type => 'channel',
	  desc => 'The channel1' },
	{ name => 'channel2', type => 'channel',
	  desc => 'The channel2' },
	{ name => 'operation', type => 'enum GimpChannelOps',
118
	  desc => 'The selection operation' },
119
	{ name => 'offx', type => 'int32',
120 121
	  desc => 'x offset between upper left corner of
                   channels: (second - first)' },
122
	{ name => 'offy', type => 'int32',
123 124
	  desc => 'y offset between upper left corner of
                   channels: (second - first)' }
125
    );
126

127
    %invoke = (
128
        headers => [ qw("core/gimpchannel-combine.h" "gimp-intl.h") ],
129
        code => <<'CODE'
130
{
131
  gimp_channel_push_undo (channel1, _("Combine Masks"));
132
  gimp_channel_combine_mask (channel1, channel2, operation, offx, offy);
133 134
}
CODE
135
    );
136 137
}

138 139 140 141 142 143 144
sub channel_new_from_component {
    $blurb = 'Create a new channel from a color component';

    $help = <<'HELP';
This procedure creates a new channel from a color component.
HELP

145
    &shlomi_pdb_misc('2005', '2.4');
146 147

    @inargs = (
148 149
	{ name => 'image', type => 'image',
	  desc => 'The image to which to add the channel' },
150
	{ name => 'component', type => 'enum GimpChannelType',
151
	  desc => 'The image component' },
152 153
	{ name => 'name', type => 'string',
	  desc => 'The channel name' },
154 155 156
    );

    @outargs = (
157
	{ name => 'channel', type => 'channel',
158 159 160 161 162 163
	  desc => 'The newly created channel' }
    );

    %invoke = (
	code => <<'CODE'
{
164 165
  if (gimp_image_get_component_index (image, component) != -1)
    channel = gimp_channel_new_from_component (image,
166 167 168 169 170 171 172 173 174 175 176
                                               component, name, NULL);

  if (channel)
    gimp_item_set_visible (GIMP_ITEM (channel), FALSE, FALSE);
  else
    success = FALSE;
}
CODE
    );
}

177 178 179 180 181
sub channel_get_show_masked {
    $blurb = "Get the composite method of the specified channel.";

    $help = <<'HELP';
This procedure returns the specified channel's composite method. If
182
it is TRUE, then the channel is composited with the image so that
183
masked regions are shown. Otherwise, selected regions are shown.
Manish Singh's avatar
Manish Singh committed
184
HELP
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202

    &std_pdb_misc;

    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel' }
    );

    @outargs = (
	{ name => 'show_masked', type => 'boolean',
	  desc => 'The channel composite method' }
    );

    %invoke = (
	code => <<'CODE'
{
  show_masked = gimp_channel_get_show_masked (channel);
}
Manish Singh's avatar
Manish Singh committed
203
CODE
204 205 206 207 208 209 210 211
    );
}

sub channel_set_show_masked {
    $blurb = "Set the composite method of the specified channel.";

    $help = <<'HELP';
This procedure sets the specified channel's composite method. If
212
it is TRUE, then the channel is composited with the image so that
213 214
masked regions are shown. Otherwise, selected regions are shown.
HELP
Manish Singh's avatar
Manish Singh committed
215

216 217 218 219 220 221 222 223
    &std_pdb_misc;

    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel' },
	{ name => 'show_masked', type => 'boolean',
	  desc => 'The new channel composite method' }
    );
Manish Singh's avatar
Manish Singh committed
224

225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
    %invoke = (
	code => <<'CODE'
{
  gimp_channel_set_show_masked (channel, show_masked);
}
CODE
    );
}

sub channel_get_opacity {
    $blurb = "Get the opacity of the specified channel.";

    $help = <<'HELP';
This procedure returns the specified channel's opacity.
HELP

    &std_pdb_misc;

    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel' }
    );

    @outargs = (
	{ name => 'opacity', type => '0 <= float <= 100',
	  desc => 'The channel opacity' }
    );

    %invoke = (
	code => <<'CODE'
{
  opacity = gimp_channel_get_opacity (channel) * 100;
}
CODE
    );
}

sub channel_set_opacity {
    $blurb = "Set the opacity of the specified channel.";

    $help = <<'HELP';
This procedure sets the specified channel's opacity.
HELP

    &std_pdb_misc;

    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel' },
	{ name => 'opacity', type => '0 <= float <= 100',
275
	  desc => 'The new channel opacity' }
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309
    );

    %invoke = (
	code => <<'CODE'
{
  gimp_channel_set_opacity (channel, opacity / 100.0, TRUE);
}
CODE
    );
}

sub channel_get_color {
    $blurb = "Get the compositing color of the specified channel.";

    $help = <<'HELP';
This procedure returns the specified channel's compositing color.
HELP

    &std_pdb_misc;

    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel' }
    );

    @outargs = (
	{ name => 'color', type => 'color', void_ret => 1,
	  desc => 'The channel compositing color' }
    );

    %invoke = (
	code => <<'CODE'
{
  gimp_channel_get_color (channel, &color);
310
  gimp_rgb_set_alpha (&color, 1.0);
311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
}
CODE
    );
}

sub channel_set_color {
    $blurb = "Set the compositing color of the specified channel.";

    $help = <<'HELP';
This procedure sets the specified channel's compositing color.
HELP

    &std_pdb_misc;

    @inargs = (
	{ name => 'channel', type => 'channel',
	  desc => 'The channel' },
	{ name => 'color', type => 'color',
	  desc => 'The new channel compositing color' }
    );

    %invoke = (
	code => <<'CODE'
{
  GimpRGB rgb_color = color;

  rgb_color.a = channel->color.a;
  gimp_channel_set_color (channel, &rgb_color, TRUE);
}
CODE
    );
}
Manish Singh's avatar
Manish Singh committed
343

344

345 346
@headers = qw("libgimpbase/gimpbase.h");

347 348 349 350 351
@procs = qw(channel_new channel_new_from_component channel_copy
            channel_combine_masks
            channel_get_show_masked channel_set_show_masked
            channel_get_opacity channel_set_opacity
            channel_get_color channel_set_color);
352

353
%exports = (app => [@procs], lib => [@procs]);
Manish Singh's avatar
Manish Singh committed
354 355 356 357

$desc = 'Channel';

1;