aboutsummaryrefslogtreecommitdiff
path: root/engines/m4/viewmgr.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2010-03-23 12:02:23 +0000
committerPaul Gilbert2010-03-23 12:02:23 +0000
commitb46a2b4e100e3018d604da240cecf936c629e8a0 (patch)
treec9cd258d0e9181a2cbaea51611971ee94d58b6b6 /engines/m4/viewmgr.cpp
parent9571c817c7b7f30ed33ff5d4a07d80b8cea4f8c1 (diff)
downloadscummvm-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.cpp66
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;