aboutsummaryrefslogtreecommitdiff
path: root/engines/wage/gui-console.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2016-02-25 11:29:06 +0100
committerEugene Sandulenko2016-02-25 11:51:21 +0100
commit1415e620e49ce5585c6e9d277c859e31a539a2a6 (patch)
tree498391181db0e3391279a681ba73d8af0f752b87 /engines/wage/gui-console.cpp
parent6ac4c9dedbe3d05f5424a4268c08fbaec86287d9 (diff)
downloadscummvm-rg350-1415e620e49ce5585c6e9d277c859e31a539a2a6.tar.gz
scummvm-rg350-1415e620e49ce5585c6e9d277c859e31a539a2a6.tar.bz2
scummvm-rg350-1415e620e49ce5585c6e9d277c859e31a539a2a6.zip
WAGE: Implemented cropping in cosole. That fixes crashes in Bug Hunt
Diffstat (limited to 'engines/wage/gui-console.cpp')
-rw-r--r--engines/wage/gui-console.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/engines/wage/gui-console.cpp b/engines/wage/gui-console.cpp
index ad1bf5839b..ab5df637ec 100644
--- a/engines/wage/gui-console.cpp
+++ b/engines/wage/gui-console.cpp
@@ -257,8 +257,30 @@ void Gui::renderConsole(Graphics::Surface *g, Common::Rect &r) {
y1 += _consoleLineHeight;
}
- g->copyRectToSurface(_console, r.left - kConOverscan, r.top - kConOverscan, boundsR);
- g_system->copyRectToScreen(g->getBasePtr(r.left, r.top), g->pitch, r.left, r.top, r.width(), r.height());
+ // Now we need to clip it to the screen
+ int xcon = r.left - kConOverscan;
+ int ycon = r.top - kConOverscan;
+ if (xcon < 0) {
+ boundsR.left -= xcon;
+ xcon = 0;
+ }
+ if (ycon < 0) {
+ boundsR.top -= ycon;
+ ycon = 0;
+ }
+ if (xcon + boundsR.width() >= g->w)
+ boundsR.right -= xcon + boundsR.width() - g->w;
+ if (ycon + boundsR.height() >= g->h)
+ boundsR.bottom -= ycon + boundsR.height() - g->h;
+
+ Common::Rect rr(r);
+ if (rr.right > _screen.w - 1)
+ rr.right = _screen.w - 1;
+ if (rr.bottom > _screen.h - 1)
+ rr.bottom = _screen.h - 1;
+
+ g->copyRectToSurface(_console, xcon, ycon, boundsR);
+ g_system->copyRectToScreen(g->getBasePtr(rr.left, rr.top), g->pitch, rr.left, rr.top, rr.width(), rr.height());
}
void Gui::drawInput() {