diff options
author | Ľubomír Remák | 2018-04-14 23:04:20 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-25 23:12:01 +0200 |
commit | 61c106b3307ee2f8aaa579dbc5d7c8f8e62ae41a (patch) | |
tree | 90eddbbbc6be77b6e45fb52135c88cab40648ab1 /engines/mutationofjb/widgets | |
parent | 5290d9a74b2f704675cf5ae69bcf892b5afd274f (diff) | |
download | scummvm-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.cpp | 65 | ||||
-rw-r--r-- | engines/mutationofjb/widgets/conversationwidget.h | 50 | ||||
-rw-r--r-- | engines/mutationofjb/widgets/widget.cpp | 15 | ||||
-rw-r--r-- | engines/mutationofjb/widgets/widget.h | 6 |
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; }; |