aboutsummaryrefslogtreecommitdiff
path: root/engines/hugo/dialogs.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2013-04-18 23:37:54 +0200
committerWillem Jan Palenstijn2013-05-08 20:46:44 +0200
commit02c5cc75a7cb8885d2a0fa141fbc0e763c5b31a0 (patch)
tree72b64a67ebeca41e9b83593da80850e848a99e2e /engines/hugo/dialogs.cpp
parent1539023834a2ad7cf8942711d60983891a10a82a (diff)
parent1e200620d673af4acdd2d128ed6e390df001aacf (diff)
downloadscummvm-rg350-02c5cc75a7cb8885d2a0fa141fbc0e763c5b31a0.tar.gz
scummvm-rg350-02c5cc75a7cb8885d2a0fa141fbc0e763c5b31a0.tar.bz2
scummvm-rg350-02c5cc75a7cb8885d2a0fa141fbc0e763c5b31a0.zip
Merge branch 'master'
Conflicts: configure base/plugins.cpp
Diffstat (limited to 'engines/hugo/dialogs.cpp')
-rw-r--r--engines/hugo/dialogs.cpp95
1 files changed, 52 insertions, 43 deletions
diff --git a/engines/hugo/dialogs.cpp b/engines/hugo/dialogs.cpp
index c43cdd7b46..0f07d52aee 100644
--- a/engines/hugo/dialogs.cpp
+++ b/engines/hugo/dialogs.cpp
@@ -21,7 +21,7 @@
*/
#include "common/substream.h"
-#include "graphics/imagedec.h"
+#include "graphics/decoders/bmp.h"
#include "gui/gui-manager.h"
#include "gui/ThemeEval.h"
@@ -34,19 +34,19 @@
namespace Hugo {
-TopMenu::TopMenu(HugoEngine *vm) : Dialog(0, 0, kMenuWidth, kMenuHeight), arrayBmp(0), arraySize(0),
+TopMenu::TopMenu(HugoEngine *vm) : Dialog(0, 0, kMenuWidth, kMenuHeight), _arrayBmp(0), _arraySize(0),
_vm(vm) {
init();
}
TopMenu::~TopMenu() {
- for (int i = 0; i < arraySize; i++) {
- arrayBmp[i * 2]->free();
- delete arrayBmp[i * 2];
- arrayBmp[i * 2 + 1]->free();
- delete arrayBmp[i * 2 + 1];
+ for (int i = 0; i < _arraySize; i++) {
+ _arrayBmp[i * 2]->free();
+ delete _arrayBmp[i * 2];
+ _arrayBmp[i * 2 + 1]->free();
+ delete _arrayBmp[i * 2 + 1];
}
- delete[] arrayBmp;
+ delete[] _arrayBmp;
}
void TopMenu::init() {
@@ -108,53 +108,62 @@ void TopMenu::reflowLayout() {
x += kButtonWidth + kButtonPad;
// Set the graphics to the 'on' buttons, except for the variable ones
- _whatButton->setGfx(arrayBmp[4 * kMenuWhat + scale - 1]);
- _musicButton->setGfx(arrayBmp[4 * kMenuMusic + scale - 1 + ((_vm->_config.musicFl) ? 0 : 2)]);
- _soundFXButton->setGfx(arrayBmp[4 * kMenuSoundFX + scale - 1 + ((_vm->_config.soundFl) ? 0 : 2)]);
- _saveButton->setGfx(arrayBmp[4 * kMenuSave + scale - 1]);
- _loadButton->setGfx(arrayBmp[4 * kMenuLoad + scale - 1]);
- _recallButton->setGfx(arrayBmp[4 * kMenuRecall + scale - 1]);
- _turboButton->setGfx(arrayBmp[4 * kMenuTurbo + scale - 1 + ((_vm->_config.turboFl) ? 0 : 2)]);
- _lookButton->setGfx(arrayBmp[4 * kMenuLook + scale - 1]);
- _inventButton->setGfx(arrayBmp[4 * kMenuInventory + scale - 1]);
+ _whatButton->setGfx(_arrayBmp[4 * kMenuWhat + scale - 1]);
+ _musicButton->setGfx(_arrayBmp[4 * kMenuMusic + scale - 1 + ((_vm->_config._musicFl) ? 0 : 2)]);
+ _soundFXButton->setGfx(_arrayBmp[4 * kMenuSoundFX + scale - 1 + ((_vm->_config._soundFl) ? 0 : 2)]);
+ _saveButton->setGfx(_arrayBmp[4 * kMenuSave + scale - 1]);
+ _loadButton->setGfx(_arrayBmp[4 * kMenuLoad + scale - 1]);
+ _recallButton->setGfx(_arrayBmp[4 * kMenuRecall + scale - 1]);
+ _turboButton->setGfx(_arrayBmp[4 * kMenuTurbo + scale - 1 + ((_vm->_config._turboFl) ? 0 : 2)]);
+ _lookButton->setGfx(_arrayBmp[4 * kMenuLook + scale - 1]);
+ _inventButton->setGfx(_arrayBmp[4 * kMenuInventory + scale - 1]);
}
void TopMenu::loadBmpArr(Common::SeekableReadStream &in) {
- arraySize = in.readUint16BE();
+ _arraySize = in.readUint16BE();
- delete arrayBmp;
- arrayBmp = new Graphics::Surface *[arraySize * 2];
- for (int i = 0; i < arraySize; i++) {
+ delete _arrayBmp;
+ _arrayBmp = new Graphics::Surface *[_arraySize * 2];
+ for (int i = 0; i < _arraySize; i++) {
uint16 bmpSize = in.readUint16BE();
uint32 filPos = in.pos();
Common::SeekableSubReadStream stream(&in, filPos, filPos + bmpSize);
- arrayBmp[i * 2] = Graphics::ImageDecoder::loadFile(stream, g_system->getOverlayFormat());
- arrayBmp[i * 2 + 1] = new Graphics::Surface();
- arrayBmp[i * 2 + 1]->create(arrayBmp[i * 2]->w * 2, arrayBmp[i * 2]->h * 2, g_system->getOverlayFormat());
- byte *src = (byte *)arrayBmp[i * 2]->pixels;
- byte *dst = (byte *)arrayBmp[i * 2 + 1]->pixels;
-
- for (int j = 0; j < arrayBmp[i * 2]->h; j++) {
- src = (byte *)arrayBmp[i * 2]->getBasePtr(0, j);
- dst = (byte *)arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);
- for (int k = arrayBmp[i * 2]->w; k > 0; k--) {
- for (int m = arrayBmp[i * 2]->format.bytesPerPixel; m > 0; m--) {
+
+ Graphics::BitmapDecoder bitmapDecoder;
+ if (!bitmapDecoder.loadStream(stream))
+ error("TopMenu::loadBmpArr(): Could not load bitmap");
+
+ const Graphics::Surface *bitmapSrc = bitmapDecoder.getSurface();
+ if (bitmapSrc->format.bytesPerPixel == 1)
+ error("TopMenu::loadBmpArr(): Unhandled paletted image");
+
+ _arrayBmp[i * 2] = bitmapSrc->convertTo(g_system->getOverlayFormat());
+ _arrayBmp[i * 2 + 1] = new Graphics::Surface();
+ _arrayBmp[i * 2 + 1]->create(_arrayBmp[i * 2]->w * 2, _arrayBmp[i * 2]->h * 2, g_system->getOverlayFormat());
+ byte *src = (byte *)_arrayBmp[i * 2]->pixels;
+ byte *dst = (byte *)_arrayBmp[i * 2 + 1]->pixels;
+
+ for (int j = 0; j < _arrayBmp[i * 2]->h; j++) {
+ src = (byte *)_arrayBmp[i * 2]->getBasePtr(0, j);
+ dst = (byte *)_arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);
+ for (int k = _arrayBmp[i * 2]->w; k > 0; k--) {
+ for (int m = _arrayBmp[i * 2]->format.bytesPerPixel; m > 0; m--) {
*dst++ = *src++;
}
- src -= arrayBmp[i * 2]->format.bytesPerPixel;
+ src -= _arrayBmp[i * 2]->format.bytesPerPixel;
- for (int m = arrayBmp[i * 2]->format.bytesPerPixel; m > 0; m--) {
+ for (int m = _arrayBmp[i * 2]->format.bytesPerPixel; m > 0; m--) {
*dst++ = *src++;
}
}
- src = (byte *)arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);
- dst = (byte *)arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2 + 1);
- for (int k = arrayBmp[i * 2 + 1]->pitch; k > 0; k--) {
+ src = (byte *)_arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);
+ dst = (byte *)_arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2 + 1);
+ for (int k = _arrayBmp[i * 2 + 1]->pitch; k > 0; k--) {
*dst++ = *src++;
}
}
- in.skip(bmpSize);
+ in.seek(filPos + bmpSize);
}
}
@@ -162,12 +171,12 @@ void TopMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32 d
switch (command) {
case kCmdWhat:
close();
- _vm->getGameStatus().helpFl = true;
+ _vm->getGameStatus()._helpFl = true;
break;
case kCmdMusic:
_vm->_sound->toggleMusic();
- _musicButton->setGfx(arrayBmp[4 * kMenuMusic + (g_system->getOverlayWidth() > 320 ? 2 : 1) - 1 + ((_vm->_config.musicFl) ? 0 : 2)]);
+ _musicButton->setGfx(_arrayBmp[4 * kMenuMusic + (g_system->getOverlayWidth() > 320 ? 2 : 1) - 1 + ((_vm->_config._musicFl) ? 0 : 2)]);
_musicButton->draw();
g_gui.theme()->updateScreen();
g_system->updateScreen();
@@ -185,8 +194,8 @@ void TopMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32 d
break;
case kCmdSave:
close();
- if (_vm->getGameStatus().viewState == kViewPlay) {
- if (_vm->getGameStatus().gameOverFl)
+ if (_vm->getGameStatus()._viewState == kViewPlay) {
+ if (_vm->getGameStatus()._gameOverFl)
_vm->gameOverMsg();
else
_vm->_file->saveGame(-1, Common::String());
@@ -198,7 +207,7 @@ void TopMenu::handleCommand(GUI::CommandSender *sender, uint32 command, uint32 d
break;
case kCmdRecall:
close();
- _vm->getGameStatus().recallFl = true;
+ _vm->getGameStatus()._recallFl = true;
break;
case kCmdTurbo:
_vm->_parser->switchTurbo();