======================================================================
ASE Hacking Notes
======================================================================

Add a new file to compile
----------------------------------------------------------------------

  Remember that if you add a new file to compile, it should have a
  different name of any other file name in the source code tree. Also,
  you must add it in the ASE_SOURCES variable of the makefile.lst.


Add a new load/save file type
----------------------------------------------------------------------

  Look at the "src/file/" directory. You have two options to make a
  new load/save routines:
    - Use the sequence API (src/file/file.h);
    - Use directly the sprite API (src/raster/sprite.h);

  The sequence API should be used only for images that don't support
  animation and that are plain images (don't have layers), like BMP,
  PCX, TGA, or JPEG format. This is useful to handle sequences of
  bitmaps like spr00.pcx, spr01.pcx, spr02.pcx automatically (you
  don't worry about that, you just write the code to load/save one
  file).

  In the other hand, you should use directly the raster API
  (src/raster/) if your format support animation or layers, like FLI,
  or GIF formats.


Hook palette's changes
----------------------------------------------------------------------

  With the routines (from "src/modules/palette.c"):

    void hook_palette_changes(void (*proc)(void));
    void unhook_palette_changes(void (*proc)(void));

  The hooks are installed in the tail (it's important see the order of
  modules in "src/core/modules.c").

  Then when you use "set_current_palette", the routine
  "call_palette_hooks" will call the hooks from the first to the last
  one.


Update the icon of buttons when the bitmap is destroyed in palette changes
----------------------------------------------------------------------

  NOTE: This is only for buttons with a BITMAP
        from "get_gfx()" (src/modules/gfx.c).

  When the palette changes, all graphics from "src/modules/gfx.c" are
  regenerated.  If one button was using one of these BITMAP, that will
  be a problem, because that pointer is pointing to a freed memory
  area.

  To update this icon pointer, you can use this is routine:

    void add_gfxicon_to_button(JWidget button, int gfx_id, int icon_align);

  This routine save in "user_data[3]" of "button" the "gfx_id", and
  when the palette changes, the icon will be restored making a:

    jbutton_set_icon(button, get_gfx(gfx_id));

  Also, the routine will hook the destroy signal to remove
  automatically this button from the "list of buttons to fixup"
  ("icon_buttons" in "src/modules/gui.c").


Reload the fonts
----------------------------------------------------------------------

  The routine "reload_default_font" in "src/modules/gui.c" reloads the
  font indicated in the configuration string "/options/default_font",
  also if it doesn't exist, the routine will try to load the
  "data/fonts/default.pcx" font (finally, ASE uses the Allegro font if
  no one was found).

  This routine uses the "_ji_set_font_of_all_widgets" to change the
  "text_font" property of EVERY widget.


Undo
----------------------------------------------------------------------

  NOTE.1: Every undo action must be added in the "sprite.undo"
  structure before to do the operation in the sprite. E.g:

    undo_remove_layer(sprite.undo, sprite.layer);
    layer_remove_layer(sprite.layer.parent, sprite.layer);

  The only exception for this is "undo_add_image":

    stock_add_image(stock, image);
    undo_add_image(undo, stock, image);


----------------------------------------------------------------------
			   Copyright (C) 2003-2005 by David A. Capello
