Refactored Sprite class: no public variable members, all functions sprite_* go as Sprite function members, pimpl idiom.

This commit is contained in:
David Capello 2010-03-30 21:43:18 -03:00
parent c299844f96
commit 475d0eeb1b
96 changed files with 2531 additions and 1721 deletions

View File

@ -340,7 +340,7 @@ void app_refresh_screen(const Sprite* sprite)
assert(screen != NULL);
if (sprite)
set_current_palette(sprite_get_palette(sprite, sprite->frame), false);
set_current_palette(sprite->getCurrentPalette(), false);
else
set_current_palette(NULL, false);
@ -360,7 +360,7 @@ void app_realloc_sprite_list()
for (SpriteList::const_iterator
it = list.begin(); it != list.end(); ++it) {
Sprite* sprite = *it;
tabs_set_text_for_tab(tabsbar, get_filename(sprite->filename), sprite);
tabs_set_text_for_tab(tabsbar, get_filename(sprite->getFilename()), sprite);
}
}
@ -425,7 +425,7 @@ int app_get_current_image_type()
Sprite* sprite = context->get_current_sprite();
if (sprite != NULL)
return sprite->imgtype;
return sprite->getImgType();
else if (screen != NULL && bitmap_color_depth(screen) == 8)
return IMAGE_INDEXED;
else
@ -450,10 +450,10 @@ int app_get_fg_color(Sprite *sprite)
color_t c = colorbar_get_fg_color(colorbar);
assert(sprite != NULL);
if (sprite->layer != NULL)
return get_color_for_layer(sprite->layer, c);
if (sprite->getCurrentLayer() != NULL)
return get_color_for_layer(sprite->getCurrentLayer(), c);
else
return get_color_for_image(sprite->imgtype, c);
return get_color_for_image(sprite->getImgType(), c);
}
int app_get_bg_color(Sprite *sprite)
@ -461,10 +461,10 @@ int app_get_bg_color(Sprite *sprite)
color_t c = colorbar_get_bg_color(colorbar);
assert(sprite != NULL);
if (sprite->layer != NULL)
return get_color_for_layer(sprite->layer, c);
if (sprite->getCurrentLayer() != NULL)
return get_color_for_layer(sprite->getCurrentLayer(), c);
else
return get_color_for_image(sprite->imgtype, c);
return get_color_for_image(sprite->getImgType(), c);
}
int app_get_color_to_clear_layer(Layer *layer)

View File

@ -49,11 +49,11 @@ bool BackgroundFromLayerCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->layer != NULL &&
sprite_get_background_layer(sprite) == NULL &&
sprite->layer->is_image() &&
sprite->layer->is_readable() &&
sprite->layer->is_writable();
sprite->getCurrentLayer() != NULL &&
sprite->getBackgroundLayer() == NULL &&
sprite->getCurrentLayer()->is_image() &&
sprite->getCurrentLayer()->is_readable() &&
sprite->getCurrentLayer()->is_writable();
}
void BackgroundFromLayerCommand::execute(Context* context)
@ -63,11 +63,11 @@ void BackgroundFromLayerCommand::execute(Context* context)
// each frame of the layer to be converted as `Background' must be
// cleared using the selected background color in the color-bar
int bgcolor = context->getBgColor();
bgcolor = fixup_color_for_background(sprite->imgtype, bgcolor);
bgcolor = fixup_color_for_background(sprite->getImgType(), bgcolor);
{
Undoable undoable(sprite, "Background from Layer");
undoable.background_from_layer(static_cast<LayerImage*>(sprite->layer), bgcolor);
undoable.background_from_layer(static_cast<LayerImage*>(sprite->getCurrentLayer()), bgcolor);
undoable.commit();
}
update_screen_for_sprite(sprite);

View File

@ -100,8 +100,8 @@ void CanvasSizeCommand::execute(Context* context)
int x1 = -m_left;
int y1 = -m_top;
int x2 = sprite->w + m_right;
int y2 = sprite->h + m_bottom;
int x2 = sprite->getWidth() + m_right;
int y2 = sprite->getHeight() + m_bottom;
if (x2 <= x1) x2 = x1+1;
if (y2 <= y1) y2 = y1+1;
@ -112,7 +112,7 @@ void CanvasSizeCommand::execute(Context* context)
undoable.crop_sprite(x1, y1, x2-x1, y2-y1, bgcolor);
undoable.commit();
}
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -57,24 +57,22 @@ bool CelPropertiesCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite &&
sprite->layer &&
sprite->layer->is_image();
sprite->getCurrentLayer() &&
sprite->getCurrentLayer()->is_image();
}
void CelPropertiesCommand::execute(Context* context)
{
JWidget label_frame, label_pos, label_size;
JWidget slider_opacity, button_ok;
Layer* layer;
Cel* cel;
char buf[1024];
int memsize;
const CurrentSpriteReader sprite(context);
layer = sprite->layer;
const Layer* layer = sprite->getCurrentLayer();
/* get current cel (can be NULL) */
cel = static_cast<LayerImage*>(layer)->get_cel(sprite->frame);
// Get current cel (can be NULL)
const Cel* cel = static_cast<const LayerImage*>(layer)->get_cel(sprite->getCurrentFrame());
FramePtr window(load_widget("celprop.jid", "cel_properties"));
get_widgets(window,
@ -93,7 +91,7 @@ void CelPropertiesCommand::execute(Context* context)
button_ok->setEnabled(false);
}
usprintf(buf, "%d/%d", sprite->frame+1, sprite->frames);
usprintf(buf, "%d/%d", sprite->getCurrentFrame()+1, sprite->getTotalFrames());
label_frame->setText(buf);
if (cel != NULL) {
@ -103,13 +101,13 @@ void CelPropertiesCommand::execute(Context* context)
/* dimension (and memory size) */
memsize =
image_line_size(sprite->stock->image[cel->image],
sprite->stock->image[cel->image]->w)*
sprite->stock->image[cel->image]->h;
image_line_size(sprite->getStock()->image[cel->image],
sprite->getStock()->image[cel->image]->w)*
sprite->getStock()->image[cel->image]->h;
usprintf(buf, "%dx%d (",
sprite->stock->image[cel->image]->w,
sprite->stock->image[cel->image]->h);
sprite->getStock()->image[cel->image]->w,
sprite->getStock()->image[cel->image]->h);
get_pretty_memsize(memsize,
buf+ustrsize(buf),
sizeof(buf)-ustrsize(buf));
@ -135,18 +133,22 @@ void CelPropertiesCommand::execute(Context* context)
window->open_window_fg();
if (window->get_killer() == button_ok) {
SpriteWriter sprite_writer(sprite);
Layer* layer_writer = sprite_writer->getCurrentLayer();
Cel* cel_writer = static_cast<LayerImage*>(layer_writer)->get_cel(sprite->getCurrentFrame());
int new_opacity = jslider_get_value(slider_opacity);
/* the opacity was changed? */
if (cel != NULL &&
cel->opacity != new_opacity) {
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Cel Opacity Change");
undo_int(sprite->undo, (GfxObj *)cel, &cel->opacity);
if (cel_writer != NULL &&
cel_writer->opacity != new_opacity) {
if (undo_is_enabled(sprite_writer->getUndo())) {
undo_set_label(sprite_writer->getUndo(), "Cel Opacity Change");
undo_int(sprite_writer->getUndo(), (GfxObj *)cel_writer, &cel_writer->opacity);
}
/* change cel opacity */
cel_set_opacity(cel, new_opacity);
cel_set_opacity(cel_writer, new_opacity);
update_screen_for_sprite(sprite);
}

View File

@ -74,7 +74,7 @@ bool ChangeImageTypeCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
if (sprite != NULL &&
sprite->imgtype == IMAGE_INDEXED &&
sprite->getImgType() == IMAGE_INDEXED &&
m_imgtype == IMAGE_INDEXED &&
m_dithering == DITHERING_ORDERED)
return false;
@ -88,14 +88,14 @@ bool ChangeImageTypeCommand::checked(Context* context)
const CurrentSpriteReader sprite(context);
if (sprite != NULL &&
sprite->imgtype == IMAGE_INDEXED &&
sprite->getImgType() == IMAGE_INDEXED &&
m_imgtype == IMAGE_INDEXED &&
m_dithering == DITHERING_ORDERED)
return false;
return
sprite != NULL &&
sprite->imgtype == m_imgtype;
sprite->getImgType() == m_imgtype;
}
void ChangeImageTypeCommand::execute(Context* context)

View File

@ -55,25 +55,25 @@ bool ClearCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->layer != NULL &&
sprite->layer->is_image() &&
sprite->layer->is_readable() &&
sprite->layer->is_writable();
sprite->getCurrentLayer() != NULL &&
sprite->getCurrentLayer()->is_image() &&
sprite->getCurrentLayer()->is_readable() &&
sprite->getCurrentLayer()->is_writable();
}
void ClearCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
bool empty_mask = sprite->mask->is_empty();
bool empty_mask = sprite->getMask()->is_empty();
{
Undoable undoable(sprite, "Clear");
undoable.clear_mask(app_get_color_to_clear_layer(sprite->layer));
undoable.clear_mask(app_get_color_to_clear_layer(sprite->getCurrentLayer()));
if (!empty_mask)
undoable.deselect_mask();
undoable.commit();
}
if (!empty_mask)
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -122,11 +122,11 @@ try_again:;
CurrentSpriteReader sprite(context);
// see if the sprite has changes
while (sprite_is_modified(sprite)) {
while (sprite->isModified()) {
// ask what want to do the user with the changes in the sprite
int ret = jalert("%s<<%s<<%s||%s||%s||%s",
_("Warning"), _("Saving changes in:"),
get_filename(sprite->filename),
get_filename(sprite->getFilename()),
_("&Save"), _("&Discard"), _("&Cancel"));
if (ret == 1) {
@ -159,7 +159,7 @@ try_again:;
CurrentSpriteWriter sprite(context);
app_get_statusbar()
->setStatusText(0, "Sprite '%s' closed.",
get_filename(sprite->filename));
get_filename(sprite->getFilename()));
sprite.destroy();
}
return true;

View File

@ -453,9 +453,9 @@ static bool set_grid_button_select_hook(JWidget widget, void *data)
// TODO use the same context as in ConfigureTools::execute
const CurrentSpriteReader sprite(UIContext::instance());
if (sprite && sprite->mask && sprite->mask->bitmap) {
Rect bounds(sprite->mask->x, sprite->mask->y,
sprite->mask->w, sprite->mask->h);
if (sprite && sprite->getMask() && sprite->getMask()->bitmap) {
Rect bounds(sprite->getMask()->x, sprite->getMask()->y,
sprite->getMask()->w, sprite->getMask()->h);
UIContext::instance()->getSettings()->setGridBounds(bounds);

View File

@ -51,12 +51,12 @@ bool CopyCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
if ((sprite) &&
(sprite->layer) &&
(sprite->layer->is_readable()) &&
(sprite->layer->is_writable()) &&
(sprite->mask) &&
(sprite->mask->bitmap))
return GetImage(sprite) ? true: false;
(sprite->getCurrentLayer()) &&
(sprite->getCurrentLayer()->is_readable()) &&
(sprite->getCurrentLayer()->is_writable()) &&
(sprite->getMask()) &&
(sprite->getMask()->bitmap))
return sprite->getCurrentImage() ? true: false;
else
return false;
}

View File

@ -57,8 +57,8 @@ bool CropSpriteCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->mask != NULL &&
sprite->mask->bitmap != NULL;
sprite->getMask() != NULL &&
sprite->getMask()->bitmap != NULL;
}
void CropSpriteCommand::execute(Context* context)
@ -66,16 +66,16 @@ void CropSpriteCommand::execute(Context* context)
CurrentSpriteWriter sprite(context);
{
Undoable undoable(sprite, "Sprite Crop");
int bgcolor = get_color_for_image(sprite->imgtype,
int bgcolor = get_color_for_image(sprite->getImgType(),
colorbar_get_bg_color(app_get_colorbar()));
undoable.crop_sprite(sprite->mask->x,
sprite->mask->y,
sprite->mask->w,
sprite->mask->h,
undoable.crop_sprite(sprite->getMask()->x,
sprite->getMask()->y,
sprite->getMask()->w,
sprite->getMask()->h,
bgcolor);
undoable.commit();
}
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}
@ -114,7 +114,7 @@ void AutocropSpriteCommand::execute(Context* context)
undoable.autocrop_sprite(colorbar_get_bg_color(app_get_colorbar()));
undoable.commit();
}
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -50,12 +50,12 @@ bool CutCommand::enabled(Context* context)
{
const CurrentSpriteReader sprite(context);
if ((sprite) &&
(sprite->layer) &&
(sprite->layer->is_readable()) &&
(sprite->layer->is_writable()) &&
(sprite->mask) &&
(sprite->mask->bitmap))
return GetImage(sprite) ? true: false;
(sprite->getCurrentLayer()) &&
(sprite->getCurrentLayer()->is_readable()) &&
(sprite->getCurrentLayer()->is_writable()) &&
(sprite->getMask()) &&
(sprite->getMask()->bitmap))
return sprite->getCurrentImage() ? true: false;
else
return false;
}

View File

@ -49,7 +49,7 @@ DeselectMaskCommand::DeselectMaskCommand()
bool DeselectMaskCommand::enabled(Context* context)
{
const CurrentSpriteReader sprite(context);
return sprite && !sprite->mask->is_empty();
return sprite && !sprite->getMask()->is_empty();
}
void DeselectMaskCommand::execute(Context* context)
@ -60,7 +60,7 @@ void DeselectMaskCommand::execute(Context* context)
undoable.deselect_mask();
undoable.commit();
}
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -55,7 +55,7 @@ DuplicateLayerCommand::DuplicateLayerCommand()
bool DuplicateLayerCommand::enabled(Context* context)
{
const CurrentSpriteReader sprite(context);
return sprite && sprite->layer;
return sprite && sprite->getCurrentLayer();
}
void DuplicateLayerCommand::execute(Context* context)
@ -68,15 +68,15 @@ void DuplicateLayerCommand::execute(Context* context)
static Layer* duplicate_layer(Sprite* sprite)
{
/* open undo */
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Layer Duplication");
undo_open(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Layer Duplication");
undo_open(sprite->getUndo());
}
Layer* layer_copy = sprite->layer->duplicate_for(sprite);
Layer* layer_copy = sprite->getCurrentLayer()->duplicate_for(sprite);
if (!layer_copy) {
if (undo_is_enabled(sprite->undo))
undo_close(sprite->undo);
if (undo_is_enabled(sprite->getUndo()))
undo_close(sprite->getUndo());
Console console;
console.printf("Not enough memory");
@ -88,19 +88,19 @@ static Layer* duplicate_layer(Sprite* sprite)
layer_copy->set_name(layer_copy->get_name() + " " + _("Copy"));
/* add the new layer in the sprite */
if (undo_is_enabled(sprite->undo))
undo_add_layer(sprite->undo, sprite->layer->get_parent(), layer_copy);
if (undo_is_enabled(sprite->getUndo()))
undo_add_layer(sprite->getUndo(), sprite->getCurrentLayer()->get_parent(), layer_copy);
sprite->layer->get_parent()->add_layer(layer_copy);
sprite->getCurrentLayer()->get_parent()->add_layer(layer_copy);
if (undo_is_enabled(sprite->undo)) {
undo_move_layer(sprite->undo, layer_copy);
undo_set_layer(sprite->undo, sprite);
undo_close(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_move_layer(sprite->getUndo(), layer_copy);
undo_set_layer(sprite->getUndo(), sprite);
undo_close(sprite->getUndo());
}
sprite->layer->get_parent()->move_layer(layer_copy, sprite->layer);
sprite_set_layer(sprite, layer_copy);
sprite->getCurrentLayer()->get_parent()->move_layer(layer_copy, sprite->getCurrentLayer());
sprite->setCurrentLayer(layer_copy);
return layer_copy;
}

View File

@ -71,9 +71,9 @@ void DuplicateSpriteCommand::execute(Context* context)
dst_name = jwidget_find_name(window, "dst_name");
flatten = jwidget_find_name(window, "flatten");
src_name->setText(get_filename(sprite->filename));
src_name->setText(get_filename(sprite->getFilename()));
sprintf(buf, "%s %s", sprite->filename, _("Copy"));
sprintf(buf, "%s %s", sprite->getFilename(), _("Copy"));
dst_name->setText(buf);
if (get_config_bool("DuplicateSprite", "Flatten", false))
@ -89,12 +89,12 @@ void DuplicateSpriteCommand::execute(Context* context)
// make a copy of the current sprite
Sprite *sprite_copy;
if (jwidget_is_selected(flatten))
sprite_copy = sprite_new_flatten_copy(sprite);
sprite_copy = Sprite::createFlattenCopy(*sprite);
else
sprite_copy = sprite_new_copy(sprite);
sprite_copy = new Sprite(*sprite);
if (sprite_copy != NULL) {
sprite_set_filename(sprite_copy, dst_name->getText());
sprite_copy->setFilename(dst_name->getText());
context->add_sprite(sprite_copy);
set_sprite_in_more_reliable_editor(sprite_copy);

View File

@ -51,7 +51,7 @@ void ExitCommand::execute(Context* context)
while (sprite) {
// check if this sprite is modified
if (sprite_is_modified(sprite)) {
if (sprite->isModified()) {
if (jalert(_("Warning<<There are sprites with changes.<<Do you want quit anyway?||&Yes||&No")) != 1) {
return;
}

View File

@ -81,8 +81,8 @@ void EyedropperCommand::execute(Context* context)
editor->screen_to_editor(jmouse_x(0), jmouse_y(0), &x, &y);
// get the color from the image
color_t color = color_from_image(sprite->imgtype,
sprite_getpixel(sprite, x, y));
color_t color = color_from_image(sprite->getImgType(),
sprite->getPixel(x, y));
if (color_type(color) != COLOR_TYPE_MASK) {
// TODO replace the color in the "context", not directly from the color-bar

View File

@ -56,7 +56,7 @@ bool FlattenLayersCommand::enabled(Context* context)
void FlattenLayersCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
int bgcolor = get_color_for_image(sprite->imgtype,
int bgcolor = get_color_for_image(sprite->getImgType(),
colorbar_get_bg_color(app_get_colorbar()));
{
Undoable undoable(sprite, "Flatten Layers");

View File

@ -98,11 +98,11 @@ void FlipCommand::execute(Context* context)
int x1, y1, x2, y2;
int x, y;
image = GetImage2(sprite, &x, &y, NULL);
image = sprite->getCurrentImage(&x, &y);
if (!image)
return;
// mask is empty?
if (sprite->mask->is_empty()) {
if (sprite->getMask()->is_empty()) {
// so we flip the entire image
x1 = 0;
y1 = 0;
@ -111,10 +111,10 @@ void FlipCommand::execute(Context* context)
}
else {
// apply the cel offset
x1 = sprite->mask->x - x;
y1 = sprite->mask->y - y;
x2 = sprite->mask->x + sprite->mask->w - 1 - x;
y2 = sprite->mask->y + sprite->mask->h - 1 - y;
x1 = sprite->getMask()->x - x;
y1 = sprite->getMask()->y - y;
x2 = sprite->getMask()->x + sprite->getMask()->w - 1 - x;
y2 = sprite->getMask()->y + sprite->getMask()->h - 1 - y;
// clip
x1 = MID(0, x1, image->w-1);
@ -129,16 +129,16 @@ void FlipCommand::execute(Context* context)
else {
// get all sprite cels
CelList cels;
sprite_get_cels(sprite, cels);
sprite->getCels(cels);
// for each cel...
for (CelIterator it = cels.begin(); it != cels.end(); ++it) {
Cel* cel = *it;
Image* image = stock_get_image(sprite->stock, cel->image);
Image* image = stock_get_image(sprite->getStock(), cel->image);
undoable.set_cel_position(cel,
m_flip_horizontal ? sprite->w - image->w - cel->x: cel->x,
m_flip_vertical ? sprite->h - image->h - cel->y: cel->y);
m_flip_horizontal ? sprite->getWidth() - image->w - cel->x: cel->x,
m_flip_vertical ? sprite->getHeight() - image->h - cel->y: cel->y);
undoable.flip_image(image, 0, 0, image->w-1, image->h-1,
m_flip_horizontal, m_flip_vertical);

View File

@ -60,7 +60,7 @@ bool FramePropertiesCommand::enabled(Context* context)
void FramePropertiesCommand::execute(Context* context)
{
const CurrentSpriteReader sprite(context);
dialogs_frame_length(sprite, sprite->frame);
dialogs_frame_length(sprite, sprite->getCurrentFrame());
}
/* if sprite_frame < 0, set the frame length of all frames */
@ -81,7 +81,7 @@ void dialogs_frame_length(const SpriteReader& sprite, int sprite_frame)
sprintf(buf, "%d", sprite_frame+1);
frame->setText(buf);
frlen->setTextf("%d", sprite_get_frlen(sprite, sprite->frame));
frlen->setTextf("%d", sprite->getFrameDuration(sprite->getCurrentFrame()));
window->open_window_fg();
if (window->get_killer() == ok) {

View File

@ -55,7 +55,7 @@ bool GotoFirstFrameCommand::enabled(Context* context)
void GotoFirstFrameCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
sprite->frame = 0;
sprite->setCurrentFrame(0);
update_screen_for_sprite(sprite);
current_editor->editor_update_statusbar_for_standby();
@ -93,11 +93,12 @@ bool GotoPreviousFrameCommand::enabled(Context* context)
void GotoPreviousFrameCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
int frame = sprite->getCurrentFrame();
if (sprite->frame > 0)
sprite->frame--;
if (frame > 0)
sprite->setCurrentFrame(frame-1);
else
sprite->frame = sprite->frames-1;
sprite->setCurrentFrame(sprite->getTotalFrames()-1);
update_screen_for_sprite(sprite);
current_editor->editor_update_statusbar_for_standby();
@ -135,11 +136,12 @@ bool GotoNextFrameCommand::enabled(Context* context)
void GotoNextFrameCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
int frame = sprite->getCurrentFrame();
if (sprite->frame < sprite->frames-1)
sprite->frame++;
if (frame < sprite->getTotalFrames()-1)
sprite->setCurrentFrame(frame+1);
else
sprite->frame = 0;
sprite->setCurrentFrame(0);
update_screen_for_sprite(sprite);
current_editor->editor_update_statusbar_for_standby();
@ -177,7 +179,7 @@ bool GotoLastFrameCommand::enabled(Context* context)
void GotoLastFrameCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
sprite->frame = sprite->frames-1;
sprite->setCurrentFrame(sprite->getTotalFrames()-1);
update_screen_for_sprite(sprite);
current_editor->editor_update_statusbar_for_standby();

View File

@ -59,21 +59,21 @@ bool GotoPreviousLayerCommand::enabled(Context* context)
void GotoPreviousLayerCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
int i = sprite_layer2index(sprite, sprite->layer);
int i = sprite->layerToIndex(sprite->getCurrentLayer());
if (i > 0)
i--;
else
i = sprite_count_layers(sprite)-1;
i = sprite->countLayers()-1;
sprite->layer = sprite_index2layer(sprite, i);
sprite->setCurrentLayer(sprite->indexToLayer(i));
update_screen_for_sprite(sprite);
current_editor->editor_update_statusbar_for_standby();
app_get_statusbar()
->showTip(1000, _("Layer `%s' selected"),
sprite->layer->get_name().c_str());
sprite->getCurrentLayer()->get_name().c_str());
}
//////////////////////////////////////////////////////////////////////
@ -107,21 +107,21 @@ bool GotoNextLayerCommand::enabled(Context* context)
void GotoNextLayerCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
int i = sprite_layer2index(sprite, sprite->layer);
int i = sprite->layerToIndex(sprite->getCurrentLayer());
if (i < sprite_count_layers(sprite)-1)
if (i < sprite->countLayers()-1)
i++;
else
i = 0;
sprite->layer = sprite_index2layer(sprite, i);
sprite->setCurrentLayer(sprite->indexToLayer(i));
update_screen_for_sprite(sprite);
current_editor->editor_update_statusbar_for_standby();
app_get_statusbar()
->showTip(1000, _("Layer `%s' selected"),
sprite->layer->get_name().c_str());
sprite->getCurrentLayer()->get_name().c_str());
}
//////////////////////////////////////////////////////////////////////

View File

@ -59,7 +59,7 @@ void InvertMaskCommand::execute(Context* context)
bool has_mask = false;
{
const CurrentSpriteReader sprite(context);
if (sprite->mask->bitmap)
if (sprite->getMask()->bitmap)
has_mask = true;
}
@ -75,39 +75,39 @@ void InvertMaskCommand::execute(Context* context)
CurrentSpriteWriter sprite(context);
/* undo */
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Mask Invert");
undo_set_mask(sprite->undo, sprite);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Mask Invert");
undo_set_mask(sprite->getUndo(), sprite);
}
/* create a new mask */
Mask* mask = mask_new();
/* select all the sprite area */
mask_replace(mask, 0, 0, sprite->w, sprite->h);
mask_replace(mask, 0, 0, sprite->getWidth(), sprite->getHeight());
/* remove in the new mask the current sprite marked region */
image_rectfill(mask->bitmap,
sprite->mask->x, sprite->mask->y,
sprite->mask->x + sprite->mask->w-1,
sprite->mask->y + sprite->mask->h-1, 0);
sprite->getMask()->x, sprite->getMask()->y,
sprite->getMask()->x + sprite->getMask()->w-1,
sprite->getMask()->y + sprite->getMask()->h-1, 0);
/* invert the current mask in the sprite */
mask_invert(sprite->mask);
if (sprite->mask->bitmap) {
mask_invert(sprite->getMask());
if (sprite->getMask()->bitmap) {
/* copy the inverted region in the new mask */
image_copy(mask->bitmap, sprite->mask->bitmap,
sprite->mask->x, sprite->mask->y);
image_copy(mask->bitmap, sprite->getMask()->bitmap,
sprite->getMask()->x, sprite->getMask()->y);
}
/* we need only need the area inside the sprite */
mask_intersect(mask, 0, 0, sprite->w, sprite->h);
mask_intersect(mask, 0, 0, sprite->getWidth(), sprite->getHeight());
/* set the new mask */
sprite_set_mask(sprite, mask);
sprite->setMask(mask);
mask_free(mask);
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}
}

View File

@ -52,11 +52,11 @@ bool LayerFromBackgroundCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite &&
sprite->layer &&
sprite->layer->is_image() &&
sprite->layer->is_readable() &&
sprite->layer->is_writable() &&
sprite->layer->is_background();
sprite->getCurrentLayer() &&
sprite->getCurrentLayer()->is_image() &&
sprite->getCurrentLayer()->is_readable() &&
sprite->getCurrentLayer()->is_writable() &&
sprite->getCurrentLayer()->is_background();
}
void LayerFromBackgroundCommand::execute(Context* context)

View File

@ -54,7 +54,7 @@ bool LayerPropertiesCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->layer != NULL;
sprite->getCurrentLayer() != NULL;
}
void LayerPropertiesCommand::execute(Context* context)
@ -62,8 +62,8 @@ void LayerPropertiesCommand::execute(Context* context)
JWidget box1, box2, box3, label_name, entry_name;
JWidget button_ok, button_cancel, label_bm, view_bm, list_bm;
CurrentSpriteWriter sprite(context);
Layer* layer = sprite->layer;
bool with_blend_modes = (layer->is_image() && sprite->imgtype != IMAGE_INDEXED);
Layer* layer = sprite->getCurrentLayer();
bool with_blend_modes = (layer->is_image() && sprite->getImgType() != IMAGE_INDEXED);
FramePtr window(new Frame(false, _("Layer Properties")));
box1 = jbox_new(JI_VERTICAL);

View File

@ -84,15 +84,15 @@ void LoadMaskCommand::execute(Context* context)
static_cast<const char*>(m_filename.c_str()));
// undo
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Mask Load");
undo_set_mask(sprite->undo, sprite);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Mask Load");
undo_set_mask(sprite->getUndo(), sprite);
}
sprite_set_mask(sprite, mask);
sprite->setMask(mask);
mask_free(mask);
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -57,15 +57,15 @@ void MaskAllCommand::execute(Context* context)
CurrentSpriteWriter sprite(context);
/* undo */
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Mask All");
undo_set_mask(sprite->undo, sprite);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Mask All");
undo_set_mask(sprite->getUndo(), sprite);
}
/* change the selection */
mask_replace(sprite->mask, 0, 0, sprite->w, sprite->h);
mask_replace(sprite->getMask(), 0, 0, sprite->getWidth(), sprite->getHeight());
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -58,11 +58,11 @@ bool MergeDownLayerCommand::enabled(Context* context)
if (!sprite)
return false;
Layer *src_layer = sprite->layer;
const Layer* src_layer = sprite->getCurrentLayer();
if (!src_layer || !src_layer->is_image())
return false;
Layer* dst_layer = sprite->layer->get_prev();
const Layer* dst_layer = sprite->getCurrentLayer()->get_prev();
if (!dst_layer || !dst_layer->is_image())
return false;
@ -77,27 +77,27 @@ void MergeDownLayerCommand::execute(Context* context)
Image *src_image, *dst_image;
int frpos, index;
src_layer = sprite->layer;
dst_layer = sprite->layer->get_prev();
src_layer = sprite->getCurrentLayer();
dst_layer = sprite->getCurrentLayer()->get_prev();
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Merge Down Layer");
undo_open(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Merge Down Layer");
undo_open(sprite->getUndo());
}
for (frpos=0; frpos<sprite->frames; ++frpos) {
for (frpos=0; frpos<sprite->getTotalFrames(); ++frpos) {
/* get frames */
src_cel = static_cast<LayerImage*>(src_layer)->get_cel(frpos);
dst_cel = static_cast<LayerImage*>(dst_layer)->get_cel(frpos);
/* get images */
if (src_cel != NULL)
src_image = stock_get_image(sprite->stock, src_cel->image);
src_image = stock_get_image(sprite->getStock(), src_cel->image);
else
src_image = NULL;
if (dst_cel != NULL)
dst_image = stock_get_image(sprite->stock, dst_cel->image);
dst_image = stock_get_image(sprite->getStock(), dst_cel->image);
else
dst_image = NULL;
@ -111,17 +111,17 @@ void MergeDownLayerCommand::execute(Context* context)
dst_image = image_new_copy(src_image);
/* adding it in the stock of images */
index = stock_add_image(sprite->stock, dst_image);
if (undo_is_enabled(sprite->undo))
undo_add_image(sprite->undo, sprite->stock, index);
index = stock_add_image(sprite->getStock(), dst_image);
if (undo_is_enabled(sprite->getUndo()))
undo_add_image(sprite->getUndo(), sprite->getStock(), index);
/* creating a copy of the cell */
dst_cel = cel_new(frpos, index);
cel_set_position(dst_cel, src_cel->x, src_cel->y);
cel_set_opacity(dst_cel, src_cel->opacity);
if (undo_is_enabled(sprite->undo))
undo_add_cel(sprite->undo, dst_layer, dst_cel);
if (undo_is_enabled(sprite->getUndo()))
undo_add_cel(sprite->getUndo(), dst_layer, dst_cel);
static_cast<LayerImage*>(dst_layer)->add_cel(dst_cel);
}
@ -134,8 +134,8 @@ void MergeDownLayerCommand::execute(Context* context)
if (dst_layer->is_background()) {
x1 = 0;
y1 = 0;
x2 = sprite->w;
y2 = sprite->h;
x2 = sprite->getWidth();
y2 = sprite->getHeight();
bgcolor = app_get_color_to_clear_layer(dst_layer);
}
/* merge down in a transparent layer */
@ -159,29 +159,29 @@ void MergeDownLayerCommand::execute(Context* context)
src_cel->opacity,
static_cast<LayerImage*>(src_layer)->get_blend_mode());
if (undo_is_enabled(sprite->undo)) {
undo_int(sprite->undo, (GfxObj *)dst_cel, &dst_cel->x);
undo_int(sprite->undo, (GfxObj *)dst_cel, &dst_cel->y);
if (undo_is_enabled(sprite->getUndo())) {
undo_int(sprite->getUndo(), (GfxObj *)dst_cel, &dst_cel->x);
undo_int(sprite->getUndo(), (GfxObj *)dst_cel, &dst_cel->y);
}
cel_set_position(dst_cel, x1, y1);
if (undo_is_enabled(sprite->undo))
undo_replace_image(sprite->undo, sprite->stock, dst_cel->image);
stock_replace_image(sprite->stock, dst_cel->image, new_image);
if (undo_is_enabled(sprite->getUndo()))
undo_replace_image(sprite->getUndo(), sprite->getStock(), dst_cel->image);
stock_replace_image(sprite->getStock(), dst_cel->image, new_image);
image_free(dst_image);
}
}
}
if (undo_is_enabled(sprite->undo)) {
undo_set_layer(sprite->undo, sprite);
undo_remove_layer(sprite->undo, src_layer);
undo_close(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_layer(sprite->getUndo(), sprite);
undo_remove_layer(sprite->getUndo(), src_layer);
undo_close(sprite->getUndo());
}
sprite_set_layer(sprite, dst_layer);
sprite->setCurrentLayer(dst_layer);
src_layer->get_parent()->remove_layer(src_layer);
delete src_layer;

View File

@ -154,15 +154,15 @@ void NewFileCommand::execute(Context* context)
}
else {
usprintf(buf, "Sprite-%04d", ++_sprite_counter);
sprite_set_filename(sprite, buf);
sprite->setFilename(buf);
/* if the background color isn't transparent, we have to
convert the `Layer 1' in a `Background' */
if (color_type(color) != COLOR_TYPE_MASK) {
assert(sprite->layer && sprite->layer->is_image());
assert(sprite->getCurrentLayer() && sprite->getCurrentLayer()->is_image());
static_cast<LayerImage*>(sprite->layer)->configure_as_background();
image_clear(GetImage(sprite), get_color_for_image(imgtype, color));
static_cast<LayerImage*>(sprite->getCurrentLayer())->configure_as_background();
image_clear(sprite->getCurrentImage(), get_color_for_image(imgtype, color));
}
/* show the sprite to the user */
@ -187,7 +187,7 @@ static Sprite *new_sprite(Context* context, int imgtype, int w, int h, int ncolo
assert(w >= 1 && w <= 9999);
assert(h >= 1 && h <= 9999);
return sprite_new_with_layer(imgtype, w, h, ncolors);
return Sprite::createWithLayer(imgtype, w, h, ncolors);
}
//////////////////////////////////////////////////////////////////////

View File

@ -62,10 +62,10 @@ bool NewFrameCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->layer != NULL &&
sprite->layer->is_readable() &&
sprite->layer->is_writable() &&
sprite->layer->is_image();
sprite->getCurrentLayer() != NULL &&
sprite->getCurrentLayer()->is_readable() &&
sprite->getCurrentLayer()->is_writable() &&
sprite->getCurrentLayer()->is_image();
}
void NewFrameCommand::execute(Context* context)
@ -79,8 +79,8 @@ void NewFrameCommand::execute(Context* context)
update_screen_for_sprite(sprite);
app_get_statusbar()
->showTip(1000, _("New frame %d/%d"),
sprite->frame+1,
sprite->frames);
sprite->getCurrentFrame()+1,
sprite->getTotalFrames());
}
//////////////////////////////////////////////////////////////////////

