mirror of
https://github.com/aseprite/aseprite.git
synced 2024-11-20 05:14:45 +00:00
123 lines
4.9 KiB
Plaintext
123 lines
4.9 KiB
Plaintext
======================================================================
|
|
ASE Hacking Notes
|
|
======================================================================
|
|
|
|
----------------------------------------------------------------------
|
|
Change the name of a command
|
|
----------------------------------------------------------------------
|
|
|
|
Rename the file "src/commands/cmd_OLD_NAME.cpp" to
|
|
"src/commands/cmd_NEW_NAME.cpp".
|
|
|
|
Update the file name in the COMMON_SOURCES variable inside
|
|
makefile.lst.
|
|
|
|
Update the command name in "src/commands/commands_list.h" file.
|
|
|
|
Find "get_command_by_name" in the whole source code, you have to
|
|
update the command id (anyway you will get a compiler error).
|
|
|
|
Change in the Command() constructor call, the name of the command.
|
|
E.g. MyCmd::MyCmd() : Command("new_name", ...) { }
|
|
|
|
----------------------------------------------------------------------
|
|
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 COMMON_SOURCES or 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) 2001-2009 David Capello
|