diff --git a/src/commands/cmd_cel_properties.cpp b/src/commands/cmd_cel_properties.cpp index 8cedbc978..28a7c10cd 100644 --- a/src/commands/cmd_cel_properties.cpp +++ b/src/commands/cmd_cel_properties.cpp @@ -101,13 +101,13 @@ void CelPropertiesCommand::onExecute(Context* context) /* dimension (and memory size) */ memsize = - image_line_size(sprite->getStock()->image[cel->image], - sprite->getStock()->image[cel->image]->w)* - sprite->getStock()->image[cel->image]->h; + image_line_size(sprite->getStock()->getImage(cel->image), + sprite->getStock()->getImage(cel->image)->w)* + sprite->getStock()->getImage(cel->image)->h; usprintf(buf, "%dx%d (%s)", - sprite->getStock()->image[cel->image]->w, - sprite->getStock()->image[cel->image]->h, + sprite->getStock()->getImage(cel->image)->w, + sprite->getStock()->getImage(cel->image)->h, get_pretty_memory_size(memsize).c_str()); label_size->setText(buf); diff --git a/src/commands/cmd_flip.cpp b/src/commands/cmd_flip.cpp index d8e196080..c0e5a0e50 100644 --- a/src/commands/cmd_flip.cpp +++ b/src/commands/cmd_flip.cpp @@ -134,7 +134,7 @@ void FlipCommand::onExecute(Context* context) // for each cel... for (CelIterator it = cels.begin(); it != cels.end(); ++it) { Cel* cel = *it; - Image* image = stock_get_image(sprite->getStock(), cel->image); + Image* image = sprite->getStock()->getImage(cel->image); undoable.setCelPosition(cel, m_flip_horizontal ? sprite->getWidth() - image->w - cel->x: cel->x, diff --git a/src/commands/cmd_merge_down_layer.cpp b/src/commands/cmd_merge_down_layer.cpp index 1c83eaaeb..af80e980a 100644 --- a/src/commands/cmd_merge_down_layer.cpp +++ b/src/commands/cmd_merge_down_layer.cpp @@ -92,12 +92,12 @@ void MergeDownLayerCommand::onExecute(Context* context) /* get images */ if (src_cel != NULL) - src_image = stock_get_image(sprite->getStock(), src_cel->image); + src_image = sprite->getStock()->getImage(src_cel->image); else src_image = NULL; if (dst_cel != NULL) - dst_image = stock_get_image(sprite->getStock(), dst_cel->image); + dst_image = sprite->getStock()->getImage(dst_cel->image); else dst_image = NULL; @@ -111,7 +111,7 @@ void MergeDownLayerCommand::onExecute(Context* context) dst_image = image_new_copy(src_image); /* adding it in the stock of images */ - index = stock_add_image(sprite->getStock(), dst_image); + index = sprite->getStock()->addImage(dst_image); if (sprite->getUndo()->isEnabled()) undo_add_image(sprite->getUndo(), sprite->getStock(), index); @@ -168,7 +168,7 @@ void MergeDownLayerCommand::onExecute(Context* context) if (sprite->getUndo()->isEnabled()) undo_replace_image(sprite->getUndo(), sprite->getStock(), dst_cel->image); - stock_replace_image(sprite->getStock(), dst_cel->image, new_image); + sprite->getStock()->replaceImage(dst_cel->image, new_image); image_free(dst_image); } diff --git a/src/commands/cmd_new_cel.cpp b/src/commands/cmd_new_cel.cpp index 0ed1d0150..a8fb773f6 100644 --- a/src/commands/cmd_new_cel.cpp +++ b/src/commands/cmd_new_cel.cpp @@ -75,7 +75,7 @@ void NewCelCommand::onExecute(Context* context) image_clear(image, 0); /* add the image in the stock */ - image_index = stock_add_image(current_sprite->stock, image); + image_index = current_sprite->stock->addImage(image); if (undo_is_enabled(current_sprite->undo)) { current_sprite->undo->setLabel("New Cel"); diff --git a/src/commands/cmd_rotate_canvas.cpp b/src/commands/cmd_rotate_canvas.cpp index 8419697a5..2a64cfa3a 100644 --- a/src/commands/cmd_rotate_canvas.cpp +++ b/src/commands/cmd_rotate_canvas.cpp @@ -83,7 +83,7 @@ protected: // for each cel... for (CelIterator it = cels.begin(); it != cels.end(); ++it) { Cel* cel = *it; - Image* image = stock_get_image(m_sprite->getStock(), cel->image); + Image* image = m_sprite->getStock()->getImage(cel->image); // change it location switch (m_angle) { @@ -102,8 +102,8 @@ protected: } // for each stock's image - for (int i=0; igetStock()->nimage; ++i) { - Image* image = stock_get_image(m_sprite->getStock(), i); + for (int i=0; igetStock()->size(); ++i) { + Image* image = m_sprite->getStock()->getImage(i); if (!image) continue; @@ -115,7 +115,7 @@ protected: undoable.replaceStockImage(i, new_image); - jobProgress((float)i / m_sprite->getStock()->nimage); + jobProgress((float)i / m_sprite->getStock()->size()); // cancel all the operation? if (isCanceled()) diff --git a/src/commands/cmd_sprite_size.cpp b/src/commands/cmd_sprite_size.cpp index 0b0007d38..4123f06ab 100644 --- a/src/commands/cmd_sprite_size.cpp +++ b/src/commands/cmd_sprite_size.cpp @@ -82,7 +82,7 @@ protected: undoable.setCelPosition(cel, scale_x(cel->x), scale_y(cel->y)); // Get cel's image - Image* image = stock_get_image(m_sprite->getStock(), cel->image); + Image* image = m_sprite->getStock()->getImage(cel->image); if (!image) continue; diff --git a/src/dialogs/aniedit.cpp b/src/dialogs/aniedit.cpp index 47a37b092..57391ca2b 100644 --- a/src/dialogs/aniedit.cpp +++ b/src/dialogs/aniedit.cpp @@ -1201,8 +1201,9 @@ static void anieditor_draw_cel(JWidget widget, JRect clip, int layer_index, int /* empty cel? */ if (cel == NULL || - stock_get_image(anieditor->sprite->getStock(), - cel->image) == NULL) { /* TODO why a cel can't have an associated image? */ + // TODO why a cel can't have an associated image? + anieditor->sprite->getStock()->getImage(cel->image) == NULL) { + jdraw_rectfill(thumbnail_rect, bg); draw_emptyset_symbol(ji_screen, thumbnail_rect, ji_color_disabled()); } diff --git a/src/effect/images_ref.cpp b/src/effect/images_ref.cpp index 0d9787439..caba5d3ff 100644 --- a/src/effect/images_ref.cpp +++ b/src/effect/images_ref.cpp @@ -70,7 +70,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()->getStock()->image[cel->image]; \ + image_ref->image = layer->getSprite()->getStock()->getImage(cel->image); \ image_ref->layer = layer; \ image_ref->cel = cel; \ image_ref->next = NULL; \ diff --git a/src/file/ase_format.cpp b/src/file/ase_format.cpp index 3dabd857f..aa35883da 100644 --- a/src/file/ase_format.cpp +++ b/src/file/ase_format.cpp @@ -1044,7 +1044,7 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt break; } - cel->image = stock_add_image(sprite->getStock(), image); + cel->image = sprite->getStock()->addImage(image); } break; } @@ -1056,8 +1056,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->getStock(), link->image)); - cel->image = stock_add_image(sprite->getStock(), image); + Image* image = image_new_copy(sprite->getStock()->getImage(link->image)); + cel->image = sprite->getStock()->addImage(image); } else { cel_free(cel); @@ -1096,7 +1096,7 @@ static Cel *ase_file_read_cel_chunk(FILE *f, Sprite *sprite, int frame, int imgt break; } - cel->image = stock_add_image(sprite->getStock(), image); + cel->image = sprite->getStock()->addImage(image); } break; } @@ -1124,7 +1124,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->getStock(), cel->image); + Image* image = sprite->getStock()->getImage(cel->image); if (image) { // Width and height @@ -1162,7 +1162,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->getStock(), cel->image); + Image* image = sprite->getStock()->getImage(cel->image); if (image) { // Width and height diff --git a/src/file/file.cpp b/src/file/file.cpp index 850004455..4f36cefbe 100644 --- a/src/file/file.cpp +++ b/src/file/file.cpp @@ -464,8 +464,7 @@ void fop_operate(FileOp *fop) /* TODO set_palette for each frame??? */ #define SEQUENCE_IMAGE() \ do { \ - image_index = stock_add_image(fop->sprite->getStock(), \ - fop->seq.image); \ + image_index = fop->sprite->getStock()->addImage(fop->seq.image); \ \ fop->seq.last_cel->image = image_index; \ fop->seq.layer->addCel(fop->seq.last_cel); \ diff --git a/src/file/fli_format.cpp b/src/file/fli_format.cpp index f67169a3b..10e99f312 100644 --- a/src/file/fli_format.cpp +++ b/src/file/fli_format.cpp @@ -139,7 +139,7 @@ static bool load_FLI(FileOp *fop) break; } - index = stock_add_image(sprite->getStock(), image); + index = sprite->getStock()->addImage(image); if (index < 0) { image_free(image); fop_error(fop, "Not enough memory\n"); diff --git a/src/file/gif_format.cpp b/src/file/gif_format.cpp index eb4d6292a..cd8da0ff0 100644 --- a/src/file/gif_format.cpp +++ b/src/file/gif_format.cpp @@ -195,7 +195,7 @@ static bool load_GIF(FileOp *fop) 0, 0 #endif ); - cel->image = stock_add_image(sprite->getStock(), image); + cel->image = sprite->getStock()->addImage(image); layer->addCel(cel); #ifdef LOAD_GIF_STRUCTURE diff --git a/src/file/ico_format.cpp b/src/file/ico_format.cpp index a8e9c5644..d7b064cbb 100644 --- a/src/file/ico_format.cpp +++ b/src/file/ico_format.cpp @@ -130,7 +130,7 @@ static bool load_ICO(FileOp *fop) // Create the first image/cel Image* image = image_new(imgtype, width, height); - int image_index = stock_add_image(sprite->getStock(), image); + int image_index = sprite->getStock()->addImage(image); Cel* cel = cel_new(0, image_index); layer->addCel(cel); diff --git a/src/raster/dirty.cpp b/src/raster/dirty.cpp index 8676cd47f..5d6d27a60 100644 --- a/src/raster/dirty.cpp +++ b/src/raster/dirty.cpp @@ -20,6 +20,8 @@ #include +#include "gui/jbase.h" // TODO remove this reference + #include "raster/algo.h" #include "raster/pen.h" #include "raster/dirty.h" @@ -121,11 +123,7 @@ static void swap_hline8(void* image, void* data, int x1, int x2); Dirty* dirty_new(Image* image, int x1, int y1, int x2, int y2, bool tiled) { - Dirty* dirty; - - dirty = (Dirty*)jnew(Dirty, 1); - if (!dirty) - return NULL; + Dirty* dirty = new Dirty; dirty->image = image; dirty->x1 = MID(0, x1, image->w-1); @@ -142,12 +140,8 @@ Dirty* dirty_new(Image* image, int x1, int y1, int x2, int y2, bool tiled) Dirty* dirty_new_copy(Dirty* src) { + Dirty* dst = dirty_new(src->image, src->x1, src->y1, src->x2, src->y2, src->tiled); int u, v, size; - Dirty* dst; - - dst = dirty_new(src->image, src->x1, src->y1, src->x2, src->y2, src->tiled); - if (!dst) - return NULL; dst->rows = src->rows; dst->row = (DirtyRow*)jmalloc(sizeof(DirtyRow) * src->rows); diff --git a/src/raster/gfxobj.h b/src/raster/gfxobj.h index 91cdbbfbe..9338f30a5 100644 --- a/src/raster/gfxobj.h +++ b/src/raster/gfxobj.h @@ -19,7 +19,6 @@ #ifndef RASTER_GFXOBJ_H_INCLUDED #define RASTER_GFXOBJ_H_INCLUDED -#include "gui/jbase.h" #include enum GfxObjType { diff --git a/src/raster/layer.cpp b/src/raster/layer.cpp index bcff2427e..32c81af9c 100644 --- a/src/raster/layer.cpp +++ b/src/raster/layer.cpp @@ -22,8 +22,6 @@ #include #include -#include "gui/jlist.h" - #include "raster/blend.h" #include "raster/cel.h" #include "raster/image.h" @@ -127,14 +125,14 @@ LayerImage::LayerImage(const LayerImage* src_layer, Sprite* dst_sprite) Cel* cel_copy = cel_new_copy(cel); ASSERT((cel->image >= 0) && - (cel->image < src_layer->getSprite()->getStock()->nimage)); + (cel->image < src_layer->getSprite()->getStock()->size())); - Image* image = src_layer->getSprite()->getStock()->image[cel->image]; + Image* image = src_layer->getSprite()->getStock()->getImage(cel->image); ASSERT(image != NULL); Image* image_copy = image_new_copy(image); - cel_copy->image = stock_add_image(dst_sprite->getStock(), image_copy); + cel_copy->image = dst_sprite->getStock()->addImage(image_copy); if (dst_sprite->getUndo()->isEnabled()) undo_add_image(dst_sprite->getUndo(), dst_sprite->getStock(), cel_copy->image); @@ -159,11 +157,11 @@ void LayerImage::destroy_all_cels() for (; it != end; ++it) { Cel* cel = *it; - Image* image = getSprite()->getStock()->image[cel->image]; + Image* image = getSprite()->getStock()->getImage(cel->image); ASSERT(image != NULL); - stock_remove_image(getSprite()->getStock(), image); + getSprite()->getStock()->removeImage(image); image_free(image); cel_free(cel); } @@ -379,7 +377,7 @@ Layer* layer_new_flatten_copy(Sprite* dst_sprite, const Layer* src_layer, 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()->getStock(), image)); + Cel* cel = cel_new(frame, flat_layer->getSprite()->getStock()->addImage(image)); cel_set_position(cel, x, y); /* clear the image and render this frame */ @@ -415,9 +413,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()->getStock()->nimage)); + (cel->image < layer->getSprite()->getStock()->size())); - src_image = layer->getSprite()->getStock()->image[cel->image]; + src_image = layer->getSprite()->getStock()->getImage(cel->image); ASSERT(src_image != NULL); image_merge(image, src_image, diff --git a/src/raster/layer.h b/src/raster/layer.h index 9f4675c66..b17132feb 100644 --- a/src/raster/layer.h +++ b/src/raster/layer.h @@ -20,7 +20,6 @@ #define RASTER_LAYER_H_INCLUDED #include -#include "gui/jbase.h" #include "raster/gfxobj.h" class Cel; diff --git a/src/raster/mask.cpp b/src/raster/mask.cpp index bc525da5d..957f2acd1 100644 --- a/src/raster/mask.cpp +++ b/src/raster/mask.cpp @@ -21,6 +21,8 @@ #include #include +#include "gui/jbase.h" // TODO remove this reference + #include "raster/image.h" #include "raster/mask.h" diff --git a/src/raster/path.cpp b/src/raster/path.cpp index bb82301bb..6efb7dd31 100644 --- a/src/raster/path.cpp +++ b/src/raster/path.cpp @@ -20,6 +20,8 @@ #include +#include "gui/jbase.h" // TODO remove this reference + #include "raster/blend.h" #include "raster/image.h" #include "raster/path.h" diff --git a/src/raster/pen.cpp b/src/raster/pen.cpp index 80783d632..7bd76f398 100644 --- a/src/raster/pen.cpp +++ b/src/raster/pen.cpp @@ -21,7 +21,7 @@ #include #include -#include "gui/jbase.h" +#include "gui/jbase.h" // TODO remove this reference #include "raster/algo.h" #include "raster/pen.h" diff --git a/src/raster/sprite.cpp b/src/raster/sprite.cpp index 33f4580eb..1352331fc 100644 --- a/src/raster/sprite.cpp +++ b/src/raster/sprite.cpp @@ -226,9 +226,9 @@ public: const Cel* cel = static_cast(getCurrentLayer())->getCel(getCurrentFrame()); if (cel) { ASSERT((cel->image >= 0) && - (cel->image < getStock()->nimage)); + (cel->image < getStock()->size())); - image = getStock()->image[cel->image]; + image = getStock()->getImage(cel->image); if (x) *x = cel->x; if (y) *y = cel->y; @@ -247,9 +247,9 @@ public: Cel* cel = static_cast(getCurrentLayer())->getCel(getCurrentFrame()); if (cel) { ASSERT((cel->image >= 0) && - (cel->image < getStock()->nimage)); + (cel->image < getStock()->size())); - image = getStock()->image[cel->image]; + image = getStock()->getImage(cel->image); if (x) *x = cel->x; if (y) *y = cel->y; @@ -277,7 +277,7 @@ public: // Remap this Cel because is inside the specified range if (cel->frame >= frame_from && cel->frame <= frame_to) { - Image* image = stock_get_image(getStock(), cel->image); + Image* image = getStock()->getImage(cel->image); for (int y=0; yh; ++y) { IndexedTraits::address_t ptr = image_address_fast(image, 0, y); @@ -451,7 +451,7 @@ SpriteImpl::SpriteImpl(Sprite* sprite, int imgtype, int width, int height, int n m_frames = 1; m_frlens.push_back(100); // First frame with 100 msecs of duration m_frame = 0; - m_stock = stock_new(imgtype); + m_stock = new Stock(imgtype); m_folder = new LayerFolder(m_self); m_layer = NULL; m_path = NULL; @@ -516,13 +516,11 @@ SpriteImpl* SpriteImpl::copyBase(Sprite* new_sprite, const SpriteImpl* src_sprit src_sprite->getPalette(0)->size()); - // Copy stock - stock_free(dst_sprite->m_stock); - dst_sprite->m_stock = stock_new_copy(src_sprite->m_stock); - if (!dst_sprite->m_stock) { - delete dst_sprite; - return NULL; - } + // Delete the original empty stock from the dst_sprite + delete dst_sprite->m_stock; + + // Clone the src_sprite stock + dst_sprite->m_stock = new Stock(*src_sprite->m_stock); // Copy general properties dst_sprite->m_filename = src_sprite->m_filename; @@ -623,7 +621,7 @@ SpriteImpl::~SpriteImpl() // Destroy images' stock if (m_stock) - stock_free(m_stock); + delete m_stock; // Destroy paths { @@ -749,9 +747,8 @@ int SpriteImpl::getMemSize() const Image *image; int i, size = 0; - for (i=0; inimage; i++) { - image = m_stock->image[i]; - + for (i=0; isize(); i++) { + image = m_stock->getImage(i); if (image != NULL) size += image_line_size(image, image->w) * image->h; } @@ -1033,7 +1030,7 @@ Sprite* Sprite::createWithLayer(int imgtype, int width, int height, int ncolors) layer->set_blend_mode(BLEND_MODE_NORMAL); /* add image in the layer stock */ - int index = stock_add_image(sprite->getStock(), image); + int index = sprite->getStock()->addImage(image); /* create the cel */ cel = cel_new(0, index); diff --git a/src/raster/stock.cpp b/src/raster/stock.cpp index fb3ebe741..01c19e1c2 100644 --- a/src/raster/stock.cpp +++ b/src/raster/stock.cpp @@ -23,136 +23,87 @@ #include "raster/image.h" #include "raster/stock.h" -////////////////////////////////////////////////////////////////////// - - Stock::Stock(int imgtype) : GfxObj(GFXOBJ_STOCK) { - this->imgtype = imgtype; - this->nimage = 0; - this->image = NULL; + m_imgtype = imgtype; - stock_add_image(this, NULL); /* image 0 is NULL */ + // Image with index=0 is always NULL. + m_image.push_back(NULL); } Stock::Stock(const Stock& stock) : GfxObj(stock) { - this->imgtype = stock.imgtype; - this->nimage = 0; - this->image = NULL; + m_imgtype = stock.getImgType(); - for (int c=0; cnimage == stock.nimage); + ASSERT(size() == stock.size()); } Stock::~Stock() { - for (int i=0; inimage; i++) { - if (this->image[i]) - image_free(this->image[i]); + for (int i=0; iimage); } -////////////////////////////////////////////////////////////////////// - - -/** - * Creates a new stock, the "imgtype" argument indicates that this - * stock will contain images of that type. - */ -Stock* stock_new(int imgtype) +int Stock::getImgType() const { - return new Stock(imgtype); + return m_imgtype; } -/** - * Creates a new copy of "stock"; the new copy will have copies of all - * images. - */ -Stock* stock_new_copy(const Stock* stock) +void Stock::setImgType(int imgtype) { - ASSERT(stock); - return new Stock(*stock); + m_imgtype = imgtype; } -/** - * Destroys the stock. - */ -void stock_free(Stock* stock) +Image* Stock::getImage(int index) const { - ASSERT(stock); - delete stock; + ASSERT((index >= 0) && (index < size())); + + return m_image[index]; } -/** - * Adds a new image in the stock resizing the images-array. - */ -int stock_add_image(Stock* stock, Image* image) +int Stock::addImage(Image* image) { - int i = stock->nimage++; - - stock->image = (Image**)jrealloc(stock->image, sizeof(Image*) * stock->nimage); - if (!stock->image) - return -1; - - stock->image[i] = image; + int i = m_image.size(); + m_image.resize(m_image.size()+1); + m_image[i] = image; return i; } -/* removes a image from the stock, it doesn't resize the stock */ -void stock_remove_image(Stock* stock, Image* image) +void Stock::removeImage(Image* image) { - int i; - - for (i=0; inimage; i++) - if (stock->image[i] == image) { - stock->image[i] = NULL; - break; + for (int i=0; i 0) && (index < stock->nimage)) - stock->image[index] = image; + ASSERT((index > 0) && (index < size())); + m_image[index] = image; } - -/** - * Returns the image in the "index" position - */ -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; -} - diff --git a/src/raster/stock.h b/src/raster/stock.h index be582b69b..956c5041f 100644 --- a/src/raster/stock.h +++ b/src/raster/stock.h @@ -20,31 +20,51 @@ #define RASTER_STOCK_H_INCLUDED #include "raster/gfxobj.h" +#include class Image; +typedef std::vector ImagesList; + class Stock : public GfxObj { public: - int imgtype; /* type of images (all images in the stock - must be of this type) */ - int nimage; /* how many images have this stock */ - Image** image; /* the images-array where the images are */ - Stock(int imgtype); Stock(const Stock& stock); virtual ~Stock(); + + int getImgType() const; + void setImgType(int imgtype); + + // Returns the number of image in the stock. + int size() const { + return m_image.size(); + } + + // Returns the image in the "index" position + Image* getImage(int index) const; + + // Adds a new image in the stock resizing the images-array. Returns + // the index/position in the stock (this index can be used with the + // Stock::getImage() function). + int addImage(Image* image); + + // Removes a image from the stock, it doesn't resize the stock. + void removeImage(Image* image); + + // Replaces the image in the stock in the "index" position with the + // new "image"; you must delete the old image before, e.g: + // + // Image* old_image = stock->getImage(index); + // if (old_image) + // delete old_image; + // stock->replaceImage(index, new_image); + // + void replaceImage(int index, Image* image); + +//private: TODO uncomment this line + int m_imgtype; // Type of images (all images in the stock must be of this type). + ImagesList m_image; // The images-array where the images are. }; -Stock* stock_new(int imgtype); -Stock* stock_new_copy(const Stock* stock); -void stock_free(Stock* stock); - -int stock_add_image(Stock* stock, Image* image); -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 diff --git a/src/raster/undo.cpp b/src/raster/undo.cpp index 0629e1197..c5bddb86c 100644 --- a/src/raster/undo.cpp +++ b/src/raster/undo.cpp @@ -863,10 +863,10 @@ static void chunk_add_image_invert(UndoStream* stream, UndoChunkAddImage* chunk, Stock *stock = (Stock *)GfxObj::find(stock_id); if (stock) { - Image* image = stock_get_image(stock, image_index); + Image* image = stock->getImage(image_index); if (image != NULL) { chunk_remove_image_new(stream, stock, image_index); - stock_remove_image(stock, image); + stock->removeImage(image); image_free(image); } } @@ -898,8 +898,8 @@ void undo_remove_image(Undo* undo, Stock *stock, int image_index) static void chunk_remove_image_new(UndoStream* stream, Stock *stock, int image_index) { - Image* image = stock->image[image_index]; - UndoChunkRemoveImage* chunk = (UndoChunkRemoveImage* ) + Image* image = stock->getImage(image_index); + UndoChunkRemoveImage* chunk = (UndoChunkRemoveImage*) undo_chunk_new(stream, UNDO_TYPE_REMOVE_IMAGE, sizeof(UndoChunkRemoveImage)+get_raw_image_size(image)); @@ -921,7 +921,7 @@ static void chunk_remove_image_invert(UndoStream* stream, UndoChunkRemoveImage* /* ASSERT(image != NULL); */ - stock_replace_image(stock, image_index, image); + stock->replaceImage(image_index, image); chunk_add_image_new(stream, stock, image_index); } } @@ -952,7 +952,7 @@ void undo_replace_image(Undo* undo, Stock *stock, int image_index) static void chunk_replace_image_new(UndoStream* stream, Stock *stock, int image_index) { - Image* image = stock_get_image(stock, image_index); + Image* image = stock->getImage(image_index); UndoChunkReplaceImage* chunk = (UndoChunkReplaceImage* ) undo_chunk_new(stream, UNDO_TYPE_REPLACE_IMAGE, @@ -976,10 +976,10 @@ static void chunk_replace_image_invert(UndoStream* stream, UndoChunkReplaceImage // save the current image in the (redo) stream chunk_replace_image_new(stream, stock, image_index); - Image* old_image = stock_get_image(stock, image_index); + Image* old_image = stock->getImage(image_index); // replace the image in the stock - stock_replace_image(stock, image_index, image); + stock->replaceImage(image_index, image); // destroy the old image image_free(old_image); @@ -2175,7 +2175,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()->getStock(), cel->image, image); + layer->getSprite()->getStock()->replaceImage(cel->image, image); } } break; @@ -2246,7 +2246,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()->getStock()->image[cel->image]; + Image* image = layer->getSprite()->getStock()->getImage(cel->image); ASSERT(image != NULL); write_raw_uint8(1); @@ -2290,7 +2290,7 @@ static int get_raw_layer_size(Layer* layer) size += get_raw_cel_size(cel); size++; // has image? - Image* image = layer->getSprite()->getStock()->image[cel->image]; + Image* image = layer->getSprite()->getStock()->getImage(cel->image); size += get_raw_image_size(image); } break; diff --git a/src/tests/raster/03sprite.cpp b/src/tests/raster/03sprite.cpp index b5331d36e..d992ad340 100644 --- a/src/tests/raster/03sprite.cpp +++ b/src/tests/raster/03sprite.cpp @@ -82,7 +82,7 @@ void test () } /* add the new image in the stock */ - image_index = stock_add_image(sprite->stock, image); + image_index = sprite->stock->addImage(image); /* cel properties */ cel = cel_new(i, image_index); diff --git a/src/undoable.cpp b/src/undoable.cpp index d54890b3f..67568e089 100644 --- a/src/undoable.cpp +++ b/src/undoable.cpp @@ -198,15 +198,15 @@ void Undoable::setImgType(int new_imgtype, int dithering_method) /* change imgtype of the stock of images */ if (isEnabled()) - undo_int(m_sprite->getUndo(), m_sprite->getStock(), &m_sprite->getStock()->imgtype); + undo_int(m_sprite->getUndo(), m_sprite->getStock(), &m_sprite->getStock()->m_imgtype); - m_sprite->getStock()->imgtype = new_imgtype; + m_sprite->getStock()->setImgType(new_imgtype); // Use the rgbmap for the specified sprite const RgbMap* rgbmap = m_sprite->getRgbMap(); - for (c=0; cgetStock()->nimage; c++) { - old_image = stock_get_image(m_sprite->getStock(), c); + for (c=0; cgetStock()->size(); c++) { + old_image = m_sprite->getStock()->getImage(c); if (!old_image) continue; @@ -221,7 +221,7 @@ void Undoable::setImgType(int new_imgtype, int dithering_method) undo_replace_image(m_sprite->getUndo(), m_sprite->getStock(), c); image_free(old_image); - stock_replace_image(m_sprite->getStock(), c, new_image); + m_sprite->getStock()->replaceImage(c, new_image); } /* change "sprite.imgtype" field */ @@ -259,7 +259,7 @@ int Undoable::addImageInStock(Image* image) ASSERT(image); // add the image in the stock - int image_index = stock_add_image(m_sprite->getStock(), image); + int image_index = m_sprite->getStock()->addImage(image); if (isEnabled()) undo_add_image(m_sprite->getUndo(), m_sprite->getStock(), image_index); @@ -274,27 +274,27 @@ void Undoable::removeImageFromStock(int image_index) { ASSERT(image_index >= 0); - Image* image = stock_get_image(m_sprite->getStock(), image_index); + Image* image = m_sprite->getStock()->getImage(image_index); ASSERT(image); if (isEnabled()) undo_remove_image(m_sprite->getUndo(), m_sprite->getStock(), image_index); - stock_remove_image(m_sprite->getStock(), image); + m_sprite->getStock()->removeImage(image); image_free(image); } void Undoable::replaceStockImage(int image_index, Image* new_image) { // get the current image in the 'image_index' position - Image* old_image = stock_get_image(m_sprite->getStock(), image_index); + Image* old_image = m_sprite->getStock()->getImage(image_index); ASSERT(old_image); // replace the image in the stock if (isEnabled()) undo_replace_image(m_sprite->getUndo(), m_sprite->getStock(), image_index); - stock_replace_image(m_sprite->getStock(), image_index, new_image); + m_sprite->getStock()->replaceImage(image_index, new_image); // destroy the old image image_free(old_image); @@ -431,10 +431,10 @@ void Undoable::backgroundFromLayer(LayerImage* layer, int bgcolor) for (; it != end; ++it) { Cel* cel = *it; ASSERT((cel->image > 0) && - (cel->image < m_sprite->getStock()->nimage)); + (cel->image < m_sprite->getStock()->size())); // get the image from the sprite's stock of images - Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image); + Image* cel_image = m_sprite->getStock()->getImage(cel->image); ASSERT(cel_image); image_clear(bg_image, bgcolor); @@ -539,7 +539,7 @@ void Undoable::flattenLayers(int bgcolor) cel = background->getCel(frame); if (cel) { - cel_image = m_sprite->getStock()->image[cel->image]; + cel_image = m_sprite->getStock()->getImage(cel->image); ASSERT(cel_image != NULL); /* we have to save the current state of `cel_image' in the undo */ @@ -556,7 +556,7 @@ void Undoable::flattenLayers(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->getStock(), cel_image)); + cel = cel_new(frame, m_sprite->getStock()->addImage(cel_image)); /* TODO error handling: if (!cel) { ... } */ /* and finally we add the cel in the background */ @@ -706,8 +706,7 @@ void Undoable::copyPreviousFrame(Layer* layer, int frame) // create a copy of the previous cel Cel* src_cel = static_cast(layer)->getCel(frame-1); - Image* src_image = src_cel ? stock_get_image(m_sprite->getStock(), - src_cel->image): + Image* src_image = src_cel ? m_sprite->getStock()->getImage(src_cel->image): NULL; // nothing to copy, it will be a transparent cel @@ -907,7 +906,7 @@ Cel* Undoable::getCurrentCel() void Undoable::cropCel(Cel* cel, int x, int y, int w, int h, int bgcolor) { - Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image); + Image* cel_image = m_sprite->getStock()->getImage(cel->image); ASSERT(cel_image); // create the new image through a crop @@ -922,8 +921,8 @@ void Undoable::cropCel(Cel* cel, int x, int y, int w, int h, int bgcolor) Image* Undoable::getCelImage(Cel* cel) { - if (cel && cel->image >= 0 && cel->image < m_sprite->getStock()->nimage) - return m_sprite->getStock()->image[cel->image]; + if (cel && cel->image >= 0 && cel->image < m_sprite->getStock()->size()) + return m_sprite->getStock()->getImage(cel->image); else return NULL; } @@ -1028,7 +1027,7 @@ void Undoable::pasteImage(const Image* src_image, int x, int y, int opacity) Cel* cel = ((LayerImage*)layer)->getCel(m_sprite->getCurrentFrame()); ASSERT(cel); - Image* cel_image = stock_get_image(m_sprite->getStock(), cel->image); + Image* cel_image = m_sprite->getStock()->getImage(cel->image); Image* cel_image2 = image_new_copy(cel_image); image_merge(cel_image2, src_image, x-cel->x, y-cel->y, opacity, BLEND_MODE_NORMAL); diff --git a/src/util/celmove.cpp b/src/util/celmove.cpp index f6df3a62b..c8408034c 100644 --- a/src/util/celmove.cpp +++ b/src/util/celmove.cpp @@ -106,7 +106,7 @@ void move_cel(SpriteWriter& sprite) image */ if (!src_layer->is_background() && dst_layer->is_background()) { - Image *src_image = stock_get_image(sprite->getStock(), src_cel->image); + Image *src_image = sprite->getStock()->getImage(src_cel->image); Image *dst_image = image_crop(src_image, -src_cel->x, -src_cel->y, @@ -127,7 +127,7 @@ void move_cel(SpriteWriter& sprite) src_cel->y = 0; src_cel->opacity = 255; - stock_replace_image(sprite->getStock(), src_cel->image, dst_image); + sprite->getStock()->replaceImage(src_cel->image, dst_image); image_free(src_image); } @@ -174,7 +174,7 @@ void copy_cel(SpriteWriter& sprite) /* move the cel in the same layer */ if (src_cel != NULL) { - Image *src_image = stock_get_image(sprite->getStock(), src_cel->image); + Image *src_image = sprite->getStock()->getImage(src_cel->image); Image *dst_image; int image_index; int dst_cel_x; @@ -207,7 +207,7 @@ void copy_cel(SpriteWriter& sprite) } /* add the image in the stock */ - image_index = stock_add_image(sprite->getStock(), dst_image); + image_index = sprite->getStock()->addImage(dst_image); if (sprite->getUndo()->isEnabled()) undo_add_image(sprite->getUndo(), sprite->getStock(), image_index); @@ -253,12 +253,12 @@ static void remove_cel(Sprite* sprite, LayerImage *layer, Cel *cel) if (!used) { /* if the image is only used by this cel, we can remove the image from the stock */ - image = stock_get_image(sprite->getStock(), cel->image); + image = sprite->getStock()->getImage(cel->image); if (sprite->getUndo()->isEnabled()) undo_remove_image(sprite->getUndo(), sprite->getStock(), cel->image); - stock_remove_image(sprite->getStock(), image); + sprite->getStock()->removeImage(image); image_free(image); } diff --git a/src/util/clipboard.cpp b/src/util/clipboard.cpp index 480cf242c..62892875e 100644 --- a/src/util/clipboard.cpp +++ b/src/util/clipboard.cpp @@ -223,7 +223,7 @@ void clipboard::paste(SpriteWriter& sprite) image_clear(dst_image, 0); // Add the new image in the stock - int dst_image_index = stock_add_image(sprite->getStock(), dst_image); + int dst_image_index = sprite->getStock()->addImage(dst_image); if (sprite->getUndo()->isEnabled()) undo_add_image(sprite->getUndo(), sprite->getStock(), dst_image_index); diff --git a/src/util/render.cpp b/src/util/render.cpp index e97f61e8d..5dd6b217c 100644 --- a/src/util/render.cpp +++ b/src/util/render.cpp @@ -578,8 +578,8 @@ void RenderEngine::renderLayer(const Sprite *sprite, } /* if not, we use the original cel-image from the images' stock */ else if ((cel->image >= 0) && - (cel->image < layer->getSprite()->getStock()->nimage)) - src_image = layer->getSprite()->getStock()->image[cel->image]; + (cel->image < layer->getSprite()->getStock()->size())) + src_image = layer->getSprite()->getStock()->getImage(cel->image); else src_image = NULL; diff --git a/src/util/thmbnail.cpp b/src/util/thmbnail.cpp index af1e2e140..9d3136067 100644 --- a/src/util/thmbnail.cpp +++ b/src/util/thmbnail.cpp @@ -82,7 +82,7 @@ BITMAP* generate_thumbnail(const Layer* layer, const Cel* cel, const Sprite *spr return NULL; thumbnail_render(bmp, - stock_get_image(sprite->getStock(), cel->image), + sprite->getStock()->getImage(cel->image), !layer->is_background(), sprite->getPalette(cel->frame)); diff --git a/src/widgets/editor/editor.cpp b/src/widgets/editor/editor.cpp index 665e3e023..848969e1f 100644 --- a/src/widgets/editor/editor.cpp +++ b/src/widgets/editor/editor.cpp @@ -1844,7 +1844,7 @@ public: if (m_layer->is_image()) { m_cel = static_cast(sprite->getCurrentLayer())->getCel(sprite->getCurrentFrame()); if (m_cel) - m_cel_image = sprite->getStock()->image[m_cel->image]; + m_cel_image = sprite->getStock()->getImage(m_cel->image); } if (m_cel == NULL) { @@ -1925,7 +1925,7 @@ 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->getStock(), m_cel_image); + m_cel->image = m_sprite->getStock()->addImage(m_cel_image); /* is the undo enabled? */ if (m_sprite->getUndo()->isEnabled()) { @@ -1985,7 +1985,7 @@ public: } /* replace the image in the stock */ - stock_replace_image(m_sprite->getStock(), m_cel->image, m_dst_image); + m_sprite->getStock()->replaceImage(m_cel->image, m_dst_image); /* destroy the old cel image */ image_free(m_cel_image);