Gimp::OO - Pseudo-OO for Gimp functions.
use Gimp; # Gimp::OO is now part of Gimp.
As you might have noticed, you can sort most gimp functions fall into three groups, depending on the name-prefix:
Whats more, there are functions groups like
gimp_selection_, operating on a common object, Images and Selection in this case.
If you only had the plain syntax, your scripts would quickly aquire the "vertical gimp syndrome":
gimp_palette_set_foreground(...) gimp_layer_new(...) gimp_palette_set_background(...)
etc. Of course, your fingers will suffer from severe typing as well.
A solution to this situation is to use OO-syntax. Gimp plays some dirty tricks and provides a number of classes, like
Gimp::Palette (please note that all these classes appear with the
Gimp:: prefix as well as without, i.e.
Gimp::Palette is the same class as
If you call a method,
Gimp::OO tries to find a gimp function by prepending a number of prefixes until it finds a valid function:
$image = Image::new(...); # calls gimp_image_new(...) $image = new Image(...); # the same in green Palette::set_foreground(...) # calls gimp_palette_set_foreground(..)
Return values from functions are automatically blessed (through the magic autobless feature ;) to their corresponding classes, i.e.
$image = new Image(...); # $image is now blessed to Gimp::Image $image->height; # calls gimp_image_height($image) $image->flatten; # likewise gimp_flatten($image) $image->histogram(...); # calls gimp_histogram($image,...), since # gimp_image_histogram does not exist
The class argument ($image in the above examples) is prepended to the argument list.
You can call all sorts of sensible and not-so-sensible functions, so this feature can be abused:
patterns_list Image; # will call gimp_patterns_list quit Image; # will quit the Gimp, not an Image.
there is no image involved here whatsoever...
The following classes (with and without Gimp::) are available. The prefixes that are checked are shown as well (the null prefix "" is implicit).
gimp_layer_ gimp_drawable_ gimp_
gimp_image_ gimp_drawable_ gimp_
gimp_channel_ gimp_drawable_ gimp_
(none except the implicit null prefix)
Marc Lehmann <email@example.com>