# 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 . # "Perlized" from C source by Manish Singh sub palette_new { $blurb = "Creates a new palette"; $help = "This procedure creates a new, uninitialized palette"; &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The requested name of the new palette' } ); @outargs = ( { name => 'actual_name', type => 'string', desc => 'The actual new palette name' } ); %invoke = ( code => <<'CODE' { GimpData *data = gimp_data_factory_data_new (gimp->palette_factory, context, name); if (data) actual_name = g_strdup (gimp_object_get_name (data)); else success = FALSE; } CODE ); } sub palette_is_editable { $blurb = "Tests if palette can be edited"; $help = "Returns TRUE if you have permission to change the palette"; &bill_pdb_misc('2004', '2.4'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' } ); @outargs = ( { name => 'editable', type => 'boolean', desc => "TRUE if the palette can be edited" } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) editable = gimp_data_is_writable (GIMP_DATA (palette)); else success = FALSE; } CODE ); } sub palette_duplicate { $blurb = "Duplicates a palette"; $help = "This procedure creates an identical palette by a different name"; &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' } ); @outargs = ( { name => 'copy_name', type => 'string', non_empty => 1, desc => "The name of the palette's copy" } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) { GimpPalette *palette_copy = (GimpPalette *) gimp_data_factory_data_duplicate (gimp->palette_factory, GIMP_DATA (palette)); if (palette_copy) copy_name = g_strdup (gimp_object_get_name (palette_copy)); else success = FALSE; } else success = FALSE; } CODE ); } sub palette_rename { $blurb = "Rename a palette"; $help = "This procedure renames a palette"; &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'new_name', type => 'string', non_empty => 1, desc => "The new name of the palette" } ); @outargs = ( { name => 'actual_name', type => 'string', desc => "The actual new name of the palette" } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_RENAME, error); if (palette) { gimp_object_set_name (GIMP_OBJECT (palette), new_name); actual_name = g_strdup (gimp_object_get_name (palette)); } else success = FALSE; } CODE ); } sub palette_delete { $blurb = "Deletes a palette"; $help = "This procedure deletes a palette"; &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette && gimp_data_is_deletable (GIMP_DATA (palette))) success = gimp_data_factory_data_delete (gimp->palette_factory, GIMP_DATA (palette), TRUE, error); else success = FALSE; } CODE ); } sub palette_get_info { $blurb = 'Retrieve information about the specified palette.'; $help = <<'HELP'; This procedure retrieves information about the specified palette. This includes the name, and the number of colors. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' } ); @outargs = ( { name => 'num_colors', type => 'int32', void_ret => 1, desc => 'The number of colors in the palette' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) num_colors = gimp_palette_get_n_colors (palette); else success = FALSE; } CODE ); } sub palette_get_colors { $blurb = 'Gets all colors from the specified palette.'; $help = <<'HELP'; This procedure retrieves all color entries of the specified palette. HELP &neo_pdb_misc('2006', '2.6'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' } ); @outargs = ( { name => 'colors', type => 'colorarray', desc => 'The colors in the palette', array => { name => 'num_colors', desc => 'Length of the colors array' } } ); %invoke = ( vars => [ 'GimpPalette *palette = NULL' ], code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) { GList *list = gimp_palette_get_colors (palette); gint i; num_colors = gimp_palette_get_n_colors (palette); colors = g_new (GimpRGB, num_colors); for (i = 0; i < num_colors; i++, list = g_list_next (list)) { GimpPaletteEntry *entry = list->data; colors[i] = entry->color; } } else success = FALSE; } CODE ); } sub palette_get_columns { $blurb = "Retrieves the number of columns to use to display this palette"; $help = <<'HELP'; This procedures retrieves the preferred number of columns to use when the palette is being displayed. HELP &neo_pdb_misc('2005', '2.4'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' } ); @outargs = ( { name => 'num_columns', type => 'int32', desc => "The number of columns used to display this palette" } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) num_columns = gimp_palette_get_columns (palette); else success = FALSE; } CODE ); } sub palette_set_columns { $blurb = "Sets the number of columns to use when displaying the palette"; $help = <<'HELP'; This procedures controls how many colors are shown per row when the palette is being displayed. This value can only be changed if the palette is writable. The maximum allowed value is 64. HELP &neo_pdb_misc('2005', '2.4'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'columns', type => '0 <= int32 <= 64', desc => "The new number of columns" } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_WRITE, error); if (palette) gimp_palette_set_columns (palette, columns); else success = FALSE; } CODE ); } sub palette_add_entry { $blurb = 'Adds a palette entry to the specified palette.'; $help = <<'HELP'; This procedure adds an entry to the specified palette. It returns an error if the entry palette does not exist. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'entry_name', type => 'string', null_ok => 1, desc => 'The name of the entry' }, { name => 'color', type => 'color', desc => 'The new entry\'s color color' } ); @outargs = ( { name => 'entry_num', type => 'int32', void_ret => 1, desc => 'The index of the added entry' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_WRITE, error); if (palette) { GimpPaletteEntry *entry = gimp_palette_add_entry (palette, -1, entry_name, &color); entry_num = entry->position; } else success = FALSE; } CODE ); } sub palette_delete_entry { $blurb = 'Deletes a palette entry from the specified palette.'; $help = <<'HELP'; This procedure deletes an entry from the specified palette. It returns an error if the entry palette does not exist. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'entry_num', type => 'int32', desc => 'The index of the added entry' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_WRITE, error); if (palette) { GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num); if (entry) gimp_palette_delete_entry (palette, entry); else success = FALSE; } else success = FALSE; } CODE ); } sub palette_entry_get_color { $blurb = 'Gets the specified palette entry from the specified palette.'; $help = <<'HELP'; This procedure retrieves the color of the zero-based entry specified for the specified palette. It returns an error if the entry does not exist. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'entry_num', type => 'int32', desc => 'The entry to retrieve' } ); @outargs = ( { name => 'color', type => 'color', void_ret => 1, desc => 'The color requested' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) { GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num); if (entry) color = entry->color; else success = FALSE; } else success = FALSE; } CODE ); } sub palette_entry_set_color { $blurb = 'Sets the specified palette entry in the specified palette.'; $help = <<'HELP'; This procedure sets the color of the zero-based entry specified for the specified palette. It returns an error if the entry does not exist. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'entry_num', type => 'int32', desc => 'The entry to retrieve' }, { name => 'color', type => 'color', desc => 'The new color' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_WRITE, error); if (palette) success = gimp_palette_set_entry_color (palette, entry_num, &color); else success = FALSE; } CODE ); } sub palette_entry_get_name { $blurb = 'Gets the specified palette entry from the specified palette.'; $help = <<'HELP'; This procedure retrieves the name of the zero-based entry specified for the specified palette. It returns an error if the entry does not exist. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'entry_num', type => 'int32', desc => 'The entry to retrieve' } ); @outargs = ( { name => 'entry_name', type => 'string', void_ret => 1, desc => 'The name requested' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_READ, error); if (palette) { GimpPaletteEntry *entry = gimp_palette_get_entry (palette, entry_num); if (entry) entry_name = g_strdup (entry->name); else success = FALSE; } else success = FALSE; } CODE ); } sub palette_entry_set_name { $blurb = 'Sets the specified palette entry in the specified palette.'; $help = <<'HELP'; This procedure sets the name of the zero-based entry specified for the specified palette. It returns an error if the entry does not exist. HELP &mitch_pdb_misc('2004', '2.2'); @inargs = ( { name => 'name', type => 'string', non_empty => 1, desc => 'The palette name' }, { name => 'entry_num', type => 'int32', desc => 'The entry to retrieve' }, { name => 'entry_name', type => 'string', null_ok => 1, desc => 'The new name' } ); %invoke = ( code => <<'CODE' { GimpPalette *palette = gimp_pdb_get_palette (gimp, name, GIMP_PDB_DATA_ACCESS_WRITE, error); if (palette) success = gimp_palette_set_entry_name (palette, entry_num, entry_name); else success = FALSE; } CODE ); } @headers = qw( "core/gimp.h" "core/gimpcontext.h" "core/gimpdatafactory.h" "core/gimppalette.h" "gimppdb-utils.h"); @procs = qw(palette_new palette_duplicate palette_rename palette_delete palette_is_editable palette_get_info palette_get_colors palette_get_columns palette_set_columns palette_add_entry palette_delete_entry palette_entry_get_color palette_entry_set_color palette_entry_get_name palette_entry_set_name); %exports = (app => [@procs], lib => [@procs]); $desc = 'Palette'; $doc_title = 'gimppalette'; $doc_short_desc = 'Functions operating on a single palette.'; $doc_long_desc = 'Functions operating on a single palette.'; 1;