diff options
author | Johannes Schickel | 2009-01-20 18:31:35 +0000 |
---|---|---|
committer | Johannes Schickel | 2009-01-20 18:31:35 +0000 |
commit | 4c62af49c24a93704b32d9515609924a9499d987 (patch) | |
tree | 19931ea7f379f07c97205dd01305b09058c9d75b /backends/vkeybd | |
parent | 496ab478a26742e49520d2c4ea8af068d1af8602 (diff) | |
download | scummvm-rg350-4c62af49c24a93704b32d9515609924a9499d987.tar.gz scummvm-rg350-4c62af49c24a93704b32d9515609924a9499d987.tar.bz2 scummvm-rg350-4c62af49c24a93704b32d9515609924a9499d987.zip |
Removed ImageMan again, now the code uses Graphics::ImageDecoder directly.
svn-id: r35960
Diffstat (limited to 'backends/vkeybd')
-rw-r--r-- | backends/vkeybd/imageman.cpp | 138 | ||||
-rw-r--r-- | backends/vkeybd/imageman.h | 113 | ||||
-rw-r--r-- | backends/vkeybd/virtual-keyboard-parser.cpp | 27 | ||||
-rw-r--r-- | backends/vkeybd/virtual-keyboard.cpp | 16 | ||||
-rw-r--r-- | backends/vkeybd/virtual-keyboard.h | 5 |
5 files changed, 29 insertions, 270 deletions
diff --git a/backends/vkeybd/imageman.cpp b/backends/vkeybd/imageman.cpp deleted file mode 100644 index 2f68fcb71f..0000000000 --- a/backends/vkeybd/imageman.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* 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$ - */ - -#ifdef ENABLE_VKEYBD - -#include "backends/vkeybd/imageman.h" - -#include "common/fs.h" -#include "common/unzip.h" -#include "graphics/imagedec.h" -#include "graphics/surface.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(Common::FSNode(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 - -#endif // #ifdef ENABLE_VKEYBD - diff --git a/backends/vkeybd/imageman.h b/backends/vkeybd/imageman.h deleted file mode 100644 index 725a0675fa..0000000000 --- a/backends/vkeybd/imageman.h +++ /dev/null @@ -1,113 +0,0 @@ -/* 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 - -#ifdef ENABLE_VKEYBD - -#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 // #ifdef ENABLE_VKEYBD - -#endif diff --git a/backends/vkeybd/virtual-keyboard-parser.cpp b/backends/vkeybd/virtual-keyboard-parser.cpp index 5dcb859191..74bf82947c 100644 --- a/backends/vkeybd/virtual-keyboard-parser.cpp +++ b/backends/vkeybd/virtual-keyboard-parser.cpp @@ -31,7 +31,9 @@ #include "common/keyboard.h" #include "common/util.h" #include "common/system.h" -#include "backends/vkeybd/imageman.h" +#include "common/archive.h" + +#include "graphics/imagedec.h" namespace Common { @@ -150,8 +152,8 @@ bool VirtualKeyboardParser::parserCallback_mode(ParserNode *node) { return true; } else { // remove data relating to old resolution - ImageMan.unregisterSurface(_mode->bitmapName); _mode->bitmapName.clear(); + delete _mode->image; _mode->image = 0; _mode->imageMap.removeAllAreas(); delete _mode->displayArea; @@ -249,16 +251,17 @@ bool VirtualKeyboardParser::parserCallback_layout(ParserNode *node) { } _mode->bitmapName = node->values["bitmap"]; - _mode->image = ImageMan.getSurface(_mode->bitmapName); - if (!_mode->image) { - if (!ImageMan.registerSurface(_mode->bitmapName, 0)) - return parserError("Error loading bitmap '%s'", _mode->bitmapName.c_str()); - - _mode->image = ImageMan.getSurface(_mode->bitmapName); - if (!_mode->image) - return parserError("Error loading bitmap '%s'", _mode->bitmapName.c_str()); - } - + + SeekableReadStream *file = _keyboard->_fileArchive->openFile(_mode->bitmapName); + if (!file) + return parserError("Bitmap '%s' not found", _mode->bitmapName.c_str()); + + _mode->image = Graphics::ImageDecoder::loadFile(*file); + delete file; + + if (!_mode->image) + return parserError("Error loading bitmap '%s'", _mode->bitmapName.c_str()); + const Graphics::PixelFormat format = g_system->getOverlayFormat(); int r, g, b; if (node->values.contains("transparent_color")) { diff --git a/backends/vkeybd/virtual-keyboard.cpp b/backends/vkeybd/virtual-keyboard.cpp index 8f8e19e331..b03c2fe445 100644 --- a/backends/vkeybd/virtual-keyboard.cpp +++ b/backends/vkeybd/virtual-keyboard.cpp @@ -27,7 +27,6 @@ #include "backends/vkeybd/virtual-keyboard.h" -#include "backends/vkeybd/imageman.h" #include "backends/vkeybd/virtual-keyboard-gui.h" #include "backends/vkeybd/virtual-keyboard-parser.h" #include "backends/vkeybd/keycode-descriptions.h" @@ -47,13 +46,14 @@ VirtualKeyboard::VirtualKeyboard() : _currentMode(0) { _parser = new VirtualKeyboardParser(this); _kbdGUI = new VirtualKeyboardGUI(this); _submitKeys = _loaded = false; - + _fileArchive = 0; } VirtualKeyboard::~VirtualKeyboard() { deleteEvents(); delete _kbdGUI; delete _parser; + delete _fileArchive; } void VirtualKeyboard::deleteEvents() { @@ -80,6 +80,9 @@ void VirtualKeyboard::reset() { bool VirtualKeyboard::loadKeyboardPack(String packName) { _kbdGUI->initSize(_system->getOverlayWidth(), _system->getOverlayHeight()); + delete _fileArchive; + _fileArchive = 0; + FSNode vkDir; if (ConfMan.hasKey("vkeybdpath")) vkDir = FSNode(ConfMan.get("vkeybdpath")); @@ -89,6 +92,8 @@ bool VirtualKeyboard::loadKeyboardPack(String packName) { vkDir = FSNode("."); if (vkDir.getChild(packName + ".xml").exists()) { + _fileArchive = new FSDirectory(vkDir, 1); + // uncompressed keyboard pack if (!_parser->loadFile(vkDir.getChild(packName + ".xml"))) return false; @@ -96,15 +101,14 @@ bool VirtualKeyboard::loadKeyboardPack(String packName) { } else if (vkDir.getChild(packName + ".zip").exists()) { // compressed keyboard pack #ifdef USE_ZLIB - ZipArchive arch(vkDir.getChild(packName + ".zip")); - if (arch.hasFile(packName + ".xml")) { - if (!_parser->loadStream(arch.openFile(packName + ".xml"))) + _fileArchive = new ZipArchive(vkDir.getChild(packName + ".zip")); + if (_fileArchive->hasFile(packName + ".xml")) { + if (!_parser->loadStream(_fileArchive->openFile(packName + ".xml"))) return false; } else { warning("Could not find %s.xml file in %s.zip keyboard pack", packName.c_str(), packName.c_str()); return false; } - ImageMan.addArchive(vkDir.getChild(packName + ".zip").getPath().c_str()); #else return false; #endif diff --git a/backends/vkeybd/virtual-keyboard.h b/backends/vkeybd/virtual-keyboard.h index 2a95f419aa..30e1f0cbcd 100644 --- a/backends/vkeybd/virtual-keyboard.h +++ b/backends/vkeybd/virtual-keyboard.h @@ -44,6 +44,8 @@ class OSystem; namespace Common { +class Archive; + class VirtualKeyboardGUI; class VirtualKeyboardParser; @@ -118,7 +120,7 @@ protected: OverlayColor displayFontColor; Mode() : image(0), displayArea(0) {} - ~Mode() { delete displayArea; } + ~Mode() { delete image; delete displayArea; } }; typedef HashMap<String, Mode, IgnoreCase_Hash, IgnoreCase_EqualTo> ModeMap; @@ -219,6 +221,7 @@ public: protected: OSystem *_system; + Archive *_fileArchive; friend class VirtualKeyboardGUI; VirtualKeyboardGUI *_kbdGUI; |