diff options
author | Alexander Tkachev | 2016-07-02 14:35:37 +0600 |
---|---|---|
committer | Eugene Sandulenko | 2016-07-03 12:24:56 +0200 |
commit | 846619fd42ecb11e94958e39bd61ea29a9ff76cd (patch) | |
tree | 5667ead84b94a8b8e5c829d023e82af1186a107a /gui/widget.cpp | |
parent | 6de5324742fd1ceaa00d9f361638b0c0a9882999 (diff) | |
download | scummvm-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.cpp | 25 |
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; |