mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-29 19:20:09 +00:00
Replace image_free() with UniquePtrs
This commit is contained in:
parent
bf745b1033
commit
527c85e26e
@ -19,6 +19,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "app.h"
|
||||
#include "base/unique_ptr.h"
|
||||
#include "commands/command.h"
|
||||
#include "context_access.h"
|
||||
#include "document.h"
|
||||
@ -85,7 +86,8 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
Layer* src_layer = writer.layer();
|
||||
Layer* dst_layer = src_layer->getPrevious();
|
||||
Cel *src_cel, *dst_cel;
|
||||
Image *src_image, *dst_image;
|
||||
Image *src_image;
|
||||
UniquePtr<Image> dst_image;
|
||||
int index;
|
||||
|
||||
for (FrameNumber frpos(0); frpos<sprite->getTotalFrames(); ++frpos) {
|
||||
@ -100,9 +102,7 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
src_image = NULL;
|
||||
|
||||
if (dst_cel != NULL)
|
||||
dst_image = sprite->getStock()->getImage(dst_cel->getImage());
|
||||
else
|
||||
dst_image = NULL;
|
||||
dst_image.reset(sprite->getStock()->getImage(dst_cel->getImage()));
|
||||
|
||||
// With source image?
|
||||
if (src_image != NULL) {
|
||||
@ -111,10 +111,10 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
// Copy this cel to the destination layer...
|
||||
|
||||
// Creating a copy of the image
|
||||
dst_image = Image::createCopy(src_image);
|
||||
dst_image.reset(Image::createCopy(src_image));
|
||||
|
||||
// Adding it in the stock of images
|
||||
index = sprite->getStock()->addImage(dst_image);
|
||||
index = sprite->getStock()->addImage(dst_image.release());
|
||||
if (undo.isEnabled())
|
||||
undo.pushUndoer(new undoers::AddImage(
|
||||
undo.getObjects(), sprite->getStock(), index));
|
||||
@ -129,12 +129,12 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
|
||||
static_cast<LayerImage*>(dst_layer)->addCel(dst_cel);
|
||||
}
|
||||
/* with destination */
|
||||
// With destination
|
||||
else {
|
||||
int x1, y1, x2, y2, bgcolor;
|
||||
Image *new_image;
|
||||
|
||||
/* merge down in the background layer */
|
||||
// Merge down in the background layer
|
||||
if (dst_layer->isBackground()) {
|
||||
x1 = 0;
|
||||
y1 = 0;
|
||||
@ -142,7 +142,7 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
y2 = sprite->getHeight();
|
||||
bgcolor = app_get_color_to_clear_layer(dst_layer);
|
||||
}
|
||||
/* merge down in a transparent layer */
|
||||
// Merge down in a transparent layer
|
||||
else {
|
||||
x1 = MIN(src_cel->getX(), dst_cel->getX());
|
||||
y1 = MIN(src_cel->getY(), dst_cel->getY());
|
||||
@ -156,7 +156,7 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
y1-dst_cel->getY(),
|
||||
x2-x1+1, y2-y1+1, bgcolor);
|
||||
|
||||
/* merge src_image in new_image */
|
||||
// Merge src_image in new_image
|
||||
image_merge(new_image, src_image,
|
||||
src_cel->getX()-x1,
|
||||
src_cel->getY()-y1,
|
||||
@ -173,8 +173,6 @@ void MergeDownLayerCommand::onExecute(Context* context)
|
||||
sprite->getStock(), dst_cel->getImage()));
|
||||
|
||||
sprite->getStock()->replaceImage(dst_cel->getImage(), new_image);
|
||||
|
||||
image_free(dst_image);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -121,8 +121,8 @@ void PreviewCommand::onExecute(Context* context)
|
||||
bool redraw = true;
|
||||
|
||||
// Render the sprite
|
||||
Image* render = NULL;
|
||||
Image* doublebuf = Image::create(IMAGE_RGB, JI_SCREEN_W, JI_SCREEN_H);
|
||||
UniquePtr<Image> render;
|
||||
UniquePtr<Image> doublebuf(Image::create(IMAGE_RGB, JI_SCREEN_W, JI_SCREEN_H));
|
||||
|
||||
do {
|
||||
// Update scroll
|
||||
@ -140,9 +140,8 @@ void PreviewCommand::onExecute(Context* context)
|
||||
RenderEngine renderEngine(document, sprite,
|
||||
editor->getLayer(),
|
||||
editor->getFrame());
|
||||
render =
|
||||
renderEngine.renderSprite(0, 0, sprite->getWidth(), sprite->getHeight(),
|
||||
editor->getFrame(), 0, false);
|
||||
render.reset(renderEngine.renderSprite(0, 0, sprite->getWidth(), sprite->getHeight(),
|
||||
editor->getFrame(), 0, false));
|
||||
}
|
||||
|
||||
// Redraw the screen
|
||||
@ -206,9 +205,7 @@ void PreviewCommand::onExecute(Context* context)
|
||||
redraw = true;
|
||||
|
||||
// Re-render
|
||||
if (render)
|
||||
image_free(render);
|
||||
render = NULL;
|
||||
render.reset(NULL);
|
||||
}
|
||||
// Play the animation
|
||||
else if (command != NULL &&
|
||||
@ -236,9 +233,6 @@ void PreviewCommand::onExecute(Context* context)
|
||||
}
|
||||
} while (!jmouse_b(0));
|
||||
|
||||
if (render) image_free(render);
|
||||
if (doublebuf) image_free(doublebuf);
|
||||
|
||||
do {
|
||||
jmouse_poll();
|
||||
gui_feedback();
|
||||
|
@ -118,9 +118,10 @@ protected:
|
||||
|
||||
// Resize mask
|
||||
if (m_document->isMaskVisible()) {
|
||||
Image* old_bitmap = image_crop(m_document->getMask()->getBitmap(), -1, -1,
|
||||
m_document->getMask()->getBitmap()->w+2,
|
||||
m_document->getMask()->getBitmap()->h+2, 0);
|
||||
UniquePtr<Image> old_bitmap
|
||||
(image_crop(m_document->getMask()->getBitmap(), -1, -1,
|
||||
m_document->getMask()->getBitmap()->w+2,
|
||||
m_document->getMask()->getBitmap()->h+2, 0));
|
||||
|
||||
int w = scale_x(old_bitmap->w);
|
||||
int h = scale_y(old_bitmap->h);
|
||||
@ -131,7 +132,6 @@ protected:
|
||||
m_resize_method,
|
||||
m_sprite->getPalette(FrameNumber(0)), // Ignored
|
||||
m_sprite->getRgbMap(FrameNumber(0))); // Ignored
|
||||
image_free(old_bitmap);
|
||||
|
||||
// Reshrink
|
||||
new_mask->intersect(new_mask->getBounds().x, new_mask->getBounds().y,
|
||||
|
@ -50,16 +50,16 @@ FilterManagerImpl::FilterManagerImpl(Context* context, Filter* filter)
|
||||
, m_location(context->getActiveLocation())
|
||||
, m_filter(filter)
|
||||
, m_progressDelegate(NULL)
|
||||
, m_dst(NULL)
|
||||
, m_preview_mask(NULL)
|
||||
{
|
||||
int offset_x, offset_y;
|
||||
|
||||
m_src = NULL;
|
||||
m_dst = NULL;
|
||||
m_row = 0;
|
||||
m_offset_x = 0;
|
||||
m_offset_y = 0;
|
||||
m_mask = NULL;
|
||||
m_preview_mask = NULL;
|
||||
m_mask_address = NULL;
|
||||
m_targetOrig = TARGET_ALL_CHANNELS;
|
||||
m_target = TARGET_ALL_CHANNELS;
|
||||
@ -73,11 +73,6 @@ FilterManagerImpl::FilterManagerImpl(Context* context, Filter* filter)
|
||||
|
||||
FilterManagerImpl::~FilterManagerImpl()
|
||||
{
|
||||
if (m_preview_mask)
|
||||
delete m_preview_mask;
|
||||
|
||||
if (m_dst)
|
||||
image_free(m_dst);
|
||||
}
|
||||
|
||||
void FilterManagerImpl::setProgressDelegate(IProgressDelegate* progressDelegate)
|
||||
@ -115,15 +110,10 @@ void FilterManagerImpl::beginForPreview()
|
||||
{
|
||||
Document* document = m_location.document();
|
||||
|
||||
if (m_preview_mask) {
|
||||
delete m_preview_mask;
|
||||
m_preview_mask = NULL;
|
||||
}
|
||||
|
||||
if (document->isMaskVisible())
|
||||
m_preview_mask = new Mask(*document->getMask());
|
||||
m_preview_mask.reset(new Mask(*document->getMask()));
|
||||
else {
|
||||
m_preview_mask = new Mask();
|
||||
m_preview_mask.reset(new Mask());
|
||||
m_preview_mask->replace(m_offset_x, m_offset_y,
|
||||
m_src->w, m_src->h);
|
||||
}
|
||||
@ -152,8 +142,7 @@ void FilterManagerImpl::beginForPreview()
|
||||
h = y2 - y1 + 1;
|
||||
|
||||
if ((w < 1) || (h < 1)) {
|
||||
delete m_preview_mask;
|
||||
m_preview_mask = NULL;
|
||||
m_preview_mask.reset(NULL);
|
||||
m_row = -1;
|
||||
return;
|
||||
}
|
||||
@ -162,8 +151,7 @@ void FilterManagerImpl::beginForPreview()
|
||||
}
|
||||
|
||||
if (!updateMask(m_mask, m_src)) {
|
||||
delete m_preview_mask;
|
||||
m_preview_mask = NULL;
|
||||
m_preview_mask.reset(NULL);
|
||||
m_row = -1;
|
||||
return;
|
||||
}
|
||||
@ -334,21 +322,11 @@ void FilterManagerImpl::init(const Layer* layer, Image* image, int offset_x, int
|
||||
if (!updateMask(m_location.document()->getMask(), image))
|
||||
throw InvalidAreaException();
|
||||
|
||||
if (m_preview_mask) {
|
||||
delete m_preview_mask;
|
||||
m_preview_mask = NULL;
|
||||
}
|
||||
|
||||
if (m_dst) {
|
||||
image_free(m_dst);
|
||||
m_dst = NULL;
|
||||
}
|
||||
|
||||
m_src = image;
|
||||
m_dst = image_crop(image, 0, 0, image->w, image->h, 0);
|
||||
m_dst.reset(image_crop(image, 0, 0, image->w, image->h, 0));
|
||||
m_row = -1;
|
||||
m_mask = NULL;
|
||||
m_preview_mask = NULL;
|
||||
m_preview_mask.reset(NULL);
|
||||
m_mask_address = NULL;
|
||||
|
||||
m_target = m_targetOrig;
|
||||
|
@ -20,7 +20,7 @@
|
||||
#define COMMANDS_FILTERS_FILTER_MANAGER_IMPL_H_INCLUDED
|
||||
|
||||
#include "base/exception.h"
|
||||
#include "base/exception.h"
|
||||
#include "base/unique_ptr.h"
|
||||
#include "document_location.h"
|
||||
#include "filters/filter_indexed_data.h"
|
||||
#include "filters/filter_manager.h"
|
||||
@ -116,12 +116,12 @@ private:
|
||||
DocumentLocation m_location;
|
||||
Filter* m_filter;
|
||||
Image* m_src;
|
||||
Image* m_dst;
|
||||
UniquePtr<Image> m_dst;
|
||||
int m_row;
|
||||
int m_x, m_y, m_w, m_h;
|
||||
int m_offset_x, m_offset_y;
|
||||
Mask* m_mask;
|
||||
Mask* m_preview_mask;
|
||||
UniquePtr<Mask> m_preview_mask;
|
||||
unsigned char* m_mask_address;
|
||||
div_t m_d;
|
||||
Target m_targetOrig; // Original targets
|
||||
|
@ -601,7 +601,6 @@ bool BmpFormat::onLoad(FileOp *fop)
|
||||
unsigned long rmask, gmask, bmask;
|
||||
BITMAPFILEHEADER fileheader;
|
||||
BITMAPINFOHEADER infoheader;
|
||||
Image *image;
|
||||
unsigned long biSize;
|
||||
PixelFormat pixelFormat;
|
||||
int format;
|
||||
@ -654,9 +653,9 @@ bool BmpFormat::onLoad(FileOp *fop)
|
||||
else
|
||||
rmask = gmask = bmask = 0;
|
||||
|
||||
image = fop_sequence_image(fop, pixelFormat,
|
||||
infoheader.biWidth,
|
||||
ABS((int)infoheader.biHeight));
|
||||
Image* image = fop_sequence_image(fop, pixelFormat,
|
||||
infoheader.biWidth,
|
||||
ABS((int)infoheader.biHeight));
|
||||
if (!image) {
|
||||
return false;
|
||||
}
|
||||
@ -682,7 +681,6 @@ bool BmpFormat::onLoad(FileOp *fop)
|
||||
|
||||
case BI_BITFIELDS:
|
||||
if (read_bitfields_image(f, image, &infoheader, rmask, gmask, bmask) < 0) {
|
||||
image_free(image);
|
||||
fop_error(fop, "Unsupported bitfields in the BMP file.\n");
|
||||
return false;
|
||||
}
|
||||
|
@ -461,40 +461,37 @@ void fop_operate(FileOp *fop, IFileOpProgress* progress)
|
||||
if (!old_image) {
|
||||
// Error reading the first frame
|
||||
if (!loadres || !fop->document || !fop->seq.last_cel) {
|
||||
if (fop->seq.image) image_free(fop->seq.image);
|
||||
if (fop->seq.last_cel) delete fop->seq.last_cel;
|
||||
if (fop->document) {
|
||||
delete fop->document;
|
||||
fop->document = NULL;
|
||||
}
|
||||
delete fop->seq.image;
|
||||
delete fop->seq.last_cel;
|
||||
delete fop->document;
|
||||
fop->document = NULL;
|
||||
break;
|
||||
}
|
||||
// Read ok
|
||||
else {
|
||||
/* add the keyframe */
|
||||
// Add the keyframe
|
||||
SEQUENCE_IMAGE();
|
||||
}
|
||||
}
|
||||
/* for other frames */
|
||||
// For other frames
|
||||
else {
|
||||
/* all done (or maybe not enough memory) */
|
||||
// All done (or maybe not enough memory)
|
||||
if (!loadres || !fop->seq.last_cel) {
|
||||
if (fop->seq.image) image_free(fop->seq.image);
|
||||
if (fop->seq.last_cel) delete fop->seq.last_cel;
|
||||
|
||||
delete fop->seq.image;
|
||||
delete fop->seq.last_cel;
|
||||
break;
|
||||
}
|
||||
|
||||
/* compare the old frame with the new one */
|
||||
#if USE_LINK /* TODO this should be configurable through a check-box */
|
||||
// Compare the old frame with the new one
|
||||
#if USE_LINK // TODO this should be configurable through a check-box
|
||||
if (image_count_diff(old_image, fop->seq.image)) {
|
||||
SEQUENCE_IMAGE();
|
||||
}
|
||||
/* we don't need this image */
|
||||
// We don't need this image
|
||||
else {
|
||||
image_free(fop->seq.image);
|
||||
delete fop->seq.image;
|
||||
|
||||
/* but add a link frame */
|
||||
// But add a link frame
|
||||
fop->seq.last_cel->image = image_index;
|
||||
layer_add_frame(fop->seq.layer, fop->seq.last_cel);
|
||||
|
||||
@ -574,7 +571,7 @@ void fop_operate(FileOp *fop, IFileOpProgress* progress)
|
||||
fop->filename = *fop->seq.filename_list.begin();
|
||||
|
||||
// Destroy the image
|
||||
image_free(fop->seq.image);
|
||||
delete fop->seq.image;
|
||||
}
|
||||
else {
|
||||
fop_error(fop, "Not enough memory for the temporary bitmap.\n");
|
||||
|
@ -70,17 +70,12 @@ bool FliFormat::onLoad(FileOp* fop)
|
||||
unsigned char cmap[768];
|
||||
unsigned char omap[768];
|
||||
s_fli_header fli_header;
|
||||
Image *bmp, *old, *image;
|
||||
Sprite *sprite;
|
||||
LayerImage *layer;
|
||||
Palette *pal;
|
||||
int c, w, h;
|
||||
FrameNumber frpos_in;
|
||||
FrameNumber frpos_out;
|
||||
int index = 0;
|
||||
Cel *cel;
|
||||
|
||||
/* open the file to read in binary mode */
|
||||
// Open the file to read in binary mode
|
||||
FileHandle f(fop->filename.c_str(), "rb");
|
||||
|
||||
fli_read_header(f, &fli_header);
|
||||
@ -95,21 +90,14 @@ bool FliFormat::onLoad(FileOp* fop)
|
||||
w = fli_header.width;
|
||||
h = fli_header.height;
|
||||
|
||||
/* create the bitmaps */
|
||||
bmp = Image::create(IMAGE_INDEXED, w, h);
|
||||
old = Image::create(IMAGE_INDEXED, w, h);
|
||||
pal = new Palette(FrameNumber(0), 256);
|
||||
if (!bmp || !old || !pal) {
|
||||
fop_error(fop, "Not enough memory.\n");
|
||||
if (bmp) image_free(bmp);
|
||||
if (old) image_free(old);
|
||||
if (pal) delete pal;
|
||||
return false;
|
||||
}
|
||||
// Create the bitmaps
|
||||
UniquePtr<Image> bmp(Image::create(IMAGE_INDEXED, w, h));
|
||||
UniquePtr<Image> old(Image::create(IMAGE_INDEXED, w, h));
|
||||
UniquePtr<Palette> pal(new Palette(FrameNumber(0), 256));
|
||||
|
||||
// Create the image
|
||||
sprite = new Sprite(IMAGE_INDEXED, w, h, 256);
|
||||
layer = new LayerImage(sprite);
|
||||
Sprite* sprite = new Sprite(IMAGE_INDEXED, w, h, 256);
|
||||
LayerImage* layer = new LayerImage(sprite);
|
||||
sprite->getFolder()->addLayer(layer);
|
||||
layer->configureAsBackground();
|
||||
|
||||
@ -137,21 +125,11 @@ bool FliFormat::onLoad(FileOp* fop)
|
||||
if (frpos_in != 0)
|
||||
++frpos_out;
|
||||
|
||||
/* add the new frame */
|
||||
image = Image::createCopy(bmp);
|
||||
if (!image) {
|
||||
fop_error(fop, "Not enough memory\n");
|
||||
break;
|
||||
}
|
||||
|
||||
// Add the new frame
|
||||
Image* image = Image::createCopy(bmp);
|
||||
index = sprite->getStock()->addImage(image);
|
||||
if (index < 0) {
|
||||
image_free(image);
|
||||
fop_error(fop, "Not enough memory\n");
|
||||
break;
|
||||
}
|
||||
|
||||
cel = new Cel(frpos_out, index);
|
||||
Cel* cel = new Cel(frpos_out, index);
|
||||
layer->addCel(cel);
|
||||
|
||||
/* first frame or the palette changes */
|
||||
@ -165,7 +143,7 @@ bool FliFormat::onLoad(FileOp* fop)
|
||||
SETPAL();
|
||||
|
||||
// Add link
|
||||
cel = new Cel(frpos_out, index);
|
||||
Cel* cel = new Cel(frpos_out, index);
|
||||
layer_add_cel(layer, cel);
|
||||
}
|
||||
#endif
|
||||
@ -192,11 +170,6 @@ bool FliFormat::onLoad(FileOp* fop)
|
||||
// Update number of frames
|
||||
sprite->setTotalFrames(frpos_out.next());
|
||||
|
||||
// Destroy the bitmaps
|
||||
image_free(bmp);
|
||||
image_free(old);
|
||||
delete pal;
|
||||
|
||||
fop->document = new Document(sprite);
|
||||
return true;
|
||||
}
|
||||
@ -208,7 +181,6 @@ bool FliFormat::onSave(FileOp* fop)
|
||||
unsigned char omap[768];
|
||||
s_fli_header fli_header;
|
||||
int c, times;
|
||||
Image *bmp, *old;
|
||||
Palette *pal;
|
||||
|
||||
/* prepare fli header */
|
||||
@ -236,17 +208,11 @@ bool FliFormat::onSave(FileOp* fop)
|
||||
|
||||
fseek(f, 128, SEEK_SET);
|
||||
|
||||
/* create the bitmaps */
|
||||
bmp = Image::create(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight());
|
||||
old = Image::create(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight());
|
||||
if ((!bmp) || (!old)) {
|
||||
fop_error(fop, "Not enough memory for temporary bitmaps.\n");
|
||||
if (bmp) image_free(bmp);
|
||||
if (old) image_free(old);
|
||||
return false;
|
||||
}
|
||||
// Create the bitmaps
|
||||
UniquePtr<Image> bmp(Image::create(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight()));
|
||||
UniquePtr<Image> old(Image::create(IMAGE_INDEXED, sprite->getWidth(), sprite->getHeight()));
|
||||
|
||||
/* write frame by frame */
|
||||
// Write frame by frame
|
||||
for (FrameNumber frpos(0);
|
||||
frpos < sprite->getTotalFrames();
|
||||
++frpos) {
|
||||
@ -285,13 +251,9 @@ bool FliFormat::onSave(FileOp* fop)
|
||||
fop_progress(fop, (float)(frpos.next()) / (float)(sprite->getTotalFrames()));
|
||||
}
|
||||
|
||||
/* write the header and close the file */
|
||||
// Write the header and close the file
|
||||
fli_write_header(f, &fli_header);
|
||||
|
||||
/* destroy the bitmaps */
|
||||
image_free(bmp);
|
||||
image_free(old);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -271,9 +271,9 @@ bool IcoFormat::onSave(FileOp* fop)
|
||||
offset += size;
|
||||
}
|
||||
|
||||
Image* image = Image::create(sprite->getPixelFormat(),
|
||||
sprite->getWidth(),
|
||||
sprite->getHeight());
|
||||
UniquePtr<Image> image(Image::create(sprite->getPixelFormat(),
|
||||
sprite->getWidth(),
|
||||
sprite->getHeight()));
|
||||
|
||||
for (n=FrameNumber(0); n<num; ++n) {
|
||||
image_clear(image, 0);
|
||||
@ -388,7 +388,5 @@ bool IcoFormat::onSave(FileOp* fop)
|
||||
}
|
||||
}
|
||||
|
||||
image_free(image);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -103,7 +103,6 @@ bool JpegFormat::onLoad(FileOp* fop)
|
||||
{
|
||||
struct jpeg_decompress_struct cinfo;
|
||||
struct error_mgr jerr;
|
||||
Image *image;
|
||||
JDIMENSION num_scanlines;
|
||||
JSAMPARRAY buffer;
|
||||
JDIMENSION buffer_height;
|
||||
@ -143,11 +142,11 @@ bool JpegFormat::onLoad(FileOp* fop)
|
||||
jpeg_start_decompress(&cinfo);
|
||||
|
||||
// Create the image.
|
||||
image = fop_sequence_image(fop,
|
||||
(cinfo.out_color_space == JCS_RGB ? IMAGE_RGB:
|
||||
IMAGE_GRAYSCALE),
|
||||
cinfo.output_width,
|
||||
cinfo.output_height);
|
||||
Image* image = fop_sequence_image(fop,
|
||||
(cinfo.out_color_space == JCS_RGB ? IMAGE_RGB:
|
||||
IMAGE_GRAYSCALE),
|
||||
cinfo.output_width,
|
||||
cinfo.output_height);
|
||||
if (!image) {
|
||||
jpeg_destroy_decompress(&cinfo);
|
||||
return false;
|
||||
|
@ -53,7 +53,6 @@ FileFormat* CreatePcxFormat()
|
||||
|
||||
bool PcxFormat::onLoad(FileOp* fop)
|
||||
{
|
||||
Image *image;
|
||||
int c, r, g, b;
|
||||
int width, height;
|
||||
int bpp, bytes_per_line;
|
||||
@ -98,10 +97,10 @@ bool PcxFormat::onLoad(FileOp* fop)
|
||||
for (c=0; c<60; c++) /* skip some more junk */
|
||||
fgetc(f);
|
||||
|
||||
image = fop_sequence_image(fop, bpp == 8 ?
|
||||
IMAGE_INDEXED:
|
||||
IMAGE_RGB,
|
||||
width, height);
|
||||
Image* image = fop_sequence_image(fop, bpp == 8 ?
|
||||
IMAGE_INDEXED:
|
||||
IMAGE_RGB,
|
||||
width, height);
|
||||
if (!image) {
|
||||
return false;
|
||||
}
|
||||
|
@ -73,7 +73,6 @@ bool PngFormat::onLoad(FileOp* fop)
|
||||
int num_palette;
|
||||
png_colorp palette;
|
||||
png_bytep row_pointer;
|
||||
Image *image;
|
||||
PixelFormat pixelFormat;
|
||||
|
||||
FileHandle fp(fop->filename.c_str(), "rb");
|
||||
@ -181,7 +180,7 @@ bool PngFormat::onLoad(FileOp* fop)
|
||||
|
||||
int imageWidth = png_get_image_width(png_ptr, info_ptr);
|
||||
int imageHeight = png_get_image_height(png_ptr, info_ptr);
|
||||
image = fop_sequence_image(fop, pixelFormat, imageWidth, imageHeight);
|
||||
Image* image = fop_sequence_image(fop, pixelFormat, imageWidth, imageHeight);
|
||||
if (!image) {
|
||||
fop_error(fop, "file_sequence_image %dx%d\n", imageWidth, imageHeight);
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||
|
@ -202,7 +202,6 @@ bool TgaFormat::onLoad(FileOp* fop)
|
||||
short unsigned int first_color, palette_colors;
|
||||
short unsigned int left, top, image_width, image_height;
|
||||
unsigned int c, i, x, y, yc;
|
||||
Image *image;
|
||||
int compressed;
|
||||
|
||||
FileHandle f(fop->filename.c_str(), "rb");
|
||||
@ -308,7 +307,7 @@ bool TgaFormat::onLoad(FileOp* fop)
|
||||
return false;
|
||||
}
|
||||
|
||||
image = fop_sequence_image(fop, pixelFormat, image_width, image_height);
|
||||
Image* image = fop_sequence_image(fop, pixelFormat, image_width, image_height);
|
||||
if (!image)
|
||||
return false;
|
||||
|
||||
|
@ -80,12 +80,6 @@ Image* Image::createCopy(const Image* image)
|
||||
return image_crop(image, 0, 0, image->w, image->h, 0);
|
||||
}
|
||||
|
||||
void image_free(Image* image)
|
||||
{
|
||||
ASSERT(image);
|
||||
delete image;
|
||||
}
|
||||
|
||||
int image_getpixel(const Image* image, int x, int y)
|
||||
{
|
||||
if ((x >= 0) && (y >= 0) && (x < image->w) && (y < image->h))
|
||||
|
@ -69,8 +69,6 @@ private:
|
||||
PixelFormat m_format;
|
||||
};
|
||||
|
||||
void image_free(Image* image);
|
||||
|
||||
int image_getpixel(const Image* image, int x, int y);
|
||||
void image_putpixel(Image* image, int x, int y, int color);
|
||||
void image_putpen(Image* image, Pen* pen, int x, int y, int fg_color, int bg_color);
|
||||
|
@ -129,7 +129,7 @@ void LayerImage::destroyAllCels()
|
||||
ASSERT(image != NULL);
|
||||
|
||||
getSprite()->getStock()->removeImage(image);
|
||||
image_free(image);
|
||||
delete image;
|
||||
delete cel;
|
||||
}
|
||||
m_cels.clear();
|
||||
|
@ -201,7 +201,6 @@ void Mask::subtract(int x, int y, int w, int h)
|
||||
void Mask::intersect(int x, int y, int w, int h)
|
||||
{
|
||||
if (m_bitmap) {
|
||||
Image *image;
|
||||
int x1 = m_bounds.x;
|
||||
int y1 = m_bounds.y;
|
||||
int x2 = MIN(m_bounds.x+m_bounds.w-1, x+w-1);
|
||||
@ -212,8 +211,8 @@ void Mask::intersect(int x, int y, int w, int h)
|
||||
m_bounds.w = x2 - m_bounds.x + 1;
|
||||
m_bounds.h = y2 - m_bounds.y + 1;
|
||||
|
||||
image = image_crop(m_bitmap, m_bounds.x-x1, m_bounds.y-y1, m_bounds.w, m_bounds.h, 0);
|
||||
image_free(m_bitmap);
|
||||
Image* image = image_crop(m_bitmap, m_bounds.x-x1, m_bounds.y-y1, m_bounds.w, m_bounds.h, 0);
|
||||
delete m_bitmap;
|
||||
m_bitmap = image;
|
||||
|
||||
shrink();
|
||||
@ -481,7 +480,7 @@ void Mask::shrink()
|
||||
m_bounds.h = y2 - y1 + 1;
|
||||
|
||||
Image* image = image_crop(m_bitmap, m_bounds.x-u, m_bounds.y-v, m_bounds.w, m_bounds.h, 0);
|
||||
image_free(m_bitmap);
|
||||
delete m_bitmap;
|
||||
m_bitmap = image;
|
||||
}
|
||||
|
||||
|
@ -80,7 +80,7 @@ void Pen::set_angle(int angle)
|
||||
void Pen::clean_pen()
|
||||
{
|
||||
if (m_image) {
|
||||
image_free(m_image);
|
||||
delete m_image;
|
||||
m_image = NULL;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "base/memory.h"
|
||||
#include "base/remove_from_container.h"
|
||||
#include "base/unique_ptr.h"
|
||||
#include "raster/raster.h"
|
||||
|
||||
#include <cstring>
|
||||
@ -379,11 +380,10 @@ int Sprite::getPixel(int x, int y, FrameNumber frame) const
|
||||
int color = 0;
|
||||
|
||||
if ((x >= 0) && (y >= 0) && (x < m_width) && (y < m_height)) {
|
||||
Image* image = Image::create(m_format, 1, 1);
|
||||
UniquePtr<Image> image(Image::create(m_format, 1, 1));
|
||||
image_clear(image, (m_format == IMAGE_INDEXED ? getTransparentColor(): 0));
|
||||
render(image, -x, -y, frame);
|
||||
color = image_getpixel(image, 0, 0);
|
||||
image_free(image);
|
||||
}
|
||||
|
||||
return color;
|
||||
|
@ -84,7 +84,13 @@ Image* Stock::getImage(int index) const
|
||||
int Stock::addImage(Image* image)
|
||||
{
|
||||
int i = m_image.size();
|
||||
m_image.resize(m_image.size()+1);
|
||||
try {
|
||||
m_image.resize(m_image.size()+1);
|
||||
}
|
||||
catch (...) {
|
||||
delete image;
|
||||
throw;
|
||||
}
|
||||
m_image[i] = image;
|
||||
return i;
|
||||
}
|
||||
|
@ -58,6 +58,6 @@ void ReplaceImage::revert(ObjectsContainer* objects, UndoersCollector* redoers)
|
||||
// Replace the image in the stock
|
||||
stock->replaceImage(m_imageIndex, image);
|
||||
|
||||
// destroy the old image
|
||||
image_free(oldImage);
|
||||
// Destroy the old image
|
||||
delete oldImage;
|
||||
}
|
||||
|
@ -106,8 +106,8 @@ void move_cel(ContextWriter& writer)
|
||||
image */
|
||||
if (!src_layer->isBackground() &&
|
||||
dst_layer->isBackground()) {
|
||||
Image *src_image = sprite->getStock()->getImage(src_cel->getImage());
|
||||
Image *dst_image = image_crop(src_image,
|
||||
Image* src_image = sprite->getStock()->getImage(src_cel->getImage());
|
||||
Image* dst_image = image_crop(src_image,
|
||||
-src_cel->getX(),
|
||||
-src_cel->getY(),
|
||||
sprite->getWidth(),
|
||||
@ -127,7 +127,7 @@ void move_cel(ContextWriter& writer)
|
||||
src_cel->setOpacity(255);
|
||||
|
||||
sprite->getStock()->replaceImage(src_cel->getImage(), dst_image);
|
||||
image_free(src_image);
|
||||
delete src_image;
|
||||
}
|
||||
|
||||
if (undo.isEnabled())
|
||||
@ -247,7 +247,7 @@ static void remove_cel(Sprite* sprite, UndoTransaction& undo, LayerImage *layer,
|
||||
sprite->getStock(), cel->getImage()));
|
||||
|
||||
sprite->getStock()->removeImage(image);
|
||||
image_free(image);
|
||||
delete image;
|
||||
}
|
||||
|
||||
if (undo.isEnabled()) {
|
||||
|
@ -209,7 +209,7 @@ void util::clipboard::paste()
|
||||
editor->pasteImage(src_image, clipboard_x, clipboard_y);
|
||||
|
||||
if (src_image != clipboard_image)
|
||||
image_free(src_image);
|
||||
delete src_image;
|
||||
}
|
||||
|
||||
bool util::clipboard::get_image_size(gfx::Size& size)
|
||||
|
@ -189,7 +189,7 @@ void ExpandCelCanvas::commit()
|
||||
m_sprite->getStock()->replaceImage(m_cel->getImage(), m_dstImage);
|
||||
|
||||
// Destroy the old cel image.
|
||||
image_free(m_celImage);
|
||||
delete m_celImage;
|
||||
|
||||
// Now the m_dstImage is used, so we haven't to destroy it.
|
||||
m_dstImage = NULL;
|
||||
|
@ -20,12 +20,13 @@
|
||||
|
||||
#include <allegro.h>
|
||||
|
||||
#include "base/unique_ptr.h"
|
||||
#include "raster/image.h"
|
||||
#include "raster/mask.h"
|
||||
#include "util/pic_file.h"
|
||||
|
||||
/* loads a MSK file (Animator and Animator Pro format) */
|
||||
Mask *load_msk_file(const char *filename)
|
||||
// Loads a MSK file (Animator and Animator Pro format)
|
||||
Mask* load_msk_file(const char* filename)
|
||||
{
|
||||
#if (MAKE_VERSION(4, 2, 1) >= MAKE_VERSION(ALLEGRO_VERSION, \
|
||||
ALLEGRO_SUB_VERSION, \
|
||||
@ -45,21 +46,16 @@ Mask *load_msk_file(const char *filename)
|
||||
size = pack_igetl(f);
|
||||
magic = pack_igetw(f);
|
||||
|
||||
/* Animator Pro MSK format */
|
||||
// Animator Pro MSK format
|
||||
if ((size == orig_size) && (magic == 0x9500)) {
|
||||
Image *image;
|
||||
int x, y;
|
||||
|
||||
pack_fclose(f);
|
||||
|
||||
/* just load an Animator Pro PIC file */
|
||||
image = load_pic_file(filename, &x, &y, NULL);
|
||||
if ((!image) || (image->getPixelFormat() != IMAGE_BITMAP)) {
|
||||
if (image)
|
||||
image_free(image);
|
||||
}
|
||||
else {
|
||||
mask = new Mask(x, y, image);
|
||||
// Just load an Animator Pro PIC file
|
||||
UniquePtr<Image> image(load_pic_file(filename, &x, &y, NULL));
|
||||
if (image != NULL && (image->getPixelFormat() == IMAGE_BITMAP)) {
|
||||
mask = new Mask(x, y, image.release());
|
||||
}
|
||||
}
|
||||
// Animator MSK format
|
||||
@ -88,8 +84,8 @@ Mask *load_msk_file(const char *filename)
|
||||
return mask;
|
||||
}
|
||||
|
||||
/* saves an Animator Pro MSK file (really a PIC file) */
|
||||
int save_msk_file(const Mask *mask, const char *filename)
|
||||
// Saves an Animator Pro MSK file (really a PIC file)
|
||||
int save_msk_file(const Mask* mask, const char* filename)
|
||||
{
|
||||
if (mask->getBitmap())
|
||||
return save_pic_file(filename,
|
||||
|
@ -21,16 +21,17 @@
|
||||
#include <allegro/color.h>
|
||||
#include <allegro/file.h>
|
||||
|
||||
#include "base/unique_ptr.h"
|
||||
#include "raster/image.h"
|
||||
|
||||
/* loads a PIC file (Animator and Animator Pro format) */
|
||||
Image *load_pic_file(const char *filename, int *x, int *y, RGB *palette)
|
||||
// Loads a PIC file (Animator and Animator Pro format)
|
||||
Image* load_pic_file(const char* filename, int* x, int* y, RGB* palette)
|
||||
{
|
||||
UniquePtr<Image> image;
|
||||
int size, compression;
|
||||
int image_size;
|
||||
int block_size;
|
||||
int block_type;
|
||||
Image *image;
|
||||
PACKFILE *f;
|
||||
int version;
|
||||
int r, g, b;
|
||||
@ -74,15 +75,15 @@ Image *load_pic_file(const char *filename, int *x, int *y, RGB *palette)
|
||||
}
|
||||
}
|
||||
|
||||
/* read image */
|
||||
image = Image::create(IMAGE_INDEXED, w, h);
|
||||
// Read image
|
||||
image.reset(Image::create(IMAGE_INDEXED, w, h));
|
||||
|
||||
for (v=0; v<h; v++)
|
||||
for (u=0; u<w; u++)
|
||||
image->putpixel(u, v, pack_getc(f));
|
||||
|
||||
pack_fclose (f);
|
||||
return image;
|
||||
pack_fclose(f);
|
||||
return image.release();
|
||||
}
|
||||
|
||||
/* rewind */
|
||||
@ -117,7 +118,7 @@ Image *load_pic_file(const char *filename, int *x, int *y, RGB *palette)
|
||||
|
||||
size -= 64; /* the header uses 64 bytes */
|
||||
|
||||
image = Image::create(bpp == 8 ? IMAGE_INDEXED: IMAGE_BITMAP, w, h);
|
||||
image.reset(Image::create(bpp == 8 ? IMAGE_INDEXED: IMAGE_BITMAP, w, h));
|
||||
|
||||
/* read blocks to end of file */
|
||||
while (size > 0) {
|
||||
@ -130,7 +131,6 @@ Image *load_pic_file(const char *filename, int *x, int *y, RGB *palette)
|
||||
case 0:
|
||||
version = pack_igetw (f); /* palette version */
|
||||
if (version != 0) {
|
||||
image_free (image);
|
||||
pack_fclose (f);
|
||||
return NULL;
|
||||
}
|
||||
@ -169,10 +169,10 @@ Image *load_pic_file(const char *filename, int *x, int *y, RGB *palette)
|
||||
}
|
||||
|
||||
pack_fclose (f);
|
||||
return image;
|
||||
return image.release();
|
||||
}
|
||||
|
||||
/* saves an Animator Pro PIC file */
|
||||
// Saves an Animator Pro PIC file
|
||||
int save_pic_file(const char *filename, int x, int y,
|
||||
const RGB* palette, const Image* image)
|
||||
{
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "app/color.h"
|
||||
#include "app/color_utils.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/unique_ptr.h"
|
||||
#include "commands/commands.h"
|
||||
#include "commands/params.h"
|
||||
#include "document_location.h"
|
||||
@ -404,8 +405,9 @@ void Editor::drawSpriteUnclippedRect(const gfx::Rect& rc)
|
||||
RenderEngine renderEngine(m_document, m_sprite, m_layer, m_frame);
|
||||
|
||||
// Generate the rendered image
|
||||
Image* rendered = renderEngine.renderSprite(source_x, source_y, width, height,
|
||||
m_frame, m_zoom, true);
|
||||
UniquePtr<Image> rendered
|
||||
(renderEngine.renderSprite(source_x, source_y, width, height,
|
||||
m_frame, m_zoom, true));
|
||||
|
||||
if (rendered) {
|
||||
// Pre-render decorator.
|
||||
@ -421,15 +423,12 @@ void Editor::drawSpriteUnclippedRect(const gfx::Rect& rc)
|
||||
image_to_allegro(rendered, bmp, 0, 0, m_sprite->getPalette(m_frame));
|
||||
blit(bmp, ji_screen, 0, 0, dest_x, dest_y, width, height);
|
||||
|
||||
image_free(rendered);
|
||||
destroy_bitmap(bmp);
|
||||
#else
|
||||
acquire_bitmap(ji_screen);
|
||||
image_to_allegro(rendered, ji_screen, dest_x, dest_y,
|
||||
m_sprite->getPalette(m_frame));
|
||||
release_bitmap(ji_screen);
|
||||
|
||||
image_free(rendered);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user