View File

@ -119,7 +119,7 @@ void NewLayerCommand::execute(Context* context)
static std::string get_unique_layer_name(Sprite* sprite)
{
char buf[1024];
sprintf(buf, "Layer %d", get_max_layer_num(sprite->get_folder())+1);
sprintf(buf, "Layer %d", get_max_layer_num(sprite->getFolder())+1);
return buf;
}

View File

@ -69,8 +69,8 @@ void NewLayerSetCommand::execute(Context* context)
Layer* layer = new LayerFolder(sprite);
layer->set_name(name);
sprite->get_folder()->add_layer(layer);
sprite_set_layer(sprite, layer);
sprite->getFolder()->add_layer(layer);
sprite->setCurrentLayer(layer);
update_screen_for_sprite(sprite);
}

View File

@ -98,8 +98,8 @@ void PaletteEditorCommand::execute(Context* context)
int frame, columns;
Palette *palette = NULL;
const CurrentSpriteReader sprite(context);
int imgtype = sprite ? sprite->imgtype: IMAGE_INDEXED;
int frame_bak = sprite ? sprite->frame : 0;
int imgtype = sprite ? sprite->getImgType(): IMAGE_INDEXED;
int frame_bak = sprite ? sprite->getCurrentFrame() : 0;
bool all_frames_same_palette = true;
if (imgtype == IMAGE_GRAYSCALE) {
@ -134,10 +134,10 @@ void PaletteEditorCommand::execute(Context* context)
/* create current_sprite->frames palettes */
if (sprite) {
palettes.resize(sprite->frames);
palettes.resize(sprite->getTotalFrames());
for (frame=0; frame<sprite->frames; ++frame) {
Palette* orig = sprite_get_palette(sprite, frame);
for (frame=0; frame<sprite->getTotalFrames(); ++frame) {
const Palette* orig = sprite->getPalette(frame);
palettes[frame] = new Palette(frame, orig->size());
orig->copyColorsTo(palettes[frame]);
@ -185,8 +185,8 @@ void PaletteEditorCommand::execute(Context* context)
/* frame */
if (sprite) {
jslider_set_range(slider_frame, 0, sprite->frames-1);
jslider_set_value(slider_frame, sprite->frame);
jslider_set_range(slider_frame, 0, sprite->getTotalFrames()-1);
jslider_set_value(slider_frame, sprite->getCurrentFrame());
if (jwidget_is_selected(check_all_frames))
jwidget_disable(slider_frame);
@ -228,24 +228,24 @@ void PaletteEditorCommand::execute(Context* context)
if (window->get_killer() == button_ok) {
if (sprite) {
SpriteWriter sprite_writer(sprite);
sprite_reset_palettes(sprite_writer);
sprite_writer->resetPalettes();
/* one palette */
if (jwidget_is_selected(check_all_frames)) {
// Copy the current palette in the first frame
get_current_palette()->copyColorsTo(palettes[0]);
sprite_set_palette(sprite_writer, palettes[0], true);
sprite_writer->setPalette(palettes[0], true);
}
/* various palettes */
else {
frame = jslider_get_value(slider_frame);
get_current_palette()->copyColorsTo(palettes[frame]);
for (frame=0; frame<sprite_writer->frames; ++frame) {
for (frame=0; frame<sprite_writer->getTotalFrames(); ++frame) {
if (frame == 0 ||
palettes[frame]->countDiff(palettes[frame-1], NULL, NULL) > 0) {
sprite_set_palette(sprite_writer, palettes[frame], true);
sprite_writer->setPalette(palettes[frame], true);
}
}
}
@ -261,9 +261,9 @@ void PaletteEditorCommand::execute(Context* context)
/* restore the system palette */
if (sprite) {
SpriteWriter sprite_writer(sprite);
sprite_writer->frame = frame_bak;
sprite_writer->setCurrentFrame(frame_bak);
set_current_palette(sprite_get_palette(sprite, frame_bak), true);
set_current_palette(sprite->getPalette(frame_bak), true);
}
else {
set_current_palette(NULL, true);
@ -283,7 +283,7 @@ void PaletteEditorCommand::execute(Context* context)
if (!palettes.empty()) {
assert(sprite);
for (frame=0; frame<sprite->frames; ++frame)
for (frame=0; frame<sprite->getTotalFrames(); ++frame)
delete palettes[frame];
palettes.clear();
@ -379,7 +379,7 @@ static void quantize_command(JWidget widget)
paledit_get_selected_entries(palette_editor, array);
paledit_get_palette(palette_editor)->copyColorsTo(palette);
if (sprite->imgtype == IMAGE_RGB) {
if (sprite->getImgType() == IMAGE_RGB) {
SpriteWriter sprite_writer(sprite);
sprite_quantize_ex(sprite_writer, palette);
}
@ -458,13 +458,13 @@ static bool slider_frame_change_hook(JWidget widget, void *data)
const SpriteReader& sprite = get_sprite(widget);
assert(sprite != NULL);
int old_frame = sprite->frame;
int old_frame = sprite->getCurrentFrame();
int new_frame = jslider_get_value(slider_frame);
get_current_palette()->copyColorsTo(palettes[old_frame]);
{
SpriteWriter sprite_writer(sprite);
sprite_writer->frame = new_frame;
sprite_writer->setCurrentFrame(new_frame);
}
set_new_palette(palettes[new_frame]);
@ -484,7 +484,7 @@ static bool check_all_frames_change_hook(JWidget widget, void *data)
bool has_two_or_more_palettes = false;
int c;
for (c=1; c<sprite->frames; c++) {
for (c=1; c<sprite->getTotalFrames(); c++) {
if (palettes[c-1]->countDiff(palettes[c], NULL, NULL) > 0) {
has_two_or_more_palettes = true;
break;

View File

@ -57,8 +57,8 @@ void PasteCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
if (undo_is_enabled(sprite->undo))
undo_set_label(sprite->undo, "Paste");
if (undo_is_enabled(sprite->getUndo()))
undo_set_label(sprite->getUndo(), "Paste");
clipboard::paste(sprite);
}

View File

@ -77,7 +77,7 @@ void PlayAnimationCommand::execute(Context* context)
Palette *oldpal, *newpal;
PALETTE rgbpal;
if (sprite->frames < 2)
if (sprite->getTotalFrames() < 2)
return;
// desactivate the onionskin
@ -85,7 +85,7 @@ void PlayAnimationCommand::execute(Context* context)
jmouse_hide();
old_frame = sprite->frame;
old_frame = sprite->getCurrentFrame();
LOCK_VARIABLE(speed_timer);
LOCK_FUNCTION(speed_timer_callback);
@ -99,17 +99,17 @@ void PlayAnimationCommand::execute(Context* context)
oldpal = NULL;
speed_timer = 0;
while (!done) {
msecs = sprite_get_frlen(sprite, sprite->frame);
msecs = sprite->getFrameDuration(sprite->getCurrentFrame());
install_int_ex(speed_timer_callback, MSEC_TO_TIMER(msecs));
newpal = sprite_get_palette(sprite, sprite->frame);
newpal = sprite->getPalette(sprite->getCurrentFrame());
if (oldpal != newpal) {
newpal->toAllegro(rgbpal);
set_palette(rgbpal);
oldpal = newpal;
}
current_editor->editor_draw_sprite_safe(0, 0, sprite->w, sprite->h);
current_editor->editor_draw_sprite_safe(0, 0, sprite->getWidth(), sprite->getHeight());
do {
poll_mouse();
@ -120,9 +120,10 @@ void PlayAnimationCommand::execute(Context* context)
} while (!done && (speed_timer <= 0));
if (!done) {
sprite->frame++;
if (sprite->frame >= sprite->frames)
sprite->frame = 0;
int frame = sprite->getCurrentFrame()+1;
if (frame >= sprite->getTotalFrames())
frame = 0;
sprite->setCurrentFrame(frame);
speed_timer--;
}
@ -135,10 +136,10 @@ void PlayAnimationCommand::execute(Context* context)
/* if right-click or ESC */
if (mouse_b == 2 || (keypressed() && (readkey()>>8) == KEY_ESC))
/* return to the old frame position */
sprite->frame = old_frame;
sprite->setCurrentFrame(old_frame);
/* refresh all */
newpal = sprite_get_palette(sprite, sprite->frame);
newpal = sprite->getPalette(sprite->getCurrentFrame());
set_current_palette(newpal, true);
jmanager_refresh_screen();
gui_feedback();

View File

@ -106,7 +106,7 @@ void PreviewCommand::preview_sprite(Context* context, int flags)
old_mouse_x = jmouse_x(0);
old_mouse_y = jmouse_y(0);
bmp = create_bitmap(sprite->w, sprite->h);
bmp = create_bitmap(sprite->getWidth(), sprite->getHeight());
if (bmp) {
/* print a informative text */
app_get_statusbar()->setStatusText(1, _("Rendering..."));
@ -117,8 +117,8 @@ void PreviewCommand::preview_sprite(Context* context, int flags)
jmouse_set_position(JI_SCREEN_W/2, JI_SCREEN_H/2);
/* render the sprite in the bitmap */
image = RenderEngine::renderSprite(sprite, 0, 0, sprite->w, sprite->h,
sprite->frame, 0);
image = RenderEngine::renderSprite(sprite, 0, 0, sprite->getWidth(), sprite->getHeight(),
sprite->getCurrentFrame(), 0);
if (image) {
image_to_allegro(image, bmp, 0, 0);
image_free(image);
@ -132,8 +132,8 @@ void PreviewCommand::preview_sprite(Context* context, int flags)
shiftx = - scroll_x + vp->x1 + editor->editor_get_offset_x();
shifty = - scroll_y + vp->y1 + editor->editor_get_offset_y();
w = sprite->w << editor->editor_get_zoom();
h = sprite->h << editor->editor_get_zoom();
w = sprite->getWidth() << editor->editor_get_zoom();
h = sprite->getHeight() << editor->editor_get_zoom();
redraw = true;
do {
@ -259,8 +259,8 @@ void PreviewCommand::preview_sprite(Context* context, int flags)
redraw = true;
/* render the sprite in the bitmap */
image = RenderEngine::renderSprite(sprite, 0, 0, sprite->w, sprite->h,
sprite->frame, 0);
image = RenderEngine::renderSprite(sprite, 0, 0, sprite->getWidth(), sprite->getHeight(),
sprite->getCurrentFrame(), 0);
if (image) {
image_to_allegro(image, bmp, 0, 0);
image_free(image);

View File

@ -49,7 +49,7 @@ bool RedoCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
undo_can_redo(sprite->undo);
undo_can_redo(sprite->getUndo());
}
void RedoCommand::execute(Context* context)
@ -58,10 +58,10 @@ void RedoCommand::execute(Context* context)
app_get_statusbar()
->showTip(1000, _("Redid %s"),
undo_get_next_redo_label(sprite->undo));
undo_get_next_redo_label(sprite->getUndo()));
undo_do_redo(sprite->undo);
sprite_generate_mask_boundaries(sprite);
undo_do_redo(sprite->getUndo());
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -52,20 +52,20 @@ bool RemoveCelCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite &&
sprite->layer &&
sprite->layer->is_readable() &&
sprite->layer->is_writable() &&
sprite->layer->is_image() &&
static_cast<LayerImage*>(sprite->layer)->get_cel(sprite->frame);
sprite->getCurrentLayer() &&
sprite->getCurrentLayer()->is_readable() &&
sprite->getCurrentLayer()->is_writable() &&
sprite->getCurrentLayer()->is_image() &&
static_cast<const LayerImage*>(sprite->getCurrentLayer())->get_cel(sprite->getCurrentFrame());
}
void RemoveCelCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
Cel* cel = static_cast<LayerImage*>(sprite->layer)->get_cel(sprite->frame);
Cel* cel = static_cast<LayerImage*>(sprite->getCurrentLayer())->get_cel(sprite->getCurrentFrame());
{
Undoable undoable(sprite, "Remove Cel");
undoable.remove_cel(static_cast<LayerImage*>(sprite->layer), cel);
undoable.remove_cel(static_cast<LayerImage*>(sprite->getCurrentLayer()), cel);
undoable.commit();
}
update_screen_for_sprite(sprite);

View File

@ -52,7 +52,7 @@ bool RemoveFrameCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->frames > 1;
sprite->getTotalFrames() > 1;
}
void RemoveFrameCommand::execute(Context* context)
@ -60,7 +60,7 @@ void RemoveFrameCommand::execute(Context* context)
CurrentSpriteWriter sprite(context);
{
Undoable undoable(sprite, "Remove Frame");
undoable.remove_frame(sprite->frame);
undoable.remove_frame(sprite->getCurrentFrame());
undoable.commit();
}
update_screen_for_sprite(sprite);

View File

@ -56,7 +56,7 @@ bool RemoveLayerCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite->layer != NULL;
sprite->getCurrentLayer() != NULL;
}
void RemoveLayerCommand::execute(Context* context)
@ -66,9 +66,9 @@ void RemoveLayerCommand::execute(Context* context)
{
Undoable undoable(sprite, "Remove Layer");
layer_name = sprite->layer->get_name();
layer_name = sprite->getCurrentLayer()->get_name();
undoable.remove_layer(sprite->layer);
undoable.remove_layer(sprite->getCurrentLayer());
undoable.commit();
}
update_screen_for_sprite(sprite);

View File

@ -51,7 +51,7 @@ bool ReselectMaskCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
sprite_request_mask(sprite, "*deselected*") != NULL;
sprite->requestMask("*deselected*") != NULL;
}
void ReselectMaskCommand::execute(Context* context)
@ -59,23 +59,23 @@ void ReselectMaskCommand::execute(Context* context)
CurrentSpriteWriter sprite(context);
Mask *mask;
/* request *deselected* mask */
mask = sprite_request_mask(sprite, "*deselected*");
// Request *deselected* mask
mask = sprite->requestMask("*deselected*");
/* undo */
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Mask Reselection");
undo_set_mask(sprite->undo, sprite);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Mask Reselection");
undo_set_mask(sprite->getUndo(), sprite);
}
/* set the mask */
sprite_set_mask(sprite, mask);
sprite->setMask(mask);
/* remove the *deselected* mask */
sprite_remove_mask(sprite, mask);
sprite->removeMask(mask);
mask_free(mask);
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -78,32 +78,32 @@ protected:
// get all sprite cels
CelList cels;
sprite_get_cels(m_sprite, cels);
m_sprite->getCels(cels);
// for each cel...
for (CelIterator it = cels.begin(); it != cels.end(); ++it) {
Cel* cel = *it;
Image* image = stock_get_image(m_sprite->stock, cel->image);
Image* image = stock_get_image(m_sprite->getStock(), cel->image);
// change it location
switch (m_angle) {
case 180:
undoable.set_cel_position(cel,
m_sprite->w - cel->x - image->w,
m_sprite->h - cel->y - image->h);
m_sprite->getWidth() - cel->x - image->w,
m_sprite->getHeight() - cel->y - image->h);
break;
case 90:
undoable.set_cel_position(cel, m_sprite->h - cel->y - image->h, cel->x);
undoable.set_cel_position(cel, m_sprite->getHeight() - cel->y - image->h, cel->x);
break;
case -90:
undoable.set_cel_position(cel, cel->y, m_sprite->w - cel->x - image->w);
undoable.set_cel_position(cel, cel->y, m_sprite->getWidth() - cel->x - image->w);
break;
}
}
// for each stock's image
for (int i=0; i<m_sprite->stock->nimage; ++i) {
Image* image = stock_get_image(m_sprite->stock, i);
for (int i=0; i<m_sprite->getStock()->nimage; ++i) {
Image* image = stock_get_image(m_sprite->getStock(), i);
if (!image)
continue;
@ -115,7 +115,7 @@ protected:
undoable.replace_stock_image(i, new_image);
job_progress((float)i / m_sprite->stock->nimage);
job_progress((float)i / m_sprite->getStock()->nimage);
// cancel all the operation?
if (is_canceled())
@ -123,42 +123,42 @@ protected:
}
// rotate mask
if (m_sprite->mask->bitmap) {
if (m_sprite->getMask()->bitmap) {
Mask* new_mask = mask_new();
int x, y;
switch (m_angle) {
case 180:
x = m_sprite->w - m_sprite->mask->x - m_sprite->mask->w;
y = m_sprite->h - m_sprite->mask->y - m_sprite->mask->h;
x = m_sprite->getWidth() - m_sprite->getMask()->x - m_sprite->getMask()->w;
y = m_sprite->getHeight() - m_sprite->getMask()->y - m_sprite->getMask()->h;
break;
case 90:
x = m_sprite->h - m_sprite->mask->y - m_sprite->mask->h;
y = m_sprite->mask->x;
x = m_sprite->getHeight() - m_sprite->getMask()->y - m_sprite->getMask()->h;
y = m_sprite->getMask()->x;
break;
case -90:
x = m_sprite->mask->y;
y = m_sprite->w - m_sprite->mask->x - m_sprite->mask->w;
x = m_sprite->getMask()->y;
y = m_sprite->getWidth() - m_sprite->getMask()->x - m_sprite->getMask()->w;
break;
}
// create the new rotated mask
mask_replace(new_mask, x, y,
m_angle == 180 ? m_sprite->mask->w: m_sprite->mask->h,
m_angle == 180 ? m_sprite->mask->h: m_sprite->mask->w);
image_rotate(m_sprite->mask->bitmap, new_mask->bitmap, m_angle);
m_angle == 180 ? m_sprite->getMask()->w: m_sprite->getMask()->h,
m_angle == 180 ? m_sprite->getMask()->h: m_sprite->getMask()->w);
image_rotate(m_sprite->getMask()->bitmap, new_mask->bitmap, m_angle);
// copy new mask
undoable.copy_to_current_mask(new_mask);
mask_free(new_mask);
// regenerate mask
sprite_generate_mask_boundaries(m_sprite);
m_sprite->generateMaskBoundaries();
}
// change the sprite's size
if (m_angle != 180)
undoable.set_sprite_size(m_sprite->h, m_sprite->w);
undoable.set_sprite_size(m_sprite->getHeight(), m_sprite->getWidth());
// commit changes
undoable.commit();
@ -194,7 +194,7 @@ void RotateCanvasCommand::execute(Context* context)
RotateCanvasJob job(sprite, m_angle);
job.do_job();
}
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -105,7 +105,7 @@ static void save_sprite_in_background(Sprite* sprite, bool mark_as_saved)
data->thread = thread;
data->alert_window = jalert_new(PACKAGE
"<<Saving file:<<%s||&Cancel",
get_filename(sprite->filename));
get_filename(sprite->getFilename()));
/* add a monitor to check the saving (FileOp) progress */
data->monitor = add_gui_monitor(monitor_savefile_bg,
@ -128,13 +128,13 @@ static void save_sprite_in_background(Sprite* sprite, bool mark_as_saved)
}
/* no error? */
else {
RecentFiles::addRecentFile(sprite->filename);
RecentFiles::addRecentFile(sprite->getFilename());
if (mark_as_saved)
sprite_mark_as_saved(sprite);
sprite->markAsSaved();
app_get_statusbar()
->setStatusText(2000, "File %s, saved.",
get_filename(sprite->filename));
get_filename(sprite->getFilename()));
}
delete data->progress;
@ -154,7 +154,7 @@ static void save_as_dialog(Sprite* sprite, const char* dlg_title, bool mark_as_s
jstring newfilename;
int ret;
filename = sprite->filename;
filename = sprite->getFilename();
get_writable_extensions(exts, sizeof(exts));
for (;;) {
@ -186,7 +186,7 @@ static void save_as_dialog(Sprite* sprite, const char* dlg_title, bool mark_as_s
/* "no": we must back to select other file-name */
}
sprite_set_filename(sprite, filename.c_str());
sprite->setFilename(filename.c_str());
app_realloc_sprite_list();
save_sprite_in_background(sprite, mark_as_saved);
@ -236,7 +236,7 @@ void SaveFileCommand::execute(Context* context)
/* if the sprite is associated to a file in the file-system, we can
save it directly without user interaction */
if (sprite_is_associated_to_file(sprite)) {
if (sprite->isAssociatedToFile()) {
save_sprite_in_background(sprite, true);
}
/* if the sprite isn't associated to a file, we must to show the
@ -312,13 +312,13 @@ bool SaveFileCopyAsCommand::enabled(Context* context)
void SaveFileCopyAsCommand::execute(Context* context)
{
CurrentSpriteWriter sprite(context);
jstring old_filename = sprite->filename;
jstring old_filename = sprite->getFilename();
// show "Save As" dialog
save_as_dialog(sprite, _("Save Sprite Copy As"), false);
// restore the file name
sprite_set_filename(sprite, old_filename.c_str());
sprite->setFilename(old_filename.c_str());
app_realloc_sprite_list();
}

View File

@ -56,8 +56,8 @@ bool SaveMaskCommand::enabled(Context* context)
if (!sprite)
return false;
else
return (sprite->mask &&
sprite->mask->bitmap) ? true: false;
return (sprite->getMask() &&
sprite->getMask()->bitmap) ? true: false;
}
void SaveMaskCommand::execute(Context* context)
@ -92,7 +92,7 @@ void SaveMaskCommand::execute(Context* context)
/* "no": we must back to select other file-name */
}
if (save_msk_file(sprite->mask, filename.c_str()) != 0)
if (save_msk_file(sprite->getMask(), filename.c_str()) != 0)
jalert("%s<<%s<<%s||%s",
_("Error"), _("Error saving .msk file"),
filename.c_str(), _("&Close"));

View File

@ -80,13 +80,13 @@ void ScreenShotCommand::execute(Context* context)
/* creates a sprite with one layer, one image to save the bitmap as a PNG */
{
int imgtype = bitmap_color_depth(bmp) == 8 ? IMAGE_INDEXED: IMAGE_RGB;
Sprite *sprite = sprite_new_with_layer(imgtype, bmp->w, bmp->h, 256);
Image *image = GetImage2(sprite, NULL, NULL, NULL);
Sprite* sprite = Sprite::createWithLayer(imgtype, bmp->w, bmp->h, 256);
Image* image = sprite->getCurrentImage();
int x, y, r, g, b;
Palette *pal = new Palette(0, 256);
pal->fromAllegro(rgbpal);
sprite_set_palette(sprite, pal, true);
sprite->setPalette(pal, true);
delete pal;
/* convert Allegro "BITMAP" to ASE "Image" */
@ -116,7 +116,7 @@ void ScreenShotCommand::execute(Context* context)
}
/* save the sprite */
sprite_set_filename(sprite, buf);
sprite->setFilename(buf);
sprite_save(sprite);
/* destroy the sprite */

View File

@ -80,7 +80,7 @@ void SpritePropertiesCommand::execute(Context* context)
"ok", &ok, NULL);
/* update widgets values */
switch (sprite->imgtype) {
switch (sprite->getImgType()) {
case IMAGE_RGB:
imgtype_text = "RGB";
break;
@ -96,21 +96,21 @@ void SpritePropertiesCommand::execute(Context* context)
}
/* filename */
name->setText(sprite->filename);
name->setText(sprite->getFilename());
/* color mode */
type->setText(imgtype_text.c_str());
/* sprite size (width and height) */
usprintf(buf, "%dx%d (", sprite->w, sprite->h);
get_pretty_memsize(sprite_get_memsize(sprite),
usprintf(buf, "%dx%d (", sprite->getWidth(), sprite->getHeight());
get_pretty_memsize(sprite->getMemSize(),
buf+ustrsize(buf),
sizeof(buf)-ustrsize(buf));
ustrcat(buf, ")");
size->setText(buf);
/* how many frames */
frames->setTextf("%d", sprite->frames);
frames->setTextf("%d", sprite->getTotalFrames());
window->remap_window();
window->center_window();

View File

@ -45,8 +45,8 @@ class SpriteSizeJob : public Job
int m_new_height;
ResizeMethod m_resize_method;
inline int scale_x(int x) const { return x * m_new_width / m_sprite->w; }
inline int scale_y(int y) const { return y * m_new_height / m_sprite->h; }
inline int scale_x(int x) const { return x * m_new_width / m_sprite->getWidth(); }
inline int scale_y(int y) const { return y * m_new_height / m_sprite->getHeight(); }
public:
@ -70,7 +70,7 @@ protected:
// get all sprite cels
CelList cels;
sprite_get_cels(m_sprite, cels);
m_sprite->getCels(cels);
// for each cel...
for (CelIterator it = cels.begin(); it != cels.end(); ++it) {
@ -81,8 +81,8 @@ protected:
}
// for each stock's image
for (int i=0; i<m_sprite->stock->nimage; ++i) {
Image* image = stock_get_image(m_sprite->stock, i);
for (int i=0; i<m_sprite->getStock()->nimage; ++i) {
Image* image = stock_get_image(m_sprite->getStock(), i);
if (!image)
continue;
@ -99,7 +99,7 @@ protected:
undoable.replace_stock_image(i, new_image);
job_progress((float)i / m_sprite->stock->nimage);
job_progress((float)i / m_sprite->getStock()->nimage);
// cancel all the operation?
if (is_canceled())
@ -107,17 +107,17 @@ protected:
}
// resize mask
if (m_sprite->mask->bitmap) {
Image* old_bitmap = image_crop(m_sprite->mask->bitmap, -1, -1,
m_sprite->mask->bitmap->w+2,
m_sprite->mask->bitmap->h+2, 0);
if (m_sprite->getMask()->bitmap) {
Image* old_bitmap = image_crop(m_sprite->getMask()->bitmap, -1, -1,
m_sprite->getMask()->bitmap->w+2,
m_sprite->getMask()->bitmap->h+2, 0);
int w = scale_x(old_bitmap->w);
int h = scale_y(old_bitmap->h);
Mask* new_mask = mask_new();
mask_replace(new_mask,
scale_x(m_sprite->mask->x-1),
scale_y(m_sprite->mask->y-1), MAX(1, w), MAX(1, h));
scale_x(m_sprite->getMask()->x-1),
scale_y(m_sprite->getMask()->y-1), MAX(1, w), MAX(1, h));
image_resize(old_bitmap, new_mask->bitmap,
m_resize_method,
get_current_palette(),
@ -134,7 +134,7 @@ protected:
mask_free(new_mask);
// regenerate mask
sprite_generate_mask_boundaries(m_sprite);
m_sprite->generateMaskBoundaries();
}
// resize sprite
@ -197,8 +197,8 @@ void SpriteSizeCommand::execute(Context* context)
"method", &method,
"ok", &ok, NULL);
width_px->setTextf("%d", sprite->w);
height_px->setTextf("%d", sprite->h);
width_px->setTextf("%d", sprite->getWidth());
height_px->setTextf("%d", sprite->getHeight());
HOOK(lock_ratio, JI_SIGNAL_CHECK_CHANGE, lock_ratio_change_hook, 0);
HOOK(width_px, JI_SIGNAL_ENTRY_CHANGE, width_px_change_hook, 0);
@ -249,13 +249,13 @@ static bool width_px_change_hook(JWidget widget, void *data)
{
const CurrentSpriteReader sprite(UIContext::instance()); // TODO use the context in sprite size command
int width = widget->getTextInt();
double perc = 100.0 * width / sprite->w;
double perc = 100.0 * width / sprite->getWidth();
widget->findSibling("width_perc")->setTextf(PERC_FORMAT, perc);
if (widget->findSibling("lock_ratio")->isSelected()) {
widget->findSibling("height_perc")->setTextf(PERC_FORMAT, perc);
widget->findSibling("height_px")->setTextf("%d", sprite->h * width / sprite->w);
widget->findSibling("height_px")->setTextf("%d", sprite->getHeight() * width / sprite->getWidth());
}
return true;
@ -265,13 +265,13 @@ static bool height_px_change_hook(JWidget widget, void *data)
{
const CurrentSpriteReader sprite(UIContext::instance()); // TODO use the context in sprite size command
int height = widget->getTextInt();
double perc = 100.0 * height / sprite->h;
double perc = 100.0 * height / sprite->getHeight();
widget->findSibling("height_perc")->setTextf(PERC_FORMAT, perc);
if (widget->findSibling("lock_ratio")->isSelected()) {
widget->findSibling("width_perc")->setTextf(PERC_FORMAT, perc);
widget->findSibling("width_px")->setTextf("%d", sprite->w * height / sprite->h);
widget->findSibling("width_px")->setTextf("%d", sprite->getWidth() * height / sprite->getHeight());
}
return true;
@ -282,10 +282,10 @@ static bool width_perc_change_hook(JWidget widget, void *data)
const CurrentSpriteReader sprite(UIContext::instance()); // TODO use the context in sprite size command
double width = widget->getTextDouble();
widget->findSibling("width_px")->setTextf("%d", (int)(sprite->w * width / 100));
widget->findSibling("width_px")->setTextf("%d", (int)(sprite->getWidth() * width / 100));
if (widget->findSibling("lock_ratio")->isSelected()) {
widget->findSibling("height_px")->setTextf("%d", (int)(sprite->h * width / 100));
widget->findSibling("height_px")->setTextf("%d", (int)(sprite->getHeight() * width / 100));
widget->findSibling("height_perc")->setText(widget->getText());
}
@ -297,10 +297,10 @@ static bool height_perc_change_hook(JWidget widget, void *data)
const CurrentSpriteReader sprite(UIContext::instance()); // TODO use the context in sprite size command
double height = widget->getTextDouble();
widget->findSibling("height_px")->setTextf("%d", (int)(sprite->h * height / 100));
widget->findSibling("height_px")->setTextf("%d", (int)(sprite->getHeight() * height / 100));
if (widget->findSibling("lock_ratio")->isSelected()) {
widget->findSibling("width_px")->setTextf("%d", (int)(sprite->w * height / 100));
widget->findSibling("width_px")->setTextf("%d", (int)(sprite->getWidth() * height / 100));
widget->findSibling("width_perc")->setText(widget->getText());
}

View File

@ -49,7 +49,7 @@ bool UndoCommand::enabled(Context* context)
const CurrentSpriteReader sprite(context);
return
sprite != NULL &&
undo_can_undo(sprite->undo);
undo_can_undo(sprite->getUndo());
}
void UndoCommand::execute(Context* context)
@ -58,10 +58,10 @@ void UndoCommand::execute(Context* context)
app_get_statusbar()
->showTip(1000, _("Undid %s"),
undo_get_next_undo_label(sprite->undo));
undo_get_next_undo_label(sprite->getUndo()));
undo_do_undo(sprite->undo);
sprite_generate_mask_boundaries(sprite);
undo_do_undo(sprite->getUndo());
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}

View File

@ -110,7 +110,7 @@ void ColorCurveCommand::execute(Context* context)
set_color_curve(the_curve);
curve_editor = curve_editor_new(the_curve, 0, 0, 255, 255);
target_button = target_button_new(sprite->imgtype, true);
target_button = target_button_new(sprite->getImgType(), true);
target_button_set_target(target_button, effect.target);
if (get_config_bool("ColorCurve", "Preview", true))

View File

@ -118,7 +118,7 @@ void ConvolutionMatrixCommand::execute(Context* context)
list_convmatr = jlistbox_new();
listbox_fill_convmatg(list_convmatr);
target_button = target_button_new(sprite->imgtype, true);
target_button = target_button_new(sprite->getImgType(), true);
target_button_set_target(target_button, effect.target);
if (get_config_bool("ConvolutionMatrix", "Preview", true))

View File

@ -103,7 +103,7 @@ void DespeckleCommand::execute(Context* context)
preview = preview_new(&effect);
target_button = target_button_new(sprite->imgtype, true);
target_button = target_button_new(sprite->getImgType(), true);
target_button_set_target(target_button, effect.target);
entry_width->setTextf("%d", get_config_int("Median", "Width", 3));

View File

@ -93,7 +93,7 @@ void InvertColorCommand::execute(Context* context)
TARGET_BLUE_CHANNEL);
preview = preview_new(&effect);
target_button = target_button_new(sprite->imgtype, true);
target_button = target_button_new(sprite->getImgType(), true);
target_button_set_target(target_button, effect.target);
if (get_config_bool("InvertColor", "Preview", true))

View File

@ -104,14 +104,14 @@ void ReplaceColorCommand::execute(Context* context)
button_color1 = colorbutton_new
(get_config_color("ReplaceColor", "Color1",
colorbar_get_fg_color(app_get_colorbar())),
sprite->imgtype);
sprite->getImgType());
button_color2 = colorbutton_new
(get_config_color("ReplaceColor", "Color2",
colorbar_get_bg_color(app_get_colorbar())),
sprite->imgtype);
sprite->getImgType());
target_button = target_button_new(sprite->imgtype, false);
target_button = target_button_new(sprite->getImgType(), false);
target_button_set_target(target_button, effect.target);
jslider_set_value(slider_fuzziness,
@ -196,8 +196,8 @@ static void make_preview()
to = get_config_color("ReplaceColor", "Color2", color_mask());
fuzziness = get_config_int("ReplaceColor", "Fuzziness", 0);
set_replace_colors(get_color_for_layer(sprite->layer, from),
get_color_for_layer(sprite->layer, to),
set_replace_colors(get_color_for_layer(sprite->getCurrentLayer(), from),
get_color_for_layer(sprite->getCurrentLayer(), to),
MID(0, fuzziness, 255));
if (jwidget_is_selected(check_preview))

View File

@ -631,14 +631,14 @@ int get_color_for_layer(Layer *layer, color_t color)
{
return
fixup_color_for_layer(layer,
get_color_for_image(layer->getSprite()->imgtype,
get_color_for_image(layer->getSprite()->getImgType(),
color));
}
int fixup_color_for_layer(Layer *layer, int color)
{
if (layer->is_background())
return fixup_color_for_background(layer->getSprite()->imgtype, color);
return fixup_color_for_background(layer->getSprite()->getImgType(), color);
else
return color;
}

View File

@ -99,7 +99,7 @@ enum {
A_PART_CEL
};
typedef struct AniEditor
struct AniEditor
{
const Sprite* sprite;
int state;
@ -120,7 +120,7 @@ typedef struct AniEditor
int clk_frame;
/* keys */
bool space_pressed;
} AniEditor;
};
static JWidget current_anieditor = NULL;
@ -149,7 +149,7 @@ static void anieditor_show_cel(JWidget widget, int layer, int frame);
static void anieditor_show_current_cel(JWidget widget);
static void anieditor_clean_clk(JWidget widget);
static void anieditor_set_scroll(JWidget widget, int x, int y, bool use_refresh_region);
static int anieditor_get_layer_index(JWidget widget, Layer* layer);
static int anieditor_get_layer_index(JWidget widget, const Layer* layer);
static void icon_rect(BITMAP* icon, int x1, int y1, int x2, int y2, bool is_selected, bool is_hot, bool is_clk);
@ -176,9 +176,9 @@ void switch_between_animation_and_sprite_editor()
window->remap_window();
/* show the current cel */
int layer = anieditor_get_layer_index(anieditor, sprite->layer);
int layer = anieditor_get_layer_index(anieditor, sprite->getCurrentLayer());
if (layer >= 0)
anieditor_center_cel(anieditor, layer, sprite->frame);
anieditor_center_cel(anieditor, layer, sprite->getCurrentFrame());
/* show the window */
window->open_window_fg();
@ -327,7 +327,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
{
const SpriteReader sprite((Sprite*)anieditor->sprite);
SpriteWriter sprite_writer(sprite);
sprite_writer->frame = anieditor->clk_frame;
sprite_writer->setCurrentFrame(anieditor->clk_frame);
}
jwidget_dirty(widget); /* TODO replace this by redrawing old current frame and new current frame */
jwidget_hard_capture_mouse(widget);
@ -335,14 +335,14 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
break;
case A_PART_LAYER: {
const SpriteReader sprite((Sprite*)anieditor->sprite);
int old_layer = anieditor_get_layer_index(widget, sprite->layer);
int frame = anieditor->sprite->frame;
int old_layer = anieditor_get_layer_index(widget, sprite->getCurrentLayer());
int frame = anieditor->sprite->getCurrentFrame();
/* did the user select another layer? */
if (old_layer != anieditor->clk_layer) {
{
SpriteWriter sprite_writer(sprite);
sprite_writer->layer = anieditor->layers[anieditor->clk_layer];
sprite_writer->setCurrentLayer(anieditor->layers[anieditor->clk_layer]);
}
jmouse_hide();
@ -355,7 +355,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
}
/* change the scroll to show the new selected cel */
anieditor_show_cel(widget, anieditor->clk_layer, sprite->frame);
anieditor_show_cel(widget, anieditor->clk_layer, sprite->getCurrentFrame());
jwidget_hard_capture_mouse(widget);
anieditor->state = STATE_MOVING_LAYER;
break;
@ -368,16 +368,16 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
break;
case A_PART_CEL: {
const SpriteReader sprite((Sprite*)anieditor->sprite);
int old_layer = anieditor_get_layer_index(widget, sprite->layer);
int old_frame = sprite->frame;
int old_layer = anieditor_get_layer_index(widget, sprite->getCurrentLayer());
int old_frame = sprite->getCurrentFrame();
/* select the new clicked-part */
if (old_layer != anieditor->clk_layer ||
old_frame != anieditor->clk_frame) {
{
SpriteWriter sprite_writer(sprite);
sprite_writer->layer = anieditor->layers[anieditor->clk_layer];
sprite_writer->frame = anieditor->clk_frame;
sprite_writer->setCurrentLayer(anieditor->layers[anieditor->clk_layer]);
sprite_writer->setCurrentFrame(anieditor->clk_frame);
}
jmouse_hide();
@ -394,7 +394,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
}
/* change the scroll to show the new selected cel */
anieditor_show_cel(widget, anieditor->clk_layer, sprite->frame);
anieditor_show_cel(widget, anieditor->clk_layer, sprite->getCurrentFrame());
/* capture the mouse (to move the cel) */
jwidget_hard_capture_mouse(widget);
@ -546,7 +546,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
const SpriteReader sprite((Sprite*)anieditor->sprite);
if (anieditor->hot_frame >= 0 &&
anieditor->hot_frame < sprite->frames &&
anieditor->hot_frame < sprite->getTotalFrames() &&
anieditor->hot_frame != anieditor->clk_frame+1) {
{
SpriteWriter sprite_writer(sprite);
@ -590,7 +590,7 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
undoable.commit();
/* select the new layer */
sprite_writer->layer = anieditor->layers[anieditor->clk_layer];
sprite_writer->setCurrentLayer(anieditor->layers[anieditor->clk_layer]);
}
catch (locked_sprite_exception& e) {
e.show();
@ -701,9 +701,9 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
/* undo */
if (command && strcmp(command->short_name(), CommandId::undo) == 0) {
const SpriteReader sprite((Sprite*)anieditor->sprite);
if (undo_can_undo(sprite->undo)) {
if (undo_can_undo(sprite->getUndo())) {
SpriteWriter sprite_writer(sprite);
undo_do_undo(sprite_writer->undo);
undo_do_undo(sprite_writer->getUndo());
destroy_thumbnails();
anieditor_regenerate_layers(widget);
@ -716,9 +716,9 @@ static bool anieditor_msg_proc(JWidget widget, JMessage msg)
/* redo */
if (command && strcmp(command->short_name(), CommandId::redo) == 0) {
const SpriteReader sprite((Sprite*)anieditor->sprite);
if (undo_can_redo(sprite->undo)) {
if (undo_can_redo(sprite->getUndo())) {
SpriteWriter sprite_writer(sprite);
undo_do_redo(sprite_writer->undo);
undo_do_redo(sprite_writer->getUndo());
destroy_thumbnails();
anieditor_regenerate_layers(widget);
@ -874,7 +874,7 @@ static void anieditor_get_drawable_frames(JWidget widget, JRect clip, int *first
AniEditor* anieditor = anieditor_data(widget);
*first_frame = 0;
*last_frame = anieditor->sprite->frames-1;
*last_frame = anieditor->sprite->getTotalFrames()-1;
}
static void anieditor_draw_header(JWidget widget, JRect clip)
@ -923,7 +923,7 @@ static void anieditor_draw_header_frame(JWidget widget, JRect clip, int frame)
/* draw the header for the layers */
usprintf(buf1, "%d", frame+1);
usprintf(buf2, "%d", sprite_get_frlen(anieditor->sprite, frame));
usprintf(buf2, "%d", anieditor->sprite->getFrameDuration(frame));
anieditor_draw_header_part(widget, clip, x1, y1, x2, y2,
is_hot, is_clk,
buf1, 0,
@ -938,7 +938,7 @@ static void anieditor_draw_header_frame(JWidget widget, JRect clip, int frame)
}
/* padding in the right side */
if (frame == anieditor->sprite->frames-1) {
if (frame == anieditor->sprite->getTotalFrames()-1) {
if (x2+1 <= widget->rc->x2-1) {
/* right side */
vline(ji_screen, x2+1, y1, y2, ji_color_foreground());
@ -1025,7 +1025,7 @@ static void anieditor_draw_layer(JWidget widget, JRect clip, int layer_index)
Layer *layer = anieditor->layers[layer_index];
BITMAP *icon1 = get_gfx(layer->is_readable() ? GFX_BOX_SHOW: GFX_BOX_HIDE);
BITMAP *icon2 = get_gfx(layer->is_writable() ? GFX_BOX_UNLOCK: GFX_BOX_LOCK);
bool selected_layer = (layer == anieditor->sprite->layer);
bool selected_layer = (layer == anieditor->sprite->getCurrentLayer());
bool is_hot = (anieditor->hot_part == A_PART_LAYER && anieditor->hot_layer == layer_index);
bool is_clk = (anieditor->clk_part == A_PART_LAYER && anieditor->clk_layer == layer_index);
int bg = selected_layer ?
@ -1144,7 +1144,7 @@ static void anieditor_draw_cel(JWidget widget, JRect clip, int layer_index, int
SkinneableTheme* theme = static_cast<SkinneableTheme*>(widget->theme);
AniEditor* anieditor = anieditor_data(widget);
Layer *layer = anieditor->layers[layer_index];
bool selected_layer = (layer == anieditor->sprite->layer);
bool selected_layer = (layer == anieditor->sprite->getCurrentLayer());
bool is_hot = (anieditor->hot_part == A_PART_CEL &&
anieditor->hot_layer == layer_index &&
anieditor->hot_frame == frame);
@ -1176,7 +1176,7 @@ static void anieditor_draw_cel(JWidget widget, JRect clip, int layer_index, int
Rect thumbnail_rect(Point(x1+3, y1+3), Point(x2-2, y2-2));
/* draw the box for the cel */
if (selected_layer && frame == anieditor->sprite->frame) {
if (selected_layer && frame == anieditor->sprite->getCurrentFrame()) {
/* current cel */
if (is_hot)
jrectedge(ji_screen, x1, y1, x2, y2-1,
@ -1203,7 +1203,7 @@ static void anieditor_draw_cel(JWidget widget, JRect clip, int layer_index, int
/* empty cel? */
if (cel == NULL ||
stock_get_image(anieditor->sprite->stock,
stock_get_image(anieditor->sprite->getStock(),
cel->image) == NULL) { /* TODO why a cel can't have an associated image? */
jdraw_rectfill(thumbnail_rect, bg);
draw_emptyset_symbol(thumbnail_rect, ji_color_disabled());
@ -1236,7 +1236,7 @@ static void anieditor_draw_cel(JWidget widget, JRect clip, int layer_index, int
}
/* padding in the right side */
if (frame == anieditor->sprite->frames-1) {
if (frame == anieditor->sprite->getTotalFrames()-1) {
if (x2+1 <= widget->rc->x2-1) {
/* right side */
vline(ji_screen, x2+1, y1, y2, ji_color_foreground());
@ -1264,7 +1264,7 @@ static bool anieditor_draw_part(JWidget widget, int part, int layer, int frame)
anieditor_draw_header(widget, widget->rc);
return true;
case A_PART_HEADER_FRAME:
if (frame >= 0 && frame < anieditor->sprite->frames) {
if (frame >= 0 && frame < anieditor->sprite->getTotalFrames()) {
anieditor_draw_header_frame(widget, widget->rc, frame);
return true;
}
@ -1279,7 +1279,7 @@ static bool anieditor_draw_part(JWidget widget, int part, int layer, int frame)
break;
case A_PART_CEL:
if (layer >= 0 && layer < anieditor->nlayers &&
frame >= 0 && frame < anieditor->sprite->frames) {
frame >= 0 && frame < anieditor->sprite->getTotalFrames()) {
anieditor_draw_cel(widget, widget->rc, layer, frame);
return true;
}
@ -1299,15 +1299,14 @@ static void anieditor_regenerate_layers(JWidget widget)
anieditor->layers = NULL;
}
anieditor->nlayers = sprite_count_layers(anieditor->sprite);
anieditor->nlayers = anieditor->sprite->countLayers();
/* here we build an array with all the layers */
if (anieditor->nlayers > 0) {
anieditor->layers = (Layer**)jmalloc(sizeof(Layer*) * anieditor->nlayers);
for (c=0; c<anieditor->nlayers; c++)
anieditor->layers[c] = sprite_index2layer(anieditor->sprite,
anieditor->nlayers-c-1);
anieditor->layers[c] = (Layer*)anieditor->sprite->indexToLayer(anieditor->nlayers-c-1);
}
}
@ -1391,9 +1390,9 @@ static void anieditor_show_cel(JWidget widget, int layer, int frame)
static void anieditor_show_current_cel(JWidget widget)
{
AniEditor* anieditor = anieditor_data(widget);
int layer = anieditor_get_layer_index(widget, anieditor->sprite->layer);
int layer = anieditor_get_layer_index(widget, anieditor->sprite->getCurrentLayer());
if (layer >= 0)
anieditor_show_cel(widget, layer, anieditor->sprite->frame);
anieditor_show_cel(widget, layer, anieditor->sprite->getCurrentFrame());
}
static void anieditor_clean_clk(JWidget widget)
@ -1423,7 +1422,7 @@ static void anieditor_set_scroll(JWidget widget, int x, int y, bool use_refresh_
old_scroll_y = anieditor->scroll_y;
}
max_scroll_x = anieditor->sprite->frames * FRMSIZE - jrect_w(widget->rc)/2;
max_scroll_x = anieditor->sprite->getTotalFrames() * FRMSIZE - jrect_w(widget->rc)/2;
max_scroll_y = anieditor->nlayers * LAYSIZE - jrect_h(widget->rc)/2;
max_scroll_x = MAX(0, max_scroll_x);
max_scroll_y = MAX(0, max_scroll_y);
@ -1484,7 +1483,7 @@ static void anieditor_set_scroll(JWidget widget, int x, int y, bool use_refresh_
}
}
static int anieditor_get_layer_index(JWidget widget, Layer* layer)
static int anieditor_get_layer_index(JWidget widget, const Layer* layer)
{
AniEditor* anieditor = anieditor_data(widget);
int i;

View File

@ -201,7 +201,7 @@ static Image *render_text(Sprite* sprite, FONT *f, const char *text, int color)
clear_to_color(bmp, makecol32 (255, 0, 255));
textout(bmp, f, text, 0, 0, makecol32 (255, 255, 255));
image = image_new(sprite->imgtype, w, h);
image = image_new(sprite->getImgType(), w, h);
if (!image) {
destroy_bitmap(bmp);
return NULL;

View File

@ -48,7 +48,7 @@ static bool color_change_hook(JWidget widget, void *data);
static bool slider_change_hook(JWidget widget, void *data);
static bool preview_change_hook(JWidget widget, void *data);
static Mask *gen_mask(Sprite* sprite);
static Mask *gen_mask(const Sprite* sprite);
static void mask_preview(Sprite* sprite);
void dialogs_mask_color(Sprite* sprite)
@ -62,7 +62,7 @@ void dialogs_mask_color(Sprite* sprite)
if (!is_interactive () || !sprite)
return;
image = GetImage(sprite);
image = sprite->getCurrentImage();
if (!image)
return;
@ -75,7 +75,7 @@ void dialogs_mask_color(Sprite* sprite)
button_color = colorbutton_new
(get_config_color("MaskColor", "Color",
colorbar_get_fg_color(app_get_colorbar())),
sprite->imgtype);
sprite->getImgType());
button_1 = jbutton_new("1");
button_2 = jbutton_new("2");
label_fuzziness = jlabel_new(_("Fuzziness:"));
@ -126,14 +126,14 @@ void dialogs_mask_color(Sprite* sprite)
Mask *mask;
/* undo */
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Mask by Color");
undo_set_mask(sprite->undo, sprite);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Mask by Color");
undo_set_mask(sprite->getUndo(), sprite);
}
/* change the mask */
mask = gen_mask(sprite);
sprite_set_mask(sprite, mask);
sprite->setMask(mask);
mask_free(mask);
set_config_color("MaskColor", "Color",
@ -147,7 +147,7 @@ void dialogs_mask_color(Sprite* sprite)
}
/* update boundaries and editors */
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
/* save window configuration */
@ -186,13 +186,13 @@ static bool preview_change_hook(JWidget widget, void *data)
return false;
}
static Mask *gen_mask(Sprite* sprite)
static Mask *gen_mask(const Sprite* sprite)
{
int xpos, ypos, color, fuzziness;
Image* image = GetImage2(sprite, &xpos, &ypos, NULL);
const Image* image = sprite->getCurrentImage(&xpos, &ypos, NULL);
color = get_color_for_image(sprite->imgtype,
color = get_color_for_image(sprite->getImgType(),
colorbutton_get_color(button_color));
fuzziness = jslider_get_value(slider_fuzziness);
@ -206,15 +206,11 @@ static Mask *gen_mask(Sprite* sprite)
static void mask_preview(Sprite* sprite)
{
if (jwidget_is_selected(check_preview)) {
Mask *mask = gen_mask(sprite);
Mask *old_mask = sprite->mask;
Mask* mask = gen_mask(sprite);
sprite->mask = mask;
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries(mask);
update_screen_for_sprite(sprite);
sprite->mask = old_mask;
mask_free(mask);
}
}

View File

@ -133,7 +133,7 @@ void dialogs_vector_map(Sprite* sprite)
if (!is_interactive () || !sprite)
return;
image = GetImage(sprite);
image = sprite->getCurrentImage();
if (!image)
return;
@ -142,8 +142,8 @@ void dialogs_vector_map(Sprite* sprite)
return;
/* undo stuff */
if (undo_is_enabled(sprite->undo))
undo_image(sprite->undo, image, 0, 0, image->w, image->h);
if (undo_is_enabled(sprite->getUndo()))
undo_image(sprite->getUndo(), image, 0, 0, image->w, image->h);
dmax = std::sqrt(static_cast<double>(image->w/2*image->w/2 + image->h/2*image->h/2));
for (y=0; y<image->h; y++) {

View File

@ -332,11 +332,11 @@ JList get_convmatr_stock()
void apply_convolution_matrix4(Effect *effect)
{
ConvMatr *matrix = data.convmatr;
Image *src = effect->src;
Image *dst = effect->dst;
ase_uint32 *src_address;
ase_uint32 *dst_address;
ConvMatr* matrix = data.convmatr;
const Image* src = effect->src;
Image* dst = effect->dst;
ase_uint32* src_address;
ase_uint32* dst_address;
int x, y, dx, dy, color;
int getx, gety, addx, addy;
int r, g, b, a;
@ -409,11 +409,11 @@ void apply_convolution_matrix4(Effect *effect)
void apply_convolution_matrix2(Effect *effect)
{
ConvMatr *matrix = data.convmatr;
Image *src = effect->src;
Image *dst = effect->dst;
ase_uint16 *src_address;
ase_uint16 *dst_address;
ConvMatr* matrix = data.convmatr;
const Image* src = effect->src;
Image* dst = effect->dst;
ase_uint16* src_address;
ase_uint16* dst_address;
int x, y, dx, dy, color;
int getx, gety, addx, addy;
int k, a;
@ -470,12 +470,12 @@ void apply_convolution_matrix2(Effect *effect)
void apply_convolution_matrix1(Effect *effect)
{
Palette *pal = get_current_palette();
ConvMatr *matrix = data.convmatr;
Image *src = effect->src;
Image *dst = effect->dst;
ase_uint8 *src_address;
ase_uint8 *dst_address;
Palette* pal = get_current_palette();
ConvMatr* matrix = data.convmatr;
const Image* src = effect->src;
Image* dst = effect->dst;
ase_uint8* src_address;
ase_uint8* dst_address;
int x, y, dx, dy, color;
int getx, gety, addx, addy;
int r, g, b, index;

View File

@ -69,9 +69,9 @@ static EffectData effects_data[] = {
};
static EffectData *get_effect_data(const char *name);
static void effect_init(Effect *effect, Layer *layer, Image *image, int offset_x, int offset_y);
static void effect_init(Effect* effect, const Layer* layer, Image* image, int offset_x, int offset_y);
static void effect_apply_to_image(Effect *effect, ImageRef *p, int x, int y);
static bool effect_update_mask(Effect *effect, Mask *mask, Image *image);
static bool effect_update_mask(Effect* effect, Mask* mask, const Image* image);
int init_module_effect()
{
@ -88,13 +88,12 @@ Effect::Effect(const SpriteReader& sprite, const char* name)
{
int offset_x, offset_y;
EffectData* effect_data;
Image* image;
void (*apply)(Effect*);
effect_data = get_effect_data(name);
apply = NULL;
switch (sprite->imgtype) {
switch (sprite->getImgType()) {
case IMAGE_RGB: apply = effect_data->apply_4; break;
case IMAGE_GRAYSCALE: apply = effect_data->apply_2; break;
case IMAGE_INDEXED: apply = effect_data->apply_1; break;
@ -119,11 +118,11 @@ Effect::Effect(const SpriteReader& sprite, const char* name)
this->progress = NULL;
this->is_cancelled = NULL;
image = GetImage2(sprite, &offset_x, &offset_y, NULL);
Image* image = this->sprite->getCurrentImage(&offset_x, &offset_y);
if (image == NULL)
throw no_image_exception();
effect_init(this, sprite->layer, image, offset_x, offset_y);
effect_init(this, sprite->getCurrentLayer(), image, offset_x, offset_y);
}
Effect::~Effect()
@ -141,15 +140,15 @@ void effect_set_target(Effect *effect, int target)
effect->target = target;
/* the alpha channel of the background layer can't be modified */
if (effect->sprite->layer &&
effect->sprite->layer->is_background())
if (effect->sprite->getCurrentLayer() &&
effect->sprite->getCurrentLayer()->is_background())
effect->target &= ~TARGET_ALPHA_CHANNEL;
}
void effect_begin(Effect *effect)
{
effect->row = 0;
effect->mask = effect->sprite->mask;
effect->mask = effect->sprite->getMask();
effect_update_mask(effect, effect->mask, effect->src);
}
@ -161,8 +160,8 @@ void effect_begin_for_preview(Effect *effect)
effect->preview_mask = NULL;
}
if ((effect->sprite->mask) && (effect->sprite->mask->bitmap))
effect->preview_mask = mask_new_copy(effect->sprite->mask);
if ((effect->sprite->getMask()) && (effect->sprite->getMask()->bitmap))
effect->preview_mask = mask_new_copy(effect->sprite->getMask());
else {
effect->preview_mask = mask_new();
mask_replace(effect->preview_mask,
@ -186,8 +185,8 @@ void effect_begin_for_preview(Effect *effect)
if (x1 < 0) x1 = 0;
if (y1 < 0) y1 = 0;
if (x2 >= effect->sprite->w) x2 = effect->sprite->w-1;
if (y2 >= effect->sprite->h) y2 = effect->sprite->h-1;
if (x2 >= effect->sprite->getWidth()) x2 = effect->sprite->getWidth()-1;
if (y2 >= effect->sprite->getHeight()) y2 = effect->sprite->getHeight()-1;
x = x1;
y = y1;
@ -233,7 +232,7 @@ bool effect_apply_step(Effect *effect)
}
}
void effect_apply(Effect *effect)
void effect_apply(Effect* effect)
{
bool cancelled = false;
@ -249,15 +248,15 @@ void effect_apply(Effect *effect)
}
if (!cancelled) {
/* undo stuff */
if (undo_is_enabled(effect->sprite->undo)) {
undo_set_label(effect->sprite->undo,
// Undo stuff
if (undo_is_enabled(effect->sprite->getUndo())) {
undo_set_label(effect->sprite->getUndo(),
effect->effect_data->label);
undo_image(effect->sprite->undo, effect->src,
undo_image(effect->sprite->getUndo(), effect->src,
effect->x, effect->y, effect->w, effect->h);
}
/* copy "dst" to "src" */
// Copy "dst" to "src"
image_copy(effect->src, effect->dst, 0, 0);
}
}
@ -310,8 +309,8 @@ void effect_apply_to_target(Effect *effect)
/* open undo group of operations */
if (nimages > 1) {
if (undo_is_enabled(effect->sprite->undo))
undo_open(effect->sprite->undo);
if (undo_is_enabled(effect->sprite->getUndo()))
undo_open(effect->sprite->getUndo());
}
effect->progress_base = 0.0f;
@ -331,8 +330,8 @@ void effect_apply_to_target(Effect *effect)
/* close undo group of operations */
if (nimages > 1) {
if (undo_is_enabled(effect->sprite->undo))
undo_close(effect->sprite->undo);
if (undo_is_enabled(effect->sprite->getUndo()))
undo_close(effect->sprite->getUndo());
}
/* free all ImageRefs */
@ -351,13 +350,13 @@ static EffectData *get_effect_data(const char *name)
throw invalid_effect_exception(name);
}
static void effect_init(Effect *effect, Layer *layer, Image *image,
static void effect_init(Effect* effect, const Layer* layer, Image* image,
int offset_x, int offset_y)
{
effect->offset_x = offset_x;
effect->offset_y = offset_y;
if (!effect_update_mask(effect, effect->sprite->mask, image))
if (!effect_update_mask(effect, effect->sprite->getMask(), image))
throw invalid_area_exception();
if (effect->preview_mask) {
@ -384,13 +383,13 @@ static void effect_init(Effect *effect, Layer *layer, Image *image,
effect->target &= ~TARGET_ALPHA_CHANNEL;
}
static void effect_apply_to_image(Effect *effect, ImageRef *p, int x, int y)
static void effect_apply_to_image(Effect* effect, ImageRef* p, int x, int y)
{
effect_init(effect, p->layer, p->image, x, y);
effect_apply(effect);
}
static bool effect_update_mask(Effect *effect, Mask *mask, Image *image)
static bool effect_update_mask(Effect* effect, Mask* mask, const Image* image)
{
int x, y, w, h;

View File

@ -35,8 +35,8 @@ static ImageRef* images_ref_get_from_layer(Sprite* sprite, Layer* layer, int tar
ImageRef* images_ref_get_from_sprite(Sprite* sprite, int target, bool write)
{
Layer* layer = target & TARGET_ALL_LAYERS ? sprite->get_folder():
sprite->layer;
Layer* layer = target & TARGET_ALL_LAYERS ? sprite->getFolder():
sprite->getCurrentLayer();
return images_ref_get_from_layer(sprite, layer, target, write);
}
@ -72,7 +72,7 @@ static ImageRef* images_ref_get_from_layer(Sprite* sprite, Layer* layer, int tar
{ \
ImageRef* image_ref = jnew(ImageRef, 1); \
\
image_ref->image = layer->getSprite()->stock->image[cel->image]; \
image_ref->image = layer->getSprite()->getStock()->image[cel->image]; \
image_ref->layer = layer; \
image_ref->cel = cel; \
image_ref->next = NULL; \
@ -82,7 +82,7 @@ static ImageRef* images_ref_get_from_layer(Sprite* sprite, Layer* layer, int tar
ImageRef* first_image = NULL;
ImageRef* last_image = NULL;
int frame = sprite->frame;
int frame = sprite->getCurrentFrame();
if (!layer->is_readable())
return NULL;
@ -94,7 +94,7 @@ static ImageRef* images_ref_get_from_layer(Sprite* sprite, Layer* layer, int tar
case GFXOBJ_LAYER_IMAGE: {
if (target & TARGET_ALL_FRAMES) {
for (frame=0; frame<sprite->frames; frame++) {
for (frame=0; frame<sprite->getTotalFrames(); frame++) {
Cel* cel = static_cast<LayerImage*>(layer)->get_cel(frame);
if (cel != NULL)
NEW_IMAGE(layer, cel);

View File

@ -74,9 +74,9 @@ static int chunk_start;
static bool load_ASE(FileOp *fop);
static bool save_ASE(FileOp *fop);
static bool ase_file_read_header(FILE *f, ASE_Header *header);
static void ase_file_prepare_header(FILE *f, ASE_Header *header, Sprite *sprite);
static void ase_file_write_header(FILE *f, ASE_Header *header);
static bool ase_file_read_header(FILE* f, ASE_Header* header);
static void ase_file_prepare_header(FILE* f, ASE_Header* header, const Sprite* sprite);
static void ase_file_write_header(FILE* f, ASE_Header* header);
static void ase_file_read_frame_header(FILE *f, ASE_FrameHeader *frame_header);
static void ase_file_prepare_frame_header(FILE *f, ASE_FrameHeader *frame_header);
@ -156,15 +156,15 @@ static bool load_ASE(FileOp *fop)
}
/* set frames and speed */
sprite_set_frames(sprite, header.frames);
sprite_set_speed(sprite, header.speed);
sprite->setTotalFrames(header.frames);
sprite->setDurationForAllFrames(header.speed);
/* prepare variables for layer chunks */
Layer* last_layer = sprite->get_folder();
Layer* last_layer = sprite->getFolder();
current_level = -1;
/* read frame by frame to end-of-file */
for (frame=0; frame<sprite->frames; frame++) {
for (frame=0; frame<sprite->getTotalFrames(); frame++) {
/* start frame position */
frame_pos = ftell(f);
fop_progress(fop, (float)frame_pos / (float)header.size);
@ -176,7 +176,7 @@ static bool load_ASE(FileOp *fop)
if (frame_header.magic == ASE_FILE_FRAME_MAGIC) {
/* use frame-duration field? */
if (frame_header.duration > 0)
sprite_set_frlen(sprite, frame, frame_header.duration);
sprite->setFrameDuration(frame, frame_header.duration);
/* read chunks */
for (c=0; c<frame_header.chunks; c++) {
@ -195,15 +195,15 @@ static bool load_ASE(FileOp *fop)
case ASE_FILE_CHUNK_FLI_COLOR2:
/* fop_error(fop, "Color chunk\n"); */
if (sprite->imgtype == IMAGE_INDEXED) {
Palette *prev_pal = sprite_get_palette(sprite, frame);
if (sprite->getImgType() == IMAGE_INDEXED) {
Palette *prev_pal = sprite->getPalette(frame);
Palette *pal =
chunk_type == ASE_FILE_CHUNK_FLI_COLOR ?
ase_file_read_color_chunk(f, sprite, frame):
ase_file_read_color2_chunk(f, sprite, frame);
if (prev_pal->countDiff(pal, NULL, NULL) > 0) {
sprite_set_palette(sprite, pal, true);
sprite->setPalette(pal, true);
}
delete pal;
@ -225,7 +225,7 @@ static bool load_ASE(FileOp *fop)
/* fop_error(fop, "Cel chunk\n"); */
ase_file_read_cel_chunk(f, sprite, frame,
sprite->imgtype, fop, &header,
sprite->getImgType(), fop, &header,
chunk_pos+chunk_size);
break;
}
@ -237,7 +237,7 @@ static bool load_ASE(FileOp *fop)
mask = ase_file_read_mask_chunk(f);
if (mask)
sprite_add_mask(sprite, mask);
sprite->addMask(mask);
else
fop_error(fop, _("Warning: error loading a mask chunk\n"));
@ -299,44 +299,45 @@ static bool save_ASE(FileOp *fop)
ase_file_prepare_header(f, &header, sprite);
/* write frame */
for (frame=0; frame<sprite->frames; frame++) {
for (frame=0; frame<sprite->getTotalFrames(); frame++) {
/* prepare the header */
ase_file_prepare_frame_header(f, &frame_header);
/* frame duration */
frame_header.duration = sprite_get_frlen(sprite, frame);
frame_header.duration = sprite->getFrameDuration(frame);
/* the sprite is indexed and the palette changes? (or is the first frame) */
if (sprite->imgtype == IMAGE_INDEXED &&
if (sprite->getImgType() == IMAGE_INDEXED &&
(frame == 0 ||
sprite_get_palette(sprite, frame-1)->countDiff(sprite_get_palette(sprite, frame), NULL, NULL) > 0)) {
sprite->getPalette(frame-1)->countDiff(sprite->getPalette(frame), NULL, NULL) > 0)) {
/* write the color chunk */
ase_file_write_color2_chunk(f, sprite_get_palette(sprite, frame));
ase_file_write_color2_chunk(f, sprite->getPalette(frame));
}
/* write extra chunks in the first frame */
if (frame == 0) {
LayerIterator it = sprite->get_folder()->get_layer_begin();
LayerIterator end = sprite->get_folder()->get_layer_end();
LayerIterator it = sprite->getFolder()->get_layer_begin();
LayerIterator end = sprite->getFolder()->get_layer_end();
/* write layer chunks */
for (; it != end; ++it)
ase_file_write_layers(f, *it);
/* write masks */
JI_LIST_FOR_EACH(sprite->repository.masks, link)
JList masks = sprite->getMasksRepository();
JI_LIST_FOR_EACH(masks, link)
ase_file_write_mask_chunk(f, reinterpret_cast<Mask*>(link->data));
}
/* write cel chunks */
ase_file_write_cels(f, sprite, sprite->get_folder(), frame);
ase_file_write_cels(f, sprite, sprite->getFolder(), frame);
/* write the frame header */
ase_file_write_frame_header(f, &frame_header);
/* progress */
if (sprite->frames > 1)
fop_progress(fop, (float)(frame+1) / (float)(sprite->frames));
if (sprite->getTotalFrames() > 1)
fop_progress(fop, (float)(frame+1) / (float)(sprite->getTotalFrames()));
}
/* write the header */
@ -379,24 +380,24 @@ static bool ase_file_read_header(FILE *f, ASE_Header *header)
return true;
}
static void ase_file_prepare_header(FILE *f, ASE_Header *header, Sprite *sprite)
static void ase_file_prepare_header(FILE *f, ASE_Header *header, const Sprite* sprite)
{
header->pos = ftell(f);
header->size = 0;
header->magic = ASE_FILE_MAGIC;
header->frames = sprite->frames;
header->width = sprite->w;
header->height = sprite->h;
header->depth = sprite->imgtype == IMAGE_RGB ? 32:
sprite->imgtype == IMAGE_GRAYSCALE ? 16:
sprite->imgtype == IMAGE_INDEXED ? 8: 0;
header->frames = sprite->getTotalFrames();
header->width = sprite->getWidth();
header->height = sprite->getHeight();
header->depth = (sprite->getImgType() == IMAGE_RGB ? 32:
sprite->getImgType() == IMAGE_GRAYSCALE ? 16:
sprite->getImgType() == IMAGE_INDEXED ? 8: 0);
header->flags = 0;
header->speed = sprite_get_frlen(sprite, 0);
header->speed = sprite->getFrameDuration(0);
header->next = 0;
header->frit = 0;
header->unknown = 0;
header->ncolors = sprite_get_palette(sprite, 0)->size();
header->ncolors = sprite->getPalette(0)->size();
fseek(f, header->pos+128, SEEK_SET);
}
@ -560,7 +561,7 @@ static Palette *ase_file_read_color_chunk(FILE *f, Sprite *sprite, int frame)
{
int i, c, r, g, b, packets, skip, size;
Palette* pal = new Palette(frame, 256);
sprite_get_palette(sprite, frame)->copyColorsTo(pal);
sprite->getPalette(frame)->copyColorsTo(pal);
packets = fgetw(f); // Number of packets
skip = 0;
@ -588,7 +589,7 @@ static Palette *ase_file_read_color2_chunk(FILE *f, Sprite *sprite, int frame)
{
int i, c, r, g, b, packets, skip, size;
Palette* pal = new Palette(frame, 256);
sprite_get_palette(sprite, frame)->copyColorsTo(pal);
sprite->getPalette(frame)->copyColorsTo(pal);
packets = fgetw(f); /* number of packets */
skip = 0;
@ -994,7 +995,7 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt
ase_file_read_padding(f, 7);
layer = sprite_index2layer(sprite, layer_index);
layer = sprite->indexToLayer(layer_index);
if (!layer) {
fop_error(fop, _("Frame %d didn't found layer with index %d\n"),
frame, layer_index);
@ -1042,7 +1043,7 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt
break;
}
cel->image = stock_add_image(sprite->stock, image);
cel->image = stock_add_image(sprite->getStock(), image);
}
break;
}
@ -1054,8 +1055,8 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt
if (link) {
// Create a copy of the linked cel (avoid using links cel)
Image* image = image_new_copy(stock_get_image(sprite->stock, link->image));
cel->image = stock_add_image(sprite->stock, image);
Image* image = image_new_copy(stock_get_image(sprite->getStock(), link->image));
cel->image = stock_add_image(sprite->getStock(), image);
}
else {
cel_free(cel);
@ -1094,7 +1095,7 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt
break;
}
cel->image = stock_add_image(sprite->stock, image);
cel->image = stock_add_image(sprite->getStock(), image);
}
break;
}
@ -1107,7 +1108,7 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt
static void ase_file_write_cel_chunk(FILE *f, Cel *cel, LayerImage *layer, Sprite *sprite)
{
int layer_index = sprite_layer2index(sprite, layer);
int layer_index = sprite->layerToIndex(layer);
int cel_type = ASE_FILE_COMPRESSED_CEL;
ase_file_write_start_chunk(f, ASE_FILE_CHUNK_CEL);
@ -1122,7 +1123,7 @@ static void ase_file_write_cel_chunk(FILE *f, Cel *cel, LayerImage *layer, Sprit
switch (cel_type) {
case ASE_FILE_RAW_CEL: {
Image* image = stock_get_image(sprite->stock, cel->image);
Image* image = stock_get_image(sprite->getStock(), cel->image);
if (image) {
// Width and height
@ -1160,7 +1161,7 @@ static void ase_file_write_cel_chunk(FILE *f, Cel *cel, LayerImage *layer, Sprit
break;
case ASE_FILE_COMPRESSED_CEL: {
Image* image = stock_get_image(sprite->stock, cel->image);
Image* image = stock_get_image(sprite->getStock(), cel->image);
if (image) {
// Width and height

View File

@ -70,7 +70,7 @@ static void fop_prepare_for_sequence(FileOp *fop);
static FileFormat *get_fileformat(const char *extension);
static int split_filename(const char *filename, char *left, char *right, int *width);
void get_readable_extensions(char *buf, int size)
void get_readable_extensions(char* buf, int size)
{
int c;
@ -87,7 +87,7 @@ void get_readable_extensions(char *buf, int size)
}
}
void get_writable_extensions(char *buf, int size)
void get_writable_extensions(char* buf, int size)
{
int c;
@ -260,10 +260,10 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
fop->sprite = sprite;
/* get the extension of the filename (in lower case) */
ustrcpy(extension, get_extension(fop->sprite->filename));
ustrcpy(extension, get_extension(fop->sprite->getFilename()));
ustrlwr(extension);
PRINTF("Saving sprite \"%s\" (%s)\n", fop->sprite->filename, extension);
PRINTF("Saving sprite \"%s\" (%s)\n", fop->sprite->getFilename(), extension);
/* get the format through the extension of the filename */
fop->format = get_fileformat(extension);
@ -278,7 +278,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
fatal = false;
/* check image type support */
switch (fop->sprite->imgtype) {
switch (fop->sprite->getImgType()) {
case IMAGE_RGB:
if (!(fop->format->flags & FILE_SUPPORT_RGB)) {
@ -286,7 +286,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
fatal = true;
}
if (!(fop->format->flags & FILE_SUPPORT_RGBA) &&
sprite_need_alpha(fop->sprite)) {
fop->sprite->needAlpha()) {
usprintf(buf+ustrlen(buf), "<<- %s", _("Alpha channel"));
}
break;
@ -297,7 +297,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
fatal = true;
}
if (!(fop->format->flags & FILE_SUPPORT_GRAYA) &&
sprite_need_alpha(fop->sprite)) {
fop->sprite->needAlpha()) {
usprintf(buf+ustrlen(buf), "<<- %s", _("Alpha channel"));
}
break;
@ -313,19 +313,19 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
// check frames support
if (!(fop->format->flags & (FILE_SUPPORT_FRAMES |
FILE_SUPPORT_SEQUENCES))) {
if (fop->sprite->frames > 1)
if (fop->sprite->getTotalFrames() > 1)
usprintf(buf+ustrlen(buf), "<<- %s", _("Frames"));
}
// layers support
if (fop->sprite->get_folder()->get_layers_count() > 1) {
if (fop->sprite->getFolder()->get_layers_count() > 1) {
if (!(fop->format->flags & FILE_SUPPORT_LAYERS)) {
usprintf(buf+ustrlen(buf), "<<- %s", _("Layers"));
}
}
/* palettes support */
if (jlist_length(fop->sprite->palettes) > 1) {
if (jlist_length(fop->sprite->getPalettes()) > 1) {
if (!(fop->format->flags & (FILE_SUPPORT_PALETTES |
FILE_SUPPORT_SEQUENCES))) {
usprintf(buf+ustrlen(buf), "<<- %s", _("Palette changes between frames"));
@ -333,15 +333,16 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
}
/* repositories */
if (!jlist_empty(fop->sprite->repository.masks)) {
JList masks = fop->sprite->getMasksRepository();
if (!jlist_empty(masks)) {
Mask *mask;
JLink link;
int count = 0;
JI_LIST_FOR_EACH(fop->sprite->repository.masks, link) {
JI_LIST_FOR_EACH(masks, link) {
mask = reinterpret_cast<Mask*>(link->data);
/* names starting with '*' are ignored */
// Names starting with '*' are ignored
if (mask->name && *mask->name == '*')
continue;
@ -353,7 +354,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
}
}
if (!jlist_empty(fop->sprite->repository.paths)) {
if (!jlist_empty(fop->sprite->getPathsRepository())) {
if (!(fop->format->flags & FILE_SUPPORT_PATHS_REPOSITORY)) {
usprintf(buf+ustrlen(buf), "<<- %s", _("Path Repository"));
}
@ -394,25 +395,25 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
fop_prepare_for_sequence(fop);
/* to save one frame */
if (fop->sprite->frames == 1) {
if (fop->sprite->getTotalFrames() == 1) {
jlist_append(fop->seq.filename_list,
jstrdup(fop->sprite->filename));
jstrdup(fop->sprite->getFilename()));
}
/* to save more frames */
else {
char buf[256], left[256], right[256];
int frame, width, start_from;
start_from = split_filename(fop->sprite->filename, left, right, &width);
start_from = split_filename(fop->sprite->getFilename(), left, right, &width);
if (start_from < 0) {
start_from = 0;
width =
(fop->sprite->frames < 10)? 1:
(fop->sprite->frames < 100)? 2:
(fop->sprite->frames < 1000)? 3: 4;
(fop->sprite->getTotalFrames() < 10)? 1:
(fop->sprite->getTotalFrames() < 100)? 2:
(fop->sprite->getTotalFrames() < 1000)? 3: 4;
}
for (frame=0; frame<fop->sprite->frames; frame++) {
for (frame=0; frame<fop->sprite->getTotalFrames(); frame++) {
/* get the name for this frame */
usprintf(buf, "%s%0*d%s", left, width, start_from+frame, right);
jlist_append(fop->seq.filename_list, jstrdup(buf));
@ -420,7 +421,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
}
}
else
fop->filename = jstrdup(fop->sprite->filename);
fop->filename = jstrdup(fop->sprite->getFilename());
/* configure output format? */
if (fop->format->get_options != NULL) {
@ -433,8 +434,7 @@ FileOp *fop_to_save_sprite(Sprite *sprite)
}
fop->seq.format_options = format_options;
sprite_set_format_options(fop->sprite,
format_options);
fop->sprite->setFormatOptions(format_options);
}
return fop;
@ -470,16 +470,16 @@ void fop_operate(FileOp *fop)
/* TODO set_palette for each frame??? */
#define SEQUENCE_IMAGE() \
do { \
image_index = stock_add_image(fop->sprite->stock, \
image_index = stock_add_image(fop->sprite->getStock(), \
fop->seq.image); \
\
fop->seq.last_cel->image = image_index; \
fop->seq.layer->add_cel(fop->seq.last_cel); \
\
if (sprite_get_palette(fop->sprite, frame) \
if (fop->sprite->getPalette(frame) \
->countDiff(fop->seq.palette, NULL, NULL) > 0) { \
fop->seq.palette->setFrame(frame); \
sprite_set_palette(fop->sprite, fop->seq.palette, true); \
fop->sprite->setPalette(fop->seq.palette, true); \
} \
\
old_image = fop->seq.image; \
@ -560,18 +560,17 @@ void fop_operate(FileOp *fop)
}
fop->filename = jstrdup((char*)jlist_first_data(fop->seq.filename_list));
/* final setup */
// Final setup
if (fop->sprite != NULL) {
/* configure the layer as the `Background' */
// Configure the layer as the 'Background'
if (!fop->seq.has_alpha)
fop->seq.layer->configure_as_background();
/* set the frames range */
sprite_set_frames(fop->sprite, frame);
// Set the frames range
fop->sprite->setTotalFrames(frame);
/* set the frames range */
sprite_set_format_options(fop->sprite,
fop->seq.format_options);
// Set the frames range
fop->sprite->setFormatOptions(fop->seq.format_options);
}
}
/* direct load from one file */
@ -584,19 +583,18 @@ void fop_operate(FileOp *fop)
if (fop->sprite != NULL) {
/* select the last layer */
if (fop->sprite->get_folder()->get_layers_count() > 0) {
LayerIterator last_layer = --fop->sprite->get_folder()->get_layer_end();
sprite_set_layer(fop->sprite, *last_layer);
if (fop->sprite->getFolder()->get_layers_count() > 0) {
LayerIterator last_layer = --fop->sprite->getFolder()->get_layer_end();
fop->sprite->setCurrentLayer(*last_layer);
}
/* set the filename */
if (fop->seq.filename_list)
sprite_set_filename(fop->sprite,
reinterpret_cast<char*>(jlist_first_data(fop->seq.filename_list)));
fop->sprite->setFilename(reinterpret_cast<char*>(jlist_first_data(fop->seq.filename_list)));
else
sprite_set_filename(fop->sprite, fop->filename);
fop->sprite->setFilename(fop->filename);
sprite_mark_as_saved(fop->sprite);
fop->sprite->markAsSaved();
}
}
/* save ***********************************************************/
@ -608,36 +606,36 @@ void fop_operate(FileOp *fop)
assert(fop->format->flags & FILE_SUPPORT_SEQUENCES);
/* create a temporary bitmap */
fop->seq.image = image_new(fop->sprite->imgtype,
fop->sprite->w,
fop->sprite->h);
fop->seq.image = image_new(fop->sprite->getImgType(),
fop->sprite->getWidth(),
fop->sprite->getHeight());
if (fop->seq.image != NULL) {
int old_frame = fop->sprite->frame;
int old_frame = fop->sprite->getCurrentFrame();
fop->seq.progress_offset = 0.0f;
fop->seq.progress_fraction = 1.0f / (float)fop->sprite->frames;
fop->seq.progress_fraction = 1.0f / (float)fop->sprite->getTotalFrames();
/* for each frame in the sprite */
for (fop->sprite->frame=0;
fop->sprite->frame<fop->sprite->frames;
fop->sprite->frame++) {
for (int frame=0; frame < fop->sprite->getTotalFrames(); ++frame) {
fop->sprite->setCurrentFrame(frame);
/* draw all the sprite in this frame in the image */
image_clear(fop->seq.image, 0);
sprite_render(fop->sprite, fop->seq.image, 0, 0);
fop->sprite->render(fop->seq.image, 0, 0);
/* setup the palette */
sprite_get_palette(fop->sprite, fop->sprite->frame)
fop->sprite->getPalette(fop->sprite->getCurrentFrame())
->copyColorsTo(fop->seq.palette);
/* setup the filename to be used */
fop->filename = reinterpret_cast<char*>
(jlist_nth_data(fop->seq.filename_list,
fop->sprite->frame));
fop->sprite->getCurrentFrame()));
/* call the "save" procedure... did it fail? */
if (!(*fop->format->save)(fop)) {
fop_error(fop, _("Error saving frame %d in the file \"%s\"\n"),
fop->sprite->frame+1, fop->filename);
fop->sprite->getCurrentFrame()+1, fop->filename);
break;
}
@ -645,11 +643,11 @@ void fop_operate(FileOp *fop)
}
fop->filename = jstrdup(reinterpret_cast<char*>(jlist_first_data(fop->seq.filename_list)));
/* destroy the image */
// Destroy the image
image_free(fop->seq.image);
/* restore frame */
fop->sprite->frame = old_frame;
// Restore frame
fop->sprite->setCurrentFrame(old_frame);
}
else {
fop_error(fop, _("Not enough memory for the temporary bitmap.\n"));
@ -743,7 +741,7 @@ Image *fop_sequence_image(FileOp *fop, int imgtype, int w, int h)
LayerImage* layer = new LayerImage(sprite);
// Add the layer
sprite->get_folder()->add_layer(layer);
sprite->getFolder()->add_layer(layer);
// Done
fop->sprite = sprite;
@ -757,7 +755,7 @@ Image *fop_sequence_image(FileOp *fop, int imgtype, int w, int h)
else {
sprite = fop->sprite;
if (sprite->imgtype != imgtype)
if (sprite->getImgType() != imgtype)
return NULL;
}

View File

@ -109,12 +109,12 @@ struct FileOp
/* available extensions for each load/save operation */
void get_readable_extensions(char *buf, int size);
void get_writable_extensions(char *buf, int size);
void get_readable_extensions(char* buf, int size);
void get_writable_extensions(char* buf, int size);
/* high-level routines to load/save sprites */
Sprite* sprite_load(const char *filename);
Sprite* sprite_load(const char* filename);
int sprite_save(Sprite* sprite);
/* low-level routines to load/save sprites */

View File

@ -54,7 +54,7 @@ static bool load_FLI(FileOp *fop)
cmap[c*3+2], 255)); \
} \
pal->setFrame(frpos_out); \
sprite_set_palette(sprite, pal, true); \
sprite->setPalette(pal, true); \
} while (0)
unsigned char cmap[768];
@ -102,19 +102,19 @@ static bool load_FLI(FileOp *fop)
return false;
}
/* create the image */
// Create the image
sprite = new Sprite(IMAGE_INDEXED, w, h, 256);
layer = new LayerImage(sprite);
sprite->get_folder()->add_layer(layer);
sprite->getFolder()->add_layer(layer);
layer->configure_as_background();
/* set frames and speed */
sprite_set_frames(sprite, fli_header.frames);
sprite_set_speed(sprite, fli_header.speed);
// Set frames and speed
sprite->setTotalFrames(fli_header.frames);
sprite->setDurationForAllFrames(fli_header.speed);
/* write frame by frame */
for (frpos_in=frpos_out=0;
frpos_in<sprite->frames;
frpos_in<sprite->getTotalFrames();
frpos_in++) {
/* read the frame */
fli_read_frame(f, &fli_header,
@ -139,7 +139,7 @@ static bool load_FLI(FileOp *fop)
break;
}
index = stock_add_image(sprite->stock, image);
index = stock_add_image(sprite->getStock(), image);
if (index < 0) {
image_free(image);
fop_error(fop, _("Not enough memory\n"));
@ -173,10 +173,10 @@ static bool load_FLI(FileOp *fop)
layer_add_cel(layer, cel);
}
#endif
/* the palette and the image don't change: add duration to the last added frame */
// The palette and the image don't change: add duration to the last added frame
else {
sprite_set_frlen(sprite, frpos_out,
sprite_get_frlen(sprite, frpos_out)+fli_header.speed);
sprite->setFrameDuration(frpos_out,
sprite->getFrameDuration(frpos_out)+fli_header.speed);
}
/* update the old image and color-map to the new ones to compare later */
@ -184,7 +184,7 @@ static bool load_FLI(FileOp *fop)
memcpy(omap, cmap, 768);
/* update progress */
fop_progress(fop, (float)(frpos_in+1) / (float)(sprite->frames));
fop_progress(fop, (float)(frpos_in+1) / (float)(sprite->getTotalFrames()));
if (fop_is_stop(fop))
break;
@ -193,13 +193,13 @@ static bool load_FLI(FileOp *fop)
break;
}
/* update sprites frames */
sprite_set_frames(sprite, frpos_out+1);
// Update number of frames
sprite->setTotalFrames(frpos_out+1);
/* close the file */
// Close the file
fclose(f);
/* destroy the bitmaps */
// Destroy the bitmaps
image_free(bmp);
image_free(old);
delete pal;
@ -223,8 +223,8 @@ static bool save_FLI(FileOp *fop)
/* prepare fli header */
fli_header.filesize = 0;
fli_header.frames = 0;
fli_header.width = sprite->w;
fli_header.height = sprite->h;
fli_header.width = sprite->getWidth();
fli_header.height = sprite->getHeight();
if ((fli_header.width == 320) && (fli_header.height == 200))
fli_header.magic = HEADER_FLI;
@ -248,8 +248,8 @@ static bool save_FLI(FileOp *fop)
fseek(f, 128, SEEK_SET);
/* create the bitmaps */
bmp = image_new(IMAGE_INDEXED, sprite->w, sprite->h);
old = image_new(IMAGE_INDEXED, sprite->w, sprite->h);
bmp = image_new(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight());
old = image_new(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight());
if ((!bmp) || (!old)) {
fop_error(fop, _("Not enough memory for temporary bitmaps.\n"));
if (bmp) image_free(bmp);
@ -260,10 +260,10 @@ static bool save_FLI(FileOp *fop)
/* write frame by frame */
for (frpos=0;
frpos<sprite->frames;
frpos<sprite->getTotalFrames();
frpos++) {
/* get color map */
pal = sprite_get_palette(sprite, frpos);
pal = sprite->getPalette(frpos);
for (c=0; c<256; c++) {
cmap[3*c ] = _rgba_getr(pal->getEntry(c));
cmap[3*c+1] = _rgba_getg(pal->getEntry(c));
@ -272,11 +272,11 @@ static bool save_FLI(FileOp *fop)
/* render the frame in the bitmap */
image_clear(bmp, 0);
layer_render(sprite->get_folder(), bmp, 0, 0, frpos);
layer_render(sprite->getFolder(), bmp, 0, 0, frpos);
/* how many times this frame should be written to get the same
time that it has in the sprite */
times = sprite_get_frlen(sprite, frpos) / fli_header.speed;
times = sprite->getFrameDuration(frpos) / fli_header.speed;
for (c=0; c<times; c++) {
/* write this frame */
@ -294,7 +294,7 @@ static bool save_FLI(FileOp *fop)
}
/* update progress */
fop_progress(fop, (float)(frpos+1) / (float)(sprite->frames));
fop_progress(fop, (float)(frpos+1) / (float)(sprite->getTotalFrames()));
}
/* write the header and close the file */
@ -313,8 +313,8 @@ static int get_time_precision(Sprite *sprite)
int precision = 1000;
int c, len;
for (c = 0; c < sprite->frames && precision > 1; c++) {
len = sprite_get_frlen(sprite, c);
for (c = 0; c < sprite->getTotalFrames() && precision > 1; c++) {
len = sprite->getFrameDuration(c);
while (len / precision == 0)
precision /= 10;

View File

@ -109,7 +109,7 @@ static bool load_GIF(FileOp *fop)
goto error;
}
sprite_set_frames(sprite, gif->frames_count);
sprite->setTotalFrames(gif->frames_count);
layer = new LayerImage(sprite);
if (!layer) {
@ -117,7 +117,7 @@ static bool load_GIF(FileOp *fop)
goto error;
}
sprite->get_folder()->add_layer(layer);
sprite->getFolder()->add_layer(layer);
layer->configure_as_background();
image_clear(current_image, gif->background_index);
@ -131,7 +131,7 @@ static bool load_GIF(FileOp *fop)
pal = &gif->palette;
/* 1/100th seconds to milliseconds */
sprite_set_frlen(sprite, i, gif->frames[i].duration*10);
sprite->setFrameDuration(i, gif->frames[i].duration*10);
/* make the palette */
for (c=0; c<pal->colors_count; c++) {
@ -150,7 +150,7 @@ static bool load_GIF(FileOp *fop)
/* first frame or palette changes */
if (i == 0 || opal->countDiff(npal, NULL, NULL)) {
npal->setFrame(i);
sprite_set_palette(sprite, npal, true);
sprite->setPalette(npal, true);
}
/* copy new palette to old palette */
@ -162,7 +162,7 @@ static bool load_GIF(FileOp *fop)
gif->frames[i].w,
gif->frames[i].h
#else
sprite->w, sprite->h
sprite->getWidth(), sprite->getHeight()
#endif
);
if (!cel || !image) {
@ -195,7 +195,7 @@ static bool load_GIF(FileOp *fop)
0, 0
#endif
);
cel->image = stock_add_image(sprite->stock, image);
cel->image = stock_add_image(sprite->getStock(), image);
layer->add_cel(cel);
#ifdef LOAD_GIF_STRUCTURE
@ -291,8 +291,8 @@ static bool save_GIF(FileOp *fop)
int w, h;
int ret;
bmp = image_new(IMAGE_INDEXED, sprite->w, sprite->h);
old = image_new(IMAGE_INDEXED, sprite->w, sprite->h);
bmp = image_new(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight());
old = image_new(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight());
if (!bmp || !old) {
if (bmp) image_free(bmp);
if (old) image_free(old);
@ -300,7 +300,7 @@ static bool save_GIF(FileOp *fop)
return false;
}
gif = gif_create_animation(sprite->frames);
gif = gif_create_animation(sprite->getTotalFrames());
if (!gif) {
image_free(bmp);
image_free(old);
@ -308,8 +308,8 @@ static bool save_GIF(FileOp *fop)
return false;
}
gif->width = sprite->w;
gif->height = sprite->h;
gif->width = sprite->getWidth();
gif->height = sprite->getHeight();
gif->background_index = 0;
/* defaults:
@ -324,13 +324,13 @@ static bool save_GIF(FileOp *fop)
x1 = y1 = x2 = y2 = 0;
opal = NULL;
for (i=0; i<sprite->frames; ++i) {
for (i=0; i<sprite->getTotalFrames(); ++i) {
/* frame palette */
npal = sprite_get_palette(sprite, i);
npal = sprite->getPalette(i);
/* render the frame in the bitmap */
image_clear(bmp, 0);
layer_render(sprite->get_folder(), bmp, 0, 0, i);
layer_render(sprite->getFolder(), bmp, 0, 0, i);
/* first frame */
if (i == 0) {
@ -424,7 +424,7 @@ static bool save_GIF(FileOp *fop)
gif->frames[i].yoff = y1;
/* milliseconds to 1/100th seconds */
gif->frames[i].duration = sprite_get_frlen(sprite, i)/10;
gif->frames[i].duration = sprite->getFrameDuration(i)/10;
/* image data */
for (y = 0; y < h; y++) {

View File

@ -51,7 +51,7 @@ static bool save_ICO(FileOp *fop)
int depth, bpp, bw, bitsw;
int size, offset, n, i;
int c, x, y, b, m, v;
int num = fop->sprite->frames;
int num = fop->sprite->getTotalFrames();
Image *bmp;
f = fopen(fop->filename, "wb");
@ -68,16 +68,16 @@ static bool save_ICO(FileOp *fop)
for (n=0; n<num; ++n) {
depth = 8;/* bitmap_color_depth(bmp[n]); */
bpp = (depth == 8) ? 8 : 24;
bw = (((fop->sprite->w * bpp / 8) + 3) / 4) * 4;
bitsw = ((((fop->sprite->w + 7) / 8) + 3) / 4) * 4;
size = fop->sprite->h * (bw + bitsw) + 40;
bw = (((fop->sprite->getWidth() * bpp / 8) + 3) / 4) * 4;
bitsw = ((((fop->sprite->getWidth() + 7) / 8) + 3) / 4) * 4;
size = fop->sprite->getHeight() * (bw + bitsw) + 40;
if (bpp == 8)
size += 256 * 4;
/* ICONDIRENTRY */
fputc(fop->sprite->w, f); /* width */
fputc(fop->sprite->h, f); /* height */
fputc(fop->sprite->getWidth(), f); /* width */
fputc(fop->sprite->getHeight(), f); /* height */
fputc(0, f); /* color count */
fputc(0, f); /* reserved */
fputw(1, f); /* color planes */
@ -88,13 +88,13 @@ static bool save_ICO(FileOp *fop)
offset += size;
}
bmp = image_new(fop->sprite->imgtype,
fop->sprite->w,
fop->sprite->h);
bmp = image_new(fop->sprite->getImgType(),
fop->sprite->getWidth(),
fop->sprite->getHeight());
for (n=0; n<num; ++n) {
image_clear(bmp, 0);
layer_render(fop->sprite->get_folder(), bmp, 0, 0, n);
layer_render(fop->sprite->getFolder(), bmp, 0, 0, n);
depth = 8; /* bitmap_color_depth(bmp); */
bpp = (depth == 8) ? 8 : 24;
@ -120,7 +120,7 @@ static bool save_ICO(FileOp *fop)
/* PALETTE */
if (bpp == 8) {
Palette *pal = sprite_get_palette(fop->sprite, n);
Palette *pal = fop->sprite->getPalette(n);
fputl(0, f); /* color 0 is black, so the XOR mask works */

View File

@ -355,12 +355,12 @@ static bool save_PNG(FileOp *fop)
switch (image->imgtype) {
case IMAGE_RGB:
color_type = sprite_need_alpha(fop->sprite) ?
color_type = fop->sprite->needAlpha() ?
PNG_COLOR_TYPE_RGB_ALPHA:
PNG_COLOR_TYPE_RGB;
break;
case IMAGE_GRAYSCALE:
color_type = sprite_need_alpha(fop->sprite) ?
color_type = fop->sprite->needAlpha() ?
PNG_COLOR_TYPE_GRAY_ALPHA:
PNG_COLOR_TYPE_GRAY;
break;

View File

@ -121,8 +121,8 @@ void editors_draw_sprite_tiled(const Sprite* sprite, int x1, int y1, int x2, int
#else
cx1 = 0;
cy1 = 0;
cx2 = cx1+sprite->w-1;
cy2 = cy1+sprite->h-1;
cx2 = cx1+sprite->getWidth()-1;
cy2 = cy1+sprite->getHeight()-1;
#endif
lx1 = MAX(x1, cx1);
@ -156,7 +156,7 @@ void editors_draw_sprite_tiled(const Sprite* sprite, int x1, int y1, int x2, int
#else
editors_draw_sprite_tiled(sprite,
cx1, y1,
MIN(lx1-1, x2-sprite->w), y2);
MIN(lx1-1, x2-sprite->getWidth()), y2);
#endif
}
@ -169,7 +169,7 @@ void editors_draw_sprite_tiled(const Sprite* sprite, int x1, int y1, int x2, int
#else
editors_draw_sprite_tiled(sprite,
x1, cy1,
x2, MIN(ly1-1, y2-sprite->h));
x2, MIN(ly1-1, y2-sprite->getHeight()));
#endif
}
}

View File

@ -459,7 +459,7 @@ void update_screen_for_sprite(const Sprite* sprite)
/* with a sprite */
else {
/* select the palette of the sprite */
if (set_current_palette(sprite_get_palette(sprite, sprite->frame), false)) {
if (set_current_palette(sprite->getPalette(sprite->getCurrentFrame()), false)) {
/* if the palette changes, refresh the whole screen */
jmanager_refresh_screen();
}

View File

@ -104,9 +104,9 @@ void set_default_palette(Palette* palette)
* @param palette If "palette" is NULL will be used the default one
* (ase_default_palette)
*/
bool set_current_palette(Palette *_palette, bool forced)
bool set_current_palette(const Palette *_palette, bool forced)
{
Palette *palette = _palette ? _palette: ase_default_palette;
const Palette *palette = _palette ? _palette: ase_default_palette;
bool ret = false;
/* have changes */

View File

@ -35,7 +35,7 @@ Palette* get_default_palette();
Palette* get_current_palette();
void set_default_palette(Palette* palette);
bool set_current_palette(Palette* palette, bool forced);
bool set_current_palette(const Palette* palette, bool forced);
void set_black_palette();
void set_current_color(int index, int r, int g, int b);

View File

@ -52,7 +52,7 @@ Layer::Layer(int type, Sprite* sprite)
LAYER_IS_WRITABLE;
}
Layer::Layer(Layer* src_layer, Sprite* dst_sprite)
Layer::Layer(const Layer* src_layer, Sprite* dst_sprite)
: GfxObj(src_layer->type)
{
m_sprite = dst_sprite;
@ -113,31 +113,31 @@ LayerImage::LayerImage(Sprite* sprite)
m_blend_mode = BLEND_MODE_NORMAL;
}
LayerImage::LayerImage(LayerImage* src_layer, Sprite* dst_sprite)
LayerImage::LayerImage(const LayerImage* src_layer, Sprite* dst_sprite)
: Layer(src_layer, dst_sprite)
{
set_blend_mode(src_layer->get_blend_mode());
try {
// copy cels
CelIterator it = static_cast<LayerImage*>(src_layer)->get_cel_begin();
CelIterator end = static_cast<LayerImage*>(src_layer)->get_cel_end();
CelConstIterator it = src_layer->get_cel_begin();
CelConstIterator end = src_layer->get_cel_end();
for (; it != end; ++it) {
Cel* cel = *it;
const Cel* cel = *it;
Cel* cel_copy = cel_new_copy(cel);
assert((cel->image >= 0) &&
(cel->image < src_layer->getSprite()->stock->nimage));
(cel->image < src_layer->getSprite()->getStock()->nimage));
Image* image = src_layer->getSprite()->stock->image[cel->image];
Image* image = src_layer->getSprite()->getStock()->image[cel->image];
assert(image != NULL);
Image* image_copy = image_new_copy(image);
cel_copy->image = stock_add_image(dst_sprite->stock, image_copy);
if (undo_is_enabled(dst_sprite->undo))
undo_add_image(dst_sprite->undo, dst_sprite->stock, cel_copy->image);
cel_copy->image = stock_add_image(dst_sprite->getStock(), image_copy);
if (undo_is_enabled(dst_sprite->getUndo()))
undo_add_image(dst_sprite->getUndo(), dst_sprite->getStock(), cel_copy->image);
add_cel(cel_copy);
}
@ -160,11 +160,11 @@ void LayerImage::destroy_all_cels()
for (; it != end; ++it) {
Cel* cel = *it;
Image* image = getSprite()->stock->image[cel->image];
Image* image = getSprite()->getStock()->image[cel->image];
assert(image != NULL);
stock_remove_image(getSprite()->stock, image);
stock_remove_image(getSprite()->getStock(), image);
image_free(image);
cel_free(cel);
}
@ -251,12 +251,12 @@ Cel* LayerImage::get_cel(int frame)
void LayerImage::configure_as_background()
{
assert(getSprite() != NULL);
assert(sprite_get_background_layer(getSprite()) == NULL);
assert(getSprite()->getBackgroundLayer() == NULL);
*flags_addr() |= LAYER_IS_LOCKMOVE | LAYER_IS_BACKGROUND;
set_name("Background");
getSprite()->get_folder()->move_layer(this, NULL);
getSprite()->getFolder()->move_layer(this, NULL);
}
//////////////////////////////////////////////////////////////////////
@ -268,12 +268,12 @@ LayerFolder::LayerFolder(Sprite* sprite)
set_name("Layer Set");
}
LayerFolder::LayerFolder(LayerFolder* src_layer, Sprite* dst_sprite)
LayerFolder::LayerFolder(const LayerFolder* src_layer, Sprite* dst_sprite)
: Layer(src_layer, dst_sprite)
{
try {
LayerIterator it = static_cast<LayerFolder*>(src_layer)->get_layer_begin();
LayerIterator end = static_cast<LayerFolder*>(src_layer)->get_layer_end();
LayerConstIterator it = src_layer->get_layer_begin();
LayerConstIterator end = src_layer->get_layer_end();
for (; it != end; ++it) {
// duplicate the child
@ -375,12 +375,12 @@ Layer* layer_new_flatten_copy(Sprite* dst_sprite, const Layer* src_layer,
/* does this frame have cels to render? */
if (has_cels(src_layer, frame)) {
/* create a new image */
Image* image = image_new(flat_layer->getSprite()->imgtype, w, h);
Image* image = image_new(flat_layer->getSprite()->getImgType(), w, h);
try {
/* create the new cel for the output layer (add the image to
stock too) */
Cel* cel = cel_new(frame, stock_add_image(flat_layer->getSprite()->stock, image));
Cel* cel = cel_new(frame, stock_add_image(flat_layer->getSprite()->getStock(), image));
cel_set_position(cel, x, y);
/* clear the image and render this frame */
@ -416,9 +416,9 @@ void layer_render(const Layer* layer, Image* image, int x, int y, int frame)
if (cel) {
assert((cel->image >= 0) &&
(cel->image < layer->getSprite()->stock->nimage));
(cel->image < layer->getSprite()->getStock()->nimage));
src_image = layer->getSprite()->stock->image[cel->image];
src_image = layer->getSprite()->getStock()->image[cel->image];
assert(src_image != NULL);
image_merge(image, src_image,

View File

@ -48,7 +48,7 @@ class Layer : public GfxObj
protected:
Layer(int type, Sprite* sprite);
Layer(Sprite* sprite);
Layer(Layer* src_layer, Sprite* dst_sprite);
Layer(const Layer* src_layer, Sprite* dst_sprite);
public:
virtual ~Layer();
@ -75,7 +75,7 @@ public:
void set_writable(bool b) { if (b) m_flags |= LAYER_IS_WRITABLE; else m_flags &= ~LAYER_IS_WRITABLE; }
virtual void get_cels(CelList& cels) = 0;
virtual Layer* duplicate_for(Sprite* sprite) = 0;
virtual Layer* duplicate_for(Sprite* sprite) const = 0;
// TODO remove these methods (from C backward-compatibility)
unsigned short* flags_addr() { return &m_flags; }
@ -92,7 +92,7 @@ class LayerImage : public Layer
public:
LayerImage(Sprite* sprite);
LayerImage(LayerImage* copy, Sprite* sprite);
LayerImage(const LayerImage* copy, Sprite* sprite);
virtual ~LayerImage();
int get_blend_mode() const { return m_blend_mode; }
@ -113,7 +113,7 @@ public:
CelConstIterator get_cel_end() const { return m_cels.end(); }
int get_cels_count() const { return m_cels.size(); }
LayerImage* duplicate_for(Sprite* sprite) { return new LayerImage(this, sprite); }
LayerImage* duplicate_for(Sprite* sprite) const { return new LayerImage(this, sprite); }
private:
void destroy_all_cels();
@ -128,7 +128,7 @@ class LayerFolder : public Layer
public:
LayerFolder(Sprite* sprite);
LayerFolder(LayerFolder* copy, Sprite* sprite);
LayerFolder(const LayerFolder* copy, Sprite* sprite);
virtual ~LayerFolder();
LayerList get_layers_list() { return m_layers; }
@ -144,7 +144,7 @@ public:
void get_cels(CelList& cels);
LayerFolder* duplicate_for(Sprite* sprite) { return new LayerFolder(this, sprite); }
LayerFolder* duplicate_for(Sprite* sprite) const { return new LayerFolder(this, sprite); }
private:
void destroy_all_layers();

File diff suppressed because it is too large Load Diff

View File

@ -35,129 +35,185 @@ class Path;
class Stock;
class Undo;
class Sprite;
struct _BoundSeg;
Sprite* sprite_new_copy(const Sprite* src_sprite);
struct PreferredEditorSettings
{
int scroll_x;
int scroll_y;
int zoom;
};
/**
* The main structure used in the whole program to handle a sprite.
*/
class Sprite : public GfxObj
{
friend Sprite* sprite_new_copy(const Sprite* src_sprite);
public:
char filename[512]; // sprite's file name
bool associated_to_file; // true if this sprite is associated to a file in the file-system
int imgtype; // image type
int w, h; // image width/height size (in pixels)
int frames; // how many frames has this sprite
int* frlens; // duration per frame
int frame; // current frame, range [0,frames)
JList palettes; // list of palettes
Stock *stock; // stock to get images
private:
LayerFolder* m_folder; // main folder of layers
public:
Layer* layer; // current layer
Path* path; // working path
Mask* mask; // selected mask region
Undo* undo; // undo stack
struct {
JList paths; // paths
JList masks; // masks
} repository;
// Selected mask region boundaries
struct {
int nseg;
struct _BoundSeg *seg;
} bound;
struct {
int scroll_x;
int scroll_y;
int zoom;
} preferred;
private:
Image* m_extras; // Image with the sprite size to draw some extra stuff (e.g. editor's cursor)
int m_extras_opacity; // Opacity to be used to draw the extra image
// Mutex to modify the 'locked' flag.
Vaca::Mutex* m_mutex;
// True if some thread is writing the sprite.
bool m_write_lock;
// Greater than zero when one or more threads are reading the sprite.
int m_read_locks;
public:
// Data to save the file in the same format that it was loaded
FormatOptions *format_options;
////////////////////////////////////////
// Constructors/Destructor
Sprite(int imgtype, int w, int h, int ncolors);
Sprite(int imgtype, int width, int height, int ncolors);
Sprite(const Sprite& original);
virtual ~Sprite();
////////////////////////////////////////
// Special constructors
static Sprite* createFlattenCopy(const Sprite& original);
static Sprite* createWithLayer(int imgtype, int width, int height, int ncolors);
////////////////////////////////////////
// Multi-threading ("sprite wrappers" use this)
bool lock(bool write);
bool lock_to_write();
void unlock_to_read();
bool lockToWrite();
void unlockToRead();
void unlock();
LayerFolder* get_folder() const { return m_folder; }
////////////////////////////////////////
// Main properties
void prepare_extra();
Image* get_extras() { return m_extras; }
int get_extras_opacity() const { return m_extras_opacity; }
void set_extras_opacity(int opacity) { m_extras_opacity = opacity; }
int getImgType() const;
void setImgType(int imgtype);
int getWidth() const;
int getHeight() const;
void setSize(int width, int height);
const char* getFilename() const;
void setFilename(const char* filename);
bool isModified() const;
bool isAssociatedToFile() const;
void markAsSaved();
bool needAlpha() const;
int getMemSize() const;
////////////////////////////////////////
// Layers
const LayerFolder* getFolder() const;
LayerFolder* getFolder();
const LayerImage* getBackgroundLayer() const;
LayerImage* getBackgroundLayer();
const Layer* getCurrentLayer() const;
Layer* getCurrentLayer();
void setCurrentLayer(Layer* layer);
int countLayers() const;
const Layer* indexToLayer(int index) const;
Layer* indexToLayer(int index);
int layerToIndex(const Layer* layer) const;
////////////////////////////////////////
// Palettes
const Palette* getPalette(int frame) const;
Palette* getPalette(int frame);
JList getPalettes();
void setPalette(Palette* pal, bool truncate);
void resetPalettes();
void deletePalette(Palette* pal);
const Palette* getCurrentPalette() const;
Palette* getCurrentPalette();
////////////////////////////////////////
// Frames
int getTotalFrames() const;
void setTotalFrames(int frames);
int getFrameDuration(int frame) const;
void setFrameDuration(int frame, int msecs);
void setDurationForAllFrames(int msecs);
int getCurrentFrame() const;
void setCurrentFrame(int frame);
////////////////////////////////////////
// Images
const Stock* getStock() const;
Stock* getStock();
const Image* getCurrentImage(int* x = NULL, int* y = NULL, int* opacity = NULL) const;
Image* getCurrentImage(int* x = NULL, int* y = NULL, int* opacity = NULL);
void getCels(CelList& cels);
////////////////////////////////////////
// Undo
const Undo* getUndo() const;
Undo* getUndo();
////////////////////////////////////////
// Mask
const Mask* getMask() const;
Mask* getMask();
void setMask(const Mask* mask);
void addMask(Mask* mask);
void removeMask(Mask* mask);
Mask* requestMask(const char* name) const;
void generateMaskBoundaries(Mask* mask = NULL);
JList getMasksRepository();
////////////////////////////////////////
// Path
void addPath(Path* path);
void removePath(Path* path);
void setPath(const Path* path);
JList getPathsRepository();
////////////////////////////////////////
// Loaded options from file
void setFormatOptions(FormatOptions* format_options);
////////////////////////////////////////
// Drawing
void render(Image* image, int x, int y) const;
int getPixel(int x, int y) const;
////////////////////////////////////////
// Preferred editor settings
PreferredEditorSettings getPreferredEditorSettings() const;
void setPreferredEditorSettings(const PreferredEditorSettings& settings);
////////////////////////////////////////
// Boundaries
int getBoundariesSegmentsCount() const;
const _BoundSeg* getBoundariesSegments() const;
////////////////////////////////////////
// Extras
void prepareExtra();
Image* getExtras();
int getExtrasOpacity() const;
void setExtrasOpacity(int opacity);
private:
Sprite();
class SpriteImpl* m_impl;
};
Sprite* sprite_new_flatten_copy(const Sprite* src_sprite);
Sprite* sprite_new_with_layer(int imgtype, int w, int h, int ncolors);
bool sprite_is_modified(const Sprite* sprite);
bool sprite_is_associated_to_file(const Sprite* sprite);
void sprite_mark_as_saved(Sprite* sprite);
bool sprite_need_alpha(const Sprite* sprite);
Palette* sprite_get_palette(const Sprite* sprite, int frame);
void sprite_set_palette(Sprite* sprite, Palette* pal, bool truncate);
void sprite_reset_palettes(Sprite* sprite);
void sprite_delete_palette(Sprite* sprite, Palette* pal);
void sprite_set_filename(Sprite* sprite, const char* filename);
void sprite_set_format_options(Sprite* sprite, FormatOptions* format_options);
void sprite_set_size(Sprite* sprite, int w, int h);
void sprite_set_frames(Sprite* sprite, int frames);
void sprite_set_frlen(Sprite* sprite, int frame, int msecs);
int sprite_get_frlen(const Sprite* sprite, int frame);
void sprite_set_speed(Sprite* sprite, int msecs);
void sprite_set_path(Sprite* sprite, const Path* path);
void sprite_set_mask(Sprite* sprite, const Mask* mask);
void sprite_set_layer(Sprite* sprite, Layer* layer);
void sprite_set_frame(Sprite* sprite, int frame);
LayerImage* sprite_get_background_layer(const Sprite* sprite);
void sprite_add_path(Sprite* sprite, Path* path);
void sprite_remove_path(Sprite* sprite, Path* path);
void sprite_add_mask(Sprite* sprite, Mask* mask);
void sprite_remove_mask(Sprite* sprite, Mask* mask);
Mask* sprite_request_mask(const Sprite* sprite, const char *name);
void sprite_render(const Sprite* sprite, Image* image, int x, int y);
void sprite_generate_mask_boundaries(Sprite* sprite);
Layer* sprite_index2layer(const Sprite* sprite, int index);
int sprite_layer2index(const Sprite* sprite, const Layer* layer);
int sprite_count_layers(const Sprite* sprite);
void sprite_get_cels(const Sprite* sprite, CelList& cels);
int sprite_getpixel(const Sprite* sprite, int x, int y);
int sprite_get_memsize(const Sprite* sprite);
#endif

View File

@ -149,3 +149,11 @@ Image* stock_get_image(Stock* stock, int index)
return ((index >= 0) && (index < stock->nimage)) ? stock->image[index]: NULL;
}
/**
* Returns the image in the "index" position
*/
const Image* stock_get_image(const Stock* stock, int index)
{
return ((index >= 0) && (index < stock->nimage)) ? stock->image[index]: NULL;
}

View File

@ -45,5 +45,6 @@ void stock_remove_image(Stock* stock, Image* image);
void stock_replace_image(Stock* stock, int index, Image* image);
Image* stock_get_image(Stock* stock, int index);
const Image* stock_get_image(const Stock* stock, int index);
#endif

View File

@ -79,6 +79,9 @@ enum {
/* misc */
UNDO_TYPE_SET_MASK,
UNDO_TYPE_SET_IMGTYPE,
UNDO_TYPE_SET_SIZE,
UNDO_TYPE_SET_FRAME,
UNDO_TYPE_SET_FRAMES,
UNDO_TYPE_SET_FRLEN,
};
@ -100,6 +103,9 @@ struct UndoChunkSetLayer;
struct UndoChunkAddPalette;
struct UndoChunkRemovePalette;
struct UndoChunkSetMask;
struct UndoChunkSetImgType;
struct UndoChunkSetSize;
struct UndoChunkSetFrame;
struct UndoChunkSetFrames;
struct UndoChunkSetFrlen;
@ -188,6 +194,15 @@ static void chunk_remove_palette_invert(UndoStream* stream, UndoChunkRemovePalet
static void chunk_set_mask_new(UndoStream* stream, Sprite *sprite);
static void chunk_set_mask_invert(UndoStream* stream, UndoChunkSetMask* chunk, int state);
static void chunk_set_imgtype_new(UndoStream* stream, Sprite *sprite);
static void chunk_set_imgtype_invert(UndoStream* stream, UndoChunkSetImgType *chunk, int state);
static void chunk_set_size_new(UndoStream* stream, Sprite *sprite);
static void chunk_set_size_invert(UndoStream* stream, UndoChunkSetSize *chunk, int state);
static void chunk_set_frame_new(UndoStream* stream, Sprite *sprite);
static void chunk_set_frame_invert(UndoStream* stream, UndoChunkSetFrame *chunk, int state);
static void chunk_set_frames_new(UndoStream* stream, Sprite *sprite);
static void chunk_set_frames_invert(UndoStream* stream, UndoChunkSetFrames *chunk, int state);
@ -218,6 +233,9 @@ static UndoAction undo_actions[] = {
DECL_UNDO_ACTION(add_palette),
DECL_UNDO_ACTION(remove_palette),
DECL_UNDO_ACTION(set_mask),
DECL_UNDO_ACTION(set_imgtype),
DECL_UNDO_ACTION(set_size),
DECL_UNDO_ACTION(set_frame),
DECL_UNDO_ACTION(set_frames),
DECL_UNDO_ACTION(set_frlen),
};
@ -1333,7 +1351,7 @@ static void chunk_set_layer_new(UndoStream* stream, Sprite *sprite)
sizeof(UndoChunkSetLayer));
chunk->sprite_id = sprite->id;
chunk->layer_id = sprite->layer ? sprite->layer->id: 0;
chunk->layer_id = sprite->getCurrentLayer() ? sprite->getCurrentLayer()->id: 0;
}
static void chunk_set_layer_invert(UndoStream* stream, UndoChunkSetLayer* chunk, int state)
@ -1346,7 +1364,7 @@ static void chunk_set_layer_invert(UndoStream* stream, UndoChunkSetLayer* chunk,
chunk_set_layer_new(stream, sprite);
sprite->layer = layer;
sprite->setCurrentLayer(layer);
}
/***********************************************************************
@ -1391,7 +1409,7 @@ static void chunk_add_palette_invert(UndoStream* stream, UndoChunkAddPalette *ch
throw undo_exception("chunk_add_palette_invert");
chunk_remove_palette_new(stream, sprite, palette);
sprite_delete_palette(sprite, palette);
sprite->deletePalette(palette);
}
/***********************************************************************
@ -1436,7 +1454,7 @@ static void chunk_remove_palette_invert(UndoStream* stream, UndoChunkRemovePalet
Palette* palette = read_raw_palette(chunk->data);
chunk_add_palette_new(stream, sprite, palette);
sprite_set_palette(sprite, palette, true);
sprite->setPalette(palette, true);
delete palette;
}
@ -1468,10 +1486,10 @@ static void chunk_set_mask_new(UndoStream* stream, Sprite *sprite)
UndoChunkSetMask* chunk = (UndoChunkSetMask* )
undo_chunk_new(stream,
UNDO_TYPE_SET_MASK,
sizeof(UndoChunkSetMask)+get_raw_mask_size(sprite->mask));
sizeof(UndoChunkSetMask)+get_raw_mask_size(sprite->getMask()));
chunk->sprite_id = sprite->id;
write_raw_mask(chunk->data, sprite->mask);
write_raw_mask(chunk->data, sprite->getMask());
}
static void chunk_set_mask_invert(UndoStream* stream, UndoChunkSetMask* chunk, int state)
@ -1482,12 +1500,144 @@ static void chunk_set_mask_invert(UndoStream* stream, UndoChunkSetMask* chunk, i
Mask* mask = read_raw_mask(chunk->data);
chunk_set_mask_new(stream, sprite);
mask_copy(sprite->mask, mask);
mask_copy(sprite->getMask(), mask);
mask_free(mask);
}
}
/***********************************************************************
"set_imgtype"
DWORD sprite ID
DWORD imgtype
***********************************************************************/
struct UndoChunkSetImgType
{
UndoChunk head;
ase_uint32 sprite_id;
ase_uint32 imgtype;
};
void undo_set_imgtype(Undo* undo, Sprite* sprite)
{
chunk_set_imgtype_new(undo->undo_stream, sprite);
update_undo(undo);
}
static void chunk_set_imgtype_new(UndoStream* stream, Sprite* sprite)
{
UndoChunkSetImgType* chunk = (UndoChunkSetImgType*)
undo_chunk_new(stream,
UNDO_TYPE_SET_IMGTYPE,
sizeof(UndoChunkSetImgType));
chunk->sprite_id = sprite->id;
chunk->imgtype = sprite->getImgType();
}
static void chunk_set_imgtype_invert(UndoStream* stream, UndoChunkSetImgType *chunk, int state)
{
Sprite *sprite = (Sprite *)gfxobj_find(chunk->sprite_id);
if (sprite) {
chunk_set_imgtype_new(stream, sprite);
sprite->setImgType(chunk->imgtype);
}
}
/***********************************************************************
"set_size"
DWORD sprite ID
DWORD width
DWORD height
***********************************************************************/
struct UndoChunkSetSize
{
UndoChunk head;
ase_uint32 sprite_id;
ase_uint32 width;
ase_uint32 height;
};
void undo_set_size(Undo* undo, Sprite* sprite)
{
chunk_set_size_new(undo->undo_stream, sprite);
update_undo(undo);
}
static void chunk_set_size_new(UndoStream* stream, Sprite* sprite)
{
UndoChunkSetSize* chunk = (UndoChunkSetSize*)
undo_chunk_new(stream,
UNDO_TYPE_SET_SIZE,
sizeof(UndoChunkSetSize));
chunk->sprite_id = sprite->id;
chunk->width = sprite->getWidth();
chunk->height = sprite->getHeight();
}
static void chunk_set_size_invert(UndoStream* stream, UndoChunkSetSize *chunk, int state)
{
Sprite *sprite = (Sprite *)gfxobj_find(chunk->sprite_id);
if (sprite) {
chunk_set_size_new(stream, sprite);
sprite->setSize(chunk->width, chunk->height);
}
}
/***********************************************************************
"set_frame"
DWORD sprite ID
DWORD frame
***********************************************************************/
struct UndoChunkSetFrame
{
UndoChunk head;
ase_uint32 sprite_id;
ase_uint32 frame;
};
void undo_set_frame(Undo* undo, Sprite* sprite)
{
chunk_set_frame_new(undo->undo_stream, sprite);
update_undo(undo);
}
static void chunk_set_frame_new(UndoStream* stream, Sprite* sprite)
{
UndoChunkSetFrame* chunk = (UndoChunkSetFrame*)
undo_chunk_new(stream,
UNDO_TYPE_SET_FRAME,
sizeof(UndoChunkSetFrame));
chunk->sprite_id = sprite->id;
chunk->frame = sprite->getCurrentFrame();
}
static void chunk_set_frame_invert(UndoStream* stream, UndoChunkSetFrame *chunk, int state)
{
Sprite *sprite = (Sprite *)gfxobj_find(chunk->sprite_id);
if (sprite) {
chunk_set_frame_new(stream, sprite);
sprite->setCurrentFrame(chunk->frame);
}
}
/***********************************************************************
"set_frames"
@ -1518,7 +1668,7 @@ static void chunk_set_frames_new(UndoStream* stream, Sprite *sprite)
sizeof(UndoChunkSetFrames));
chunk->sprite_id = sprite->id;
chunk->frames = sprite->frames;
chunk->frames = sprite->getTotalFrames();
}
static void chunk_set_frames_invert(UndoStream* stream, UndoChunkSetFrames *chunk, int state)
@ -1527,7 +1677,7 @@ static void chunk_set_frames_invert(UndoStream* stream, UndoChunkSetFrames *chun
if (sprite) {
chunk_set_frames_new(stream, sprite);
sprite_set_frames(sprite, chunk->frames);
sprite->setTotalFrames(chunk->frames);
}
}
@ -1537,7 +1687,7 @@ static void chunk_set_frames_invert(UndoStream* stream, UndoChunkSetFrames *chun
DWORD sprite ID
DWORD frame
DWORD frlen
DWORD duration
***********************************************************************/
@ -1546,7 +1696,7 @@ struct UndoChunkSetFrlen
UndoChunk head;
ase_uint32 sprite_id;
ase_uint32 frame;
ase_uint32 frlen;
ase_uint32 duration;
};
void undo_set_frlen(Undo* undo, Sprite *sprite, int frame)
@ -1557,7 +1707,7 @@ void undo_set_frlen(Undo* undo, Sprite *sprite, int frame)
static void chunk_set_frlen_new(UndoStream* stream, Sprite *sprite, int frame)
{
assert(frame >= 0 && frame < sprite->frames);
assert(frame >= 0 && frame < sprite->getTotalFrames());
UndoChunkSetFrlen *chunk = (UndoChunkSetFrlen *)
undo_chunk_new(stream,
@ -1566,7 +1716,7 @@ static void chunk_set_frlen_new(UndoStream* stream, Sprite *sprite, int frame)
chunk->sprite_id = sprite->id;
chunk->frame = frame;
chunk->frlen = sprite->frlens[frame];
chunk->duration = sprite->getFrameDuration(frame);
}
static void chunk_set_frlen_invert(UndoStream* stream, UndoChunkSetFrlen *chunk, int state)
@ -1575,7 +1725,7 @@ static void chunk_set_frlen_invert(UndoStream* stream, UndoChunkSetFrlen *chunk,
if (sprite != NULL) {
chunk_set_frlen_new(stream, sprite, chunk->frame);
sprite_set_frlen(sprite, chunk->frame, chunk->frlen);
sprite->setFrameDuration(chunk->frame, chunk->duration);
}
}
@ -1993,7 +2143,7 @@ static Layer* read_raw_layer(ase_uint8* raw_data)
Image* image = read_raw_image(raw_data);
raw_data += get_raw_image_size(image);
stock_replace_image(layer->getSprite()->stock, cel->image, image);
stock_replace_image(layer->getSprite()->getStock(), cel->image, image);
}
}
break;
@ -2064,7 +2214,7 @@ static ase_uint8* write_raw_layer(ase_uint8* raw_data, Layer* layer)
Cel* cel = *it;
raw_data = write_raw_cel(raw_data, cel);
Image* image = layer->getSprite()->stock->image[cel->image];
Image* image = layer->getSprite()->getStock()->image[cel->image];
assert(image != NULL);
write_raw_uint8(1);
@ -2108,7 +2258,7 @@ static int get_raw_layer_size(Layer* layer)
size += get_raw_cel_size(cel);
size++; // has image?
Image* image = layer->getSprite()->stock->image[cel->image];
Image* image = layer->getSprite()->getStock()->image[cel->image];
size += get_raw_image_size(image);
}
break;
@ -2173,7 +2323,7 @@ static ase_uint8* write_raw_palette(ase_uint8* raw_data, Palette* palette)
write_raw_uint16(palette->getFrame()); // frame
write_raw_uint16(palette->size()); // number of colors
for (int c=0; c<palette->size(); c++) {
for (size_t c=0; c<palette->size(); c++) {
color = palette->getEntry(c);
write_raw_uint32(color);
}

View File

@ -54,6 +54,7 @@ public:
Undo(Sprite* sprite);
virtual ~Undo();
};
Undo* undo_new(Sprite* sprite);
@ -98,6 +99,9 @@ void undo_set_layer(Undo* undo, Sprite* sprite);
void undo_add_palette(Undo* undo, Sprite* sprite, Palette* palette);
void undo_remove_palette(Undo* undo, Sprite* sprite, Palette* palette);
void undo_set_mask(Undo* undo, Sprite* sprite);
void undo_set_imgtype(Undo* undo, Sprite* sprite);
void undo_set_size(Undo* undo, Sprite* sprite);
void undo_set_frame(Undo* undo, Sprite* sprite);
void undo_set_frames(Undo* undo, Sprite* sprite);
void undo_set_frlen(Undo* undo, Sprite* sprite, int frame);

View File

@ -161,7 +161,7 @@ public:
, m_locked(false)
{
if (m_sprite) {
if (!m_sprite->lock_to_write())
if (!m_sprite->lockToWrite())
throw locked_sprite_exception();
m_locked = true;
@ -183,7 +183,7 @@ public:
if (m_sprite) {
m_from_reader = true;
if (!m_sprite->lock_to_write())
if (!m_sprite->lockToWrite())
throw locked_sprite_exception();
m_locked = true;
@ -198,7 +198,7 @@ protected:
{
if (m_sprite && m_locked) {
if (m_from_reader)
m_sprite->unlock_to_read();
m_sprite->unlockToRead();
else
m_sprite->unlock();
}

View File

@ -62,8 +62,8 @@ public:
}
m_proc = loop->getOpacity() == 255 ?
ink_processing[INK_OPAQUE][MID(0, loop->getSprite()->imgtype, 2)]:
ink_processing[INK_TRANSPARENT][MID(0, loop->getSprite()->imgtype, 2)];
ink_processing[INK_OPAQUE][MID(0, loop->getSprite()->getImgType(), 2)]:
ink_processing[INK_TRANSPARENT][MID(0, loop->getSprite()->getImgType(), 2)];
}
void inkHline(int x1, int y, int x2, IToolLoop* loop)
@ -157,7 +157,7 @@ public:
switch (m_type) {
case Eraser:
m_proc = ink_processing[INK_OPAQUE][MID(0, loop->getSprite()->imgtype, 2)];
m_proc = ink_processing[INK_OPAQUE][MID(0, loop->getSprite()->getImgType(), 2)];
// TODO app_get_color_to_clear_layer should receive the context as parameter
loop->setPrimaryColor(app_get_color_to_clear_layer(loop->getLayer()));
@ -165,7 +165,7 @@ public:
break;
case ReplaceFgWithBg:
m_proc = ink_processing[INK_REPLACE][MID(0, loop->getSprite()->imgtype, 2)];
m_proc = ink_processing[INK_REPLACE][MID(0, loop->getSprite()->getImgType(), 2)];
loop->setPrimaryColor(get_color_for_layer(loop->getLayer(),
loop->getContext()->getSettings()->getFgColor()));
@ -174,7 +174,7 @@ public:
break;
case ReplaceBgWithFg:
m_proc = ink_processing[INK_REPLACE][MID(0, loop->getSprite()->imgtype, 2)];
m_proc = ink_processing[INK_REPLACE][MID(0, loop->getSprite()->getImgType(), 2)];
loop->setPrimaryColor(get_color_for_layer(loop->getLayer(),
loop->getContext()->getSettings()->getBgColor()));
@ -201,7 +201,7 @@ public:
void prepareInk(IToolLoop* loop)
{
m_proc = ink_processing[INK_BLUR][MID(0, loop->getSprite()->imgtype, 2)];
m_proc = ink_processing[INK_BLUR][MID(0, loop->getSprite()->getImgType(), 2)];
}
void inkHline(int x1, int y, int x2, IToolLoop* loop)
@ -221,7 +221,7 @@ public:
void prepareInk(IToolLoop* loop)
{
m_proc = ink_processing[INK_JUMBLE][MID(0, loop->getSprite()->imgtype, 2)];
m_proc = ink_processing[INK_JUMBLE][MID(0, loop->getSprite()->getImgType(), 2)];
}
void inkHline(int x1, int y, int x2, IToolLoop* loop)
@ -258,11 +258,11 @@ public:
m_modify_selection = state;
if (state) {
if (undo_is_enabled(loop->getSprite()->undo))
undo_set_mask(loop->getSprite()->undo, loop->getSprite());
if (undo_is_enabled(loop->getSprite()->getUndo()))
undo_set_mask(loop->getSprite()->getUndo(), loop->getSprite());
loop->getMask()->freeze();
loop->getMask()->reserve(0, 0, loop->getSprite()->w, loop->getSprite()->h);
loop->getMask()->reserve(0, 0, loop->getSprite()->getWidth(), loop->getSprite()->getHeight());
}
else {
loop->getMask()->unfreeze();

View File

@ -50,7 +50,7 @@ void UIContext::on_add_sprite(Sprite* sprite)
// add the tab for this sprite
tabs_append_tab(app_get_tabsbar(),
get_filename(sprite->filename), sprite);
get_filename(sprite->getFilename()), sprite);
// rebuild the menu list of sprites
app_realloc_sprite_list();

View File

@ -49,11 +49,11 @@ Undoable::Undoable(SpriteWriter& sprite, const char* label)
m_sprite = sprite;
m_committed = false;
m_enabled_flag = undo_is_enabled(m_sprite->undo);
m_enabled_flag = undo_is_enabled(m_sprite->getUndo());
if (is_enabled()) {
undo_set_label(m_sprite->undo, label);
undo_open(m_sprite->undo);
undo_set_label(m_sprite->getUndo(), label);
undo_open(m_sprite->getUndo());
}
}
@ -61,16 +61,16 @@ Undoable::~Undoable()
{
if (is_enabled()) {
// close the undo information
undo_close(m_sprite->undo);
undo_close(m_sprite->getUndo());
// if it isn't committed, we have to rollback all changes
if (!m_committed) {
// undo the group of operations
undo_do_undo(m_sprite->undo);
undo_do_undo(m_sprite->getUndo());
// clear the redo (sorry to the user, here we lost the old redo
// information)
undo_clear_redo(m_sprite->undo);
undo_clear_redo(m_sprite->getUndo());
}
}
}
@ -91,11 +91,12 @@ void Undoable::set_number_of_frames(int frames)
{
assert(frames >= 1);
// increment frames counter in the sprite
// Save in undo the current totalFrames property
if (is_enabled())
undo_set_frames(m_sprite->undo, m_sprite);
undo_set_frames(m_sprite->getUndo(), m_sprite);
sprite_set_frames(m_sprite, frames);
// Change the property
m_sprite->setTotalFrames(frames);
}
void Undoable::set_current_frame(int frame)
@ -103,9 +104,9 @@ void Undoable::set_current_frame(int frame)
assert(frame >= 0);
if (is_enabled())
undo_int(m_sprite->undo, m_sprite, &m_sprite->frame);
undo_set_frame(m_sprite->getUndo(), m_sprite);
sprite_set_frame(m_sprite, frame);
m_sprite->setCurrentFrame(frame);
}
/**
@ -117,9 +118,9 @@ void Undoable::set_current_frame(int frame)
void Undoable::set_current_layer(Layer* layer)
{
if (is_enabled())
undo_set_layer(m_sprite->undo, m_sprite);
undo_set_layer(m_sprite->getUndo(), m_sprite);
sprite_set_layer(m_sprite, layer);
m_sprite->setCurrentLayer(layer);
}
void Undoable::set_sprite_size(int w, int h)
@ -127,42 +128,44 @@ void Undoable::set_sprite_size(int w, int h)
assert(w > 0);
assert(h > 0);
if (is_enabled()) {
undo_int(m_sprite->undo, m_sprite, &m_sprite->w);
undo_int(m_sprite->undo, m_sprite, &m_sprite->h);
}
if (is_enabled())
undo_set_size(m_sprite->getUndo(), m_sprite);
sprite_set_size(m_sprite, w, h);
m_sprite->setSize(w, h);
}
void Undoable::crop_sprite(int x, int y, int w, int h, int bgcolor)
{
set_sprite_size(w, h);
displace_layers(m_sprite->get_folder(), -x, -y);
displace_layers(m_sprite->getFolder(), -x, -y);
Layer *background_layer = sprite_get_background_layer(m_sprite);
Layer *background_layer = m_sprite->getBackgroundLayer();
if (background_layer)
crop_layer(background_layer, 0, 0, m_sprite->w, m_sprite->h, bgcolor);
crop_layer(background_layer, 0, 0, m_sprite->getWidth(), m_sprite->getHeight(), bgcolor);
if (!m_sprite->mask->is_empty())
set_mask_position(m_sprite->mask->x-x, m_sprite->mask->y-y);
if (!m_sprite->getMask()->is_empty())
set_mask_position(m_sprite->getMask()->x-x, m_sprite->getMask()->y-y);
}
void Undoable::autocrop_sprite(int bgcolor)
{
int old_frame = m_sprite->frame;
int old_frame = m_sprite->getCurrentFrame();
int x1, y1, x2, y2;
int u1, v1, u2, v2;
x1 = y1 = INT_MAX;
x2 = y2 = INT_MIN;
Image* image = image_new(m_sprite->imgtype, m_sprite->w, m_sprite->h);
Image* image = image_new(m_sprite->getImgType(),
m_sprite->getWidth(),
m_sprite->getHeight());
for (int frame=0; frame<m_sprite->getTotalFrames(); ++frame) {
m_sprite->setCurrentFrame(frame);
for (m_sprite->frame=0; m_sprite->frame<m_sprite->frames; m_sprite->frame++) {
image_clear(image, 0);
sprite_render(m_sprite, image, 0, 0);
m_sprite->render(image, 0, 0);
// TODO configurable (what color pixel to use as "refpixel",
// here we are using the top-left pixel by default)
@ -174,7 +177,7 @@ void Undoable::autocrop_sprite(int bgcolor)
y2 = MAX(y2, v2);
}
}
m_sprite->frame = old_frame;
m_sprite->setCurrentFrame(old_frame);
image_free(image);
@ -194,41 +197,40 @@ void Undoable::set_imgtype(int new_imgtype, int dithering_method)
Image *new_image;
int c;
if (m_sprite->imgtype == new_imgtype)
if (m_sprite->getImgType() == new_imgtype)
return;
/* change imgtype of the stock of images */
if (is_enabled())
undo_int(m_sprite->undo, (GfxObj *)m_sprite->stock, &m_sprite->stock->imgtype);
undo_int(m_sprite->getUndo(), m_sprite->getStock(), &m_sprite->getStock()->imgtype);
m_sprite->stock->imgtype = new_imgtype;
m_sprite->getStock()->imgtype = new_imgtype;
for (c=0; c<m_sprite->stock->nimage; c++) {
old_image = stock_get_image(m_sprite->stock, c);
for (c=0; c<m_sprite->getStock()->nimage; c++) {
old_image = stock_get_image(m_sprite->getStock(), c);
if (!old_image)
continue;
new_image = image_set_imgtype(old_image, new_imgtype, dithering_method,
rgb_map,
/* TODO check this out */
sprite_get_palette(m_sprite,
m_sprite->frame));
// TODO check this out
m_sprite->getCurrentPalette());
if (!new_image)
return; /* TODO error handling: not enough memory!
we should undo all work done */
if (is_enabled())
undo_replace_image(m_sprite->undo, m_sprite->stock, c);
undo_replace_image(m_sprite->getUndo(), m_sprite->getStock(), c);
image_free(old_image);
stock_replace_image(m_sprite->stock, c, new_image);
stock_replace_image(m_sprite->getStock(), c, new_image);
}
/* change "sprite.imgtype" field */
if (is_enabled())
undo_int(m_sprite->undo, m_sprite, &m_sprite->imgtype);
undo_set_imgtype(m_sprite->getUndo(), m_sprite);
m_sprite->imgtype = new_imgtype;
m_sprite->setImgType(new_imgtype);
// change "sprite.palette"
if (new_imgtype == IMAGE_GRAYSCALE) {
@ -237,16 +239,16 @@ void Undoable::set_imgtype(int new_imgtype, int dithering_method)
JLink link;
// Save all palettes
JI_LIST_FOR_EACH(m_sprite->palettes, link) {
JI_LIST_FOR_EACH(m_sprite->getPalettes(), link) {
palette = reinterpret_cast<Palette*>(link->data);
undo_remove_palette(m_sprite->undo, m_sprite, palette);
undo_remove_palette(m_sprite->getUndo(), m_sprite, palette);
}
}
std::auto_ptr<Palette> graypal(Palette::createGrayscale());
sprite_reset_palettes(m_sprite);
sprite_set_palette(m_sprite, graypal.get(), true);
m_sprite->resetPalettes();
m_sprite->setPalette(graypal.get(), true);
}
}
@ -261,10 +263,10 @@ int Undoable::add_image_in_stock(Image* image)
assert(image);
// add the image in the stock
int image_index = stock_add_image(m_sprite->stock, image);
int image_index = stock_add_image(m_sprite->getStock(), image);
if (is_enabled())
undo_add_image(m_sprite->undo, m_sprite->stock, image_index);
undo_add_image(m_sprite->getUndo(), m_sprite->getStock(), image_index);
return image_index;
}
@ -276,27 +278,27 @@ void Undoable::remove_image_from_stock(int image_index)
{
assert(image_index >= 0);
Image* image = stock_get_image(m_sprite->stock, image_index);
Image* image = stock_get_image(m_sprite->getStock(), image_index);
assert(image);
if (is_enabled())
undo_remove_image(m_sprite->undo, m_sprite->stock, image_index);
undo_remove_image(m_sprite->getUndo(), m_sprite->getStock(), image_index);
stock_remove_image(m_sprite->stock, image);
stock_remove_image(m_sprite->getStock(), image);
image_free(image);
}
void Undoable::replace_stock_image(int image_index, Image* new_image)
{
// get the current image in the 'image_index' position
Image* old_image = stock_get_image(m_sprite->stock, image_index);
Image* old_image = stock_get_image(m_sprite->getStock(), image_index);
assert(old_image);
// replace the image in the stock
if (is_enabled())
undo_replace_image(m_sprite->undo, m_sprite->stock, image_index);
undo_replace_image(m_sprite->getUndo(), m_sprite->getStock(), image_index);
stock_replace_image(m_sprite->stock, image_index, new_image);
stock_replace_image(m_sprite->getStock(), image_index, new_image);
// destroy the old image
image_free(old_image);
@ -315,9 +317,9 @@ Layer* Undoable::new_layer()
// add the layer in the sprite set
if (is_enabled())
undo_add_layer(m_sprite->undo, m_sprite->get_folder(), layer);
undo_add_layer(m_sprite->getUndo(), m_sprite->getFolder(), layer);
m_sprite->get_folder()->add_layer(layer);
m_sprite->getFolder()->add_layer(layer);
// select the new layer
set_current_layer(layer);
@ -335,7 +337,7 @@ void Undoable::remove_layer(Layer* layer)
LayerFolder* parent = layer->get_parent();
// if the layer to be removed is the selected layer
if (layer == m_sprite->layer) {
if (layer == m_sprite->getCurrentLayer()) {
Layer* layer_select = NULL;
// select: previous layer, or next layer, or parent(if it is not the
@ -344,7 +346,7 @@ void Undoable::remove_layer(Layer* layer)
layer_select = layer->get_prev();
else if (layer->get_next())
layer_select = layer->get_next();
else if (parent != m_sprite->get_folder())
else if (parent != m_sprite->getFolder())
layer_select = parent;
// select other layer
@ -353,7 +355,7 @@ void Undoable::remove_layer(Layer* layer)
// remove the layer
if (is_enabled())
undo_remove_layer(m_sprite->undo, layer);
undo_remove_layer(m_sprite->getUndo(), layer);
parent->remove_layer(layer);
@ -364,7 +366,7 @@ void Undoable::remove_layer(Layer* layer)
void Undoable::move_layer_after(Layer* layer, Layer* after_this)
{
if (is_enabled())
undo_move_layer(m_sprite->undo, layer);
undo_move_layer(m_sprite->getUndo(), layer);
layer->get_parent()->move_layer(layer, after_this);
}
@ -418,11 +420,13 @@ void Undoable::background_from_layer(LayerImage* layer, int bgcolor)
assert(layer->is_readable());
assert(layer->is_writable());
assert(layer->getSprite() == m_sprite);
assert(sprite_get_background_layer(m_sprite) == NULL);
assert(m_sprite->getBackgroundLayer() == NULL);
// create a temporary image to draw each frame of the new
// `Background' layer
std::auto_ptr<Image> bg_image_wrap(image_new(m_sprite->imgtype, m_sprite->w, m_sprite->h));
std::auto_ptr<Image> bg_image_wrap(image_new(m_sprite->getImgType(),
m_sprite->getWidth(),
m_sprite->getHeight()));
Image* bg_image = bg_image_wrap.get();
CelIterator it = layer->get_cel_begin();
@ -431,10 +435,10 @@ void Undoable::background_from_layer(LayerImage* layer, int bgcolor)
for (; it != end; ++it) {
Cel* cel = *it;
assert((cel->image > 0) &&
(cel->image < m_sprite->stock->nimage));
(cel->image < m_sprite->getStock()->nimage));
// get the image from the sprite's stock of images
Image* cel_image = stock_get_image(m_sprite->stock, cel->image);
Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image);
assert(cel_image);
image_clear(bg_image, bgcolor);
@ -451,7 +455,7 @@ void Undoable::background_from_layer(LayerImage* layer, int bgcolor)
if (bg_image->w == cel_image->w &&
bg_image->h == cel_image->h) {
if (is_enabled())
undo_image(m_sprite->undo, cel_image, 0, 0, cel_image->w, cel_image->h);
undo_image(m_sprite->getUndo(), cel_image, 0, 0, cel_image->w, cel_image->h);
image_copy(cel_image, bg_image, 0, 0);
}
@ -461,10 +465,10 @@ void Undoable::background_from_layer(LayerImage* layer, int bgcolor)
}
// Fill all empty cels with a flat-image filled with bgcolor
for (int frame=0; frame<m_sprite->frames; frame++) {
for (int frame=0; frame<m_sprite->getTotalFrames(); frame++) {
Cel* cel = layer->get_cel(frame);
if (!cel) {
Image* cel_image = image_new(m_sprite->imgtype, m_sprite->w, m_sprite->h);
Image* cel_image = image_new(m_sprite->getImgType(), m_sprite->getWidth(), m_sprite->getHeight());
image_clear(cel_image, bgcolor);
// Add the new image in the stock
@ -481,25 +485,25 @@ void Undoable::background_from_layer(LayerImage* layer, int bgcolor)
void Undoable::layer_from_background()
{
assert(sprite_get_background_layer(m_sprite) != NULL);
assert(m_sprite->layer != NULL);
assert(m_sprite->layer->is_image());
assert(m_sprite->layer->is_readable());
assert(m_sprite->layer->is_writable());
assert(m_sprite->layer->is_background());
assert(m_sprite->getBackgroundLayer() != NULL);
assert(m_sprite->getCurrentLayer() != NULL);
assert(m_sprite->getCurrentLayer()->is_image());
assert(m_sprite->getCurrentLayer()->is_readable());
assert(m_sprite->getCurrentLayer()->is_writable());
assert(m_sprite->getCurrentLayer()->is_background());
if (is_enabled()) {
undo_data(m_sprite->undo,
m_sprite->layer,
m_sprite->layer->flags_addr(),
sizeof(*m_sprite->layer->flags_addr()));
undo_data(m_sprite->getUndo(),
m_sprite->getCurrentLayer(),
m_sprite->getCurrentLayer()->flags_addr(),
sizeof(*m_sprite->getCurrentLayer()->flags_addr()));
undo_set_layer_name(m_sprite->undo, m_sprite->layer);
undo_set_layer_name(m_sprite->getUndo(), m_sprite->getCurrentLayer());
}
m_sprite->layer->set_background(false);
m_sprite->layer->set_moveable(true);
m_sprite->layer->set_name("Layer 0");
m_sprite->getCurrentLayer()->set_background(false);
m_sprite->getCurrentLayer()->set_moveable(true);
m_sprite->getCurrentLayer()->set_name("Layer 0");
}
void Undoable::flatten_layers(int bgcolor)
@ -509,42 +513,44 @@ void Undoable::flatten_layers(int bgcolor)
int frame;
// create a temporary image
std::auto_ptr<Image> image_wrap(image_new(m_sprite->imgtype, m_sprite->w, m_sprite->h));
std::auto_ptr<Image> image_wrap(image_new(m_sprite->getImgType(),
m_sprite->getWidth(),
m_sprite->getHeight()));
Image* image = image_wrap.get();
/* get the background layer from the sprite */
LayerImage* background = sprite_get_background_layer(m_sprite);
LayerImage* background = m_sprite->getBackgroundLayer();
if (!background) {
/* if there aren't a background layer we must to create the background */
background = new LayerImage(m_sprite);
if (is_enabled())
undo_add_layer(m_sprite->undo, m_sprite->get_folder(), background);
undo_add_layer(m_sprite->getUndo(), m_sprite->getFolder(), background);
m_sprite->get_folder()->add_layer(background);
m_sprite->getFolder()->add_layer(background);
if (is_enabled())
undo_move_layer(m_sprite->undo, background);
undo_move_layer(m_sprite->getUndo(), background);
background->configure_as_background();
}
/* copy all frames to the background */
for (frame=0; frame<m_sprite->frames; frame++) {
for (frame=0; frame<m_sprite->getTotalFrames(); frame++) {
/* clear the image and render this frame */
image_clear(image, bgcolor);
layer_render(m_sprite->get_folder(), image, 0, 0, frame);
layer_render(m_sprite->getFolder(), image, 0, 0, frame);
cel = background->get_cel(frame);
if (cel) {
cel_image = m_sprite->stock->image[cel->image];
cel_image = m_sprite->getStock()->image[cel->image];
assert(cel_image != NULL);
/* we have to save the current state of `cel_image' in the undo */
if (is_enabled()) {
Dirty* dirty = dirty_new_from_differences(cel_image, image);
dirty_save_image_data(dirty);
undo_dirty(m_sprite->undo, dirty);
undo_dirty(m_sprite->getUndo(), dirty);
}
}
else {
@ -554,7 +560,7 @@ void Undoable::flatten_layers(int bgcolor)
/* TODO error handling: if (!cel_image) { ... } */
/* here we create the new cel (with the new image `cel_image') */
cel = cel_new(frame, stock_add_image(m_sprite->stock, cel_image));
cel = cel_new(frame, stock_add_image(m_sprite->getStock(), cel_image));
/* TODO error handling: if (!cel) { ... } */
/* and finally we add the cel in the background */
@ -565,15 +571,15 @@ void Undoable::flatten_layers(int bgcolor)
}
/* select the background */
if (m_sprite->layer != background) {
if (m_sprite->getCurrentLayer() != background) {
if (is_enabled())
undo_set_layer(m_sprite->undo, m_sprite);
undo_set_layer(m_sprite->getUndo(), m_sprite);
sprite_set_layer(m_sprite, background);
m_sprite->setCurrentLayer(background);
}
/* remove old layers */
LayerList layers = m_sprite->get_folder()->get_layers_list();
LayerList layers = m_sprite->getFolder()->get_layers_list();
LayerIterator it = layers.begin();
LayerIterator end = layers.end();
@ -583,9 +589,9 @@ void Undoable::flatten_layers(int bgcolor)
// remove the layer
if (is_enabled())
undo_remove_layer(m_sprite->undo, old_layer);
undo_remove_layer(m_sprite->getUndo(), old_layer);
m_sprite->get_folder()->remove_layer(old_layer);
m_sprite->getFolder()->remove_layer(old_layer);
// destroy the layer
delete old_layer;
@ -596,9 +602,9 @@ void Undoable::flatten_layers(int bgcolor)
void Undoable::configure_layer_as_background(LayerImage* layer)
{
if (is_enabled()) {
undo_data(m_sprite->undo, layer, layer->flags_addr(), sizeof(*layer->flags_addr()));
undo_set_layer_name(m_sprite->undo, layer);
undo_move_layer(m_sprite->undo, layer);
undo_data(m_sprite->getUndo(), layer, layer->flags_addr(), sizeof(*layer->flags_addr()));
undo_set_layer_name(m_sprite->getUndo(), layer);
undo_move_layer(m_sprite->getUndo(), layer);
}
layer->configure_as_background();
@ -607,14 +613,14 @@ void Undoable::configure_layer_as_background(LayerImage* layer)
void Undoable::new_frame()
{
// add a new cel to every layer
new_frame_for_layer(m_sprite->get_folder(),
m_sprite->frame+1);
new_frame_for_layer(m_sprite->getFolder(),
m_sprite->getCurrentFrame()+1);
// increment frames counter in the sprite
set_number_of_frames(m_sprite->frames+1);
set_number_of_frames(m_sprite->getTotalFrames()+1);
// go to next frame (the new one)
set_current_frame(m_sprite->frame+1);
set_current_frame(m_sprite->getCurrentFrame()+1);
}
void Undoable::new_frame_for_layer(Layer* layer, int frame)
@ -626,7 +632,7 @@ void Undoable::new_frame_for_layer(Layer* layer, int frame)
case GFXOBJ_LAYER_IMAGE:
// displace all cels in '>=frame' to the next frame
for (int c=m_sprite->frames-1; c>=frame; --c) {
for (int c=m_sprite->getTotalFrames()-1; c>=frame; --c) {
Cel* cel = static_cast<LayerImage*>(layer)->get_cel(c);
if (cel)
set_cel_frame_position(cel, cel->frame+1);
@ -651,23 +657,19 @@ void Undoable::remove_frame(int frame)
{
assert(frame >= 0);
// remove cels from this frame (and displace one position backward
// Remove cels from this frame (and displace one position backward
// all next frames)
remove_frame_of_layer(m_sprite->get_folder(), frame);
remove_frame_of_layer(m_sprite->getFolder(), frame);
/* decrement frames counter in the sprite */
if (is_enabled())
undo_set_frames(m_sprite->undo, m_sprite);
// New value for totalFrames propety
int newTotalFrames = m_sprite->getTotalFrames()-1;
sprite_set_frames(m_sprite, m_sprite->frames-1);
// Move backward if we will be outside the range of frames
if (m_sprite->getCurrentFrame() >= newTotalFrames)
set_current_frame(newTotalFrames-1);
/* move backward if we are outside the range of frames */
if (m_sprite->frame >= m_sprite->frames) {
if (is_enabled())
undo_int(m_sprite->undo, m_sprite, &m_sprite->frame);
sprite_set_frame(m_sprite, m_sprite->frames-1);
}
// Decrement frames counter in the sprite
set_number_of_frames(newTotalFrames);
}
void Undoable::remove_frame_of_layer(Layer* layer, int frame)
@ -681,7 +683,7 @@ void Undoable::remove_frame_of_layer(Layer* layer, int frame)
if (Cel* cel = static_cast<LayerImage*>(layer)->get_cel(frame))
remove_cel(static_cast<LayerImage*>(layer), cel);
for (++frame; frame<m_sprite->frames; ++frame)
for (++frame; frame<m_sprite->getTotalFrames(); ++frame)
if (Cel* cel = static_cast<LayerImage*>(layer)->get_cel(frame))
set_cel_frame_position(cel, cel->frame-1);
break;
@ -708,7 +710,7 @@ void Undoable::copy_previous_frame(Layer* layer, int frame)
// create a copy of the previous cel
Cel* src_cel = static_cast<LayerImage*>(layer)->get_cel(frame-1);
Image* src_image = src_cel ? stock_get_image(m_sprite->stock,
Image* src_image = src_cel ? stock_get_image(m_sprite->getStock(),
src_cel->image):
NULL;
@ -737,7 +739,7 @@ void Undoable::add_cel(LayerImage* layer, Cel* cel)
assert(cel);
if (is_enabled())
undo_add_cel(m_sprite->undo, layer, cel);
undo_add_cel(m_sprite->getUndo(), layer, cel);
layer->add_cel(cel);
}
@ -750,7 +752,7 @@ void Undoable::remove_cel(LayerImage* layer, Cel* cel)
// find if the image that use the cel to remove, is used by
// another cels
bool used = false;
for (int frame=0; frame<m_sprite->frames; ++frame) {
for (int frame=0; frame<m_sprite->getTotalFrames(); ++frame) {
Cel* it = layer->get_cel(frame);
if (it && it != cel && it->image == cel->image) {
used = true;
@ -764,7 +766,7 @@ void Undoable::remove_cel(LayerImage* layer, Cel* cel)
remove_image_from_stock(cel->image);
if (is_enabled())
undo_remove_cel(m_sprite->undo, layer, cel);
undo_remove_cel(m_sprite->getUndo(), layer, cel);
// remove the cel from the layer
layer->remove_cel(cel);
@ -779,7 +781,7 @@ void Undoable::set_cel_frame_position(Cel* cel, int frame)
assert(frame >= 0);
if (is_enabled())
undo_int(m_sprite->undo, cel, &cel->frame);
undo_int(m_sprite->getUndo(), cel, &cel->frame);
cel->frame = frame;
}
@ -789,8 +791,8 @@ void Undoable::set_cel_position(Cel* cel, int x, int y)
assert(cel);
if (is_enabled()) {
undo_int(m_sprite->undo, cel, &cel->x);
undo_int(m_sprite->undo, cel, &cel->y);
undo_int(m_sprite->getUndo(), cel, &cel->x);
undo_int(m_sprite->getUndo(), cel, &cel->y);
}
cel->x = x;
@ -800,53 +802,49 @@ void Undoable::set_cel_position(Cel* cel, int x, int y)
void Undoable::set_frame_duration(int frame, int msecs)
{
if (is_enabled())
undo_set_frlen(m_sprite->undo, m_sprite, frame);
undo_set_frlen(m_sprite->getUndo(), m_sprite, frame);
sprite_set_frlen(m_sprite, frame, msecs);
m_sprite->setFrameDuration(frame, msecs);
}
void Undoable::set_constant_frame_rate(int msecs)
{
if (is_enabled()) {
for (int fr=0; fr<m_sprite->frames; ++fr)
undo_set_frlen(m_sprite->undo, m_sprite, fr);
for (int fr=0; fr<m_sprite->getTotalFrames(); ++fr)
undo_set_frlen(m_sprite->getUndo(), m_sprite, fr);
}
sprite_set_speed(m_sprite, msecs);
m_sprite->setDurationForAllFrames(msecs);
}
void Undoable::move_frame_before(int frame, int before_frame)
{
if (frame != before_frame &&
frame >= 0 &&
frame < m_sprite->frames &&
frame < m_sprite->getTotalFrames() &&
before_frame >= 0 &&
before_frame < m_sprite->frames) {
before_frame < m_sprite->getTotalFrames()) {
// change the frame-lengths...
int frlen_aux = m_sprite->frlens[frame];
int frlen_aux = m_sprite->getFrameDuration(frame);
// moving the frame to the future
if (frame < before_frame) {
frlen_aux = m_sprite->frlens[frame];
for (int c=frame; c<before_frame-1; c++)
set_frame_duration(c, m_sprite->frlens[c+1]);
set_frame_duration(c, m_sprite->getFrameDuration(c+1));
set_frame_duration(before_frame-1, frlen_aux);
}
// moving the frame to the past
else if (before_frame < frame) {
frlen_aux = m_sprite->frlens[frame];
for (int c=frame; c>before_frame; c--)
set_frame_duration(c, m_sprite->frlens[c-1]);
set_frame_duration(c, m_sprite->getFrameDuration(c-1));
set_frame_duration(before_frame, frlen_aux);
}
// change the cels of position...
move_frame_before_layer(m_sprite->get_folder(), frame, before_frame);
move_frame_before_layer(m_sprite->getFolder(), frame, before_frame);
}
}
@ -905,15 +903,15 @@ void Undoable::move_frame_before_layer(Layer* layer, int frame, int before_frame
Cel* Undoable::get_current_cel()
{
if (m_sprite->layer && m_sprite->layer->is_image())
return static_cast<LayerImage*>(m_sprite->layer)->get_cel(m_sprite->frame);
if (m_sprite->getCurrentLayer() && m_sprite->getCurrentLayer()->is_image())
return static_cast<LayerImage*>(m_sprite->getCurrentLayer())->get_cel(m_sprite->getCurrentFrame());
else
return NULL;
}
void Undoable::crop_cel(Cel* cel, int x, int y, int w, int h, int bgcolor)
{
Image* cel_image = stock_get_image(m_sprite->stock, cel->image);
Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image);
assert(cel_image);
// create the new image through a crop
@ -928,8 +926,8 @@ void Undoable::crop_cel(Cel* cel, int x, int y, int w, int h, int bgcolor)
Image* Undoable::get_cel_image(Cel* cel)
{
if (cel && cel->image >= 0 && cel->image < m_sprite->stock->nimage)
return m_sprite->stock->image[cel->image];
if (cel && cel->image >= 0 && cel->image < m_sprite->getStock()->nimage)
return m_sprite->getStock()->image[cel->image];
else
return NULL;
}
@ -947,11 +945,11 @@ void Undoable::clear_mask(int bgcolor)
// if the mask is empty then we have to clear the entire image
// in the cel
if (m_sprite->mask->is_empty()) {
if (m_sprite->getMask()->is_empty()) {
// if the layer is the background then we clear the image
if (m_sprite->layer->is_background()) {
if (m_sprite->getCurrentLayer()->is_background()) {
if (is_enabled())
undo_image(m_sprite->undo, image, 0, 0, image->w, image->h);
undo_image(m_sprite->getUndo(), image, 0, 0, image->w, image->h);
// clear all
image_clear(image, bgcolor);
@ -959,32 +957,32 @@ void Undoable::clear_mask(int bgcolor)
// if the layer is transparent we can remove the cel (and its
// associated image)
else {
remove_cel(static_cast<LayerImage*>(m_sprite->layer), cel);
remove_cel(static_cast<LayerImage*>(m_sprite->getCurrentLayer()), cel);
}
}
else {
int u, v, putx, puty;
int x1 = MAX(0, m_sprite->mask->x);
int y1 = MAX(0, m_sprite->mask->y);
int x2 = MIN(image->w-1, m_sprite->mask->x+m_sprite->mask->w-1);
int y2 = MIN(image->h-1, m_sprite->mask->y+m_sprite->mask->h-1);
int x1 = MAX(0, m_sprite->getMask()->x);
int y1 = MAX(0, m_sprite->getMask()->y);
int x2 = MIN(image->w-1, m_sprite->getMask()->x+m_sprite->getMask()->w-1);
int y2 = MIN(image->h-1, m_sprite->getMask()->y+m_sprite->getMask()->h-1);
// do nothing
if (x1 > x2 || y1 > y2)
return;
if (is_enabled())
undo_image(m_sprite->undo, image, x1, y1, x2-x1+1, y2-y1+1);
undo_image(m_sprite->getUndo(), image, x1, y1, x2-x1+1, y2-y1+1);
// clear the masked zones
for (v=0; v<m_sprite->mask->h; v++) {
for (v=0; v<m_sprite->getMask()->h; v++) {
div_t d = div(0, 8);
ase_uint8* address = ((ase_uint8 **)m_sprite->mask->bitmap->line)[v]+d.quot;
ase_uint8* address = ((ase_uint8 **)m_sprite->getMask()->bitmap->line)[v]+d.quot;
for (u=0; u<m_sprite->mask->w; u++) {
for (u=0; u<m_sprite->getMask()->w; u++) {
if ((*address & (1<<d.rem))) {
putx = u + m_sprite->mask->x - cel->x;
puty = v + m_sprite->mask->y - cel->y;
putx = u + m_sprite->getMask()->x - cel->x;
puty = v + m_sprite->getMask()->y - cel->y;
image_putpixel(image, putx, puty, bgcolor);
}
@ -1000,10 +998,10 @@ void Undoable::flip_image(Image* image, int x1, int y1, int x2, int y2,
// insert the undo operation
if (is_enabled()) {
if (flip_horizontal)
undo_flip(m_sprite->undo, image, x1, y1, x2, y2, true);
undo_flip(m_sprite->getUndo(), image, x1, y1, x2, y2, true);
if (flip_vertical)
undo_flip(m_sprite->undo, image, x1, y1, x2, y2, false);
undo_flip(m_sprite->getUndo(), image, x1, y1, x2, y2, false);
}
// flip the portion of the bitmap
@ -1022,45 +1020,45 @@ void Undoable::flip_image(Image* image, int x1, int y1, int x2, int y2,
void Undoable::copy_to_current_mask(Mask* mask)
{
assert(m_sprite->mask);
assert(m_sprite->getMask());
assert(mask);
if (is_enabled())
undo_set_mask(m_sprite->undo, m_sprite);
undo_set_mask(m_sprite->getUndo(), m_sprite);
mask_copy(m_sprite->mask, mask);
mask_copy(m_sprite->getMask(), mask);
}
void Undoable::set_mask_position(int x, int y)
{
assert(m_sprite->mask);
assert(m_sprite->getMask());
if (is_enabled()) {
undo_int(m_sprite->undo, m_sprite->mask, &m_sprite->mask->x);
undo_int(m_sprite->undo, m_sprite->mask, &m_sprite->mask->y);
undo_int(m_sprite->getUndo(), m_sprite->getMask(), &m_sprite->getMask()->x);
undo_int(m_sprite->getUndo(), m_sprite->getMask(), &m_sprite->getMask()->y);
}
m_sprite->mask->x = x;
m_sprite->mask->y = y;
m_sprite->getMask()->x = x;
m_sprite->getMask()->y = y;
}
void Undoable::deselect_mask()
{
// Destroy the *deselected* mask
Mask* mask = sprite_request_mask(m_sprite, "*deselected*");
Mask* mask = m_sprite->requestMask("*deselected*");
if (mask) {
sprite_remove_mask(m_sprite, mask);
m_sprite->removeMask(mask);
mask_free(mask);
}
// Save the selection in the repository
mask = mask_new_copy(m_sprite->mask);
mask = mask_new_copy(m_sprite->getMask());
mask_set_name(mask, "*deselected*");
sprite_add_mask(m_sprite, mask);
m_sprite->addMask(mask);
if (undo_is_enabled(m_sprite->undo))
undo_set_mask(m_sprite->undo, m_sprite);
if (undo_is_enabled(m_sprite->getUndo()))
undo_set_mask(m_sprite->getUndo(), m_sprite);
/// Deselect the mask
mask_none(m_sprite->mask);
mask_none(m_sprite->getMask());
}

View File

@ -60,8 +60,8 @@ void move_cel(SpriteWriter& sprite)
assert(src_layer != NULL);
assert(dst_layer != NULL);
assert(src_frame >= 0 && src_frame < sprite->frames);
assert(dst_frame >= 0 && dst_frame < sprite->frames);
assert(src_frame >= 0 && src_frame < sprite->getTotalFrames());
assert(dst_frame >= 0 && dst_frame < sprite->getTotalFrames());
if (src_layer->is_background()) {
copy_cel(sprite);
@ -71,16 +71,16 @@ void move_cel(SpriteWriter& sprite)
src_cel = static_cast<LayerImage*>(src_layer)->get_cel(src_frame);
dst_cel = static_cast<LayerImage*>(dst_layer)->get_cel(dst_frame);
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Move Cel");
undo_open(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Move Cel");
undo_open(sprite->getUndo());
undo_set_layer(sprite->undo, sprite);
undo_int(sprite->undo, sprite, &sprite->frame);
undo_set_layer(sprite->getUndo(), sprite);
undo_set_frame(sprite->getUndo(), sprite);
}
sprite_set_layer(sprite, dst_layer);
sprite_set_frame(sprite, dst_frame);
sprite->setCurrentLayer(dst_layer);
sprite->setCurrentFrame(dst_frame);
/* remove the 'dst_cel' (if it exists) because it must be
replaced with 'src_cel' */
@ -90,15 +90,15 @@ void move_cel(SpriteWriter& sprite)
/* move the cel in the same layer */
if (src_cel != NULL) {
if (src_layer == dst_layer) {
if (undo_is_enabled(sprite->undo))
undo_int(sprite->undo, (GfxObj *)src_cel, &src_cel->frame);
if (undo_is_enabled(sprite->getUndo()))
undo_int(sprite->getUndo(), (GfxObj *)src_cel, &src_cel->frame);
src_cel->frame = dst_frame;
}
/* move the cel in different layers */
else {
if (undo_is_enabled(sprite->undo))
undo_remove_cel(sprite->undo, src_layer, src_cel);
if (undo_is_enabled(sprite->getUndo()))
undo_remove_cel(sprite->getUndo(), src_layer, src_cel);
static_cast<LayerImage*>(src_layer)->remove_cel(src_cel);
src_cel->frame = dst_frame;
@ -108,18 +108,18 @@ void move_cel(SpriteWriter& sprite)
image */
if (!src_layer->is_background() &&
dst_layer->is_background()) {
Image *src_image = stock_get_image(sprite->stock, src_cel->image);
Image *src_image = stock_get_image(sprite->getStock(), src_cel->image);
Image *dst_image = image_crop(src_image,
-src_cel->x,
-src_cel->y,
sprite->w,
sprite->h, 0);
sprite->getWidth(),
sprite->getHeight(), 0);
if (undo_is_enabled(sprite->undo)) {
undo_replace_image(sprite->undo, sprite->stock, src_cel->image);
undo_int(sprite->undo, (GfxObj *)src_cel, &src_cel->x);
undo_int(sprite->undo, (GfxObj *)src_cel, &src_cel->y);
undo_int(sprite->undo, (GfxObj *)src_cel, &src_cel->opacity);
if (undo_is_enabled(sprite->getUndo())) {
undo_replace_image(sprite->getUndo(), sprite->getStock(), src_cel->image);
undo_int(sprite->getUndo(), (GfxObj *)src_cel, &src_cel->x);
undo_int(sprite->getUndo(), (GfxObj *)src_cel, &src_cel->y);
undo_int(sprite->getUndo(), (GfxObj *)src_cel, &src_cel->opacity);
}
image_clear(dst_image, app_get_color_to_clear_layer(dst_layer));
@ -129,19 +129,19 @@ void move_cel(SpriteWriter& sprite)
src_cel->y = 0;
src_cel->opacity = 255;
stock_replace_image(sprite->stock, src_cel->image, dst_image);
stock_replace_image(sprite->getStock(), src_cel->image, dst_image);
image_free(src_image);
}
if (undo_is_enabled(sprite->undo))
undo_add_cel(sprite->undo, dst_layer, src_cel);
if (undo_is_enabled(sprite->getUndo()))
undo_add_cel(sprite->getUndo(), dst_layer, src_cel);
static_cast<LayerImage*>(dst_layer)->add_cel(src_cel);
}
}
if (undo_is_enabled(sprite->undo))
undo_close(sprite->undo);
if (undo_is_enabled(sprite->getUndo()))
undo_close(sprite->getUndo());
set_frame_to_handle(NULL, 0, NULL, 0);
}
@ -152,22 +152,22 @@ void copy_cel(SpriteWriter& sprite)
assert(src_layer != NULL);
assert(dst_layer != NULL);
assert(src_frame >= 0 && src_frame < sprite->frames);
assert(dst_frame >= 0 && dst_frame < sprite->frames);
assert(src_frame >= 0 && src_frame < sprite->getTotalFrames());
assert(dst_frame >= 0 && dst_frame < sprite->getTotalFrames());
src_cel = static_cast<LayerImage*>(src_layer)->get_cel(src_frame);
dst_cel = static_cast<LayerImage*>(dst_layer)->get_cel(dst_frame);
if (undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Move Cel");
undo_open(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Move Cel");
undo_open(sprite->getUndo());
undo_set_layer(sprite->undo, sprite);
undo_int(sprite->undo, sprite, &sprite->frame);
undo_set_layer(sprite->getUndo(), sprite);
undo_set_frame(sprite->getUndo(), sprite);
}
sprite_set_layer(sprite, dst_layer);
sprite_set_frame(sprite, dst_frame);
sprite->setCurrentLayer(dst_layer);
sprite->setCurrentFrame(dst_frame);
/* remove the 'dst_cel' (if it exists) because it must be
replaced with 'src_cel' */
@ -176,7 +176,7 @@ void copy_cel(SpriteWriter& sprite)
/* move the cel in the same layer */
if (src_cel != NULL) {
Image *src_image = stock_get_image(sprite->stock, src_cel->image);
Image *src_image = stock_get_image(sprite->getStock(), src_cel->image);
Image *dst_image;
int image_index;
int dst_cel_x;
@ -191,8 +191,8 @@ void copy_cel(SpriteWriter& sprite)
dst_image = image_crop(src_image,
-src_cel->x,
-src_cel->y,
sprite->w,
sprite->h, 0);
sprite->getWidth(),
sprite->getHeight(), 0);
image_clear(dst_image, app_get_color_to_clear_layer(dst_layer));
image_merge(dst_image, src_image, src_cel->x, src_cel->y, 255, BLEND_MODE_NORMAL);
@ -209,23 +209,23 @@ void copy_cel(SpriteWriter& sprite)
}
/* add the image in the stock */
image_index = stock_add_image(sprite->stock, dst_image);
if (undo_is_enabled(sprite->undo))
undo_add_image(sprite->undo, sprite->stock, image_index);
image_index = stock_add_image(sprite->getStock(), dst_image);
if (undo_is_enabled(sprite->getUndo()))
undo_add_image(sprite->getUndo(), sprite->getStock(), image_index);
/* create the new cel */
dst_cel = cel_new(dst_frame, image_index);
cel_set_position(dst_cel, dst_cel_x, dst_cel_y);
cel_set_opacity(dst_cel, dst_cel_opacity);
if (undo_is_enabled(sprite->undo))
undo_add_cel(sprite->undo, dst_layer, dst_cel);
if (undo_is_enabled(sprite->getUndo()))
undo_add_cel(sprite->getUndo(), dst_layer, dst_cel);
static_cast<LayerImage*>(dst_layer)->add_cel(dst_cel);
}
if (undo_is_enabled(sprite->undo))
undo_close(sprite->undo);
if (undo_is_enabled(sprite->getUndo()))
undo_close(sprite->getUndo());
set_frame_to_handle(NULL, 0, NULL, 0);
}
@ -241,7 +241,7 @@ static void remove_cel(Sprite* sprite, LayerImage *layer, Cel *cel)
/* find if the image that use the cel to remove, is used by
another cels */
used = false;
for (frame=0; frame<sprite->frames; ++frame) {
for (frame=0; frame<sprite->getTotalFrames(); ++frame) {
it = layer->get_cel(frame);
if (it != NULL && it != cel && it->image == cel->image) {
used = true;
@ -249,24 +249,24 @@ static void remove_cel(Sprite* sprite, LayerImage *layer, Cel *cel)
}
}
if (undo_is_enabled(sprite->undo))
undo_open(sprite->undo);
if (undo_is_enabled(sprite->getUndo()))
undo_open(sprite->getUndo());
if (!used) {
/* if the image is only used by this cel, we can remove the
image from the stock */
image = stock_get_image(sprite->stock, cel->image);
image = stock_get_image(sprite->getStock(), cel->image);
if (undo_is_enabled(sprite->undo))
undo_remove_image(sprite->undo, sprite->stock, cel->image);
if (undo_is_enabled(sprite->getUndo()))
undo_remove_image(sprite->getUndo(), sprite->getStock(), cel->image);
stock_remove_image(sprite->stock, image);
stock_remove_image(sprite->getStock(), image);
image_free(image);
}
if (undo_is_enabled(sprite->undo)) {
undo_remove_cel(sprite->undo, layer, cel);
undo_close(sprite->undo);
if (undo_is_enabled(sprite->getUndo())) {
undo_remove_cel(sprite->getUndo(), layer, cel);
undo_close(sprite->getUndo());
}
/* remove the cel */

View File

@ -139,7 +139,7 @@ static bool copy_from_sprite(const Sprite* sprite)
if (!image)
return false;
Palette* pal = sprite_get_palette(sprite, sprite->frame);
const Palette* pal = sprite->getPalette(sprite->getCurrentFrame());
set_clipboard(image, pal ? new Palette(*pal): NULL, true);
return true;
}
@ -165,7 +165,7 @@ bool clipboard::can_paste()
void clipboard::cut(SpriteWriter& sprite)
{
assert(sprite != NULL);
assert(sprite->layer != NULL);
assert(sprite->getCurrentLayer() != NULL);
if (!copy_from_sprite(sprite)) {
Console console;
@ -174,11 +174,11 @@ void clipboard::cut(SpriteWriter& sprite)
else {
{
Undoable undoable(sprite, "Cut");
undoable.clear_mask(app_get_color_to_clear_layer(sprite->layer));
undoable.clear_mask(app_get_color_to_clear_layer(sprite->getCurrentLayer()));
undoable.deselect_mask();
undoable.commit();
}
sprite_generate_mask_boundaries(sprite);
sprite->generateMaskBoundaries();
update_screen_for_sprite(sprite);
}
}
@ -222,7 +222,7 @@ void clipboard::paste(SpriteWriter& sprite)
assert(sprite != NULL);
// destination image (where to put this image)
dst_image = GetImage2(sprite, &dst_x, &dst_y, NULL);
dst_image = sprite->getCurrentImage(&dst_x, &dst_y);
if (!dst_image) {
Console console;
console.printf(_("Error: no destination image\n"));
@ -230,13 +230,12 @@ void clipboard::paste(SpriteWriter& sprite)
}
// source image (clipboard or a converted copy to the destination 'imgtype')
if (clipboard_image->imgtype == sprite->imgtype)
if (clipboard_image->imgtype == sprite->getImgType())
src_image = clipboard_image;
else {
CurrentSpriteRgbMap rgbmap;
src_image = image_set_imgtype(clipboard_image, sprite->imgtype, DITHERING_NONE,
rgb_map, sprite_get_palette(sprite,
sprite->frame));
src_image = image_set_imgtype(clipboard_image, sprite->getImgType(), DITHERING_NONE,
rgb_map, sprite->getPalette(sprite->getCurrentFrame()));
}
// do the interactive-transform loop (where the user can move the floating image)
@ -276,8 +275,8 @@ void clipboard::paste(SpriteWriter& sprite)
if (w >= 1 && h >= 1) {
/* undo region */
if (undo_is_enabled(sprite->undo))
undo_image(sprite->undo, dst_image, u1, v1, w, h);
if (undo_is_enabled(sprite->getUndo()))
undo_image(sprite->getUndo(), dst_image, u1, v1, w, h);
/* draw the transformed image */
image_parallelogram(dst_image, src_image,

View File

@ -39,46 +39,6 @@
#include "widgets/editor.h"
#include "widgets/statebar.h"
Image *GetImage(const Sprite *sprite)
{
Image *image = NULL;
if (sprite && sprite->layer && sprite->layer->is_image()) {
Cel *cel = static_cast<LayerImage*>(sprite->layer)->get_cel(sprite->frame);
if (cel) {
assert((cel->image >= 0) &&
(cel->image < sprite->stock->nimage));
image = sprite->stock->image[cel->image];
}
}
return image;
}
Image* GetImage2(const Sprite* sprite, int* x, int* y, int* opacity)
{
Image* image = NULL;
if (sprite != NULL &&
sprite->layer != NULL &&
sprite->layer->is_image()) {
Cel* cel = static_cast<LayerImage*>(sprite->layer)->get_cel(sprite->frame);
if (cel) {
assert((cel->image >= 0) &&
(cel->image < sprite->stock->nimage));
image = sprite->stock->image[cel->image];
if (x) *x = cel->x;
if (y) *y = cel->y;
if (opacity) *opacity = MID(0, cel->opacity, 255);
}
}
return image;
}
void LoadPalette(Sprite* sprite, const char *filename)
{
assert(sprite != NULL);
@ -100,8 +60,8 @@ void LoadPalette(Sprite* sprite, const char *filename)
set_current_palette(pal, false);
/* just one palette */
sprite_reset_palettes(sprite);
sprite_set_palette(sprite, pal, 0);
sprite->resetPalettes();
sprite->setPalette(pal, 0);
/* redraw the entire screen */
jmanager_refresh_screen();
@ -115,19 +75,20 @@ void LoadPalette(Sprite* sprite, const char *filename)
Image* NewImageFromMask(const Sprite* src_sprite)
{
ase_uint8 *address;
const ase_uint8* address;
int x, y, u, v, getx, gety;
Image *dst, *src = GetImage2(src_sprite, &x, &y, NULL);
Image *dst;
const Image *src = src_sprite->getCurrentImage(&x, &y);
div_t d;
assert(src_sprite);
assert(src_sprite->mask);
assert(src_sprite->mask->bitmap);
assert(src_sprite->getMask());
assert(src_sprite->getMask()->bitmap);
assert(src);
dst = image_new(src_sprite->imgtype,
src_sprite->mask->w,
src_sprite->mask->h);
dst = image_new(src_sprite->getImgType(),
src_sprite->getMask()->w,
src_sprite->getMask()->h);
if (!dst)
return NULL;
@ -135,14 +96,14 @@ Image* NewImageFromMask(const Sprite* src_sprite)
image_clear(dst, 0);
/* copy the masked zones */
for (v=0; v<src_sprite->mask->h; v++) {
for (v=0; v<src_sprite->getMask()->h; v++) {
d = div(0, 8);
address = ((ase_uint8 **)src_sprite->mask->bitmap->line)[v]+d.quot;
address = ((const ase_uint8 **)src_sprite->getMask()->bitmap->line)[v]+d.quot;
for (u=0; u<src_sprite->mask->w; u++) {
for (u=0; u<src_sprite->getMask()->w; u++) {
if ((*address & (1<<d.rem))) {
getx = u+src_sprite->mask->x-x;
gety = v+src_sprite->mask->y-y;
getx = u+src_sprite->getMask()->x-x;
gety = v+src_sprite->getMask()->y-y;
if ((getx >= 0) && (getx < src->w) &&
(gety >= 0) && (gety < src->h))
@ -163,10 +124,10 @@ int interactive_move_layer(int mode, bool use_undo, int (*callback)())
Editor* editor = current_editor;
Sprite* sprite = editor->getSprite();
assert(sprite->layer->is_image());
assert(sprite->getCurrentLayer()->is_image());
LayerImage* layer = static_cast<LayerImage*>(sprite->layer);
Cel *cel = layer->get_cel(sprite->frame);
LayerImage* layer = static_cast<LayerImage*>(sprite->getCurrentLayer());
Cel *cel = layer->get_cel(sprite->getCurrentFrame());
int start_x, new_x;
int start_y, new_y;
int start_b;
@ -227,12 +188,12 @@ int interactive_move_layer(int mode, bool use_undo, int (*callback)())
/* the position was changed */
if (!editor->editor_click_cancel()) {
if (use_undo && undo_is_enabled(sprite->undo)) {
undo_set_label(sprite->undo, "Cel Movement");
undo_open(sprite->undo);
undo_int(sprite->undo, (GfxObj *)cel, &cel->x);
undo_int(sprite->undo, (GfxObj *)cel, &cel->y);
undo_close(sprite->undo);
if (use_undo && undo_is_enabled(sprite->getUndo())) {
undo_set_label(sprite->getUndo(), "Cel Movement");
undo_open(sprite->getUndo());
undo_int(sprite->getUndo(), (GfxObj *)cel, &cel->x);
undo_int(sprite->getUndo(), (GfxObj *)cel, &cel->y);
undo_close(sprite->getUndo());
}
cel_set_position(cel, new_x, new_y);

View File

@ -28,9 +28,6 @@ class Layer;
class Sprite;
class Undo;
Image* GetImage(const Sprite* sprite);
Image* GetImage2(const Sprite* sprite, int *x, int *y, int *opacity);
void LoadPalette(Sprite* sprite, const char* filename);
Image* NewImageFromMask(const Sprite* src);

View File

@ -37,8 +37,8 @@ void sprite_quantize(Sprite *sprite)
sprite_quantize_ex(sprite, palette);
// Just one palette
sprite_reset_palettes(sprite);
sprite_set_palette(sprite, palette, false);
sprite->resetPalettes();
sprite->setPalette(palette, false);
delete palette;
}
@ -55,9 +55,9 @@ void sprite_quantize_ex(Sprite *sprite, Palette *palette)
TARGET_ALL_FRAMES, false);
if (images != NULL) {
/* add a flat image with the current sprite's frame rendered */
flat_image = image_new(sprite->imgtype, sprite->w, sprite->h);
flat_image = image_new(sprite->getImgType(), sprite->getWidth(), sprite->getHeight());
image_clear(flat_image, 0);
sprite_render(sprite, flat_image, 0, 0);
sprite->render(flat_image, 0, 0);
/* count images in the 'images' list */
c = 0;

View File

@ -278,12 +278,12 @@ Image* RenderEngine::renderSprite(Sprite* sprite,
int frame, int zoom)
{
void (*zoomed_func)(Image *, Image *, int, int, int, int, int);
LayerImage* background = sprite_get_background_layer(sprite);
LayerImage* background = sprite->getBackgroundLayer();
bool need_grid = (background != NULL ? !background->is_readable(): true);
int depth;
Image *image;
switch (sprite->imgtype) {
switch (sprite->getImgType()) {
case IMAGE_RGB:
depth = 32;
@ -305,7 +305,7 @@ Image* RenderEngine::renderSprite(Sprite* sprite,
}
/* create a temporary bitmap to draw all to it */
image = image_new(sprite->imgtype, width, height);
image = image_new(sprite->getImgType(), width, height);
if (!image)
return NULL;
@ -371,26 +371,26 @@ Image* RenderEngine::renderSprite(Sprite* sprite,
color_map = NULL;
global_opacity = 255;
renderLayer(sprite, sprite->get_folder(), image, source_x, source_y,
renderLayer(sprite, sprite->getFolder(), image, source_x, source_y,
frame, zoom, zoomed_func, true, false);
// Draw transparent layers of the previous frame with opacity=128
color_map = orig_trans_map;
global_opacity = 128;
renderLayer(sprite, sprite->get_folder(), image, source_x, source_y,
renderLayer(sprite, sprite->getFolder(), image, source_x, source_y,
frame-1, zoom, zoomed_func, false, true);
// Draw transparent layers of the current frame with opacity=255
color_map = NULL;
global_opacity = 255;
renderLayer(sprite, sprite->get_folder(), image, source_x, source_y,
renderLayer(sprite, sprite->getFolder(), image, source_x, source_y,
frame, zoom, zoomed_func, false, true);
}
// Just draw the current frame
else {
renderLayer(sprite, sprite->get_folder(), image, source_x, source_y,
renderLayer(sprite, sprite->getFolder(), image, source_x, source_y,
frame, zoom, zoomed_func, true, true);
}
@ -420,15 +420,15 @@ void RenderEngine::renderLayer(Sprite *sprite, Layer *layer, Image *image,
Image* src_image;
/* is the 'rastering_image' setted to be used with this layer? */
if ((frame == sprite->frame) &&
if ((frame == sprite->getCurrentFrame()) &&
(selected_layer == layer) &&
(rastering_image != NULL)) {
src_image = rastering_image;
}
/* if not, we use the original cel-image from the images' stock */
else if ((cel->image >= 0) &&
(cel->image < layer->getSprite()->stock->nimage))
src_image = layer->getSprite()->stock->image[cel->image];
(cel->image < layer->getSprite()->getStock()->nimage))
src_image = layer->getSprite()->getStock()->image[cel->image];
else
src_image = NULL;
@ -473,17 +473,17 @@ void RenderEngine::renderLayer(Sprite *sprite, Layer *layer, Image *image,
}
// Draw extras
if (layer == sprite->layer && sprite->get_extras() != NULL) {
int opacity = sprite->get_extras_opacity();
if (layer == sprite->getCurrentLayer() && sprite->getExtras() != NULL) {
int opacity = sprite->getExtrasOpacity();
if (zoom == 0) {
image_merge(image, sprite->get_extras(),
image_merge(image, sprite->getExtras(),
-source_x,
-source_y,
opacity, BLEND_MODE_NORMAL);
}
else {
(*zoomed_func)(image, sprite->get_extras(),
(*zoomed_func)(image, sprite->getExtras(),
-source_x,
-source_y,
opacity, BLEND_MODE_NORMAL, zoom);

View File

@ -49,7 +49,7 @@ static JList thumbnails = NULL;
static Thumbnail* thumbnail_new(const Cel *cel, BITMAP* bmp);
static void thumbnail_free(Thumbnail* thumbnail);
static void thumbnail_render(BITMAP* bmp, Image* image, bool has_alpha);
static void thumbnail_render(BITMAP* bmp, const Image* image, bool has_alpha);
void destroy_thumbnails()
{
@ -85,7 +85,7 @@ BITMAP* generate_thumbnail(const Layer* layer, const Cel* cel, const Sprite *spr
return NULL;
thumbnail_render(bmp,
stock_get_image(sprite->stock, cel->image),
stock_get_image(sprite->getStock(), cel->image),
!layer->is_background());
thumbnail = thumbnail_new(cel, bmp);
@ -118,7 +118,7 @@ static void thumbnail_free(Thumbnail* thumbnail)
jfree(thumbnail);
}
static void thumbnail_render(BITMAP* bmp, Image* image, bool has_alpha)
static void thumbnail_render(BITMAP* bmp, const Image* image, bool has_alpha)
{
register int c, x, y;
int w, h, x1, y1;
@ -179,9 +179,9 @@ static void thumbnail_render(BITMAP* bmp, Image* image, bool has_alpha)
for (x=0; x<w; x++) {
c = image_getpixel(image, x*scale, y*scale);
if (c != 0) {
assert(c >= 0 && c < pal->size());
assert(c >= 0 && (size_t)c < pal->size());
c = pal->getEntry(MID(0, c, pal->size()-1));
c = pal->getEntry(MID(0, (size_t)c, pal->size()-1));
putpixel(bmp, x1+x, y1+y, makecol(_rgba_getr(c),
_rgba_getg(c),
_rgba_getb(c)));
@ -221,9 +221,9 @@ static void thumbnail_render(BITMAP* bmp, Image* image, bool has_alpha)
for (x=0; x<w; x++) {
c = image_getpixel(image, x*scale, y*scale);
assert(c >= 0 && c < pal->size());
assert(c >= 0 && (size_t)c < pal->size());
c = pal->getEntry(MID(0, c, pal->size()-1));
c = pal->getEntry(MID(0, (size_t)c, pal->size()-1));
putpixel(bmp, x1+x, y1+y, makecol(_rgba_getr(c),
_rgba_getg(c),
_rgba_getb(c)));

View File

@ -176,8 +176,8 @@ static bool colorbutton_msg_proc(JWidget widget, JMessage msg)
x = msg->mouse.x;
y = msg->mouse.y;
editor->screen_to_editor(x, y, &x, &y);
imgcolor = sprite_getpixel(sprite, x, y);
tmp = color_from_image(sprite->imgtype, imgcolor);
imgcolor = sprite->getPixel(x, y);
tmp = color_from_image(sprite->getImgType(), imgcolor);
if (color_type(tmp) != COLOR_TYPE_MASK)
color = tmp;

View File

@ -274,21 +274,21 @@ void Editor::editor_draw_cursor(int x, int y, bool refresh)
Pen* pen = editor_get_current_pen();
// Set the opacity for the 'extra' layer used to show the cursor preview
m_sprite->set_extras_opacity(tool_settings->getOpacity());
m_sprite->setExtrasOpacity(tool_settings->getOpacity());
// Create the 'extra' image/layer
m_sprite->prepare_extra();
m_sprite->prepareExtra();
// In 'indexed' images, if the current color is 0, we have to use
// a different mask color (different from 0) to draw the extra layer
if (m_sprite->imgtype == IMAGE_INDEXED && pen_color == 0) {
if (m_sprite->getImgType() == IMAGE_INDEXED && pen_color == 0) {
new_mask_color = 1;
}
else {
new_mask_color = 0;
}
Image* extras = m_sprite->get_extras();
Image* extras = m_sprite->getExtras();
if (extras->mask_color != new_mask_color)
image_clear(extras, extras->mask_color = new_mask_color);
image_putpen(extras, pen, x, y, pen_color, extras->mask_color);
@ -405,10 +405,10 @@ void Editor::editor_clean_cursor(bool refresh)
m_state != EDITOR_STATE_DRAWING) {
Pen* pen = editor_get_current_pen();
m_sprite->prepare_extra();
image_putpen(m_sprite->get_extras(), pen, x, y,
m_sprite->get_extras()->mask_color,
m_sprite->get_extras()->mask_color);
m_sprite->prepareExtra();
image_putpen(m_sprite->getExtras(), pen, x, y,
m_sprite->getExtras()->mask_color,
m_sprite->getExtras()->mask_color);
if (refresh) {
editors_draw_sprite(m_sprite,

View File

@ -135,11 +135,12 @@ void Editor::editor_set_sprite(Sprite* sprite)
m_sprite = sprite;
if (m_sprite) {
m_zoom = m_sprite->preferred.zoom;
PreferredEditorSettings preferred = m_sprite->getPreferredEditorSettings();
m_zoom = preferred.zoom;
editor_update();
editor_set_scroll(m_offset_x + m_sprite->preferred.scroll_x,
m_offset_y + m_sprite->preferred.scroll_y,
editor_set_scroll(m_offset_x + preferred.scroll_x,
m_offset_y + preferred.scroll_y,
false);
}
else {
@ -169,9 +170,13 @@ void Editor::editor_set_scroll(int x, int y, int use_refresh_region)
jview_set_scroll(view, x, y);
if (m_sprite) {
m_sprite->preferred.scroll_x = x - m_offset_x;
m_sprite->preferred.scroll_y = y - m_offset_y;
m_sprite->preferred.zoom = m_zoom;
PreferredEditorSettings preferred;
preferred.scroll_x = x - m_offset_x;
preferred.scroll_y = y - m_offset_y;
preferred.zoom = m_zoom;
m_sprite->setPreferredEditorSettings(preferred);
}
if (use_refresh_region) {
@ -285,12 +290,12 @@ void Editor::editor_draw_sprite(int x1, int y1, int x2, int y2)
source_y = 0;
}
if (source_x+width > (m_sprite->w << m_zoom)) {
width = (m_sprite->w << m_zoom) - source_x;
if (source_x+width > (m_sprite->getWidth() << m_zoom)) {
width = (m_sprite->getWidth() << m_zoom) - source_x;
}
if (source_y+height > (m_sprite->h << m_zoom)) {
height = (m_sprite->h << m_zoom) - source_y;
if (source_y+height > (m_sprite->getHeight() << m_zoom)) {
height = (m_sprite->getHeight() << m_zoom) - source_y;
}
/* draw the sprite */
@ -300,7 +305,7 @@ void Editor::editor_draw_sprite(int x1, int y1, int x2, int y2)
Image* rendered = RenderEngine::renderSprite(m_sprite,
source_x, source_y,
width, height,
m_sprite->frame,
m_sprite->getCurrentFrame(),
m_zoom);
if (rendered) {
@ -323,8 +328,7 @@ void Editor::editor_draw_sprite(int x1, int y1, int x2, int y2)
}
else {
PALETTE rgbpal;
Palette *pal = sprite_get_palette(m_sprite,
m_sprite->frame);
Palette *pal = m_sprite->getPalette(m_sprite->getCurrentFrame());
pal->toAllegro(rgbpal);
select_palette(rgbpal);
@ -384,7 +388,6 @@ void Editor::editor_draw_mask()
JRect vp = jview_get_viewport_position(view);
int scroll_x, scroll_y;
int x1, y1, x2, y2;
BoundSeg *seg;
int c, x, y;
jview_get_scroll(view, &scroll_x, &scroll_y);
@ -394,17 +397,18 @@ void Editor::editor_draw_mask()
x = vp->x1 - scroll_x + m_offset_x;
y = vp->y1 - scroll_y + m_offset_y;
for (c=0; c<m_sprite->bound.nseg; c++) {
seg = &m_sprite->bound.seg[c];
int nseg = m_sprite->getBoundariesSegmentsCount();
const _BoundSeg* seg = m_sprite->getBoundariesSegments();
for (c=0; c<nseg; ++c, ++seg) {
x1 = seg->x1<<m_zoom;
y1 = seg->y1<<m_zoom;
x2 = seg->x2<<m_zoom;
y2 = seg->y2<<m_zoom;
#if 1 /* bounds inside mask */
#if 1 // Bounds inside mask
if (!seg->open)
#else /* bounds outside mask */
#else // Bounds outside mask
if (seg->open)
#endif
{
@ -439,7 +443,7 @@ void Editor::editor_draw_mask()
void Editor::editor_draw_mask_safe()
{
if ((m_sprite) && (m_sprite->bound.seg)) {
if ((m_sprite) && (m_sprite->getBoundariesSegments())) {
int thick = m_cursor_thick;
JRegion region = jwidget_get_drawable_region(this, JI_GDR_CUTTOPWINDOWS);
@ -538,9 +542,9 @@ void Editor::turnOnSelectionModifiers()
int x1, y1, x2, y2;
editor_to_screen(m_sprite->mask->x, m_sprite->mask->y, &x1, &y1);
editor_to_screen(m_sprite->mask->x+m_sprite->mask->w-1,
m_sprite->mask->y+m_sprite->mask->h-1, &x2, &y2);
editor_to_screen(m_sprite->getMask()->x, m_sprite->getMask()->y, &x1, &y1);
editor_to_screen(m_sprite->getMask()->x+m_sprite->getMask()->w-1,
m_sprite->getMask()->y+m_sprite->getMask()->h-1, &x2, &y2);
// TODO addDecorator
m_decorators.push_back(new Decorator(Decorator::SELECTION_NW, Rect(x1-8, y1-8, 8, 8)));
@ -610,11 +614,11 @@ void Editor::editor_update_statusbar_for_standby()
/* for eye-dropper */
if (m_alt_pressed) {
color_t color = color_from_image(m_sprite->imgtype,
sprite_getpixel(m_sprite, x, y));
color_t color = color_from_image(m_sprite->getImgType(),
m_sprite->getPixel(x, y));
if (color_type(color) != COLOR_TYPE_MASK) {
usprintf(buf, "%s ", _("Color"));
color_to_formalstring(m_sprite->imgtype,
color_to_formalstring(m_sprite->getImgType(),
color,
buf+ustrlen(buf),
sizeof(buf)-ustrlen(buf), true);
@ -631,13 +635,13 @@ void Editor::editor_update_statusbar_for_standby()
(0, "%s %3d %3d (%s %3d %3d) [%s %d] %s",
_("Pos"), x, y,
_("Size"),
((m_sprite->mask->bitmap)?
m_sprite->mask->w:
m_sprite->w),
((m_sprite->mask->bitmap)?
m_sprite->mask->h:
m_sprite->h),
_("Frame"), m_sprite->frame+1,
((m_sprite->getMask()->bitmap)?
m_sprite->getMask()->w:
m_sprite->getWidth()),
((m_sprite->getMask()->bitmap)?
m_sprite->getMask()->h:
m_sprite->getHeight()),
_("Frame"), m_sprite->getCurrentFrame()+1,
buf);
}
@ -751,8 +755,8 @@ bool Editor::msg_proc(JMessage msg)
/* draw the background outside of image */
x1 = this->rc->x1 + m_offset_x;
y1 = this->rc->y1 + m_offset_y;
x2 = x1 + (m_sprite->w << m_zoom) - 1;
y2 = y1 + (m_sprite->h << m_zoom) - 1;
x2 = x1 + (m_sprite->getWidth() << m_zoom) - 1;
y2 = y1 + (m_sprite->getHeight() << m_zoom) - 1;
jrectexclude(ji_screen,
this->rc->x1, this->rc->y1,
@ -760,14 +764,14 @@ bool Editor::msg_proc(JMessage msg)
x1-1, y1-1, x2+1, y2+2, theme->get_editor_face_color());
/* draw the sprite in the editor */
editor_draw_sprite(0, 0, m_sprite->w-1, m_sprite->h-1);
editor_draw_sprite(0, 0, m_sprite->getWidth()-1, m_sprite->getHeight()-1);
/* draw the sprite boundary */
// Draw the sprite boundary
rect(ji_screen, x1-1, y1-1, x2+1, y2+1, theme->get_editor_sprite_border());
hline(ji_screen, x1-1, y2+2, x2+1, theme->get_editor_sprite_bottom_edge());
/* draw the mask */
if (m_sprite->bound.seg) {
// Draw the mask boundaries
if (m_sprite->getBoundariesSegments()) {
editor_draw_mask();
jmanager_start_timer(m_mask_timer_id);
}
@ -869,15 +873,15 @@ bool Editor::msg_proc(JMessage msg)
}
/* move frames position */
else if (m_ctrl_pressed) {
if ((m_sprite->layer) &&
(m_sprite->layer->type == GFXOBJ_LAYER_IMAGE)) {
if ((m_sprite->getCurrentLayer()) &&
(m_sprite->getCurrentLayer()->type == GFXOBJ_LAYER_IMAGE)) {
/* TODO you can move the `Background' with tiled mode */
if (m_sprite->layer->is_background()) {
if (m_sprite->getCurrentLayer()->is_background()) {
jalert(_(PACKAGE
"<<You can't move the `Background' layer."
"||&Close"));
}
else if (!m_sprite->layer->is_moveable()) {
else if (!m_sprite->getCurrentLayer()->is_moveable()) {
jalert(_(PACKAGE
"<<The layer movement is locked."
"||&Close"));
@ -903,7 +907,7 @@ bool Editor::msg_proc(JMessage msg)
return true;
}
// Start the Tool-Loop
else if (m_sprite->layer) {
else if (m_sprite->getCurrentLayer()) {
assert(m_toolLoopManager == NULL);
IToolLoop* toolLoop = createToolLoopImpl(UIContext::instance(), msg);
@ -1046,7 +1050,7 @@ bool Editor::msg_proc(JMessage msg)
screen_to_editor(jmouse_x(0), jmouse_y(0), &x, &y);
app_get_statusbar()->setStatusText
(0, "Pos %3d %3d (Size %3d %3d)", x, y,
m_sprite->w, m_sprite->h);
m_sprite->getWidth(), m_sprite->getHeight());
}
}
return true;
@ -1256,8 +1260,8 @@ void Editor::editor_request_size(int *w, int *h)
m_offset_x = jrect_w(vp)/2 - 1;
m_offset_y = jrect_h(vp)/2 - 1;
*w = (m_sprite->w << m_zoom) + m_offset_x*2;
*h = (m_sprite->h << m_zoom) + m_offset_y*2;
*w = (m_sprite->getWidth() << m_zoom) + m_offset_x*2;
*h = (m_sprite->getHeight() << m_zoom) + m_offset_y*2;
jrect_free(vp);
}
@ -1320,7 +1324,7 @@ void Editor::editor_setcursor(int x, int y)
screen_to_editor(jmouse_x(0), jmouse_y(0), &x, &y);
// Move selection
if (m_sprite->mask->contains_point(x, y)) {
if (m_sprite->getMask()->contains_point(x, y)) {
hide_drawing_cursor();
jmouse_set_cursor(JI_CURSOR_MOVE);
@ -1372,10 +1376,10 @@ void Editor::editor_update_candraw()
{
m_cursor_candraw =
(m_sprite != NULL &&
m_sprite->layer != NULL &&
m_sprite->layer->is_image() &&
m_sprite->layer->is_readable() &&
m_sprite->layer->is_writable() /* && */
m_sprite->getCurrentLayer() != NULL &&
m_sprite->getCurrentLayer()->is_image() &&
m_sprite->getCurrentLayer()->is_readable() &&
m_sprite->getCurrentLayer()->is_writable() /* && */
/* layer_get_cel(m_sprite->layer, m_sprite->frame) != NULL */
);
}
@ -1493,19 +1497,19 @@ public:
// Get cel and image where we can draw
if (m_layer->is_image()) {
m_cel = static_cast<LayerImage*>(sprite->layer)->get_cel(sprite->frame);
m_cel = static_cast<LayerImage*>(sprite->getCurrentLayer())->get_cel(sprite->getCurrentFrame());
if (m_cel)
m_cel_image = sprite->stock->image[m_cel->image];
m_cel_image = sprite->getStock()->image[m_cel->image];
}
if (m_cel == NULL) {
// create the image
m_cel_image = image_new(sprite->imgtype, sprite->w, sprite->h);
m_cel_image = image_new(sprite->getImgType(), sprite->getWidth(), sprite->getHeight());
image_clear(m_cel_image, 0);
// create the cel
m_cel = cel_new(sprite->frame, 0);
static_cast<LayerImage*>(sprite->layer)->add_cel(m_cel);
m_cel = cel_new(sprite->getCurrentFrame(), 0);
static_cast<LayerImage*>(sprite->getCurrentLayer())->add_cel(m_cel);
m_cel_created = true;
}
@ -1520,14 +1524,14 @@ public:
if (m_tiled_mode == TILED_NONE) {
x1 = MIN(m_cel->x, 0);
y1 = MIN(m_cel->y, 0);
x2 = MAX(m_cel->x+m_cel_image->w, m_sprite->w);
y2 = MAX(m_cel->y+m_cel_image->h, m_sprite->h);
x2 = MAX(m_cel->x+m_cel_image->w, m_sprite->getWidth());
y2 = MAX(m_cel->y+m_cel_image->h, m_sprite->getHeight());
}
else { // tiled
x1 = 0;
y1 = 0;
x2 = m_sprite->w;
y2 = m_sprite->h;
x2 = m_sprite->getWidth();
y2 = m_sprite->getHeight();
}
// create two copies of the image region which we'll modify with the tool
@ -1536,7 +1540,7 @@ public:
y1-m_cel->y, x2-x1, y2-y1, 0);
m_dst_image = image_new_copy(m_src_image);
m_mask = m_sprite->mask;
m_mask = m_sprite->getMask();
m_maskOrigin = (!m_mask->is_empty() ? Point(m_mask->x-x1, m_mask->y-y1):
Point(0, 0));
@ -1552,8 +1556,8 @@ public:
m_offset.y = -y1;
// Set undo label for any kind of undo used in the whole loop
if (undo_is_enabled(m_sprite->undo))
undo_set_label(m_sprite->undo, m_tool->getText().c_str());
if (undo_is_enabled(m_sprite->getUndo()))
undo_set_label(m_sprite->getUndo(), m_tool->getText().c_str());
}
~ToolLoopImpl()
@ -1575,34 +1579,34 @@ public:
image_copy(m_cel_image, m_dst_image, 0, 0);
/* add the 'cel_image' in the images' stock of the sprite */
m_cel->image = stock_add_image(m_sprite->stock, m_cel_image);
m_cel->image = stock_add_image(m_sprite->getStock(), m_cel_image);
/* is the undo enabled? */
if (undo_is_enabled(m_sprite->undo)) {
if (undo_is_enabled(m_sprite->getUndo())) {
/* we can temporary remove the cel */
static_cast<LayerImage*>(m_sprite->layer)->remove_cel(m_cel);
static_cast<LayerImage*>(m_sprite->getCurrentLayer())->remove_cel(m_cel);
/* we create the undo information (for the new cel_image
in the stock and the new cel in the layer)... */
undo_open(m_sprite->undo);
undo_add_image(m_sprite->undo, m_sprite->stock, m_cel->image);
undo_add_cel(m_sprite->undo, m_sprite->layer, m_cel);
undo_close(m_sprite->undo);
undo_open(m_sprite->getUndo());
undo_add_image(m_sprite->getUndo(), m_sprite->getStock(), m_cel->image);
undo_add_cel(m_sprite->getUndo(), m_sprite->getCurrentLayer(), m_cel);
undo_close(m_sprite->getUndo());
/* and finally we add the cel again in the layer */
static_cast<LayerImage*>(m_sprite->layer)->add_cel(m_cel);
static_cast<LayerImage*>(m_sprite->getCurrentLayer())->add_cel(m_cel);
}
}
else {
/* undo the dirty region */
if (undo_is_enabled(m_sprite->undo)) {
if (undo_is_enabled(m_sprite->getUndo())) {
Dirty* dirty = dirty_new_from_differences(m_cel_image,
m_dst_image);
// TODO error handling
dirty_save_image_data(dirty);
if (dirty != NULL)
undo_dirty(m_sprite->undo, dirty);
undo_dirty(m_sprite->getUndo(), dirty);
dirty_free(dirty);
}
@ -1614,28 +1618,28 @@ public:
/* if the size of both images are different, we have to replace
the entire image */
else {
if (undo_is_enabled(m_sprite->undo)) {
undo_open(m_sprite->undo);
if (undo_is_enabled(m_sprite->getUndo())) {
undo_open(m_sprite->getUndo());
if (m_cel->x != m_old_cel_x) {
int x = m_cel->x;
m_cel->x = m_old_cel_x;
undo_int(m_sprite->undo, (GfxObj*)m_cel, &m_cel->x);
undo_int(m_sprite->getUndo(), (GfxObj*)m_cel, &m_cel->x);
m_cel->x = x;
}
if (m_cel->y != m_old_cel_y) {
int y = m_cel->y;
m_cel->y = m_old_cel_y;
undo_int(m_sprite->undo, (GfxObj*)m_cel, &m_cel->y);
undo_int(m_sprite->getUndo(), (GfxObj*)m_cel, &m_cel->y);
m_cel->y = y;
}
undo_replace_image(m_sprite->undo, m_sprite->stock, m_cel->image);
undo_close(m_sprite->undo);
undo_replace_image(m_sprite->getUndo(), m_sprite->getStock(), m_cel->image);
undo_close(m_sprite->getUndo());
}
/* replace the image in the stock */
stock_replace_image(m_sprite->stock, m_cel->image, m_dst_image);
stock_replace_image(m_sprite->getStock(), m_cel->image, m_dst_image);
/* destroy the old cel image */
image_free(m_cel_image);
@ -1647,7 +1651,7 @@ public:
// Selection ink
if (getInk()->isSelection())
sprite_generate_mask_boundaries(m_sprite);
m_sprite->generateMaskBoundaries();
}
// If the trace was not canceled or it is not a 'paint' ink...
@ -1733,9 +1737,9 @@ IToolLoop* Editor::createToolLoopImpl(Context* context, JMessage msg)
return NULL;
Sprite* sprite = getSprite();
Layer* layer = sprite->layer;
Layer* layer = sprite->getCurrentLayer();
if (!sprite->layer) {
if (!layer) {
jalert(_(PACKAGE
"<<The current sprite does not have any layer."
"||&Close"));

View File

@ -782,12 +782,12 @@ static void openfile_bg(void *_data)
delete fop->sprite;
else {
/* the palette to convert the Image to a BITMAP */
sprite_get_palette(sprite, 0)->toAllegro(data->rgbpal);
sprite->getPalette(0)->toAllegro(data->rgbpal);
/* render the 'sprite' in one plain 'image' */
image = image_new(sprite->imgtype, sprite->w, sprite->h);
image = image_new(sprite->getImgType(), sprite->getWidth(), sprite->getHeight());
image_clear(image, 0);
sprite_render(sprite, image, 0, 0);
sprite->render(image, 0, 0);
delete sprite;
/* calculate the thumbnail size */

View File

@ -97,7 +97,7 @@ static bool preview_msg_proc(JWidget widget, JMessage msg)
break;
case JM_OPEN:
RenderEngine::setPreviewImage(effect->sprite->layer, effect->dst);
RenderEngine::setPreviewImage(effect->sprite->getCurrentLayer(), effect->dst);
break;
case JM_CLOSE:

View File

@ -338,16 +338,16 @@ bool StatusBar::msg_proc(JMessage msg)
try {
const CurrentSpriteReader sprite(UIContext::instance());
if (sprite) {
LayerFolder* folder = sprite->get_folder();
LayerIterator it = folder->get_layer_begin();
LayerIterator end = folder->get_layer_end();
const LayerFolder* folder = sprite->getFolder();
LayerConstIterator it = folder->get_layer_begin();
LayerConstIterator end = folder->get_layer_end();
size_t count = folder->get_layers_count();
char buf[256];
for (size_t c=0; it != end; ++it, ++c) {
int x1 = rc->x2-width + c*width/count;
int x2 = rc->x2-width + (c+1)*width/count;
bool hot = (*it == sprite->layer);
bool hot = (*it == sprite->getCurrentLayer());
{
BITMAP* old_ji_screen = ji_screen; // TODO fix this ugly hack
@ -463,9 +463,9 @@ static bool slider_change_hook(JWidget widget, void *data)
try {
CurrentSpriteWriter sprite(UIContext::instance());
if (sprite) {
if ((sprite->layer) &&
(sprite->layer->is_image())) {
Cel* cel = ((LayerImage*)sprite->layer)->get_cel(sprite->frame);
if ((sprite->getCurrentLayer()) &&
(sprite->getCurrentLayer()->is_image())) {
Cel* cel = ((LayerImage*)sprite->getCurrentLayer())->get_cel(sprite->getCurrentFrame());
if (cel) {
// update the opacity
cel->opacity = jslider_get_value(widget);
@ -507,10 +507,10 @@ void StatusBar::updateFromLayer()
/* opacity layer */
if (sprite &&
sprite->layer &&
sprite->layer->is_image() &&
!sprite->layer->is_background() &&
(cel = ((LayerImage*)sprite->layer)->get_cel(sprite->frame))) {
sprite->getCurrentLayer() &&
sprite->getCurrentLayer()->is_image() &&
!sprite->getCurrentLayer()->is_background() &&
(cel = ((LayerImage*)sprite->getCurrentLayer())->get_cel(sprite->getCurrentFrame()))) {
jslider_set_value(m_slider, MID(0, cel->opacity, 255));
jwidget_enable(m_slider);
}