mirror of https://github.com/GNOME/gimp.git
a3c3e7d3a6
2002-02-23 Michael Natterer <mitch@gimp.org> General undo cleanup: * app/undo.[ch]: made all undo structs private. Changed all undo_push_foo() functions to take useful parameters instead of "gpointer foo_ptr" and create the undo structs internally. Renamed lots of functions so they are more self-explanatory (like undo_push_gimage_mod -> undo_push_image_size). Added some undo functions (channel reordering is undoable now). Never pass in a UndoType, as they are reseved for groups now (see below). Lots of cleanup and stuff... * app/undo_types.h: is a private header now which defines "enum UndoImplType" which is reserved for actual undo operations. All enum values are named "FOO_UNDO". * app/core/core-types.h: added the "UndoType" enum here and don't include "undo_types.h" any more. The UndoType values are all named "FOO_UNDO_GROUP" and are reserved for undo groups. The ID space of actual undo operations and undo groups is now strictly disjunct. * app/core/gimpchannel.h * app/core/gimpimage.h * app/core/gimplayer.h * app/core/gimplayermask.h * app/paint/gimppaintcore.h * app/tools/gimptransformtool.h: removed undo stuct definitions. * app/undo_history.c * app/path_transform.h * app/core/gimpchannel.c * app/core/gimpdrawable-transform.c * app/core/gimpedit.c * app/core/gimpimage-convert.c * app/core/gimpimage-crop.c * app/core/gimpimage-mask.c * app/core/gimpimage-merge.c * app/core/gimpimage-qmask.c * app/core/gimpimage-resize.c * app/core/gimpimage-scale.c * app/core/gimpimage.c * app/core/gimplayer-floating-sel.c * app/core/gimplayer.c * app/display/gimpdisplayshell-dnd.c * app/gui/channels-commands.c * app/gui/image-commands.c * app/gui/layers-commands.c * app/gui/paths-dialog.c * app/paint/gimppaintcore.c * app/tools/gimpbezierselecttool.c * app/tools/gimpeditselectiontool.c * app/tools/gimpmeasuretool.c * app/tools/gimpmovetool.c * app/tools/gimptexttool.c * app/tools/gimptransformtool.c * tools/pdbgen/pdb/guides.pdb * tools/pdbgen/pdb/layer.pdb * tools/pdbgen/pdb/undo.pdb: changed accordingly. * app/pdb/guides_cmds.c * app/pdb/layer_cmds.c * app/pdb/undo_cmds.c: regenerated. * app/core/gimpimage.[ch]: added infrastructure for holding a GimpList of GimpVectors objects. The API is the same as for layers and channels. Not used yet. |
||
---|---|---|
.. | ||
app | ||
libgimp | ||
pdb | ||
.cvsignore | ||
Makefile.am | ||
README | ||
app.pl | ||
enumcode-py.pl | ||
enumcode.pl | ||
enumgen.pl | ||
enums.pl | ||
groups.pl | ||
lib.pl | ||
pdb.pl | ||
pdbgen.pl | ||
stddefs.pdb | ||
util.pl |
README
Some mostly unfinished docs are here. -Yosh PDBGEN ------------------ What is this? It's a tool to automate much of the drudge work of making PDB interfaces to GIMP internals. Right now, it generates PDB description records, argument marshallers (with sanity checking) for the app side, as well as libgimp wrappers for C plugins. It's written so that extending it to provide support for CORBA and other languages suited to static autogeneration. How to invoke pdbgen from the command line: Change into the ./tools/pdbgen directory $ ./pdbgen.pl DIRNAME where DIRNAME is either "lib" or "app", depending on which set of files you want to generate. The files are written to ./app or ./lib in the ./tools/pdbgen directory. Up to you to diff the file you changed and when you're happy copy it into the actual ./app/ or ./lib/ directory where it gets built. Anatomy of a PDB descriptor: PDB descriptors are Perl code. You define a subroutine, which corresponds to the PDB function you want to create. You then fill certain special variables to fully describe all the information pdbgen needs to generate code. Since it's perl, you can do practically whatever perl lets you do to help you do this. However, at the simplest level, you don't need to know perl at all to make PDB descriptors. Annotated description: For example, we will look at gimp_display_new, specified in gdisplay.pdb. sub display_new { We start with the name of our PDB function (not including the "gimp_" prefix). $blurb = 'Create a new display for the specified image.'; This directly corresponds to the "blurb" field in the ProcRecord. $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 the 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. HELP This is the help field. Notice because it is a long string, we used HERE document syntax to split it over multiple lines. Any extra whitespace in $blurb or $help, including newlines, is automatically stripped, so you don't have to worry about that. &std_pdb_misc; This is the "author", "copyright", and "date" fields. Since S&P are quite common, they get a special shortcut which fills these in for you. Stuff like this is defined in stddefs.pdb. @inargs = ( &std_image_arg ); You specify arguments in a list. Again, your basic image is very common, so it gets a shortcut. @outargs = ( { name => 'display', type => 'display', desc => 'The new display', alias => 'gdisp', init => 1 } ); This is a real argument. It has a name, type, description at a minumum. "alias" lets you use the alias name in your invoker code, but the real name is still shown in the ProcRecord. This is useful not only as a shorthand, but for grabbing variables defined somewhere else (or constants), in conjunction with the "no_declare" flag. "init" simply says initialize this variable to a dummy value (in this case to placate gcc warnings) %invoke = ( headers => [ qw("gdisplay.h") ], These are the headers needed for the functions you call. vars => [ 'guint scale = 0x101' ], Extra variables can be put here for your invoker. code => <<'CODE' { if (gimage->layers == NULL) success = FALSE; else success = ((gdisp = gdisplay_new (gimage, scale)) != NULL); } CODE The actual invoker code. Since it's a multiline block, we put curly braces in the beginning.