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 | |
| 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.
| -rw-r--r-- | gui/object.cpp | 15 | ||||
| -rw-r--r-- | gui/widget.cpp | 25 | ||||
| -rw-r--r-- | gui/widget.h | 6 | 
3 files changed, 26 insertions, 20 deletions
diff --git a/gui/object.cpp b/gui/object.cpp index 2d9e9597f5..de66d95492 100644 --- a/gui/object.cpp +++ b/gui/object.cpp @@ -44,21 +44,6 @@ void GuiObject::reflowLayout() {  		if (!g_gui.xmlEval()->getWidgetData(_name, _x, _y, _w, _h)) {  			error("Could not load widget position for '%s'", _name.c_str());  		} - -		/* -		if (_x < 0) -			error("Widget <%s> has x < 0 (%d)", _name.c_str(), _x); -		if (_x >= g_gui.getWidth()) -			error("Widget <%s> has x > %d (%d)", _name.c_str(), g_gui.getWidth(), _x); -		if (_x + _w > g_gui.getWidth()) -			error("Widget <%s> has x + w > %d (%d)", _name.c_str(), g_gui.getWidth(), _x + _w); -		if (_y < 0) -			error("Widget <%s> has y < 0 (%d)", _name.c_str(), _y); -		if (_y >= g_gui.getHeight()) -			error("Widget <%s> has y > %d (%d)", _name.c_str(), g_gui.getHeight(), _y); -		if (_y + _h > g_gui.getHeight()) -			error("Widget <%s> has y + h > %d (%d)", _name.c_str(), g_gui.getHeight(), _y + _h); -			*/  	}  } 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; diff --git a/gui/widget.h b/gui/widget.h index db801fa49b..0f4b300233 100644 --- a/gui/widget.h +++ b/gui/widget.h @@ -112,11 +112,7 @@ public:  	virtual int16	getAbsX() const	{ return _x + _boss->getChildX(); }  	virtual int16	getAbsY() const	{ return _y + _boss->getChildY(); } -	virtual Common::Rect getBossClipRect() const { -		int px = _boss->getAbsX(); -		int py = _boss->getAbsY(); -		return Common::Rect(px, py, px + _boss->getWidth(), py + _boss->getHeight()); -	} +	virtual Common::Rect getBossClipRect() const;  	virtual void setPos(int x, int y) { _x = x; _y = y; }  	virtual void setSize(int w, int h) { _w = w; _h = h; }  | 
