diff options
Diffstat (limited to 'pdb/groups/display.pdb')
-rw-r--r-- | pdb/groups/display.pdb | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/pdb/groups/display.pdb b/pdb/groups/display.pdb new file mode 100644 index 0000000..4b96650 --- /dev/null +++ b/pdb/groups/display.pdb @@ -0,0 +1,229 @@ +# 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 <https://www.gnu.org/licenses/>. + +# "Perlized" from C source by Manish Singh <yosh@gimp.org> + +sub display_is_valid { + $blurb = 'Returns TRUE if the display is valid.'; + + $help = <<'HELP'; +This procedure checks if the given display ID is valid and refers to an +existing display. +HELP + + &neo_pdb_misc('2007', '2.4'); + + @inargs = ( + { name => 'display', type => 'display', no_validate => 1, + desc => 'The display to check' } + ); + + @outargs = ( + { name => 'valid', type => 'boolean', + desc => 'Whether the display ID is valid' } + ); + + %invoke = ( + code => <<'CODE' +{ + valid = (display != NULL); +} +CODE + ); +} + +sub display_new { + $blurb = 'Create a new display for the specified image.'; + + $help = <<'HELP'; +Creates a new display for the specified image. If the image already has a +display, another is added. Multiple displays are handled transparently by +GIMP. The newly created display is returned and can be subsequently destroyed +with a call to gimp_display_delete(). This procedure only makes sense for use +with the GIMP UI, and will result in an execution error if called when +GIMP has no UI. +HELP + + &std_pdb_misc; + + @inargs = ( + { name => 'image', type => 'image', + desc => 'The image' } + ); + + @outargs = ( + { name => 'display', type => 'display', + desc => 'The new display' } + ); + + %invoke = ( + code => <<'CODE' +{ + gimp_image_flush (image); + + display = gimp_create_display (gimp, image, GIMP_UNIT_PIXEL, 1.0, NULL, 0); + + if (display) + { + /* the first display takes ownership of the image */ + if (gimp_image_get_display_count (image) == 1) + g_object_unref (image); + } + else + { + success = FALSE; + } +} +CODE + ); +} + +sub display_delete { + $blurb = 'Delete the specified display.'; + + $help = <<'HELP'; +This procedure removes the specified display. If this is the last remaining +display for the underlying image, then the image is deleted also. Note that +the display is closed no matter if the image is dirty or not. Better save +the image before calling this procedure. +HELP + + &std_pdb_misc; + + @inargs = ( + { name => 'display', type => 'display', + desc => 'The display to delete' } + ); + + %invoke = ( + code => <<'CODE' +{ + gimp_delete_display (gimp, display); +} +CODE + ); +} + +sub display_get_window_handle { + $blurb = 'Get a handle to the native window for an image display.'; + + $help = <<'HELP'; +This procedure returns a handle to the native window for a given image +display. For example in the X backend of GDK, a native window handle is +an Xlib XID. A value of 0 is returned for an invalid display or if this +function is unimplemented for the windowing system that is being used. +HELP + + &neo_pdb_misc('2005', '2.4'); + + @inargs = ( + { name => 'display', type => 'display', + desc => 'The display to get the window handle from' } + ); + + @outargs = ( + { name => 'window', type => 'int32', + desc => 'The native window handle or 0' } + ); + + %invoke = ( + code => <<'CODE' +{ + window = (gint32) gimp_get_display_window_id (gimp, display); +} +CODE + ); +} + +sub displays_flush { + $blurb = 'Flush all internal changes to the user interface'; + + $help = <<'HELP'; +This procedure takes no arguments and returns nothing except a success status. +Its purpose is to flush all pending updates of image manipulations to the user +interface. It should be called whenever appropriate. +HELP + + &std_pdb_misc; + + %invoke = ( + headers => [ qw("core/gimpcontainer.h") ], + code => <<'CODE' + +{ + gimp_container_foreach (gimp->images, (GFunc) gimp_image_flush, NULL); +} +CODE + ); +} + +sub displays_reconnect { + $blurb = 'Reconnect displays from one image to another image.'; + + $help = <<'HELP'; +This procedure connects all displays of the old_image to the +new_image. If the old_image has no display or new_image already has a +display the reconnect is not performed and the procedure returns +without success. You should rarely need to use this function. +HELP + + &std_pdb_misc; + + @inargs = ( + { name => 'old_image', type => 'image', + desc => 'The old image (must have at least one display)' }, + { name => 'new_image', type => 'image', + desc => 'The new image (must not have a display)' } + ); + + %invoke = ( + code => <<'CODE' +{ + success = (old_image != new_image && + gimp_image_get_display_count (old_image) > 0 && + gimp_image_get_display_count (new_image) == 0); + + if (success) + { + gimp_reconnect_displays (gimp, old_image, new_image); + + /* take ownership of the image */ + if (gimp_image_get_display_count (new_image) > 0) + g_object_unref (new_image); + } +} +CODE + ); +} + + +@headers = qw("core/gimp.h"); + +@procs = qw(display_is_valid + display_new + display_delete + display_get_window_handle + displays_flush + displays_reconnect); + +%exports = (app => [@procs], lib => [@procs]); + +$desc = 'Display procedures'; +$doc_title = 'gimpdisplay'; +$doc_short_desc = 'Functions to create, delete and flush displays (views) on an image.'; +$doc_long_desc = 'Functions to create, delete and flush displays (views) on an image.'; + +1; |