[Scummvm-cvs-logs] SF.net SVN: scummvm:[35952] scummvm/trunk/backends

dhewg at users.sourceforge.net dhewg at users.sourceforge.net
Tue Jan 20 16:24:48 CET 2009


Revision: 35952
          http://scummvm.svn.sourceforge.net/scummvm/?rev=35952&view=rev
Author:   dhewg
Date:     2009-01-20 15:24:47 +0000 (Tue, 20 Jan 2009)

Log Message:
-----------
added ImageMan to vkeybd

Modified Paths:
--------------
    scummvm/trunk/backends/module.mk

Added Paths:
-----------
    scummvm/trunk/backends/vkeybd/imageman.cpp
    scummvm/trunk/backends/vkeybd/imageman.h

Modified: scummvm/trunk/backends/module.mk
===================================================================
--- scummvm/trunk/backends/module.mk	2009-01-20 15:21:47 UTC (rev 35951)
+++ scummvm/trunk/backends/module.mk	2009-01-20 15:24:47 UTC (rev 35952)
@@ -37,6 +37,7 @@
 	saves/posix/posix-saves.o \
 	saves/psp/psp-saves.o \
 	timer/default/default-timer.o \
+	vkeybd/imageman.o \
 	vkeybd/image-map.o \
 	vkeybd/polygon.o \
 	vkeybd/virtual-keyboard.o \

Added: scummvm/trunk/backends/vkeybd/imageman.cpp
===================================================================
--- scummvm/trunk/backends/vkeybd/imageman.cpp	                        (rev 0)
+++ scummvm/trunk/backends/vkeybd/imageman.cpp	2009-01-20 15:24:47 UTC (rev 35952)
@@ -0,0 +1,131 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#include "backends/vkeybd/imageman.h"
+#include "graphics/imagedec.h"
+#include "graphics/surface.h"
+
+#include "common/unzip.h"
+
+DECLARE_SINGLETON(Graphics::ImageManager);
+
+namespace Graphics {
+
+ImageManager::ImageManager() {
+}
+
+ImageManager::~ImageManager() {
+	for (Iterator pos = _surfaces.begin(); pos != _surfaces.end(); ++pos) {
+		(*pos)->surface->free();
+		delete (*pos)->surface;
+		delete *pos;
+		*pos = 0;
+	}
+	_surfaces.clear();
+}
+
+bool ImageManager::addArchive(const Common::String &name) {
+#ifdef USE_ZLIB
+	Common::ZipArchive *arch = new Common::ZipArchive(name);
+	if (!arch || !arch->isOpen())
+		return false;
+	_archives.add(name, arch);
+#endif
+	return true;
+}
+
+void ImageManager::removeArchive(const Common::String &name) {
+#ifdef USE_ZLIB
+	_archives.remove(name);
+#endif
+}
+
+bool ImageManager::registerSurface(const Common::String &name, Surface *surf) {
+	if (getSurface(name)) {
+		return false;
+	}
+
+	Entry *newHandle = new Entry;
+	if (!newHandle)
+		return false;
+
+	if (!surf)
+		surf = ImageDecoder::loadFile(name);
+
+#ifdef USE_ZLIB
+	if (!surf) {
+		Common::SeekableReadStream *stream = _archives.openFile(name);
+		if (stream) {
+			surf = ImageDecoder::loadFile(*stream);
+			delete stream;
+		}
+	}
+#endif
+
+	if (!surf)
+		return false;
+
+	newHandle->surface = surf;
+	newHandle->name = name;
+	_surfaces.push_back(newHandle);
+
+	return true;
+}
+
+bool ImageManager::unregisterSurface(const Common::String &name) {
+	Iterator pos = searchHandle(name);
+	if (pos == _surfaces.end()) {
+		// no surface handle it as success
+		return true;
+	}
+
+	(*pos)->surface->free();
+	delete (*pos)->surface;
+	delete *pos;
+	*pos = 0;
+
+	_surfaces.erase(pos);
+
+	return true;
+}
+
+Surface * ImageManager::getSurface(const Common::String &name) {
+	Iterator pos = searchHandle(name);
+	if (pos == _surfaces.end()) {
+		// no surface handle it as success
+		return 0;
+	}
+	return (*pos)->surface;
+}
+
+ImageManager::Iterator ImageManager::searchHandle(const Common::String &name) {
+	Iterator pos = _surfaces.begin();
+	while (pos != _surfaces.end()) {
+		if ((*pos)->name == name)
+			break;
+		++pos;
+	}
+	return pos;
+}
+} // end of namespace Graphics


Property changes on: scummvm/trunk/backends/vkeybd/imageman.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Added: scummvm/trunk/backends/vkeybd/imageman.h
===================================================================
--- scummvm/trunk/backends/vkeybd/imageman.h	                        (rev 0)
+++ scummvm/trunk/backends/vkeybd/imageman.h	2009-01-20 15:24:47 UTC (rev 35952)
@@ -0,0 +1,111 @@
+/* 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.
+ *
+ * $URL$
+ * $Id$
+ */
+
+#ifndef GRAPHICS_IMAGEMAN_H
+#define GRAPHICS_IMAGEMAN_H
+
+#include "common/scummsys.h"
+
+#include "common/archive.h"
+#include "common/singleton.h"
+#include "common/str.h"
+#include "common/list.h"
+
+namespace Graphics {
+
+struct Surface;
+
+class ImageManager : public Common::Singleton<ImageManager> {
+public:
+	~ImageManager();
+
+	/**
+	 * adds an .zip archive to the pool where the ImageManager searches
+	 * for image files
+	 *
+	 * @param name the name of the archive
+	 * @return true on success and false on failure
+	 */
+	bool addArchive(const Common::String &name);
+
+	/**
+	 * deletes an .zip archive from the pool where the Image Manager searches
+	 * for image files
+	 *
+	 * @param name the name of the archive
+	 */
+	void removeArchive(const Common::String &name);
+
+	/**
+	 * registers a surface to the ImageManager.
+	 * surf->free(), also delete surf, will be called when the ImageManager will
+	 * be destroyed or if ImageManager::unregisterSurface is called.
+	 * if the parameter 'surf' is 0 the Manger will try to load an image with
+	 * the filename 'name'
+	 *
+	 * @param name the name of the new handle
+	 * @param surf the surface which should be associated to the given name
+	 * @return returns true on success and false on failure
+	 */
+	bool registerSurface(const Common::String &name, Surface *surf);
+
+	/**
+	 * unregisters a surface, after this the returned surface from
+	 * getSurface should NOT be used anymore
+	 *
+	 * @param name the handle
+	 * @return true on success, false on failure
+	 */
+	bool unregisterSurface(const Common::String &name);
+
+	/**
+	 * gets a surface registered to a handle
+	 *
+	 * @param name the name of the handle
+	 * @return returns an pointer to an Surface object or 0 on failure
+	 */
+	Surface *getSurface(const Common::String &name);
+private:
+	friend class Common::Singleton<SingletonBaseType>;
+	ImageManager();
+
+	struct Entry {
+		Common::String name;
+		Surface *surface;
+	};
+	typedef Common::List<Entry*>::iterator Iterator;
+
+	Iterator searchHandle(const Common::String &name);
+
+	Common::List<Entry*> _surfaces;
+	Common::SearchSet _archives;
+};
+
+} // end of namespace Graphics
+
+/** Shortcut for accessing the image manager. */
+#define ImageMan		(Graphics::ImageManager::instance())
+
+#endif
+


Property changes on: scummvm/trunk/backends/vkeybd/imageman.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list