gimp/plug-ins/ifscompose
Manish Singh 141b6e8a25 applied gimp-lecorfec-99041[02]-0, changes follow
* applied gimp-lecorfec-99041[02]-0, changes follow

* plug-ins/FractalExplorer/Dialogs.h (make_color_map):
replaced free with g_free to fix segfault.

* plug-ins/Lighting/lighting_preview.c (compute_preview):
allocate xpostab and ypostab only when needed (it could also be
allocated on stack with a compilation-fixed size like MapObject).
It avoids to lose some Kb on each preview :)
Also reindented (unfortunate C-c C-q) some other lines.

* plug-ins/Lighting/lighting_main.c (run):
release allocated postabs.

* plug-ins/Lighting/lighting_ui.c:
callbacks now have only one argument because gck widget use
gtk_signal_connect_object. Caused segfault for scale widget.

* plug-ins/autocrop/autocrop.c (doit):
return if image has only background (thus fixing a segfault).

* plug-ins/emboss/emboss.c (pluginCore, emboss_do_preview):
replaced malloc/free with g_malloc/g_free (unneeded, but
shouldn't everyone use glib calls ? :)

* plug-ins/flame/flame.c :
replaced a segfaulting free, and several harmless malloc/free pairs.

* plug-ins/flame/megawidget.c (mw_preview_build):
replaced harmless malloc/free pair.
Note : mwp->bits is malloc'ed but seems to be never freed.

* plug-ins/fractaltrace/fractaltrace.c (pixels_free):
replaced a bunch of segfaulting free.
(pixels_get, dialog_show): replaced gtk_signal_connect_object
with gtk_signal_connect to accomodate callbacks (caused STRANGE
dialog behaviour, coz you destroyed buttons one by one).

* plug-ins/illusion/illusion.c (dialog):
same gtk_signal_connect_object replacement for same reasons.

* plug-ins/libgck/gck/gckcolor.c :
changed all gck_rgb_to_color* functions to use a static GdkColor
instead of a malloc'ed area. Provided reentrant functions with
the old behaviour (gck_rgb_to_color*_r). Made some private functions
static, too.
gck_rgb_to_gdkcolor now use the new functions while
gck_rgb_to_gdkcolor_r is the reentrant version.
Also affected by this change: gck_gc_set_foreground and
gck_gc_set_background (no more free(color)).

* plug-ins/libgck/gck/gckcolor.h :
added the gck_rgb_to_gdkcolor_r proto.

* plug-ins/lic/lic.c (ok_button_clicked, cancel_button_clicked) :
segfault on gtk_widget_destroy, now calls gtk_main_quit.
(dialog_destroy) : segfault on window closure when called by
"destroy" event. Now called by "delete_event".

* plug-ins/megawidget/megawidget.c (mw_preview_build):
replaced harmless malloc/free pair.
Note : mwp->bits is malloc'ed but seems to be never freed.

* plug-ins/png/png.c (load_image):
replaced 2 segfaulting free.

* plug-ins/print/print-ps.c (ps_print):
replaced a segfaulting free (called many times :).

* plug-ins/sgi/sgi.c (load_image, save_image):
replaced a bunch of segfaulting free, and did some harmless
inits to avoid a few gcc warnings.

* plug-ins/wind/wind.c (render_wind):
replaced a segfaulting free.
(render_blast): replaced harmless malloc/free pair.

* plug-ins/bmp/bmpread.c (ReadImage):
yet another free()/g_free() problem fixed.

* plug-ins/exchange/exchange.c (real_exchange):
ditto.

* plug-ins/fp/fp.h: added Frames_Check_Button_In_A_Box proto.
* plug-ins/fp/fp_gtk.c: closing subdialogs via window manager
wasn't handled, thus leading to errors and crashes.
Now delete_event signals the dialog control button
to close a dialog with the good way.

* plug-ins/ifscompose/ifscompose.c (value_pair_create):
tried to set events mask on scale widget (a NO_WINDOW widget).

* plug-ins/png/png.c (save_image):
Replaced 2 free() with g_free() for g_malloc'ed memory.
Mysteriously I corrected the loading bug but not the saving one :)

-Yosh
1999-04-15 21:49:09 +00:00
..
.cvsignore The .cvsignores should have .libs too 1998-01-09 09:53:59 +00:00
Makefile.am Upgraded to libtool 1.2b 1998-09-20 23:04:33 +00:00
README.ifscompose refcounting fixups plug-ins/ifscompose/REAMDE.ifscompose: changed web 1998-02-18 21:49:03 +00:00
ifscompose.c applied gimp-lecorfec-99041[02]-0, changes follow 1999-04-15 21:49:09 +00:00
ifscompose.h Removed definitions of TRUE and FALSE from ifscompose.h. 1998-05-27 09:26:45 +00:00
ifscompose_utils.c Have fun recompiling gimp everyone. It's the great FSF address change! 1998-04-13 05:44:11 +00:00

README.ifscompose

IfsCompose-0.6.1
----------------

IfsCompose is a plug-in for the GIMP that allows
the creation of Iterated Function System fractals by direct
manipulation onscreen of the component transforms.

Although v0.6.1 is fairly full featured, it is still lacking some
essentials. Most importantly, it is not yet possible to save fractals
in unrendered form for future modification. The rendering code could
also use some more work.

IFS Fractals
------------

You may be familiar with IFS's from the screen
hack 'Flame'. They are also the basis of fractal image compression.

For a brief introduction to IFS's see Foley and van Dam, et
al,. _Computer Graphics, Principles and Practice_, 2nd Ed., 
(Addison Wesley, 1990).

The standard references in the field are Michael Barnsley's books (though
I haven't looked at them yet):

M. Barnsley, _Fractals Everywhere_, Academic Press Inc., 1988.
M. Barnsley and L. Hurd, _Fractal Image Compression_, Jones and
Bartlett.

Briefly, you take a point and repeatedly apply one of a set of
transformations to it, choosing randomly between them, and plot the
point at each step. An interesting result (the Collage Theorem) says
that if you can find a set of transformations that break up an image
into smaller copies of itself, then the resulting fractal exactly
reproduces the original image.  For example, here is a classic image
of a leaf and the same image with the four component transforms
colored distinctively.

But the best way to appreciate this may to install this program and
try it out. I've extended the basic concept as found in
Foley and van Dam to include transformations in color space as
well as in real space.

Installation
------------
The included Makefile should work with minor modifications on most
systems if you have installed Gimp normally. Put the resulting binary
in ~/.gimp/plug-ins or the system-wide plug-ins directory.

The included files gtkaspectframe.c/.h implement a modified frame
widget that guarantees that the aspect ratio of the child widget
remains constant when the parent is resized. It's sort of specialized,
but if you think it would be useful for other purposes, let me know
and I'll lobby for its inclusion in the standard gtk.

Use
---
The interface is somewhat complex and it may take you a little while
to get the hang of it. (There are 19 parameters for each
transformation in your fractal, after all). The best way to learn is
probably to start by making small changes, and seeing what they
do. Click on the transformations (represented by polygons) in the
design window to manipulate them interactively.

Button-1: rotate/scale
Button-2: distort
Button-3: move

If you hold down shift while clicking, you can select multiple polygons
to apply the transformation to.

Try not to click too near the center of a polygon, as this will
amplify your actions.

Note that if you render onto an image with an alpha channel, the
background will be transparent (very useful for compositing several
fractals), otherwise the background will be the current background.

There is a tutorial and some example images at:

   http://www.msc.cornell.edu/~otaylor/plug-ins/ifscompose.html

Have fun!

Owen Taylor
owt1@cornell.edu