aboutsummaryrefslogtreecommitdiff
path: root/backends/vkeybd
diff options
context:
space:
mode:
authorNorbert Lange2009-07-01 14:45:24 +0000
committerNorbert Lange2009-07-01 14:45:24 +0000
commitabef70f4e14f495b20097cb46411d1fafbafdd53 (patch)
tree27462f82f352b303ac059dd275466930c88b2de6 /backends/vkeybd
parent3b94e2488df9a699a899727515ac69af6a0a1a6e (diff)
parentf9298ff40310149779b37ccdecc873afba7adf2f (diff)
downloadscummvm-rg350-abef70f4e14f495b20097cb46411d1fafbafdd53.tar.gz
scummvm-rg350-abef70f4e14f495b20097cb46411d1fafbafdd53.tar.bz2
scummvm-rg350-abef70f4e14f495b20097cb46411d1fafbafdd53.zip
Merging in changes from trunk
svn-id: r41989
Diffstat (limited to 'backends/vkeybd')
-rw-r--r--backends/vkeybd/packs/vkeybd_default.zipbin505646 -> 508756 bytes
-rw-r--r--backends/vkeybd/packs/vkeybd_default/lowercase320x240.bmpbin153654 -> 153654 bytes
-rw-r--r--backends/vkeybd/packs/vkeybd_default/lowercase640x480.bmpbin612534 -> 612534 bytes
-rw-r--r--backends/vkeybd/packs/vkeybd_default/vkeybd_default.xml6
-rw-r--r--backends/vkeybd/virtual-keyboard.cpp85
-rw-r--r--backends/vkeybd/virtual-keyboard.h4
6 files changed, 64 insertions, 31 deletions
diff --git a/backends/vkeybd/packs/vkeybd_default.zip b/backends/vkeybd/packs/vkeybd_default.zip
index c58c26fc5f..9311b2a902 100644
--- a/backends/vkeybd/packs/vkeybd_default.zip
+++ b/backends/vkeybd/packs/vkeybd_default.zip
Binary files differ
diff --git a/backends/vkeybd/packs/vkeybd_default/lowercase320x240.bmp b/backends/vkeybd/packs/vkeybd_default/lowercase320x240.bmp
index 27a450f2d2..3270bf21e4 100644
--- a/backends/vkeybd/packs/vkeybd_default/lowercase320x240.bmp
+++ b/backends/vkeybd/packs/vkeybd_default/lowercase320x240.bmp
Binary files differ
diff --git a/backends/vkeybd/packs/vkeybd_default/lowercase640x480.bmp b/backends/vkeybd/packs/vkeybd_default/lowercase640x480.bmp
index 3df2a58b83..610f0844d0 100644
--- a/backends/vkeybd/packs/vkeybd_default/lowercase640x480.bmp
+++ b/backends/vkeybd/packs/vkeybd_default/lowercase640x480.bmp
Binary files differ
diff --git a/backends/vkeybd/packs/vkeybd_default/vkeybd_default.xml b/backends/vkeybd/packs/vkeybd_default/vkeybd_default.xml
index aba31b1096..982c4f45ef 100644
--- a/backends/vkeybd/packs/vkeybd_default/vkeybd_default.xml
+++ b/backends/vkeybd/packs/vkeybd_default/vkeybd_default.xml
@@ -76,6 +76,8 @@
<area shape="rect" coords="202,110,219,128" target="," />
<area shape="rect" coords="223,110,241,128" target="." />
<area shape="rect" coords="243,110,261,128" target="/" />
+ <area shape="rect" coords="277,133,292,148" target="ok" />
+ <area shape="rect" coords="292,133,309,148" target="cancel" />
</map>
</layout>
<layout resolution="640x480" bitmap="lowercase640x480.bmp" transparent_color="255,0,255">
@@ -151,6 +153,8 @@
<area shape="rect" coords="405,220,440,256" target="," />
<area shape="rect" coords="447,220,483,256" target="." />
<area shape="rect" coords="487,220,524,256" target="/" />
+ <area shape="rect" coords="555,266,585,298" target="ok" />
+ <area shape="rect" coords="585,266,619,298" target="cancel" />
</map>
</layout>
<event name="esc" type="key" code="27" ascii="27" modifiers="" />
@@ -223,6 +227,8 @@
<event name="7" type="key" code="55" ascii="55" modifiers="" />
<event name="8" type="key" code="56" ascii="56" modifiers="" />
<event name="9" type="key" code="57" ascii="57" modifiers="" />
+ <event name="ok" type="submit" />
+ <event name="cancel" type="cancel" />
<event name="quit" type="submit" />
</mode>
diff --git a/backends/vkeybd/virtual-keyboard.cpp b/backends/vkeybd/virtual-keyboard.cpp
index a95b79d213..4ca4a5f586 100644
--- a/backends/vkeybd/virtual-keyboard.cpp
+++ b/backends/vkeybd/virtual-keyboard.cpp
@@ -31,7 +31,6 @@
#include "backends/vkeybd/virtual-keyboard-parser.h"
#include "backends/vkeybd/keycode-descriptions.h"
#include "common/config-manager.h"
-#include "common/fs.h"
#include "common/unzip.h"
#define KEY_START_CHAR ('[')
@@ -77,51 +76,77 @@ void VirtualKeyboard::reset() {
_kbdGUI->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"));
- else if (ConfMan.hasKey("extrapath"))
- vkDir = FSNode(ConfMan.get("extrapath"));
- else // use current directory
- vkDir = FSNode(".");
-
- if (vkDir.getChild(packName + ".xml").exists()) {
- _fileArchive = new FSDirectory(vkDir, 1);
+bool VirtualKeyboard::openPack(const String &packName, const FSNode &node) {
+ if (node.getChild(packName + ".xml").exists()) {
+ _fileArchive = new FSDirectory(node, 1);
// uncompressed keyboard pack
- if (!_parser->loadFile(vkDir.getChild(packName + ".xml")))
+ if (!_parser->loadFile(node.getChild(packName + ".xml"))) {
+ delete _fileArchive;
+ _fileArchive = 0;
return false;
+ }
+
+ return true;
+ }
- } else if (vkDir.getChild(packName + ".zip").exists()) {
- // compressed keyboard pack
#ifdef USE_ZLIB
- _fileArchive = new ZipArchive(vkDir.getChild(packName + ".zip"));
+ if (node.getChild(packName + ".zip").exists()) {
+ // compressed keyboard pack
+ _fileArchive = new ZipArchive(node.getChild(packName + ".zip"));
if (_fileArchive->hasFile(packName + ".xml")) {
- if (!_parser->loadStream(_fileArchive->createReadStreamForMember(packName + ".xml")))
+ if (!_parser->loadStream(_fileArchive->createReadStreamForMember(packName + ".xml"))) {
+ delete _fileArchive;
+ _fileArchive = 0;
return false;
+ }
} else {
warning("Could not find %s.xml file in %s.zip keyboard pack", packName.c_str(), packName.c_str());
+ delete _fileArchive;
+ _fileArchive = 0;
return false;
}
-#else
- return false;
+
+ return true;
+ }
#endif
+
+ return false;
+}
+
+bool VirtualKeyboard::loadKeyboardPack(const String &packName) {
+ _kbdGUI->initSize(_system->getOverlayWidth(), _system->getOverlayHeight());
+
+ delete _fileArchive;
+ _fileArchive = 0;
+ _loaded = false;
+
+ bool opened = false;
+ if (ConfMan.hasKey("vkeybdpath"))
+ opened = openPack(packName, FSNode(ConfMan.get("vkeybdpath")));
+ else if (ConfMan.hasKey("extrapath"))
+ opened = openPack(packName, FSNode(ConfMan.get("extrapath")));
+
+ // fallback to the current dir
+ if (!opened)
+ opened = openPack(packName, FSNode("."));
+
+ if (opened) {
+ _parser->setParseMode(VirtualKeyboardParser::kParseFull);
+ _loaded = _parser->parse();
+
+ if (_loaded) {
+ printf("Keyboard pack '%s' loaded successfully!\n", packName.c_str());
+ } else {
+ warning("Error parsing the keyboard pack '%s'", packName.c_str());
+
+ delete _fileArchive;
+ _fileArchive = 0;
+ }
} else {
warning("Keyboard pack not found");
- return false;
}
- _parser->setParseMode(VirtualKeyboardParser::kParseFull);
- _loaded = _parser->parse();
- if (_loaded)
- printf("Keyboard pack '%s' loaded successfully!\n", packName.c_str());
-
return _loaded;
}
diff --git a/backends/vkeybd/virtual-keyboard.h b/backends/vkeybd/virtual-keyboard.h
index e3a9cd3600..2c31afcb35 100644
--- a/backends/vkeybd/virtual-keyboard.h
+++ b/backends/vkeybd/virtual-keyboard.h
@@ -37,6 +37,7 @@ class OSystem;
#include "common/keyboard.h"
#include "common/list.h"
#include "common/str.h"
+#include "common/fs.h"
#include "backends/vkeybd/image-map.h"
#include "graphics/surface.h"
@@ -190,7 +191,7 @@ public:
* searches for a compressed keyboard pack by looking for packName.zip.
* @param packName name of the keyboard pack
*/
- bool loadKeyboardPack(String packName);
+ bool loadKeyboardPack(const String &packName);
/**
* Shows the keyboard, starting an event loop that will intercept all
@@ -232,6 +233,7 @@ protected:
VirtualKeyboardParser *_parser;
void reset();
+ bool openPack(const String &packName, const FSNode &node);
void deleteEvents();
bool checkModeResolutions();
void switchMode(Mode *newMode);