From 491a045eea1af99a4bf54ab84304135c946b6cc0 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Sun, 12 Jan 2014 10:59:14 +0200 Subject: FULLPIPE: Implement Movement::freePixelData() --- engines/fullpipe/gfx.cpp | 11 +++++++++-- engines/fullpipe/gfx.h | 1 + engines/fullpipe/statics.cpp | 7 ++++++- 3 files changed, 16 insertions(+), 3 deletions(-) (limited to 'engines') diff --git a/engines/fullpipe/gfx.cpp b/engines/fullpipe/gfx.cpp index 6e6e35f17a..a67a4d7b19 100644 --- a/engines/fullpipe/gfx.cpp +++ b/engines/fullpipe/gfx.cpp @@ -58,6 +58,8 @@ Bitmap::Bitmap(Bitmap *src) { Bitmap::~Bitmap() { if (_pixels) free(_pixels); + + _pixels = 0; } void Bitmap::load(Common::ReadStream *s) { @@ -230,7 +232,7 @@ void PictureObject::drawAt(int x, int y) { bool PictureObject::setPicAniInfo(PicAniInfo *picAniInfo) { if (!(picAniInfo->type & 2) || (picAniInfo->type & 1)) { - error("Picture::setPicAniInfo(): Wrong type: %d", picAniInfo->type); + error("PictureObject::setPicAniInfo(): Wrong type: %d", picAniInfo->type); return false; } @@ -482,7 +484,7 @@ void Picture::freePicture() { if (_bitmap) { if (testFlags() && !_field_54) { freeData(); - delete _bitmap; + free(_bitmap); _bitmap = 0; } } @@ -499,6 +501,11 @@ void Picture::freePicture() { } } +void Picture::freePixelData() { + freePicture(); + freeData(); +} + bool Picture::load(MfcArchive &file) { debug(5, "Picture::load()"); MemoryObject::load(file); diff --git a/engines/fullpipe/gfx.h b/engines/fullpipe/gfx.h index 6e32c94164..d640decc80 100644 --- a/engines/fullpipe/gfx.h +++ b/engines/fullpipe/gfx.h @@ -88,6 +88,7 @@ class Picture : public MemoryObject { virtual ~Picture(); void freePicture(); + void freePixelData(); virtual bool load(MfcArchive &file); void setAOIDs(); diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index 9c025dcf29..10d9b4dfdf 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -1690,7 +1690,12 @@ void Movement::loadPixelData() { } void Movement::freePixelData() { - warning("STUB: Movement::freePixelData()"); + if (!_currMovement) + for (uint i = 0; i < _dynamicPhases.size(); i++) + ((DynamicPhase *)_dynamicPhases[i])->freePixelData(); + + if (_staticsObj1) + _staticsObj1->freePixelData(); } void Movement::removeFirstPhase() { -- cgit v1.2.3