diff options
author | Martin Kiewitz | 2010-01-04 22:14:34 +0000 |
---|---|---|
committer | Martin Kiewitz | 2010-01-04 22:14:34 +0000 |
commit | 05a16d7cba889c3daf947a727917ce2dc9bd1eab (patch) | |
tree | f81b65a5460fd329724220df52f2fd1713cb3bf0 /engines/sci/gui/gui.cpp | |
parent | f7855e1c071fb85e968e7b1446ce668b0cd59e86 (diff) | |
download | scummvm-rg350-05a16d7cba889c3daf947a727917ce2dc9bd1eab.tar.gz scummvm-rg350-05a16d7cba889c3daf947a727917ce2dc9bd1eab.tar.bz2 scummvm-rg350-05a16d7cba889c3daf947a727917ce2dc9bd1eab.zip |
SCI: surprise for this DrMcCoy guy
svn-id: r46992
Diffstat (limited to 'engines/sci/gui/gui.cpp')
-rw-r--r-- | engines/sci/gui/gui.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/engines/sci/gui/gui.cpp b/engines/sci/gui/gui.cpp index 47d32e27c5..48f99ffa51 100644 --- a/engines/sci/gui/gui.cpp +++ b/engines/sci/gui/gui.cpp @@ -65,6 +65,8 @@ SciGui::SciGui(EngineState *state, SciGuiScreen *screen, SciGuiPalette *palette, _controls = new SciGuiControls(_s->_segMan, _gfx, _text); _menu = new SciGuiMenu(_s->_event, _s->_segMan, _gfx, _text, _screen, _cursor); // _gui32 = new SciGui32(_s, _screen, _palette, _cursor); // for debug purposes + + _screenItemCount = 0; } SciGui::SciGui() { @@ -837,6 +839,41 @@ uint16 SciGui::getScreenHeight() { return _screen->_displayHeight; } +void SciGui::addScreenItem(reg_t object) { + _screenItems.push_back(object); + _screenItemCount++; +} + +void SciGui::frameOut() { + for (int itemNr = 0; itemNr < _screenItemCount; itemNr++) { + reg_t viewObj = _screenItems[itemNr]; + uint16 viewId = GET_SEL32V(_s->_segMan, viewObj, view); + uint16 loopNo = GET_SEL32V(_s->_segMan, viewObj, loop); + uint16 celNo = GET_SEL32V(_s->_segMan, viewObj, cel); + uint16 leftPos = GET_SEL32V(_s->_segMan, viewObj, x); + uint16 topPos = GET_SEL32V(_s->_segMan, viewObj, y); + int16 priority = GET_SEL32V(_s->_segMan, viewObj, priority); + //int16 control = 0; + + // Theoretically, leftPos and topPos should be sane + // Apparently, sometimes they're not, therefore I'm adding some sanity checks here so that + // the hack underneath does not try and draw cels outside the screen coordinates + if (leftPos >= getScreenWidth()) { + warning("kAddScreenItem: invalid left position (%d), resetting to 0", leftPos); + leftPos = 0; + } + + if (topPos >= getScreenHeight()) { + warning("kAddScreenItem: invalid top position (%d), resetting to 0", topPos); + topPos = 0; + } + + // HACK: just draw the view on screen + if (viewId != 0xffff) + drawCel(viewId, loopNo, celNo, leftPos, topPos, priority, 0); + } +} + bool SciGui::debugUndither(bool flag) { _screen->unditherSetState(flag); return false; |