[Scummvm-cvs-logs] scummvm master -> 7bbd26c9a85c797ac3d6bcced327b0301d84ca6f

somaen einarjohan at somadalen.com
Thu Dec 13 23:28:30 CET 2012


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
d6ec8c1947 WINTERMUTE: Split renderTicket into a separate file.
7bbd26c9a8 WINTERMUTE: Fix a memory-leak in the thumb-nail loading.


Commit: d6ec8c194778bf2e06c2d84013435a4144fde6e8
    https://github.com/scummvm/scummvm/commit/d6ec8c194778bf2e06c2d84013435a4144fde6e8
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2012-12-13T14:24:37-08:00

Commit Message:
WINTERMUTE: Split renderTicket into a separate file.

Changed paths:
  A engines/wintermute/base/gfx/osystem/render_ticket.cpp
  A engines/wintermute/base/gfx/osystem/render_ticket.h
    engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
    engines/wintermute/base/gfx/osystem/base_render_osystem.h
    engines/wintermute/module.mk



diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index 3a69e53..5097d20 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -28,6 +28,7 @@
 
 #include "engines/wintermute/base/gfx/osystem/base_render_osystem.h"
 #include "engines/wintermute/base/gfx/osystem/base_surface_osystem.h"
+#include "engines/wintermute/base/gfx/osystem/render_ticket.h"
 #include "engines/wintermute/base/base_surface_storage.h"
 #include "engines/wintermute/base/gfx/base_image.h"
 #include "engines/wintermute/math/math_util.h"
