mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-29 10:20:48 +00:00
Added "new_frame" command. Renamed writeable to writable.
This commit is contained in:
parent
a1b9a6844b
commit
0acca25989
ChangeLog
docs/files
src
commands
cmd_copy.ccmd_copy_frame.ccmd_crop.ccmd_cut.ccmd_film_editor.ccmd_link_frame.ccmd_load_mask.ccmd_move_frame.ccmd_new_frame.ccmd_save_file.ccmd_save_file_as.ccommands.c
dialogs
file
modules
raster
script
util
widgets/editor
@ -1,3 +1,10 @@
|
||||
2007-10-07 David A. Capello <dacap@users.sourceforge.net>
|
||||
|
||||
* src/commands/cmd_new_frame.c (command_execute_new_frame): Added
|
||||
from new_frame() routine (now with undo of everything).
|
||||
|
||||
* src/raster/undo.c (undo_set_frames): Added.
|
||||
|
||||
2007-10-03 David A. Capello <dacap@users.sourceforge.net>
|
||||
|
||||
* src/commands/cmd_crop.c: Added with crop_sprite/layer/frame &
|
||||
|
@ -1,5 +1,5 @@
|
||||
ASE Files (.ASE) Format description
|
||||
Copyright (C) 2004-2005 by David A. Capello
|
||||
Copyright (C) 2004-2005, 2007 by David A. Capello
|
||||
----------------------------------------------------------------------
|
||||
|
||||
1. References
|
||||
@ -92,7 +92,7 @@ Layer Chunk (0x2004)
|
||||
In the first frame should be a set of layer chunks to determine the
|
||||
entire layers layout:
|
||||
|
||||
WORD Flags (1=readable, 2=writeable)
|
||||
WORD Flags (1=readable, 2=writable)
|
||||
WORD Layer type (0=normal (image) layer, 1=layer set)
|
||||
WORD Layer child level (see NOTE.1)
|
||||
WORD Default layer width in pixels (ignored)
|
||||
@ -199,7 +199,7 @@ NOTE.3: The raw pixel data is saved row by row from top to bottom, and
|
||||
each scanline is from pixel by pixel from left to right.
|
||||
In RGB images, each pixel have 4 bytes in the order R, G, B, A.
|
||||
In Grayscale images, each pixel have 2 bytes in the order K, A.
|
||||
In Indexed images, each pixel have 1 bytes (the index).
|
||||
In Indexed images, each pixel have 1 byte (the index).
|
||||
|
||||
|
||||
========================================
|
||||
|
@ -36,7 +36,7 @@ bool command_enabled_copy(const char *argument)
|
||||
if ((!current_sprite) ||
|
||||
(!current_sprite->layer) ||
|
||||
(!current_sprite->layer->readable) ||
|
||||
(!current_sprite->layer->writeable) ||
|
||||
(!current_sprite->layer->writable) ||
|
||||
(!current_sprite->mask) ||
|
||||
(!current_sprite->mask->bitmap))
|
||||
return FALSE;
|
||||
|
@ -28,6 +28,11 @@
|
||||
|
||||
#endif
|
||||
|
||||
bool command_enabled_copy_frame(const char *argument)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void command_execute_copy_frame(const char *argument)
|
||||
{
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ static bool command_enabled_crop(const char *argument)
|
||||
if ((!current_sprite) ||
|
||||
(!current_sprite->layer) ||
|
||||
(!current_sprite->layer->readable) ||
|
||||
(!current_sprite->layer->writeable) ||
|
||||
(!current_sprite->layer->writable) ||
|
||||
(!current_sprite->mask) ||
|
||||
(!current_sprite->mask->bitmap))
|
||||
return FALSE;
|
||||
|
@ -36,7 +36,7 @@ bool command_enabled_cut(const char *argument)
|
||||
if ((!current_sprite) ||
|
||||
(!current_sprite->layer) ||
|
||||
(!current_sprite->layer->readable) ||
|
||||
(!current_sprite->layer->writeable) ||
|
||||
(!current_sprite->layer->writable) ||
|
||||
(!current_sprite->mask) ||
|
||||
(!current_sprite->mask->bitmap))
|
||||
return FALSE;
|
||||
|
@ -22,12 +22,19 @@
|
||||
|
||||
#include "jinete.h"
|
||||
|
||||
#include "core/app.h"
|
||||
/* #include "core/app.h" */
|
||||
#include "modules/sprites.h"
|
||||
#include "raster/sprite.h"
|
||||
/* #include "raster/sprite.h" */
|
||||
#include "dialogs/filmedit.h"
|
||||
|
||||
#endif
|
||||
|
||||
bool command_enabled_film_editor(const char *argument)
|
||||
{
|
||||
return current_sprite != NULL;
|
||||
}
|
||||
|
||||
void command_execute_film_editor(const char *argument)
|
||||
{
|
||||
switch_between_film_and_sprite_editor();
|
||||
}
|
||||
|
@ -28,6 +28,11 @@
|
||||
|
||||
#endif
|
||||
|
||||
bool command_enabled_link_frame(const char *argument)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void command_execute_link_frame(const char *argument)
|
||||
{
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "jinete/alert.h"
|
||||
|
||||
#include "dialogs/filesel.h"
|
||||
#include "modules/gui.h"
|
||||
#include "modules/gui.h"
|
||||
#include "modules/sprites.h"
|
||||
#include "raster/mask.h"
|
||||
#include "raster/sprite.h"
|
||||
|
@ -28,6 +28,11 @@
|
||||
|
||||
#endif
|
||||
|
||||
bool command_enabled_move_frame(const char *argument)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void command_execute_move_frame(const char *argument)
|
||||
{
|
||||
}
|
||||
|
@ -22,12 +22,77 @@
|
||||
|
||||
#include "jinete.h"
|
||||
|
||||
#include "console/console.h"
|
||||
#include "core/app.h"
|
||||
#include "modules/gui.h"
|
||||
#include "modules/color.h"
|
||||
#include "modules/sprites.h"
|
||||
#include "raster/image.h"
|
||||
#include "raster/frame.h"
|
||||
#include "raster/layer.h"
|
||||
#include "raster/sprite.h"
|
||||
#include "raster/stock.h"
|
||||
#include "raster/undo.h"
|
||||
#include "widgets/colbar.h"
|
||||
|
||||
#endif
|
||||
|
||||
bool command_enabled_new_frame(const char *argument)
|
||||
{
|
||||
return
|
||||
current_sprite &&
|
||||
current_sprite->layer &&
|
||||
current_sprite->layer->readable &&
|
||||
current_sprite->layer->writable &&
|
||||
layer_is_image(current_sprite->layer);
|
||||
}
|
||||
|
||||
void command_execute_new_frame(const char *argument)
|
||||
{
|
||||
int bg, image_index;
|
||||
Frame *frame;
|
||||
Image *image;
|
||||
int frpos;
|
||||
|
||||
frpos = current_sprite->frpos;
|
||||
while (layer_get_frame(current_sprite->layer, frpos))
|
||||
frpos++;
|
||||
|
||||
/* create a new empty frame with a new clean image */
|
||||
image = image_new(current_sprite->imgtype,
|
||||
current_sprite->w,
|
||||
current_sprite->h);
|
||||
if (!image) {
|
||||
console_printf(_("Not enough memory.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* background color (right color) */
|
||||
bg = get_color_for_image(image->imgtype,
|
||||
color_bar_get_color(app_get_color_bar(), 1));
|
||||
image_clear(image, bg);
|
||||
|
||||
/* add the image in the stock */
|
||||
image_index = stock_add_image(current_sprite->layer->stock, image);
|
||||
|
||||
undo_open(current_sprite->undo);
|
||||
|
||||
if (frpos >= current_sprite->frames) {
|
||||
undo_set_frames(current_sprite->undo, current_sprite);
|
||||
sprite_set_frames(current_sprite, frpos+1);
|
||||
}
|
||||
undo_int(current_sprite->undo, ¤t_sprite->gfxobj, ¤t_sprite->frpos);
|
||||
sprite_set_frpos(current_sprite, frpos);
|
||||
|
||||
undo_add_image(current_sprite->undo,
|
||||
current_sprite->layer->stock, image);
|
||||
|
||||
/* add the frame in the layer */
|
||||
frame = frame_new(current_sprite->frpos, image_index);
|
||||
undo_add_frame(current_sprite->undo, current_sprite->layer, frame);
|
||||
layer_add_frame(current_sprite->layer, frame);
|
||||
|
||||
undo_close(current_sprite->undo);
|
||||
|
||||
GUI_Refresh(current_sprite);
|
||||
}
|
||||
|
@ -56,6 +56,6 @@ void command_execute_save_file(const char *argument)
|
||||
save-as dialog to the user to select for first time the file-name
|
||||
for this sprite */
|
||||
else {
|
||||
command_execute(command_get_by_name(CMD_SAVE_FILE), argument);
|
||||
command_execute(command_get_by_name(CMD_SAVE_FILE_AS), argument);
|
||||
}
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ void command_execute_save_file_as(const char *argument)
|
||||
|
||||
for (;;) {
|
||||
newfilename = GUI_FileSelect(_("Save Sprite"), filename,
|
||||
get_writeable_extensions());
|
||||
get_writable_extensions());
|
||||
if (!newfilename)
|
||||
return;
|
||||
ustrcpy(filename, newfilename);
|
||||
|
@ -102,9 +102,13 @@ void command_execute_crop_layer(const char *argument);
|
||||
/* frame */
|
||||
void command_execute_frame_properties(const char *argument);
|
||||
void command_execute_remove_frame(const char *argument);
|
||||
bool command_enabled_new_frame(const char *argument);
|
||||
void command_execute_new_frame(const char *argument);
|
||||
bool command_enabled_move_frame(const char *argument);
|
||||
void command_execute_move_frame(const char *argument);
|
||||
bool command_enabled_copy_frame(const char *argument);
|
||||
void command_execute_copy_frame(const char *argument);
|
||||
bool command_enabled_link_frame(const char *argument);
|
||||
void command_execute_link_frame(const char *argument);
|
||||
bool command_enabled_crop_frame(const char *argument);
|
||||
void command_execute_crop_frame(const char *argument);
|
||||
@ -143,6 +147,7 @@ bool command_checked_rectangle_tool(const char *argument);
|
||||
void command_execute_rectangle_tool(const char *argument);
|
||||
bool command_checked_ellipse_tool(const char *argument);
|
||||
void command_execute_ellipse_tool(const char *argument);
|
||||
bool command_enabled_film_editor(const char *argument);
|
||||
void command_execute_film_editor(const char *argument);
|
||||
void command_execute_palette_editor(const char *argument);
|
||||
void command_execute_convolution_matrix(const char *argument);
|
||||
@ -214,10 +219,10 @@ static Command commands[] = {
|
||||
CMD_EXE_ENA(crop_layer),
|
||||
{ CMD_FRAME_PROPERTIES, NULL, NULL, NULL, NULL },
|
||||
{ CMD_REMOVE_FRAME, NULL, NULL, NULL, NULL },
|
||||
{ CMD_NEW_FRAME, NULL, NULL, NULL, NULL },
|
||||
{ CMD_MOVE_FRAME, NULL, NULL, NULL, NULL },
|
||||
{ CMD_COPY_FRAME, NULL, NULL, NULL, NULL },
|
||||
{ CMD_LINK_FRAME, NULL, NULL, NULL, NULL },
|
||||
CMD_EXE_ENA(new_frame),
|
||||
CMD_EXE_ENA(move_frame),
|
||||
CMD_EXE_ENA(copy_frame),
|
||||
CMD_EXE_ENA(link_frame),
|
||||
CMD_EXE_ENA(crop_frame),
|
||||
CMD_EXE_ENA(mask_all),
|
||||
CMD_EXE_ENA(deselect_mask),
|
||||
@ -236,7 +241,7 @@ static Command commands[] = {
|
||||
CMD_EXE_CHK(line_tool),
|
||||
CMD_EXE_CHK(rectangle_tool),
|
||||
CMD_EXE_CHK(ellipse_tool),
|
||||
{ CMD_FILM_EDITOR, NULL, NULL, NULL, NULL },
|
||||
CMD_EXE_ENA(film_editor),
|
||||
{ CMD_PALETTE_EDITOR, NULL, NULL, NULL, NULL },
|
||||
{ CMD_CONVOLUTION_MATRIX, NULL, NULL, NULL, NULL },
|
||||
{ CMD_COLOR_CURVE, NULL, NULL, NULL, NULL },
|
||||
|
@ -329,20 +329,20 @@ static bool layer_box_msg_proc (JWidget widget, JMessage msg)
|
||||
|
||||
/* undo */
|
||||
if (command && strcmp(command->name, CMD_UNDO) == 0) {
|
||||
if (undo_can_undo (sprite->undo)) {
|
||||
undo_undo (sprite->undo);
|
||||
destroy_thumbnails ();
|
||||
jmanager_refresh_screen ();
|
||||
if (undo_can_undo(sprite->undo)) {
|
||||
undo_undo(sprite->undo);
|
||||
destroy_thumbnails();
|
||||
jmanager_refresh_screen();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* redo */
|
||||
if (command && strcmp(command->name, CMD_REDO) == 0) {
|
||||
if (undo_can_redo (sprite->undo)) {
|
||||
undo_redo (sprite->undo);
|
||||
destroy_thumbnails ();
|
||||
jmanager_refresh_screen ();
|
||||
if (undo_can_redo(sprite->undo)) {
|
||||
undo_redo(sprite->undo);
|
||||
destroy_thumbnails();
|
||||
jmanager_refresh_screen();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@ -612,9 +612,9 @@ static bool frame_box_msg_proc (JWidget widget, JMessage msg)
|
||||
y += h;
|
||||
}
|
||||
|
||||
blit (bmp, ji_screen, 0, 0, vp->x1, vp->y1, jrect_w(vp), jrect_h(vp));
|
||||
destroy_bitmap (bmp);
|
||||
jrect_free (vp);
|
||||
blit(bmp, ji_screen, 0, 0, vp->x1, vp->y1, jrect_w(vp), jrect_h(vp));
|
||||
destroy_bitmap(bmp);
|
||||
jrect_free(vp);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -660,10 +660,10 @@ static bool frame_box_msg_proc (JWidget widget, JMessage msg)
|
||||
(ji_screen,
|
||||
frame_box->rect.x1, frame_box->rect.y1,
|
||||
frame_box->rect.x2-1, frame_box->rect.y2-1);
|
||||
rectdotted (ji_screen,
|
||||
frame_box->rect.x1, frame_box->rect.y1,
|
||||
frame_box->rect.x2-1, frame_box->rect.y2-1,
|
||||
makecol (0, 0, 0), makecol (255, 255, 255));
|
||||
rectdotted(ji_screen,
|
||||
frame_box->rect.x1, frame_box->rect.y1,
|
||||
frame_box->rect.x2-1, frame_box->rect.y2-1,
|
||||
makecol (0, 0, 0), makecol (255, 255, 255));
|
||||
jmouse_show();
|
||||
}
|
||||
}
|
||||
@ -695,22 +695,22 @@ static bool frame_box_msg_proc (JWidget widget, JMessage msg)
|
||||
rectdotted(ji_screen,
|
||||
frame_box->rect.x1, frame_box->rect.y1,
|
||||
frame_box->rect.x2-1, frame_box->rect.y2-1,
|
||||
makecol (0, 0, 0), makecol (255, 255, 255));
|
||||
makecol(0, 0, 0), makecol(255, 255, 255));
|
||||
|
||||
jmouse_show();
|
||||
}
|
||||
/* select */
|
||||
else if (state == STATE_SELECTING) {
|
||||
select_frpos_motion (widget);
|
||||
select_layer_motion (widget, frame_box->layer_box, frame_box);
|
||||
select_frpos_motion(widget);
|
||||
select_layer_motion(widget, frame_box->layer_box, frame_box);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case JM_BUTTONRELEASED:
|
||||
if (jwidget_has_capture (widget)) {
|
||||
jwidget_release_mouse (widget);
|
||||
if (jwidget_has_capture(widget)) {
|
||||
jwidget_release_mouse(widget);
|
||||
|
||||
if ((state == STATE_SCROLLING) || (state == STATE_MOVING))
|
||||
jmouse_set_cursor(JI_CURSOR_NORMAL);
|
||||
@ -723,23 +723,23 @@ static bool frame_box_msg_proc (JWidget widget, JMessage msg)
|
||||
jmouse_show();
|
||||
}
|
||||
|
||||
set_frame_to_handle (frame_box->layer, frame_box->frame);
|
||||
set_frame_to_handle(frame_box->layer, frame_box->frame);
|
||||
|
||||
if (msg->mouse.right) {
|
||||
JWidget popup_menuitem = get_frame_popup_menuitem ();
|
||||
JWidget popup_menuitem = get_frame_popup_menuitem();
|
||||
|
||||
if (popup_menuitem && jmenuitem_get_submenu (popup_menuitem)) {
|
||||
if (popup_menuitem && jmenuitem_get_submenu(popup_menuitem)) {
|
||||
/* show the frame pop-up menu */
|
||||
jmenu_popup (jmenuitem_get_submenu (popup_menuitem),
|
||||
msg->mouse.x, msg->mouse.y);
|
||||
jmenu_popup(jmenuitem_get_submenu(popup_menuitem),
|
||||
msg->mouse.x, msg->mouse.y);
|
||||
|
||||
jview_update (jwidget_get_view (frame_box->widget));
|
||||
jview_update (jwidget_get_view (frame_box->layer_box->widget));
|
||||
jview_update(jwidget_get_view (frame_box->widget));
|
||||
jview_update(jwidget_get_view (frame_box->layer_box->widget));
|
||||
}
|
||||
}
|
||||
else if (state == STATE_MOVING) {
|
||||
move_frame ();
|
||||
jwidget_dirty (widget);
|
||||
move_frame();
|
||||
jwidget_dirty(widget);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -190,15 +190,15 @@ Sprite *ase_file_read_f (FILE *f)
|
||||
}
|
||||
|
||||
/* set frames and speed */
|
||||
sprite_set_frames (sprite, header.frames);
|
||||
sprite_set_speed (sprite, header.speed);
|
||||
sprite_set_frames(sprite, header.frames);
|
||||
sprite_set_speed(sprite, header.speed);
|
||||
|
||||
/* prepare variables for layer chunks */
|
||||
last_layer = sprite->set;
|
||||
current_level = -1;
|
||||
|
||||
/* progress */
|
||||
add_progress (header.size);
|
||||
add_progress(header.size);
|
||||
|
||||
/* read frame by frame to end-of-file */
|
||||
for (frpos=0; frpos<sprite->frames; frpos++) {
|
||||
@ -627,7 +627,7 @@ static Layer *ase_file_read_layer_chunk (FILE *f, int imgtype, Layer **previous_
|
||||
if (layer) {
|
||||
/* flags */
|
||||
layer->readable = (flags & 1) ? TRUE: FALSE;
|
||||
layer->writeable = (flags & 2) ? TRUE: FALSE;
|
||||
layer->writable = (flags & 2) ? TRUE: FALSE;
|
||||
|
||||
/* name */
|
||||
if (name)
|
||||
@ -660,7 +660,7 @@ static void ase_file_write_layer_chunk (FILE *f, Layer *layer)
|
||||
ase_file_write_start_chunk (f, ASE_FILE_CHUNK_LAYER);
|
||||
|
||||
/* flags */
|
||||
fputw ((layer->readable & 1) | ((layer->writeable & 1) << 1), f);
|
||||
fputw ((layer->readable & 1) | ((layer->writable & 1) << 1), f);
|
||||
|
||||
/* layer type */
|
||||
fputw (layer_is_image (layer) ? 0:
|
||||
|
@ -152,7 +152,7 @@ const char *get_readable_extensions(void)
|
||||
return file_extensions;
|
||||
}
|
||||
|
||||
const char *get_writeable_extensions(void)
|
||||
const char *get_writable_extensions(void)
|
||||
{
|
||||
int c;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -50,16 +50,16 @@ void file_sequence_set_color(int index, int r, int g, int b);
|
||||
void file_sequence_get_color(int index, int *r, int *g, int *b);
|
||||
struct Image *file_sequence_image(int imgtype, int w, int h);
|
||||
struct Sprite *file_sequence_sprite(void);
|
||||
struct Image *file_sequence_image_to_save (void);
|
||||
struct Image *file_sequence_image_to_save(void);
|
||||
|
||||
/* available extensions for each load/save operation */
|
||||
|
||||
const char *get_readable_extensions (void);
|
||||
const char *get_writeable_extensions (void);
|
||||
const char *get_readable_extensions(void);
|
||||
const char *get_writable_extensions(void);
|
||||
|
||||
/* mainly routines to load/save images */
|
||||
|
||||
struct Sprite *sprite_load (const char *filename);
|
||||
int sprite_save (struct Sprite *sprite);
|
||||
struct Sprite *sprite_load(const char *filename);
|
||||
int sprite_save(struct Sprite *sprite);
|
||||
|
||||
#endif /* FILE_H */
|
||||
|
@ -210,7 +210,7 @@ static Stock *layer_get_images(Sprite *sprite, Layer *layer, int target, int wri
|
||||
if (!layer->readable)
|
||||
return stock;
|
||||
|
||||
if (write && !layer->writeable)
|
||||
if (write && !layer->writable)
|
||||
return stock;
|
||||
|
||||
switch (layer->gfxobj.type) {
|
||||
@ -267,7 +267,7 @@ static void layer_get_pos (Sprite *sprite, Layer *layer, int target, int write,
|
||||
if (!layer->readable)
|
||||
return;
|
||||
|
||||
if (write && !layer->writeable)
|
||||
if (write && !layer->writable)
|
||||
return;
|
||||
|
||||
switch (layer->gfxobj.type) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -30,15 +30,15 @@ struct Stock;
|
||||
|
||||
extern struct Sprite *current_sprite;
|
||||
|
||||
int init_module_sprites (void);
|
||||
void exit_module_sprites (void);
|
||||
int init_module_sprites(void);
|
||||
void exit_module_sprites(void);
|
||||
|
||||
JList get_sprite_list (void);
|
||||
struct Sprite *get_first_sprite (void);
|
||||
struct Sprite *get_next_sprite (struct Sprite *sprite);
|
||||
JList get_sprite_list(void);
|
||||
struct Sprite *get_first_sprite(void);
|
||||
struct Sprite *get_next_sprite(struct Sprite *sprite);
|
||||
|
||||
struct Sprite *get_clipboard_sprite (void);
|
||||
void set_clipboard_sprite (struct Sprite *sprite);
|
||||
struct Sprite *get_clipboard_sprite(void);
|
||||
void set_clipboard_sprite(struct Sprite *sprite);
|
||||
|
||||
void sprite_mount(struct Sprite *sprite);
|
||||
void sprite_unmount(struct Sprite *sprite);
|
||||
@ -48,7 +48,7 @@ void set_current_sprite(struct Sprite *sprite);
|
||||
void send_sprite_to_top(struct Sprite *sprite);
|
||||
void sprite_show(struct Sprite *sprite);
|
||||
|
||||
struct Stock *sprite_get_images (struct Sprite *sprite, int target, int write, int **x, int **y);
|
||||
struct Stock *sprite_get_images(struct Sprite *sprite, int target, int write, int **x, int **y);
|
||||
|
||||
#endif /* MODULES_SPRITES_H */
|
||||
|
||||
|
@ -682,7 +682,7 @@ void control_tool(JWidget widget, Tool *tool, const char *_color)
|
||||
return;
|
||||
}
|
||||
/* error, the active layer is locked */
|
||||
else if (!editor->sprite->layer->writeable) {
|
||||
else if (!editor->sprite->layer->writable) {
|
||||
jalert(_("Warning"
|
||||
"<<The active layer is locked,"
|
||||
"<<unlock it and try again"
|
||||
@ -1193,7 +1193,7 @@ void do_tool_points(Sprite *sprite, Tool *tool, const char *_color,
|
||||
/* we have a image layer to paint in? */
|
||||
/* error, the active layer is not visible */
|
||||
/* error, the active layer is locked */
|
||||
if (!image || !sprite->layer->readable || !sprite->layer->writeable)
|
||||
if (!image || !sprite->layer->readable || !sprite->layer->writable)
|
||||
return;
|
||||
|
||||
/* select the hline procedure */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -40,7 +40,7 @@ static int has_frames (Layer *layer, int frpos);
|
||||
\
|
||||
layer->parent = NULL; \
|
||||
layer->readable = TRUE; \
|
||||
layer->writeable = TRUE; \
|
||||
layer->writable = TRUE; \
|
||||
\
|
||||
layer->imgtype = 0; \
|
||||
layer->blend_mode = 0; \
|
||||
@ -171,7 +171,7 @@ Layer *layer_new_copy(const Layer *layer)
|
||||
if (layer_copy) {
|
||||
layer_set_name(layer_copy, layer->name);
|
||||
layer_copy->readable = layer->readable;
|
||||
layer_copy->writeable = layer->writeable;
|
||||
layer_copy->writable = layer->writable;
|
||||
}
|
||||
|
||||
return layer_copy;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -26,15 +26,15 @@ struct Frame;
|
||||
struct Image;
|
||||
struct Stock;
|
||||
|
||||
typedef struct Layer Layer;
|
||||
|
||||
struct Layer
|
||||
typedef struct Layer Layer;
|
||||
|
||||
struct Layer
|
||||
{
|
||||
GfxObj gfxobj;
|
||||
char name[256]; /* layer name */
|
||||
GfxObj *parent; /* parent object */
|
||||
unsigned readable : 1;
|
||||
unsigned writeable : 1;
|
||||
unsigned writable : 1;
|
||||
|
||||
/* for GFXOBJ_LAYER_IMAGE */
|
||||
int imgtype; /* image type */
|
||||
@ -54,27 +54,27 @@ struct Layer
|
||||
/* int blend_mode; */
|
||||
};
|
||||
|
||||
Layer *layer_new (int imgtype);
|
||||
Layer *layer_set_new (void);
|
||||
Layer *layer_new(int imgtype);
|
||||
Layer *layer_set_new(void);
|
||||
/* Layer *layer_new_text (const char *text); */
|
||||
Layer *layer_new_copy (const Layer *layer);
|
||||
Layer *layer_new_with_image (int imgtype, int x, int y, int w, int h, int frpos);
|
||||
void layer_free (Layer *layer);
|
||||
Layer *layer_new_copy(const Layer *layer);
|
||||
Layer *layer_new_with_image(int imgtype, int x, int y, int w, int h, int frpos);
|
||||
void layer_free(Layer *layer);
|
||||
|
||||
int layer_is_image (const Layer *layer);
|
||||
int layer_is_set (const Layer *layer);
|
||||
int layer_is_image(const Layer *layer);
|
||||
int layer_is_set(const Layer *layer);
|
||||
|
||||
Layer *layer_get_prev (Layer *layer);
|
||||
Layer *layer_get_next (Layer *layer);
|
||||
Layer *layer_get_prev(Layer *layer);
|
||||
Layer *layer_get_next(Layer *layer);
|
||||
|
||||
void layer_set_name (Layer *layer, const char *name);
|
||||
void layer_set_blend_mode (Layer *layer, int blend_mode);
|
||||
void layer_set_parent (Layer *layer, GfxObj *gfxobj);
|
||||
void layer_set_name(Layer *layer, const char *name);
|
||||
void layer_set_blend_mode(Layer *layer, int blend_mode);
|
||||
void layer_set_parent(Layer *layer, GfxObj *gfxobj);
|
||||
|
||||
/* for LAYER_IMAGE */
|
||||
void layer_add_frame (Layer *layer, struct Frame *frame);
|
||||
void layer_remove_frame (Layer *layer, struct Frame *frame);
|
||||
struct Frame *layer_get_frame (Layer *layer, int frpos);
|
||||
void layer_add_frame(Layer *layer, struct Frame *frame);
|
||||
void layer_remove_frame(Layer *layer, struct Frame *frame);
|
||||
struct Frame *layer_get_frame(Layer *layer, int frpos);
|
||||
|
||||
/* for LAYER_SET */
|
||||
void layer_add_layer(Layer *set, Layer *layer);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -23,9 +23,9 @@
|
||||
|
||||
struct Image;
|
||||
|
||||
typedef struct Stock Stock;
|
||||
|
||||
struct Stock
|
||||
typedef struct Stock Stock;
|
||||
|
||||
struct Stock
|
||||
{
|
||||
GfxObj gfxobj;
|
||||
int imgtype; /* type of images (all images in the stock
|
||||
@ -35,15 +35,15 @@ struct Stock
|
||||
bool ref; /* this is a reference (non-original) stock? */
|
||||
};
|
||||
|
||||
Stock *stock_new (int imgtype);
|
||||
Stock *stock_new_ref (int imgtype);
|
||||
Stock *stock_new_copy (const Stock *stock);
|
||||
void stock_free (Stock *stock);
|
||||
Stock *stock_new(int imgtype);
|
||||
Stock *stock_new_ref(int imgtype);
|
||||
Stock *stock_new_copy(const Stock *stock);
|
||||
void stock_free(Stock *stock);
|
||||
|
||||
int stock_add_image (Stock *stock, struct Image *image);
|
||||
void stock_remove_image (Stock *stock, struct Image *image);
|
||||
void stock_replace_image (Stock *stock, int index, Image *image);
|
||||
int stock_add_image(Stock *stock, struct Image *image);
|
||||
void stock_remove_image(Stock *stock, struct Image *image);
|
||||
void stock_replace_image(Stock *stock, int index, Image *image);
|
||||
|
||||
struct Image *stock_get_image (Stock *stock, int index);
|
||||
struct Image *stock_get_image(Stock *stock, int index);
|
||||
|
||||
#endif /* RASTER_STOCK_H */
|
||||
|
@ -72,8 +72,9 @@ enum {
|
||||
UNDO_TYPE_MOVE_LAYER,
|
||||
UNDO_TYPE_SET_LAYER,
|
||||
|
||||
/* undo management */
|
||||
/* misc */
|
||||
UNDO_TYPE_SET_MASK,
|
||||
UNDO_TYPE_SET_FRAMES,
|
||||
};
|
||||
|
||||
typedef struct UndoChunk
|
||||
@ -151,6 +152,9 @@ static void redo_set_layer(UndoStream *stream, UndoChunk *chunk, int state);
|
||||
static void chunk_set_mask(UndoStream *stream, Sprite *sprite);
|
||||
static void redo_set_mask(UndoStream *stream, UndoChunk *chunk, int state);
|
||||
|
||||
static void chunk_set_frames(UndoStream *stream, Sprite *sprite);
|
||||
static void redo_set_frames(UndoStream *stream, UndoChunk *chunk, int state);
|
||||
|
||||
static UndoAction undo_actions[] = { /* in UNDO_TYPEs order */
|
||||
{ "Open", redo_open },
|
||||
{ "Close", redo_close },
|
||||
@ -168,6 +172,7 @@ static UndoAction undo_actions[] = { /* in UNDO_TYPEs order */
|
||||
{ "Move layer", redo_move_layer },
|
||||
{ "Set layer", redo_set_layer },
|
||||
{ "Set mask", redo_set_mask },
|
||||
{ "Set frames", redo_set_frames },
|
||||
};
|
||||
|
||||
/* UndoChunk */
|
||||
@ -318,7 +323,7 @@ static void run_undo(Undo *undo, int state, int discard_tail)
|
||||
else if (chunk->type == UNDO_TYPE_CLOSE)
|
||||
level--;
|
||||
|
||||
undo_chunk_free (chunk);
|
||||
undo_chunk_free(chunk);
|
||||
|
||||
if (state == DO_UNDO)
|
||||
undo->diff_count--;
|
||||
@ -386,7 +391,7 @@ static void update_undo(Undo *undo)
|
||||
|
||||
/* "undo" is too big? */
|
||||
while (groups > 1 && undo->undo_stream->size > undo->size_limit) {
|
||||
run_undo (undo, DO_UNDO, TRUE);
|
||||
run_undo(undo, DO_UNDO, TRUE);
|
||||
groups--;
|
||||
}
|
||||
}
|
||||
@ -1172,6 +1177,44 @@ static void redo_set_mask(UndoStream *stream, UndoChunk *chunk, int state)
|
||||
}
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
"set_frames"
|
||||
|
||||
DWORD sprite ID
|
||||
DWORD frames
|
||||
|
||||
***********************************************************************/
|
||||
|
||||
void undo_set_frames(Undo *undo, Sprite *sprite)
|
||||
{
|
||||
chunk_set_frames(undo->undo_stream, sprite);
|
||||
update_undo(undo);
|
||||
}
|
||||
|
||||
static void chunk_set_frames(UndoStream *stream, Sprite *sprite)
|
||||
{
|
||||
UndoChunk *chunk = undo_chunk_new(UNDO_TYPE_SET_FRAMES);
|
||||
|
||||
undo_chunk_put32(chunk, sprite->gfxobj.id);
|
||||
undo_chunk_put32(chunk, sprite->frames);
|
||||
|
||||
undo_stream_push_chunk(stream, chunk);
|
||||
}
|
||||
|
||||
static void redo_set_frames(UndoStream *stream, UndoChunk *chunk, int state)
|
||||
{
|
||||
unsigned long sprite_id = undo_chunk_get32(chunk);
|
||||
Sprite *sprite = (Sprite *)gfxobj_find(sprite_id);
|
||||
|
||||
if (sprite) {
|
||||
int frames = undo_chunk_get32(chunk);
|
||||
|
||||
chunk_set_frames(stream, sprite);
|
||||
sprite_set_frames(sprite, frames);
|
||||
}
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
||||
Helper routines for UndoChunk
|
||||
@ -1426,7 +1469,7 @@ static Layer *undo_chunk_read_layer(UndoChunk *chunk)
|
||||
layer->readable = TRUE;
|
||||
|
||||
if (flags & 2)
|
||||
layer->writeable = TRUE;
|
||||
layer->writable = TRUE;
|
||||
|
||||
_gfxobj_set_id((GfxObj *)layer, layer_id);
|
||||
}
|
||||
@ -1444,7 +1487,7 @@ static void undo_chunk_write_layer(UndoChunk *chunk, Layer *layer)
|
||||
undo_chunk_put32(chunk, layer->gfxobj.id); /* ID */
|
||||
undo_chunk_write_string(chunk, layer->name); /* name */
|
||||
undo_chunk_put8(chunk, (((layer->readable)?1:0) |
|
||||
(((layer->writeable)?1:0)<<1))); /* properties */
|
||||
(((layer->writable)?1:0)<<1))); /* properties */
|
||||
undo_chunk_put32(chunk, layer->gfxobj.type); /* type */
|
||||
|
||||
switch (layer->gfxobj.type) {
|
||||
|
@ -77,6 +77,7 @@ void undo_remove_layer(Undo *undo, struct Layer *layer);
|
||||
void undo_move_layer(Undo *undo, struct Layer *layer);
|
||||
void undo_set_layer(Undo *undo, struct Sprite *sprite);
|
||||
void undo_set_mask(Undo *undo, struct Sprite *sprite);
|
||||
void undo_set_frames(Undo *undo, struct Sprite *sprite);
|
||||
|
||||
#define undo_int(undo, gfxobj, value_address) \
|
||||
undo_data((undo), (gfxobj), (void *)(value_address), sizeof(int))
|
||||
|
@ -284,8 +284,8 @@ static int metatable_index(lua_State *L)
|
||||
Type_Layer: Type_Sprite, layer->parent);
|
||||
else if (strcmp (index, "readable") == 0)
|
||||
lua_pushboolean (L, layer->readable);
|
||||
else if (strcmp (index, "writeable") == 0)
|
||||
lua_pushboolean (L, layer->writeable);
|
||||
else if (strcmp (index, "writable") == 0)
|
||||
lua_pushboolean (L, layer->writable);
|
||||
else if (strcmp (index, "prev") == 0)
|
||||
push_userdata (L, Type_Layer, layer_get_prev (layer));
|
||||
else if (strcmp (index, "next") == 0)
|
||||
|
@ -177,7 +177,7 @@ Sprite *sprite_load(const char *filename);
|
||||
int sprite_save(Sprite *sprite);
|
||||
|
||||
char *get_readable_extensions(void);
|
||||
char *get_writeable_extensions(void);
|
||||
char *get_writable_extensions(void);
|
||||
|
||||
/* modules/editors.c */
|
||||
|
||||
@ -234,7 +234,6 @@ void flip_vertical(void);
|
||||
|
||||
void set_frame_to_handle(Layer *layer, Frame *frame);
|
||||
|
||||
void new_frame(void);
|
||||
void move_frame(void);
|
||||
void copy_frame(void);
|
||||
void link_frame(void);
|
||||
|
@ -957,10 +957,10 @@ static int bind_get_readable_extensions(lua_State *L)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int bind_get_writeable_extensions(lua_State *L)
|
||||
static int bind_get_writable_extensions(lua_State *L)
|
||||
{
|
||||
const char *return_value;
|
||||
return_value = get_writeable_extensions();
|
||||
return_value = get_writable_extensions();
|
||||
lua_pushstring(L, return_value);
|
||||
return 1;
|
||||
}
|
||||
@ -1155,12 +1155,6 @@ static int bind_set_frame_to_handle(lua_State *L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bind_new_frame(lua_State *L)
|
||||
{
|
||||
new_frame();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bind_move_frame(lua_State *L)
|
||||
{
|
||||
move_frame();
|
||||
@ -5708,7 +5702,7 @@ const luaL_reg bindings_routines[] = {
|
||||
{ "sprite_load", bind_sprite_load },
|
||||
{ "sprite_save", bind_sprite_save },
|
||||
{ "get_readable_extensions", bind_get_readable_extensions },
|
||||
{ "get_writeable_extensions", bind_get_writeable_extensions },
|
||||
{ "get_writable_extensions", bind_get_writable_extensions },
|
||||
{ "set_current_editor", bind_set_current_editor },
|
||||
{ "update_editors_with_sprite", bind_update_editors_with_sprite },
|
||||
{ "editors_draw_sprite", bind_editors_draw_sprite },
|
||||
@ -5734,7 +5728,6 @@ const luaL_reg bindings_routines[] = {
|
||||
{ "flip_horizontal", bind_flip_horizontal },
|
||||
{ "flip_vertical", bind_flip_vertical },
|
||||
{ "set_frame_to_handle", bind_set_frame_to_handle },
|
||||
{ "new_frame", bind_new_frame },
|
||||
{ "move_frame", bind_move_frame },
|
||||
{ "copy_frame", bind_copy_frame },
|
||||
{ "link_frame", bind_link_frame },
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||
* Copyright (C) 2001-2005 David A. Capello
|
||||
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@ -49,58 +49,6 @@ void set_frame_to_handle (Layer *layer, Frame *frame)
|
||||
handle_frame = frame;
|
||||
}
|
||||
|
||||
void new_frame (void)
|
||||
{
|
||||
int bg, image_index;
|
||||
Frame *frame;
|
||||
Image *image;
|
||||
|
||||
if (!current_sprite ||
|
||||
!current_sprite->layer ||
|
||||
!layer_is_image (current_sprite->layer))
|
||||
return;
|
||||
|
||||
while (layer_get_frame (current_sprite->layer, current_sprite->frpos))
|
||||
current_sprite->frpos++;
|
||||
|
||||
if (current_sprite->frpos >= current_sprite->frames)
|
||||
sprite_set_frames(current_sprite, current_sprite->frpos+1);
|
||||
|
||||
/* create a new empty frame with a new clean image */
|
||||
|
||||
image = image_new (current_sprite->imgtype,
|
||||
current_sprite->w,
|
||||
current_sprite->h);
|
||||
if (!image) {
|
||||
console_printf (_("Not enough memory.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
/* background color (right color) */
|
||||
bg = get_color_for_image (image->imgtype,
|
||||
color_bar_get_color (app_get_color_bar (), 1));
|
||||
image_clear (image, bg);
|
||||
|
||||
/* add the image in the stock */
|
||||
image_index = stock_add_image (current_sprite->layer->stock, image);
|
||||
|
||||
undo_open (current_sprite->undo);
|
||||
undo_add_image (current_sprite->undo,
|
||||
current_sprite->layer->stock, image);
|
||||
|
||||
/* add the frame in the layer */
|
||||
frame = frame_new (current_sprite->frpos, image_index);
|
||||
undo_add_frame (current_sprite->undo, current_sprite->layer, frame);
|
||||
layer_add_frame (current_sprite->layer, frame);
|
||||
|
||||
undo_close (current_sprite->undo);
|
||||
|
||||
GUI_Refresh (current_sprite);
|
||||
|
||||
handle_layer = NULL;
|
||||
handle_frame = NULL;
|
||||
}
|
||||
|
||||
void move_frame (void)
|
||||
{
|
||||
if (handle_layer && handle_frame &&
|
||||
|
@ -1099,7 +1099,7 @@ static bool editor_msg_proc (JWidget widget, JMessage msg)
|
||||
else if (msg->mouse.left && has_only_shifts(msg, KB_CTRL_FLAG)) {
|
||||
if ((editor->sprite->layer) &&
|
||||
(editor->sprite->layer->gfxobj.type == GFXOBJ_LAYER_IMAGE) &&
|
||||
(editor->sprite->layer->writeable)) {
|
||||
(editor->sprite->layer->writable)) {
|
||||
bool click2 = get_config_bool("Options", "MoveClick2", FALSE);
|
||||
|
||||
interactive_move_layer(click2 ? MODE_CLICKANDCLICK:
|
||||
|
Loading…
x
Reference in New Issue
Block a user