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