diff options
author | Paul Gilbert | 2010-03-23 12:02:23 +0000 |
---|---|---|
committer | Paul Gilbert | 2010-03-23 12:02:23 +0000 |
commit | b46a2b4e100e3018d604da240cecf936c629e8a0 (patch) | |
tree | c9cd258d0e9181a2cbaea51611971ee94d58b6b6 /engines/m4/viewmgr.cpp | |
parent | 9571c817c7b7f30ed33ff5d4a07d80b8cea4f8c1 (diff) | |
download | scummvm-rg350-b46a2b4e100e3018d604da240cecf936c629e8a0.tar.gz scummvm-rg350-b46a2b4e100e3018d604da240cecf936c629e8a0.tar.bz2 scummvm-rg350-b46a2b4e100e3018d604da240cecf936c629e8a0.zip |
Added further code for the game dialog framework
svn-id: r48368
Diffstat (limited to 'engines/m4/viewmgr.cpp')
-rw-r--r-- | engines/m4/viewmgr.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/engines/m4/viewmgr.cpp b/engines/m4/viewmgr.cpp index 46b4b5af9d..a1e9c3e584 100644 --- a/engines/m4/viewmgr.cpp +++ b/engines/m4/viewmgr.cpp @@ -194,6 +194,72 @@ void View::onRefresh(RectList *rects, M4Surface *destSurface) { //-------------------------------------------------------------------------- +MadsTextDisplay::MadsTextDisplay() { + for (int i = 0; i < TEXT_DISPLAY_SIZE; ++i) + _entries[i].active = false; +} + +int MadsTextDisplay::add(int xp, int yp, uint fontColour, int charSpacing, const char *msg, Font *font) { + int usedSlot = -1; + + for (int idx = 0; idx < TEXT_DISPLAY_SIZE; ++idx) { + if (!_entries[idx].active) { + usedSlot = idx; + + _entries[idx].bounds.left = xp; + _entries[idx].bounds.top = yp; + _entries[idx].font = font; + _entries[idx].msg = msg; + _entries[idx].bounds.setWidth(font->getWidth(msg, charSpacing)); + _entries[idx].bounds.setHeight(font->getHeight()); + _entries[idx].colour1 = fontColour & 0xff; + _entries[idx].colour2 = fontColour >> 8; + _entries[idx].spacing = charSpacing; + _entries[idx].active2 = 1; + _entries[idx].active = true; + break; + } + } + + return usedSlot; +} + +void MadsTextDisplay::draw(View *view) { + for (int idx = 0; idx < OLD_TEXT_DISPLAY_SIZE; ++idx) { + if (_entries[idx].active && (_entries[idx].active2 >= 0)) { + _entries[idx].font->setColours(_entries[idx].colour1, 0xFF, + (_entries[idx].colour2 == 0) ? _entries[idx].colour1 : _entries[idx].colour2); + _entries[idx].font->writeString(view, _entries[idx].msg, + _entries[idx].bounds.left, _entries[idx].bounds.top, _entries[idx].bounds.width(), + _entries[idx].spacing); + } + } + + // Clear up any now inactive text display entries + for (int idx = 0; idx < OLD_TEXT_DISPLAY_SIZE; ++idx) { + if (_entries[idx].active2 < 0) { + _entries[idx].active = false; + _entries[idx].active2 = 0; + } + } +} + +//-------------------------------------------------------------------------- + +MadsView::MadsView(MadsM4Engine *vm, const Common::Rect &viewBounds, bool transparent): View(vm, viewBounds, transparent) { + _spriteSlotsStart = 0; +} + +MadsView::MadsView(MadsM4Engine *vm, int x, int y, bool transparent): View(vm, x, y, transparent) { + _spriteSlotsStart = 0; +} + +int MadsView::getSpriteSlotsIndex() { + return _spriteSlotsStart++; +} + +//-------------------------------------------------------------------------- + ViewManager::ViewManager(MadsM4Engine *vm): _systemHotkeys(HotkeyList(NULL)), _vm(vm) { _captureScreen = NULL; _captureEvents = false; |