aboutsummaryrefslogtreecommitdiff
path: root/gui/widget.cpp
diff options
context:
space:
mode:
authorAlexander Tkachev2016-07-02 14:35:37 +0600
committerEugene Sandulenko2016-07-03 12:24:56 +0200
commit846619fd42ecb11e94958e39bd61ea29a9ff76cd (patch)
tree5667ead84b94a8b8e5c829d023e82af1186a107a /gui/widget.cpp
parent6de5324742fd1ceaa00d9f361638b0c0a9882999 (diff)
downloadscummvm-rg350-846619fd42ecb11e94958e39bd61ea29a9ff76cd.tar.gz
scummvm-rg350-846619fd42ecb11e94958e39bd61ea29a9ff76cd.tar.bz2
scummvm-rg350-846619fd42ecb11e94958e39bd61ea29a9ff76cd.zip
GUI: Add checks in Widget::getBossClipRect()
Prints a warning if clipping area is invalid and fixes it.
Diffstat (limited to 'gui/widget.cpp')
-rw-r--r--gui/widget.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/gui/widget.cpp b/gui/widget.cpp
index 56b7e91455..32ca0223c5 100644
--- a/gui/widget.cpp
+++ b/gui/widget.cpp
@@ -53,6 +53,31 @@ void Widget::init() {
_boss->_firstWidget = this;
}
+Common::Rect Widget::getBossClipRect() const {
+ int bx = _boss->getAbsX();
+ int by = _boss->getAbsY();
+ Common::Rect result = Common::Rect(bx, by, bx + _boss->getWidth(), by + _boss->getHeight());
+ bool needsClipping = false;
+
+ //check whether clipping area is inside the screen
+ if (result.left < 0 && (needsClipping = true))
+ warning("Widget <%s> has clipping area x < 0 (%d)", _name.c_str(), result.left);
+ if (result.left >= g_gui.getWidth() && (needsClipping = true))
+ warning("Widget <%s> has clipping area x > %d (%d)", _name.c_str(), g_gui.getWidth(), result.left);
+ if (result.right > g_gui.getWidth() && (needsClipping = true))
+ warning("Widget <%s> has clipping area x + w > %d (%d)", _name.c_str(), g_gui.getWidth(), result.right);
+ if (result.top < 0 && (needsClipping = true))
+ warning("Widget <%s> has clipping area y < 0 (%d)", _name.c_str(), result.top);
+ if (result.top >= g_gui.getHeight() && (needsClipping = true))
+ warning("Widget <%s> has clipping area y > %d (%d)", _name.c_str(), g_gui.getHeight(), result.top);
+ if (result.bottom > g_gui.getHeight() && (needsClipping = true))
+ warning("Widget <%s> has clipping area y + h > %d (%d)", _name.c_str(), g_gui.getHeight(), result.bottom);
+
+ if (needsClipping)
+ result.clip(g_gui.getWidth(), g_gui.getHeight());
+ return result;
+}
+
Widget::~Widget() {
delete _next;
_next = 0;