@@ -40,58 +41,6 @@
 
 namespace Wintermute {
 
-RenderTicket::RenderTicket(BaseSurfaceOSystem *owner, const Graphics::Surface *surf, Common::Rect *srcRect, Common::Rect *dstRect, bool mirrorX, bool mirrorY, bool disableAlpha) : _owner(owner),
-	_srcRect(*srcRect), _dstRect(*dstRect), _drawNum(0), _isValid(true), _wantsDraw(true), _hasAlpha(!disableAlpha) {
-	_colorMod = 0;
-	_batchNum = 0;
-	_mirror = TransparentSurface::FLIP_NONE;
-	if (mirrorX) {
-		_mirror |= TransparentSurface::FLIP_V;
-	}
-	if (mirrorY) {
-		_mirror |= TransparentSurface::FLIP_H;
-	}
-	if (surf) {
-		_surface = new Graphics::Surface();
-		_surface->create((uint16)srcRect->width(), (uint16)srcRect->height(), surf->format);
-		assert(_surface->format.bytesPerPixel == 4);
-		// Get a clipped copy of the surface
-		for (int i = 0; i < _surface->h; i++) {
-			memcpy(_surface->getBasePtr(0, i), surf->getBasePtr(srcRect->left, srcRect->top + i), srcRect->width() * _surface->format.bytesPerPixel);
-		}
-		// Then scale it if necessary
-		if (dstRect->width() != srcRect->width() || dstRect->height() != srcRect->height()) {
-			TransparentSurface src(*_surface, false);
-			Graphics::Surface *temp = src.scale(dstRect->width(), dstRect->height());
-			_surface->free();
-			delete _surface;
-			_surface = temp;
-		}
-	} else {
-		_surface = NULL;
-	}
-}
-
-RenderTicket::~RenderTicket() {
-	if (_surface) {
-		_surface->free();
-		delete _surface;
-	}
-}
-
-bool RenderTicket::operator==(RenderTicket &t) {
-	if ((t._owner != _owner) ||
-			(t._batchNum != t._batchNum) ||
-	        (t._hasAlpha != _hasAlpha) ||
-	        (t._mirror != _mirror) ||
-			(t._colorMod != _colorMod) ||
-	        (t._dstRect != _dstRect) ||
-	        (t._srcRect != _srcRect)) {
-		return false;
-	}
-	return true;
-}
-
 BaseRenderer *makeOSystemRenderer(BaseGame *inGame) {
 	return new BaseRenderOSystem(inGame);
 }
@@ -524,20 +473,7 @@ void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *clip
 	}
 }
 void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect) {
-	TransparentSurface src(*ticket->getSurface(), false);
-	bool doDelete = false;
-	if (!clipRect) {
-		doDelete = true;
-		clipRect = new Common::Rect();
-		clipRect->setWidth(ticket->getSurface()->w);
-		clipRect->setHeight(ticket->getSurface()->h);
-	}
-
-	src._enableAlphaBlit = ticket->_hasAlpha;
-	src.blit(*_renderSurface, dstRect->left, dstRect->top, ticket->_mirror, clipRect, _colorMod, clipRect->width(), clipRect->height());
-	if (doDelete) {
-		delete clipRect;
-	}
+	ticket->drawToSurface(_renderSurface, srcRect, dstRect, clipRect);
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.h b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
index e13085d..e7f1447 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.h
@@ -36,28 +36,7 @@
 
 namespace Wintermute {
 class BaseSurfaceOSystem;
-class RenderTicket {
-	Graphics::Surface *_surface;
-public:
-	RenderTicket(BaseSurfaceOSystem *owner, const Graphics::Surface *surf, Common::Rect *srcRect, Common::Rect *dstRest, bool mirrorX = false, bool mirrorY = false, bool disableAlpha = false);
-	RenderTicket() : _isValid(true), _wantsDraw(false), _drawNum(0) {}
-	~RenderTicket();
-	const Graphics::Surface *getSurface() { return _surface; }
-	Common::Rect _srcRect;
-	Common::Rect _dstRect;
-	uint32 _mirror;
-	uint32 _batchNum;
-	bool _hasAlpha;
-
-	bool _isValid;
-	bool _wantsDraw;
-	uint32 _drawNum;
-	uint32 _colorMod;
-
-	BaseSurfaceOSystem *_owner;
-	bool operator==(RenderTicket &a);
-};
-
+class RenderTicket;
 class BaseRenderOSystem : public BaseRenderer {
 public:
 	BaseRenderOSystem(BaseGame *inGame);
diff --git a/engines/wintermute/base/gfx/osystem/render_ticket.cpp b/engines/wintermute/base/gfx/osystem/render_ticket.cpp
new file mode 100644
index 0000000..8b513f8
--- /dev/null
+++ b/engines/wintermute/base/gfx/osystem/render_ticket.cpp
@@ -0,0 +1,103 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#include "engines/wintermute/graphics/transparent_surface.h"
+#include "engines/wintermute/base/gfx/osystem/render_ticket.h"
+
+namespace Wintermute {
+
+RenderTicket::RenderTicket(BaseSurfaceOSystem *owner, const Graphics::Surface *surf, Common::Rect *srcRect, Common::Rect *dstRect, bool mirrorX, bool mirrorY, bool disableAlpha) : _owner(owner),
+_srcRect(*srcRect), _dstRect(*dstRect), _drawNum(0), _isValid(true), _wantsDraw(true), _hasAlpha(!disableAlpha) {
+	_colorMod = 0;
+	_batchNum = 0;
+	_mirror = TransparentSurface::FLIP_NONE;
+	if (mirrorX) {
+		_mirror |= TransparentSurface::FLIP_V;
+	}
+	if (mirrorY) {
+		_mirror |= TransparentSurface::FLIP_H;
+	}
+	if (surf) {
+		_surface = new Graphics::Surface();
+		_surface->create((uint16)srcRect->width(), (uint16)srcRect->height(), surf->format);
+		assert(_surface->format.bytesPerPixel == 4);
+		// Get a clipped copy of the surface
+		for (int i = 0; i < _surface->h; i++) {
+			memcpy(_surface->getBasePtr(0, i), surf->getBasePtr(srcRect->left, srcRect->top + i), srcRect->width() * _surface->format.bytesPerPixel);
+		}
+		// Then scale it if necessary
+		if (dstRect->width() != srcRect->width() || dstRect->height() != srcRect->height()) {
+			TransparentSurface src(*_surface, false);
+			Graphics::Surface *temp = src.scale(dstRect->width(), dstRect->height());
+			_surface->free();
+			delete _surface;
+			_surface = temp;
+		}
+	} else {
+		_surface = NULL;
+	}
+}
+
+RenderTicket::~RenderTicket() {
+	if (_surface) {
+		_surface->free();
+		delete _surface;
+	}
+}
+
+bool RenderTicket::operator==(RenderTicket &t) {
+	if ((t._owner != _owner) ||
+		(t._batchNum != t._batchNum) ||
+		(t._hasAlpha != _hasAlpha) ||
+		(t._mirror != _mirror) ||
+		(t._colorMod != _colorMod) ||
+		(t._dstRect != _dstRect) ||
+		(t._srcRect != _srcRect)) {
+		return false;
+	}
+	return true;
+}
+
+void RenderTicket::drawToSurface(Graphics::Surface *_targetSurface, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect) {
+	TransparentSurface src(*getSurface(), false);
+	bool doDelete = false;
+	if (!clipRect) {
+		doDelete = true;
+		clipRect = new Common::Rect();
+		clipRect->setWidth(getSurface()->w);
+		clipRect->setHeight(getSurface()->h);
+	}
+	
+	src._enableAlphaBlit = _hasAlpha;
+	src.blit(*_targetSurface, dstRect->left, dstRect->top, _mirror, clipRect, _colorMod, clipRect->width(), clipRect->height());
+	if (doDelete) {
+		delete clipRect;
+	}
+}
+
+} // end of namespace Wintermute
diff --git a/engines/wintermute/base/gfx/osystem/render_ticket.h b/engines/wintermute/base/gfx/osystem/render_ticket.h
new file mode 100644
index 0000000..242822c
--- /dev/null
+++ b/engines/wintermute/base/gfx/osystem/render_ticket.h
@@ -0,0 +1,63 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#ifndef WINTERMUTE_RENDER_TICKET_H
+#define WINTERMUTE_RENDER_TICKET_H
+
+#include "graphics/surface.h"
+#include "common/rect.h"
+
+namespace Wintermute {
+
+class BaseSurfaceOSystem;
+class RenderTicket {
+	Graphics::Surface *_surface;
+public:
+	RenderTicket(BaseSurfaceOSystem *owner, const Graphics::Surface *surf, Common::Rect *srcRect, Common::Rect *dstRest, bool mirrorX = false, bool mirrorY = false, bool disableAlpha = false);
+	RenderTicket() : _isValid(true), _wantsDraw(false), _drawNum(0) {}
+	~RenderTicket();
+	const Graphics::Surface *getSurface() { return _surface; }
+	void drawToSurface(Graphics::Surface *_targetSurface, Common::Rect *srcRect, Common::Rect *dstRect, Common::Rect *clipRect);
+	Common::Rect _srcRect;
+	Common::Rect _dstRect;
+	uint32 _mirror;
+	uint32 _batchNum;
+	bool _hasAlpha;
+
+	bool _isValid;
+	bool _wantsDraw;
+	uint32 _drawNum;
+	uint32 _colorMod;
+
+	BaseSurfaceOSystem *_owner;
+	bool operator==(RenderTicket &a);
+};
+
+} // end of namespace Wintermute
+
+#endif
diff --git a/engines/wintermute/module.mk b/engines/wintermute/module.mk
index 7c9cdfd..2bd71f1 100644
--- a/engines/wintermute/module.mk
+++ b/engines/wintermute/module.mk
@@ -53,6 +53,7 @@ MODULE_OBJS := \
 	base/gfx/base_surface.o \
 	base/gfx/osystem/base_surface_osystem.o \
 	base/gfx/osystem/base_render_osystem.o \
+	base/gfx/osystem/render_ticket.o \
 	base/particles/part_particle.o \
 	base/particles/part_emitter.o \
 	base/particles/part_force.o \


Commit: 7bbd26c9a85c797ac3d6bcced327b0301d84ca6f
    https://github.com/scummvm/scummvm/commit/7bbd26c9a85c797ac3d6bcced327b0301d84ca6f
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2012-12-13T14:27:38-08:00

Commit Message:
WINTERMUTE: Fix a memory-leak in the thumb-nail loading.

Changed paths:
    engines/wintermute/base/base_persistence_manager.cpp



diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp
index 501b7f6..bd53ed3 100644
--- a/engines/wintermute/base/base_persistence_manager.cpp
+++ b/engines/wintermute/base/base_persistence_manager.cpp
@@ -150,7 +150,7 @@ void BasePersistenceManager::getSaveStateDesc(int slot, SaveStateDescriptor &des
 		Common::MemoryReadStream thumbStream(_thumbnailData, _thumbnailDataSize);
 		Graphics::BitmapDecoder bmpDecoder;
 		if (bmpDecoder.loadStream(thumbStream)) {
-			Graphics::Surface *surf = new Graphics::Surface;
+			Graphics::Surface *surf = NULL;
 			surf = bmpDecoder.getSurface()->convertTo(g_system->getOverlayFormat());
 			TransparentSurface *scaleableSurface = new TransparentSurface(*surf, false);
 			Graphics::Surface *scaled = scaleableSurface->scale(kThumbnailWidth, kThumbnailHeight2);






More information about the Scummvm-git-logs mailing list