From 6f03947bc940d9725727bcbcd80c07816a8dab49 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Tue, 19 Apr 2016 11:14:48 +0200 Subject: WAGE: Implemented text console callback --- engines/wage/gui.cpp | 25 +++++++++++++++++++++++++ engines/wage/gui.h | 10 ++++++++-- engines/wage/macwindow.cpp | 2 ++ engines/wage/macwindow.h | 2 +- 4 files changed, 36 insertions(+), 3 deletions(-) (limited to 'engines') diff --git a/engines/wage/gui.cpp b/engines/wage/gui.cpp index c93c1ee751..6f8c7c5efe 100644 --- a/engines/wage/gui.cpp +++ b/engines/wage/gui.cpp @@ -143,6 +143,9 @@ static void cursorTimerHandler(void *refCon) { gui->_cursorDirty = true; } +static void sceneWindowCallback(WindowClick click, Common::Event &event, void *gui); +static void consoleWindowCallback(WindowClick click, Common::Event &event, void *gui); + Gui::Gui(WageEngine *engine) { _engine = engine; _scene = NULL; @@ -190,7 +193,10 @@ Gui::Gui(WageEngine *engine) { _menu = new Menu(this); _sceneWindow = _wm.add(false); + _sceneWindow->setCallback(sceneWindowCallback, this); + _consoleWindow = _wm.add(true); + _consoleWindow->setCallback(consoleWindowCallback, this); } Gui::~Gui() { @@ -303,6 +309,9 @@ void Gui::drawScene() { _consoleTextArea.setHeight(_scene->_textBounds->height() - 2 * kBorderWidth); } +static void sceneWindowCallback(WindowClick click, Common::Event &event, void *gui) { +} + // Render console void Gui::drawConsole() { if (!_consoleDirty && !_consoleFullRedraw && !_bordersDirty && !_sceneDirty) @@ -314,6 +323,22 @@ void Gui::drawConsole() { _consoleWindow->setDirty(true); } +static void consoleWindowCallback(WindowClick click, Common::Event &event, void *g) { + Gui *gui = (Gui *)g; + + if (click == kBorderScrollUp || click == kBorderScrollDown) { + int textFullSize = gui->getLinesSize() * gui->getConsoleLineHeight() + gui->getConsoleTextAreaHeight(); + float scrollPos = (float)gui->getScrollPos() / textFullSize; + float scrollSize = (float)gui->getConsoleTextAreaHeight() / textFullSize; + + gui->_consoleWindow->setScroll(scrollPos, scrollSize); + + warning("pos: %f size: %f", scrollPos, scrollSize); + + return; + } +} + void Gui::drawBox(Graphics::ManagedSurface *g, int x, int y, int w, int h) { Common::Rect r(x, y, x + w + 1, y + h + 1); diff --git a/engines/wage/gui.h b/engines/wage/gui.h index 58d24bfb5d..99bfbd8fad 100644 --- a/engines/wage/gui.h +++ b/engines/wage/gui.h @@ -114,6 +114,11 @@ public: bool builtInFonts() { return _builtInFonts; } + uint getScrollPos() { return _scrollPos; } + uint getLinesSize() { return _lines.size(); } + int getConsoleLineHeight() { return _consoleLineHeight; } + int getConsoleTextAreaHeight() { return _consoleTextArea.height(); } + private: void drawScene(); void drawConsole(); @@ -150,6 +155,9 @@ public: bool _menuDirty; + MacWindow *_sceneWindow; + MacWindow *_consoleWindow; + private: Graphics::ManagedSurface _console; Menu *_menu; @@ -181,8 +189,6 @@ private: int _inputTextLineNum; MacWindowManager _wm; - MacWindow *_sceneWindow; - MacWindow *_consoleWindow; }; } // End of namespace Wage diff --git a/engines/wage/macwindow.cpp b/engines/wage/macwindow.cpp index 048b193db0..b9c7f7a664 100644 --- a/engines/wage/macwindow.cpp +++ b/engines/wage/macwindow.cpp @@ -294,6 +294,7 @@ bool MacWindow::processEvent(Common::Event &event) { } void MacWindow::mouseDown(Common::Event &event) { + _innerDims.debugPrint(); if (_innerDims.contains(event.mouse.x, event.mouse.y)) { if (!_callback) return; @@ -303,6 +304,7 @@ void MacWindow::mouseDown(Common::Event &event) { } WindowClick click = isInBorder(_innerDims, event.mouse.x, event.mouse.y); + warning("click: %d", click); if (click == kBorderNone) return; diff --git a/engines/wage/macwindow.h b/engines/wage/macwindow.h index 1998bffe0c..af64de21eb 100644 --- a/engines/wage/macwindow.h +++ b/engines/wage/macwindow.h @@ -82,7 +82,7 @@ public: Graphics::ManagedSurface *getSurface() { return &_surface; } void setTitle(Common::String &title) { _title = title; } void setHighlight(WindowClick highlightedPart) { _highlightedPart = highlightedPart; } - void setScroll(float scrollPos, float scrollSize) { _scrollPos = scrollPos; _scrollSize = scrollSize; } + void setScroll(float scrollPos, float scrollSize) { _scrollPos = scrollPos; _scrollSize = scrollSize; _borderIsDirty = true; } void setDirty(bool dirty) { _contentIsDirty = dirty; } int getId() { return _id; } bool processEvent(Common::Event &event); -- cgit v1.2.3