aboutsummaryrefslogtreecommitdiff
path: root/engines/mutationofjb/widgets
diff options
context:
space:
mode:
authorĽubomír Remák2018-04-14 23:04:20 +0200
committerEugene Sandulenko2018-08-25 23:12:01 +0200
commit61c106b3307ee2f8aaa579dbc5d7c8f8e62ae41a (patch)
tree90eddbbbc6be77b6e45fb52135c88cab40648ab1 /engines/mutationofjb/widgets
parent5290d9a74b2f704675cf5ae69bcf892b5afd274f (diff)
downloadscummvm-rg350-61c106b3307ee2f8aaa579dbc5d7c8f8e62ae41a.tar.gz
scummvm-rg350-61c106b3307ee2f8aaa579dbc5d7c8f8e62ae41a.tar.bz2
scummvm-rg350-61c106b3307ee2f8aaa579dbc5d7c8f8e62ae41a.zip
MUTATIONOFJB: Add font support and conversation widget.
Diffstat (limited to 'engines/mutationofjb/widgets')
-rw-r--r--engines/mutationofjb/widgets/conversationwidget.cpp65
-rw-r--r--engines/mutationofjb/widgets/conversationwidget.h50
-rw-r--r--engines/mutationofjb/widgets/widget.cpp15
-rw-r--r--engines/mutationofjb/widgets/widget.h6
4 files changed, 134 insertions, 2 deletions
diff --git a/engines/mutationofjb/widgets/conversationwidget.cpp b/engines/mutationofjb/widgets/conversationwidget.cpp
new file mode 100644
index 0000000000..6196bc672a
--- /dev/null
+++ b/engines/mutationofjb/widgets/conversationwidget.cpp
@@ -0,0 +1,65 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "mutationofjb/widgets/conversationwidget.h"
+#include "mutationofjb/game.h"
+#include "mutationofjb/gui.h"
+#include "mutationofjb/font.h"
+
+namespace MutationOfJB {
+
+enum {
+ CONVERSATION_LINES_X = 5,
+ CONVERSATION_LINES_Y = 151,
+ CONVERSATION_LINE_HEIGHT = 12
+};
+
+ConversationWidget::ConversationWidget(Gui &gui, const Common::Rect &area, const Graphics::Surface &surface) :
+ Widget(gui, area),
+ _surface(surface) {}
+
+
+void ConversationWidget::setLine(int lineNo, const Common::String &str) {
+ if (lineNo >= CONVERSATION_LINES) {
+ return;
+ }
+
+ _lines[lineNo] = str;
+ markDirty();
+}
+
+void ConversationWidget::_draw(Graphics::ManagedSurface &surface) {
+ surface.blitFrom(_surface, Common::Point(_area.left, _area.top));
+
+ for (int i = 0; i < CONVERSATION_LINES; ++i) {
+ Common::String &line = _lines[i];
+ if (line.empty()) {
+ continue;
+ }
+
+ // TODO: Active line should be Gui::WHITE.
+ _gui.getGame().getSystemFont().drawString(line, Gui::LIGHTGRAY, CONVERSATION_LINES_X, CONVERSATION_LINES_Y + i * CONVERSATION_LINE_HEIGHT, surface);
+ }
+}
+
+}
+
diff --git a/engines/mutationofjb/widgets/conversationwidget.h b/engines/mutationofjb/widgets/conversationwidget.h
new file mode 100644
index 0000000000..0f26a99d3f
--- /dev/null
+++ b/engines/mutationofjb/widgets/conversationwidget.h
@@ -0,0 +1,50 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef MUTATIONOFJB_CONVERSATIONWIDGET_H
+#define MUTATIONOFJB_CONVERSATIONWIDGET_H
+
+#include "mutationofjb/widgets/widget.h"
+#include "graphics/surface.h"
+
+namespace MutationOfJB {
+
+class ConversationWidget : public Widget {
+public:
+ enum { CONVERSATION_LINES = 4 };
+
+ ConversationWidget(Gui &gui, const Common::Rect &area, const Graphics::Surface &surface);
+
+ void setLine(int lineNo, const Common::String &str);
+
+protected:
+ void _draw(Graphics::ManagedSurface &surface);
+
+private:
+
+ Graphics::Surface _surface;
+ Common::String _lines[CONVERSATION_LINES];
+};
+
+}
+
+#endif
diff --git a/engines/mutationofjb/widgets/widget.cpp b/engines/mutationofjb/widgets/widget.cpp
index fea7f6fbe0..5503f625cd 100644
--- a/engines/mutationofjb/widgets/widget.cpp
+++ b/engines/mutationofjb/widgets/widget.cpp
@@ -32,6 +32,17 @@ void Widget::setId(int id) {
_id = id;
}
+bool Widget::isVisible() const {
+ return _visible;
+}
+
+void Widget::setVisible(bool visible) {
+ if (!_visible && visible) {
+ markDirty();
+ }
+ _visible = visible;
+}
+
void Widget::markDirty() {
_dirty = true;
}
@@ -42,7 +53,9 @@ bool Widget::isDirty() const {
void Widget::update(Graphics::ManagedSurface &surface) {
if (_dirty) {
- _draw(surface);
+ if (_visible) {
+ _draw(surface);
+ }
_dirty = false;
}
}
diff --git a/engines/mutationofjb/widgets/widget.h b/engines/mutationofjb/widgets/widget.h
index f81d466c1c..ed3a3acd54 100644
--- a/engines/mutationofjb/widgets/widget.h
+++ b/engines/mutationofjb/widgets/widget.h
@@ -40,12 +40,15 @@ class Gui;
class Widget {
public:
- Widget(Gui &gui, const Common::Rect &area) : _gui(gui), _area(area), _id(0), _dirty(true) {}
+ Widget(Gui &gui, const Common::Rect &area) : _gui(gui), _area(area), _id(0), _visible(true), _dirty(true) {}
virtual ~Widget() {}
int getId() const;
void setId(int id);
+ bool isVisible() const;
+ void setVisible(bool visible);
+
bool isDirty() const;
void markDirty();
void update(Graphics::ManagedSurface &);
@@ -57,6 +60,7 @@ protected:
Gui &_gui;
Common::Rect _area;
int _id;
+ bool _visible;
bool _dirty;
};