Refactor Stock class to contains methods instead of stock_*() functions.

This commit is contained in:
David Capello 2010-09-30 22:38:26 -03:00
parent 2f8d9a0d1a
commit 9e419c418f
31 changed files with 187 additions and 226 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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);
}

View File

@ -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");

View File

@ -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; i<m_sprite->getStock()->nimage; ++i) {
Image* image = stock_get_image(m_sprite->getStock(), i);
for (int i=0; i<m_sprite->getStock()->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())

View File

@ -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;

View File

@ -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());
}

View File

@ -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; \

View File

@ -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

View File

@ -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); \

View File

@ -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");

View File

@ -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

View File

@ -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);

View File

@ -20,6 +20,8 @@
#include <string.h>
#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);

View File

@ -19,7 +19,6 @@
#ifndef RASTER_GFXOBJ_H_INCLUDED
#define RASTER_GFXOBJ_H_INCLUDED
#include "gui/jbase.h"
#include <list>
enum GfxObjType {

View File

@ -22,8 +22,6 @@
#include <string.h>
#include <allegro/unicode.h>
#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,

View File

@ -20,7 +20,6 @@
#define RASTER_LAYER_H_INCLUDED
#include <string>
#include "gui/jbase.h"
#include "raster/gfxobj.h"
class Cel;

View File

@ -21,6 +21,8 @@
#include <stdlib.h>
#include <string.h>
#include "gui/jbase.h" // TODO remove this reference
#include "raster/image.h"
#include "raster/mask.h"

View File

@ -20,6 +20,8 @@
#include <string.h>
#include "gui/jbase.h" // TODO remove this reference
#include "raster/blend.h"
#include "raster/image.h"
#include "raster/path.h"

View File

@ -21,7 +21,7 @@
#include <allegro/base.h>
#include <math.h>
#include "gui/jbase.h"
#include "gui/jbase.h" // TODO remove this reference
#include "raster/algo.h"
#include "raster/pen.h"

View File

@ -226,9 +226,9 @@ public:
const Cel* cel = static_cast<const LayerImage*>(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<LayerImage*>(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; y<image->h; ++y) {
IndexedTraits::address_t ptr = image_address_fast<IndexedTraits>(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; i<m_stock->nimage; i++) {
image = m_stock->image[i];
for (i=0; i<m_stock->size(); 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);

View File

@ -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; c<stock.nimage; ++c) {
if (!stock.image[c])
stock_add_image(this, NULL);
try {
for (int i=0; i<stock.size(); ++i) {
if (!stock.getImage(i))
addImage(NULL);
else {
Image* image_copy = image_new_copy(stock.image[c]);
// TODO try/catch remove created images
stock_add_image(this, image_copy);
Image* image_copy = image_new_copy(stock.getImage(i));
addImage(image_copy);
}
}
}
catch (...) {
for (int i=0; i<size(); ++i) {
if (getImage(i))
delete getImage(i);
}
throw;
}
ASSERT(this->nimage == stock.nimage);
ASSERT(size() == stock.size());
}
Stock::~Stock()
{
for (int i=0; i<this->nimage; i++) {
if (this->image[i])
image_free(this->image[i]);
for (int i=0; i<size(); ++i) {
if (getImage(i))
delete getImage(i);
}
jfree(this->image);
}
//////////////////////////////////////////////////////////////////////
/**
* 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; i<stock->nimage; i++)
if (stock->image[i] == image) {
stock->image[i] = NULL;
break;
for (int i=0; i<size(); i++)
if (m_image[i] == image) {
m_image[i] = NULL;
return;
}
ASSERT(false && "The specified image was not found");
}
/**
* Replaces the image in the stock in the "index" position with the
* new "image"; you must free the old image before, e.g:
* @code
* Image* old_image = stock_get_image(stock, index);
* if (old_image)
* image_free(old_image);
* stock_replace_image(stock, index, new_image);
* @endcode
*/
void stock_replace_image(Stock* stock, int index, Image* image)
void Stock::replaceImage(int index, Image* image)
{
/* the zero index can't be changed */
if ((index > 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;
}

View File

@ -20,31 +20,51 @@
#define RASTER_STOCK_H_INCLUDED
#include "raster/gfxobj.h"
#include <vector>
class Image;
typedef std::vector<Image*> 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

View File

@ -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;

View File

@ -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);

View File

@ -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; c<m_sprite->getStock()->nimage; c++) {
old_image = stock_get_image(m_sprite->getStock(), c);
for (c=0; c<m_sprite->getStock()->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<LayerImage*>(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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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;

View File

@ -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));

View File

@ -1844,7 +1844,7 @@ public:
if (m_layer->is_image()) {
m_cel = static_cast<LayerImage*>(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);