diff options
Diffstat (limited to 'pdb/groups/text_tool.pdb')
-rw-r--r-- | pdb/groups/text_tool.pdb | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/pdb/groups/text_tool.pdb b/pdb/groups/text_tool.pdb new file mode 100644 index 0000000..4ad7e7c --- /dev/null +++ b/pdb/groups/text_tool.pdb @@ -0,0 +1,290 @@ +# 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 text_fontname { + $blurb = <<'BLURB'; +Add text at the specified location as a floating selection or a new layer. +BLURB + + $help = <<'HELP'; +This tool requires a fontname matching an installed PangoFT2 font. +You can specify the fontsize in units of pixels +or points, and the appropriate metric is specified using the size_type +argument. The x and y parameters together control the placement of the new +text by specifying the upper left corner of the text bounding box. If the +specified drawable parameter is valid, the text will be created as a floating +selection attached to the drawable. If the drawable parameter is not valid +(-1), the text will appear as a new layer. Finally, a border can be specified +around the final rendered text. The border is measured in pixels. Parameter +size-type is not used and is currently ignored. If you need to display a font +in points, divide the size in points by 72.0 and multiply it by the image's +vertical resolution. +HELP + + &std_pdb_misc; + $author = 'Martin Edlman & Sven Neumann'; + $date = '1998- 2001'; + + @inargs = ( + { name => 'image', type => 'image', + desc => 'The image' }, + { name => 'drawable', type => 'drawable', + desc => 'The affected drawable: (-1 for a new text layer)', + none_ok => 1 }, + { name => 'x', type => 'float', + desc => 'The x coordinate for the left of the text bounding box' }, + { name => 'y', type => 'float', + desc => 'The y coordinate for the top of the text bounding box' }, + { name => 'text', type => 'string', + desc => 'The text to generate (in UTF-8 encoding)' }, + { name => 'border', type => '-1 <= int32', + desc => 'The size of the border' }, + { name => 'antialias', type => 'boolean', + desc => 'Antialiasing' }, + { name => 'size', type => '0 < float', + desc => 'The size of text in either pixels or points' }, + { name => 'size_type', type => 'enum GimpSizeType', dead => 1, + desc => 'The units of specified size' }, + { name => 'fontname', type => 'string', + desc => 'The name of the font' } + ); + + @outargs = ( + { name => 'text_layer', type => 'layer', + desc => 'The new text layer or -1 if no layer was created.' } + ); + + %invoke = ( + code => <<'CODE' +{ + if (drawable && + (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), image, + GIMP_PDB_ITEM_CONTENT, error) || + ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))) + success = FALSE; + + if (success) + { + gchar *real_fontname = g_strdup_printf ("%s %d", fontname, (gint) size); + + text_layer = text_render (image, drawable, context, + x, y, real_fontname, text, + border, antialias); + + g_free (real_fontname); + } +} +CODE + ); +} + +sub text_get_extents_fontname { + $blurb = 'Get extents of the bounding box for the specified text.'; + + $help = <<'HELP'; +This tool returns the width and height of a bounding box for the specified text +string with the specified font information. Ascent and descent for the +specified font are returned as well. Parameter size-type is not used and is +currently ignored. If you need to display a font in points, divide the +size in points by 72.0 and multiply it by the vertical resolution of the +image you are taking into account. +HELP + + &std_pdb_misc; + $author = 'Martin Edlman & Sven Neumann'; + $date = '1998- 2001'; + + @inargs = ( + { name => 'text', type => 'string', + desc => 'The text to generate (in UTF-8 encoding)' }, + { name => 'size', type => '0 < float', + desc => 'The size of text in either pixels or points' }, + { name => 'size_type', type => 'enum GimpSizeType', dead => 1, + desc => 'The units of specified size' }, + { name => 'fontname', type => 'string', + desc => 'The name of the font' } + ); + + @outargs = ( + { name => 'width', type => 'int32', void_ret => 1, + desc => 'The width of the specified font' }, + { name => 'height', type => 'int32', + desc => 'The height of the specified font' }, + { name => 'ascent', type => 'int32', + desc => 'The ascent of the specified font' }, + { name => 'descent', type => 'int32', + desc => 'The descent of the specified font' } + ); + + %invoke = ( + code => <<'CODE' +{ + gchar *real_fontname = g_strdup_printf ("%s %d", fontname, (gint) size); + + success = text_get_extents (gimp, + real_fontname, text, + &width, &height, + &ascent, &descent); + + g_free (real_fontname); +} +CODE + ); +} + +sub text { + &std_pdb_deprecated ('gimp-text-fontname'); + + @inargs = ( + { name => 'image', type => 'image', + desc => 'The image' }, + { name => 'drawable', type => 'drawable', + desc => 'The affected drawable: (-1 for a new text layer)', + none_ok => 1 }, + { name => 'x', type => 'float', + desc => 'The x coordinate for the left of the text bounding box' }, + { name => 'y', type => 'float', + desc => 'The y coordinate for the top of the text bounding box' }, + { name => 'text', type => 'string', + desc => 'The text to generate (in UTF-8 encoding)' }, + { name => 'border', type => '-1 <= int32', + desc => 'The size of the border' }, + { name => 'antialias', type => 'boolean', + desc => 'Antialiasing' }, + { name => 'size', type => '0 < float', + desc => 'The size of text in either pixels or points' }, + { name => 'size_type', type => 'enum GimpSizeType', dead => 1, + desc => 'The units of specified size' }, + { name => 'foundry', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font foundry' }, + { name => 'family', type => 'string', allow_non_utf8 => 1, + desc => 'The font family' }, + { name => 'weight', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font weight' }, + { name => 'slant', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font slant' }, + { name => 'set_width', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font set-width' }, + { name => 'spacing', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font spacing' }, + { name => 'registry', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font registry' }, + { name => 'encoding', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font encoding' } + ); + + @outargs = ( + { name => 'text_layer', type => 'layer', + desc => 'The new text layer or -1 if no layer was created.' } + ); + + %invoke = ( + code => <<'CODE' +{ + if (drawable && + (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), image, + GIMP_PDB_ITEM_CONTENT, error) || + ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))) + success = FALSE; + + if (success) + { + gchar *real_fontname = g_strdup_printf ("%s %d", family, (gint) size); + + text_layer = text_render (image, drawable, context, + x, y, real_fontname, text, + border, antialias); + + g_free (real_fontname); + } +} +CODE + ); +} + +sub text_get_extents { + &std_pdb_deprecated ('gimp-text-get-extents-fontname'); + + @inargs = ( + { name => 'text', type => 'string', + desc => 'The text to generate (in UTF-8 encoding)' }, + { name => 'size', type => '0 < float', + desc => 'The size of text in either pixels or points' }, + { name => 'size_type', type => 'enum GimpSizeType', dead => 1, + desc => 'The units of specified size' }, + { name => 'foundry', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font foundry' }, + { name => 'family', type => 'string', allow_non_utf8 => 1, + desc => 'The font family' }, + { name => 'weight', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font weight' }, + { name => 'slant', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font slant' }, + { name => 'set_width', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font set-width' }, + { name => 'spacing', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font spacing' }, + { name => 'registry', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font registry' }, + { name => 'encoding', type => 'string', allow_non_utf8 => 1, dead => 1, + desc => 'The font encoding' } + ); + + @outargs = ( + { name => 'width', type => 'int32', void_ret => 1, + desc => 'The width of the specified font' }, + { name => 'height', type => 'int32', + desc => 'The height of the specified font' }, + { name => 'ascent', type => 'int32', + desc => 'The ascent of the specified font' }, + { name => 'descent', type => 'int32', + desc => 'The descent of the specified font' } + ); + + %invoke = ( + code => <<'CODE' +{ + gchar *real_fontname = g_strdup_printf ("%s %d", family, (gint) size); + + success = text_get_extents (gimp, + real_fontname, text, + &width, &height, + &ascent, &descent); + + g_free (real_fontname); +} +CODE + ); +} + + +@headers = qw("libgimpbase/gimpbase.h" + "text/gimptext-compat.h" + "gimppdb-utils.h"); + +@procs = qw(text_fontname text_get_extents_fontname + text text_get_extents); + +%exports = (app => [@procs], lib => [@procs]); + +$desc = 'Text procedures'; +$doc_title = 'gimptexttool'; +$doc_short_desc = 'Functions for controlling the text tool.'; +$doc_long_desc = 'Functions for controlling the text tool.'; + +1; |