mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-17 13:20:45 +00:00
Add virtual method getMemSize() to GfxObj class (overriden by Image, Cel, Layer, etc.).
These methods will be used for a new implementation of Undo.
This commit is contained in:
parent
070be38e81
commit
514d666747
@ -47,6 +47,11 @@ Cel::~Cel()
|
||||
{
|
||||
}
|
||||
|
||||
int Cel::getMemSize() const
|
||||
{
|
||||
return sizeof(Cel);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
Cel* cel_new(int frame, int image)
|
||||
|
@ -34,6 +34,9 @@ public:
|
||||
Cel(int frame, int image);
|
||||
Cel(const Cel& cel);
|
||||
virtual ~Cel();
|
||||
|
||||
int getMemSize() const;
|
||||
|
||||
};
|
||||
|
||||
Cel* cel_new(int frame, int image);
|
||||
|
@ -69,6 +69,11 @@ GfxObj::~GfxObj()
|
||||
erase_gfxobj(this);
|
||||
}
|
||||
|
||||
int GfxObj::getMemSize() const
|
||||
{
|
||||
return sizeof(GfxObj);
|
||||
}
|
||||
|
||||
void GfxObj::assign_id()
|
||||
{
|
||||
ScopedLock lock(*objects_mutex);
|
||||
|
@ -58,6 +58,10 @@ public:
|
||||
GfxObjId getId() const { return m_id; }
|
||||
GfxObjType getType() const { return m_type; }
|
||||
|
||||
// Returns the approximate amount of memory (in bytes) which this
|
||||
// object use.
|
||||
virtual int getMemSize() const;
|
||||
|
||||
// Returns a GfxObj by its ID. If it is not found, returns NULL.
|
||||
static GfxObj* find(GfxObjId id);
|
||||
|
||||
|
@ -49,6 +49,18 @@ Image::~Image()
|
||||
if (this->line) delete[] this->line;
|
||||
}
|
||||
|
||||
int Image::getMemSize() const
|
||||
{
|
||||
int scanline_size = 0;
|
||||
|
||||
if (imgtype == IMAGE_BITMAP)
|
||||
scanline_size = BitmapTraits::scanline_size(this->w);
|
||||
else
|
||||
scanline_size = image_line_size(this, this->w);
|
||||
|
||||
return sizeof(Image) + scanline_size*this->h;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
Image* image_new(int imgtype, int w, int h)
|
||||
|
@ -54,6 +54,8 @@ public:
|
||||
Image(int imgtype, int w, int h);
|
||||
virtual ~Image();
|
||||
|
||||
int getMemSize() const;
|
||||
|
||||
virtual int getpixel(int x, int y) const = 0;
|
||||
virtual void putpixel(int x, int y, int color) = 0;
|
||||
virtual void clear(int color) = 0;
|
||||
@ -98,13 +100,13 @@ void image_resize(const Image* src, Image* dst, ResizeMethod method, const Palet
|
||||
int image_count_diff(const Image* i1, const Image* i2);
|
||||
bool image_shrink_rect(Image *image, int *x1, int *y1, int *x2, int *y2, int refpixel);
|
||||
|
||||
inline int image_shift(Image* image)
|
||||
inline int image_shift(const Image* image)
|
||||
{
|
||||
return ((image->imgtype == IMAGE_RGB)? 2:
|
||||
(image->imgtype == IMAGE_GRAYSCALE)? 1: 0);
|
||||
}
|
||||
|
||||
inline int image_line_size(Image* image, int width)
|
||||
inline int image_line_size(const Image* image, int width)
|
||||
{
|
||||
return (width << image_shift(image));
|
||||
}
|
||||
|
@ -66,6 +66,11 @@ Layer::~Layer()
|
||||
{
|
||||
}
|
||||
|
||||
int Layer::getMemSize() const
|
||||
{
|
||||
return sizeof(Layer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the previous layer of "layer" that are in the parent set.
|
||||
*/
|
||||
@ -150,6 +155,23 @@ LayerImage::~LayerImage()
|
||||
destroy_all_cels();
|
||||
}
|
||||
|
||||
int LayerImage::getMemSize() const
|
||||
{
|
||||
int size = sizeof(LayerImage);
|
||||
CelConstIterator it = getCelBegin();
|
||||
CelConstIterator end = getCelEnd();
|
||||
|
||||
for (; it != end; ++it) {
|
||||
const Cel* cel = *it;
|
||||
size += cel->getMemSize();
|
||||
|
||||
const Image* image = getSprite()->getStock()->getImage(cel->image);
|
||||
size += image->getMemSize();
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
void LayerImage::destroy_all_cels()
|
||||
{
|
||||
CelIterator it = getCelBegin();
|
||||
@ -303,6 +325,20 @@ void LayerFolder::destroyAllLayers()
|
||||
m_layers.clear();
|
||||
}
|
||||
|
||||
int LayerFolder::getMemSize() const
|
||||
{
|
||||
int size = sizeof(LayerFolder);
|
||||
LayerConstIterator it = get_layer_begin();
|
||||
LayerConstIterator end = get_layer_end();
|
||||
|
||||
for (; it != end; ++it) {
|
||||
const Layer* layer = *it;
|
||||
size += layer->getMemSize();
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
void LayerFolder::getCels(CelList& cels)
|
||||
{
|
||||
LayerIterator it = get_layer_begin();
|
||||
|
@ -47,6 +47,8 @@ protected:
|
||||
public:
|
||||
virtual ~Layer();
|
||||
|
||||
int getMemSize() const;
|
||||
|
||||
std::string getName() const { return m_name; }
|
||||
void setName(const std::string& name) { m_name = name; }
|
||||
|
||||
@ -91,6 +93,8 @@ public:
|
||||
LayerImage(const LayerImage* copy, Sprite* sprite);
|
||||
virtual ~LayerImage();
|
||||
|
||||
int getMemSize() const;
|
||||
|
||||
int get_blend_mode() const { return m_blend_mode; }
|
||||
void set_blend_mode(int blend_mode);
|
||||
|
||||
@ -128,6 +132,8 @@ public:
|
||||
LayerFolder(const LayerFolder* copy, Sprite* sprite);
|
||||
virtual ~LayerFolder();
|
||||
|
||||
int getMemSize() const;
|
||||
|
||||
LayerList get_layers_list() { return m_layers; }
|
||||
LayerIterator get_layer_begin() { return m_layers.begin(); }
|
||||
LayerIterator get_layer_end() { return m_layers.end(); }
|
||||
|
@ -63,6 +63,11 @@ void Mask::initialize()
|
||||
this->bitmap = NULL;
|
||||
}
|
||||
|
||||
int Mask::getMemSize() const
|
||||
{
|
||||
return sizeof(Mask) + (this->bitmap ? this->bitmap->getMemSize(): 0);
|
||||
}
|
||||
|
||||
void Mask::freeze()
|
||||
{
|
||||
ASSERT(m_freeze_count >= 0);
|
||||
|
@ -36,6 +36,8 @@ public:
|
||||
Mask(const Mask& mask);
|
||||
virtual ~Mask();
|
||||
|
||||
int getMemSize() const;
|
||||
|
||||
// Returns true if the mask is completely empty (i.e. nothing
|
||||
// selected)
|
||||
bool is_empty() const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user