[Scummvm-git-logs] scummvm master -> f8e24e7bb06c6fecbc5e925627bf7e813907eb8c

aquadran noreply at scummvm.org
Sun Aug 31 15:54:48 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
f8e24e7bb0 WINTERMUTE: Synced with original code


Commit: f8e24e7bb06c6fecbc5e925627bf7e813907eb8c
    https://github.com/scummvm/scummvm/commit/f8e24e7bb06c6fecbc5e925627bf7e813907eb8c
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-08-31T17:54:44+02:00

Commit Message:
WINTERMUTE: Synced with original code

Changed paths:
    engines/wintermute/ad/ad_game.cpp
    engines/wintermute/ad/ad_inventory_box.cpp
    engines/wintermute/ad/ad_response_box.cpp
    engines/wintermute/base/base_active_rect.cpp
    engines/wintermute/base/base_frame.cpp
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/base_object.cpp
    engines/wintermute/base/base_region.cpp
    engines/wintermute/base/base_sprite.cpp
    engines/wintermute/base/base_sub_frame.cpp
    engines/wintermute/base/base_sub_frame.h
    engines/wintermute/base/base_viewport.cpp
    engines/wintermute/base/font/base_font_bitmap.cpp
    engines/wintermute/base/font/base_font_truetype.cpp
    engines/wintermute/base/gfx/base_renderer.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
    engines/wintermute/base/gfx/xmodel.cpp
    engines/wintermute/base/particles/part_emitter.cpp
    engines/wintermute/base/particles/part_particle.cpp
    engines/wintermute/math/rect32.h
    engines/wintermute/platform_osystem.cpp
    engines/wintermute/platform_osystem.h
    engines/wintermute/ui/ui_tiled_image.cpp
    engines/wintermute/ui/ui_window.cpp
    engines/wintermute/video/video_player.cpp
    engines/wintermute/video/video_theora_player.cpp


diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp
index 98354c5c4ad..567f7237d56 100644
--- a/engines/wintermute/ad/ad_game.cpp
+++ b/engines/wintermute/ad/ad_game.cpp
@@ -2535,7 +2535,7 @@ bool AdGame::getLayerSize(int *layerWidth, int *layerHeight, Rect32 *viewport, b
 		_scene->getViewportSize(&portWidth, &portHeight);
 		*customViewport = _sceneViewport || _scene->_viewport;
 
-		viewport->setRect(portX, portY, portX + portWidth, portY + portHeight);
+		BasePlatform::setRect(viewport, portX, portY, portX + portWidth, portY + portHeight);
 
 #ifdef ENABLE_WME3D
 		if (_scene->_scroll3DCompatibility) {
diff --git a/engines/wintermute/ad/ad_inventory_box.cpp b/engines/wintermute/ad/ad_inventory_box.cpp
index 52535e37e09..51404773fbd 100644
--- a/engines/wintermute/ad/ad_inventory_box.cpp
+++ b/engines/wintermute/ad/ad_inventory_box.cpp
@@ -47,7 +47,7 @@ IMPLEMENT_PERSISTENT(AdInventoryBox, false)
 
 //////////////////////////////////////////////////////////////////////////
 AdInventoryBox::AdInventoryBox(BaseGame *inGame) : BaseObject(inGame) {
-	_itemsArea.setEmpty();
+	BasePlatform::setRectEmpty(&_itemsArea);
 	_scrollOffset = 0;
 	_spacing = 0;
 	_itemWidth = _itemHeight = 50;
@@ -129,7 +129,7 @@ bool AdInventoryBox::display() {
 	// display window
 	Rect32 rect = _itemsArea;
 	if (_window) {
-		rect.offsetRect(_window->_posX, _window->_posY);
+		BasePlatform::offsetRect(&rect, _window->_posX, _window->_posY);
 		_window->display();
 	}
 
diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp
index 5caae533512..790f019753b 100644
--- a/engines/wintermute/ad/ad_response_box.cpp
+++ b/engines/wintermute/ad/ad_response_box.cpp
@@ -58,7 +58,7 @@ AdResponseBox::AdResponseBox(BaseGame *inGame) : BaseObject(inGame) {
 	_shieldWindow = new UIWindow(_gameRef);
 
 	_horizontal = false;
-	_responseArea.setEmpty();
+	BasePlatform::setRectEmpty(&_responseArea);
 	_scrollOffset = 0;
 	_spacing = 0;
 
@@ -448,7 +448,7 @@ bool AdResponseBox::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 bool AdResponseBox::display() {
 	Rect32 rect = _responseArea;
 	if (_window) {
-		rect.offsetRect(_window->_posX, _window->_posY);
+		BasePlatform::offsetRect(&rect, _window->_posX, _window->_posY);
 		//_window->display();
 	}
 
diff --git a/engines/wintermute/base/base_active_rect.cpp b/engines/wintermute/base/base_active_rect.cpp
index e6465bb9207..3c5c50bda0e 100644
--- a/engines/wintermute/base/base_active_rect.cpp
+++ b/engines/wintermute/base/base_active_rect.cpp
@@ -36,7 +36,7 @@ namespace Wintermute {
 
 //////////////////////////////////////////////////////////////////////
 BaseActiveRect::BaseActiveRect(BaseGame *inGame) : BaseClass(inGame) {
-	_rect.setEmpty();
+	BasePlatform::setRectEmpty(&_rect);
 	_owner = nullptr;
 	_frame = nullptr;
 #ifdef ENABLE_WME3D
@@ -54,7 +54,7 @@ BaseActiveRect::BaseActiveRect(BaseGame *inGame) : BaseClass(inGame) {
 BaseActiveRect::BaseActiveRect(BaseGame *inGame, BaseObject *owner, BaseSubFrame *frame, int x, int y, int width, int height, float zoomX, float zoomY, bool precise) : BaseClass(inGame) {
 	_owner = owner;
 	_frame = frame;
-	_rect.setRect(x, y, x + width, y + height);
+	BasePlatform::setRect(&_rect, x, y, x + width, y + height);
 	_zoomX = zoomX;
 	_zoomY = zoomY;
 	_precise = precise;
@@ -71,7 +71,7 @@ BaseActiveRect::BaseActiveRect(BaseGame *inGame, BaseObject *owner, BaseSubFrame
 BaseActiveRect::BaseActiveRect(BaseGame *inGame, BaseObject *owner, XModel *model, int x, int y, int width, int height, bool precise) : BaseClass(inGame) {
 	_owner = owner;
 	_xmodel = model;
-	_rect.setRect(x, y, x + width, y + height);
+	BasePlatform::setRect(&_rect, x, y, x + width, y + height);
 	_zoomX = 100;
 	_zoomY = 100;
 	_precise = precise;
@@ -87,7 +87,7 @@ BaseActiveRect::BaseActiveRect(BaseGame *inGame, BaseObject *owner, BaseRegion *
 	_owner = owner;
 	_region = region;
 	BasePlatform::copyRect(&_rect, &region->_rect);
-	_rect.offsetRect(-offsetX, -offsetY);
+	BasePlatform::offsetRect(&_rect, -offsetX, -offsetY);
 	_zoomX = 100;
 	_zoomY = 100;
 	_precise = true;
@@ -116,13 +116,13 @@ void BaseActiveRect::clipRect() {
 	Rect32 rc;
 	bool customViewport;
 	_gameRef->getCurrentViewportRect(&rc, &customViewport);
-	BaseRenderer *Rend = BaseEngine::getRenderer();
+	BaseRenderer *rend = BaseEngine::getRenderer();
 
 	if (!customViewport) {
-		rc.left -= Rend->_drawOffsetX;
-		rc.right -= Rend->_drawOffsetX;
-		rc.top -= Rend->_drawOffsetY;
-		rc.bottom -= Rend->_drawOffsetY;
+		rc.left -= rend->_drawOffsetX;
+		rc.right -= rend->_drawOffsetX;
+		rc.top -= rend->_drawOffsetY;
+		rc.bottom -= rend->_drawOffsetY;
 	}
 
 	if (rc.left > _rect.left) {
diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp
index 0b8fece22fc..c20a8dcaef1 100644
--- a/engines/wintermute/base/base_frame.cpp
+++ b/engines/wintermute/base/base_frame.cpp
@@ -179,7 +179,7 @@ bool BaseFrame::loadBuffer(char *buffer, int lifeTime, bool keepLoaded) {
 	bool decoration = false;
 	bool mirrorX = false;
 	bool mirrorY = false;
-	rect.setEmpty();
+	BasePlatform::setRectEmpty(&rect);
 	char *surface_file = nullptr;
 
 	while ((cmd = parser.getCommand(&buffer, commands, &params)) > 0) {
@@ -327,7 +327,7 @@ bool BaseFrame::loadBuffer(char *buffer, int lifeTime, bool keepLoaded) {
 		}
 	}
 
-	if (rect.isRectEmpty()) {
+	if (BasePlatform::isRectEmpty(&rect)) {
 		sub->setDefaultRect();
 	} else {
 		sub->setRect(rect);
@@ -354,7 +354,7 @@ bool BaseFrame::getBoundingRect(Rect32 *rect, int x, int y, float scaleX, float
 	if (!rect) {
 		return false;
 	}
-	rect->setEmpty();
+	BasePlatform::setRectEmpty(rect);
 
 	Rect32 subRect;
 
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index f106e715173..c16350bddc6 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -237,7 +237,7 @@ BaseGame::BaseGame(const Common::String &targetName) : BaseObject(this), _target
 	m_AccessGlobalPaused = false;
 	m_AccessShieldWin = NULL;*/
 
-	_mouseLockRect.setEmpty();
+	BasePlatform::setRectEmpty(&_mouseLockRect);
 
 	_suppressScriptErrors = false;
 	_lastMiniUpdate = 0;
@@ -1291,7 +1291,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 			BaseUtils::swap(&top, &bottom);
 		}
 
-		_mouseLockRect.setRect(left, top, right, bottom);
+		BasePlatform::setRect(&_mouseLockRect, left, top, right, bottom);
 
 		stack->pushNULL();
 		return STATUS_OK;
@@ -4220,7 +4220,7 @@ bool BaseGame::getCurrentViewportRect(Rect32 *rect, bool *custom) const {
 				*custom = true;
 			}
 		} else {
-			rect->setRect(_renderer->_drawOffsetX,
+			BasePlatform::setRect(rect, _renderer->_drawOffsetX,
 			              _renderer->_drawOffsetY,
 			              _renderer->getWidth() + _renderer->_drawOffsetX,
 			              _renderer->getHeight() + _renderer->_drawOffsetY);
@@ -4686,7 +4686,7 @@ bool BaseGame::getLayerSize(int *layerWidth, int *layerHeight, Rect32 *viewport,
 		*layerWidth = _renderer->getWidth();
 		*layerHeight = _renderer->getHeight();
 		*customViewport = false;
-		viewport->setRect(0, 0, _renderer->getWidth(), _renderer->getHeight());
+		BasePlatform::setRect(viewport, 0, 0, _renderer->getWidth(), _renderer->getHeight());
 		return true;
 	} else
 		return false;
diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp
index 5368b4d76f3..cbb34e9fa81 100644
--- a/engines/wintermute/base/base_object.cpp
+++ b/engines/wintermute/base/base_object.cpp
@@ -73,7 +73,7 @@ BaseObject::BaseObject(BaseGame *inGame) : BaseScriptHolder(inGame) {
 
 	_iD = _gameRef->getSequence();
 
-	_rect.setEmpty();
+	BasePlatform::setRectEmpty(&_rect);
 	_rectSet = false;
 
 	_cursor = nullptr;
diff --git a/engines/wintermute/base/base_region.cpp b/engines/wintermute/base/base_region.cpp
index 4dc4a63c5ab..047d0c53dee 100644
--- a/engines/wintermute/base/base_region.cpp
+++ b/engines/wintermute/base/base_region.cpp
@@ -47,7 +47,7 @@ BaseRegion::BaseRegion(BaseGame *inGame) : BaseObject(inGame) {
 	_lastMimicScale = -1;
 	_lastMimicX = _lastMimicY = INT_MIN_VALUE;
 
-	_rect.setEmpty();
+	BasePlatform::setRectEmpty(&_rect);
 }
 
 
@@ -64,7 +64,7 @@ void BaseRegion::cleanup() {
 	}
 	_points.removeAll();
 
-	_rect.setEmpty();
+	BasePlatform::setRectEmpty(&_rect);
 	_editorSelectedPoint = -1;
 }
 
@@ -493,7 +493,7 @@ bool BaseRegion::ptInPolygon(int32 x, int32 y) {
 //////////////////////////////////////////////////////////////////////////
 bool BaseRegion::getBoundingRect(Rect32 *rect) {
 	if (_points.getSize() == 0) {
-		rect->setEmpty();
+		BasePlatform::setRectEmpty(rect);
 	} else {
 		int32 minX = INT_MAX_VALUE, minY = INT_MAX_VALUE, maxX = INT_MIN_VALUE, maxY = INT_MIN_VALUE;
 
@@ -504,7 +504,7 @@ bool BaseRegion::getBoundingRect(Rect32 *rect) {
 			maxX = MAX(maxX, _points[i]->x);
 			maxY = MAX(maxY, _points[i]->y);
 		}
-		rect->setRect(minX, minY, maxX, maxY);
+		BasePlatform::setRect(rect, minX, minY, maxX, maxY);
 	}
 	return STATUS_OK;
 }
diff --git a/engines/wintermute/base/base_sprite.cpp b/engines/wintermute/base/base_sprite.cpp
index f30e63ceb03..afce32f6d81 100644
--- a/engines/wintermute/base/base_sprite.cpp
+++ b/engines/wintermute/base/base_sprite.cpp
@@ -468,7 +468,7 @@ bool BaseSprite::getBoundingRect(Rect32 *rect, int x, int y, float scaleX, float
 		return false;
 	}
 
-	rect->setEmpty();
+	BasePlatform::setRectEmpty(rect);
 	for (int32 i = 0; i < _frames.getSize(); i++) {
 		Rect32 frame;
 		Rect32 temp;
diff --git a/engines/wintermute/base/base_sub_frame.cpp b/engines/wintermute/base/base_sub_frame.cpp
index 9eeb960d67e..d0f0c378c33 100644
--- a/engines/wintermute/base/base_sub_frame.cpp
+++ b/engines/wintermute/base/base_sub_frame.cpp
@@ -36,6 +36,7 @@
 #include "engines/wintermute/base/gfx/base_renderer.h"
 #include "engines/wintermute/base/scriptables/script_value.h"
 #include "engines/wintermute/base/scriptables/script_stack.h"
+#include "engines/wintermute/platform_osystem.h"
 
 namespace Wintermute {
 
@@ -50,7 +51,7 @@ BaseSubFrame::BaseSubFrame(BaseGame *inGame) : BaseScriptable(inGame, true) {
 	_transparent = 0xFFFF00FF;
 
 	_wantsDefaultRect = false;
-	_rect.setEmpty();
+	BasePlatform::setRectEmpty(&_rect);
 
 	_editorSelected = false;
 
@@ -117,7 +118,7 @@ bool BaseSubFrame::loadBuffer(char *buffer, int lifeTime, bool keepLoaded) {
 	int r = 255, g = 255, b = 255;
 	int ar = 255, ag = 255, ab = 255, alpha = 255;
 	bool customTrans = false;
-	rect.setEmpty();
+	BasePlatform::setRectEmpty(&rect);
 	char *surfaceFile = nullptr;
 
 	delete _surface;
@@ -207,7 +208,7 @@ bool BaseSubFrame::loadBuffer(char *buffer, int lifeTime, bool keepLoaded) {
 	    return STATUS_FAILED;
 	}
 	*/
-	if (rect.isRectEmpty()) {
+	if (BasePlatform::isRectEmpty(&rect)) {
 		setDefaultRect();
 	} else {
 		setRect(rect);
@@ -216,9 +217,9 @@ bool BaseSubFrame::loadBuffer(char *buffer, int lifeTime, bool keepLoaded) {
 	return STATUS_OK;
 }
 
-Rect32 BaseSubFrame::getRect() {
+Rect32 &BaseSubFrame::getRect() {
 	if (_wantsDefaultRect && _surface) {
-		_rect.setRect(0, 0, _surface->getWidth(), _surface->getHeight());
+		BasePlatform::setRect(&_rect, 0, 0, _surface->getWidth(), _surface->getHeight());
 		_wantsDefaultRect = false;
 	}
 	return _rect;
@@ -286,7 +287,7 @@ bool BaseSubFrame::getBoundingRect(Rect32 *rect, int x, int y, float scaleX, flo
 	float ratioX = scaleX / 100.0f;
 	float ratioY = scaleY / 100.0f;
 
-	rect->setRect((int)(x - _hotspotX * ratioX),
+	BasePlatform::setRect(rect, (int)(x - _hotspotX * ratioX),
 				  (int)(y - _hotspotY * ratioY),
 				  (int)(x - _hotspotX * ratioX + (getRect().right - getRect().left) * ratioX),
 				  (int)(y - _hotspotY * ratioY + (getRect().bottom - getRect().top) * ratioY));
@@ -309,11 +310,11 @@ bool BaseSubFrame::saveAsText(BaseDynamicBuffer *buffer, int indent, bool comple
 	}
 
 	Rect32 rect;
-	rect.setEmpty();
+	BasePlatform::setRectEmpty(&rect);
 	if (_surface) {
-		rect.setRect(0, 0, _surface->getWidth(), _surface->getHeight());
+		BasePlatform::setRect(&rect, 0, 0, _surface->getWidth(), _surface->getHeight());
 	}
-	if (!(rect == getRect())) {
+	if (!BasePlatform::equalRect(&rect, &getRect())) {
 		buffer->putTextIndent(indent + 2, "RECT { %d,%d,%d,%d }\n", getRect().left, getRect().top, getRect().right, getRect().bottom);
 	}
 
@@ -367,7 +368,7 @@ void BaseSubFrame::setDefaultRect() {
 		_wantsDefaultRect = true;
 	} else {
 		_wantsDefaultRect = false;
-		_rect.setEmpty();
+		BasePlatform::setRectEmpty(&_rect);
 	}
 }
 
diff --git a/engines/wintermute/base/base_sub_frame.h b/engines/wintermute/base/base_sub_frame.h
index 6003e90053a..bcaf29751f8 100644
--- a/engines/wintermute/base/base_sub_frame.h
+++ b/engines/wintermute/base/base_sub_frame.h
@@ -61,7 +61,7 @@ public:
 	uint32 _alpha;
 	// These two setters and getters are rather useful, as they allow _rect to be lazily defined
 	// Thus we don't need to load the actual graphics before the rect is actually needed.
-	Rect32 getRect();
+	Rect32 &getRect();
 	void setRect(Rect32 rect);
 private:
 	bool _wantsDefaultRect;
diff --git a/engines/wintermute/base/base_viewport.cpp b/engines/wintermute/base/base_viewport.cpp
index bcb4abd17fa..6b4c0e61768 100644
--- a/engines/wintermute/base/base_viewport.cpp
+++ b/engines/wintermute/base/base_viewport.cpp
@@ -29,6 +29,7 @@
 #include "engines/wintermute/base/base_engine.h"
 #include "engines/wintermute/base/base_persistence_manager.h"
 #include "engines/wintermute/base/gfx/base_renderer.h"
+#include "engines/wintermute/platform_osystem.h"
 
 namespace Wintermute {
 
@@ -36,7 +37,7 @@ IMPLEMENT_PERSISTENT(BaseViewport, false)
 
 //////////////////////////////////////////////////////////////////////////
 BaseViewport::BaseViewport(BaseGame *inGame) : BaseClass(inGame) {
-	_rect.setEmpty();
+	BasePlatform::setRectEmpty(&_rect);
 	_mainObject = nullptr;
 	_offsetX = _offsetY = 0;
 }
@@ -71,7 +72,7 @@ bool BaseViewport::setRect(int32 left, int32 top, int32 right, int32 bottom, boo
 		bottom = MIN(bottom, BaseEngine::instance().getRenderer()->getHeight());
 	}
 
-	_rect.setRect(left, top, right, bottom);
+	BasePlatform::setRect(&_rect, left, top, right, bottom);
 	_offsetX = left;
 	_offsetY = top;
 	return STATUS_OK;
diff --git a/engines/wintermute/base/font/base_font_bitmap.cpp b/engines/wintermute/base/font/base_font_bitmap.cpp
index 1d8c5db561d..5af7fd989d4 100644
--- a/engines/wintermute/base/font/base_font_bitmap.cpp
+++ b/engines/wintermute/base/font/base_font_bitmap.cpp
@@ -37,6 +37,7 @@
 #include "engines/wintermute/base/base_frame.h"
 #include "engines/wintermute/base/base_sprite.h"
 #include "engines/wintermute/base/base_file_manager.h"
+#include "engines/wintermute/platform_osystem.h"
 
 namespace Wintermute {
 
@@ -260,7 +261,7 @@ void BaseFontBitmap::drawChar(byte c, int x, int y) {
 		tileWidth = _widths[c];
 	}
 
-	rect.setRect(col * _tileWidth, row * _tileHeight, col * _tileWidth + tileWidth, (row + 1) * _tileHeight);
+	BasePlatform::setRect(&rect, col * _tileWidth, row * _tileHeight, col * _tileWidth + tileWidth, (row + 1) * _tileHeight);
 	bool handled = false;
 	if (_sprite) {
 		_sprite->getCurrentFrame();
diff --git a/engines/wintermute/base/font/base_font_truetype.cpp b/engines/wintermute/base/font/base_font_truetype.cpp
index 7e469591a06..07f662ed28c 100644
--- a/engines/wintermute/base/font/base_font_truetype.cpp
+++ b/engines/wintermute/base/font/base_font_truetype.cpp
@@ -34,6 +34,7 @@
 #include "engines/wintermute/base/base_engine.h"
 #include "engines/wintermute/base/base_file_manager.h"
 #include "engines/wintermute/utils/utils.h"
+#include "engines/wintermute/platform_osystem.h"
 #include "engines/wintermute/wintermute.h"
 #include "graphics/fonts/ttf.h"
 #include "graphics/fontman.h"
@@ -210,7 +211,7 @@ void BaseFontTT::drawText(const byte *text, int x, int y, int width, TTextAlign
 	// and paint it
 	if (surface) {
 		Rect32 rc;
-		rc.setRect(0, 0, surface->getWidth(), surface->getHeight());
+		BasePlatform::setRect(&rc, 0, 0, surface->getWidth(), surface->getHeight());
 		for (int32 i = 0; i < _layers.getSize(); i++) {
 			uint32 color = _layers[i]->_color;
 			uint32 origForceAlpha = renderer->_forceAlphaColor;
diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp
index f35f334a7fc..58220bb77b4 100644
--- a/engines/wintermute/base/gfx/base_renderer.cpp
+++ b/engines/wintermute/base/gfx/base_renderer.cpp
@@ -69,7 +69,7 @@ BaseRenderer::BaseRenderer(BaseGame *inGame) : BaseClass(inGame) {
 	_loadImageX = _loadImageY = 0;
 
 	_width = _height = _bPP = 0;
-	_monitorRect.setEmpty();
+	BasePlatform::setRectEmpty(&_monitorRect);
 
 	_realWidth = _realHeight = 0;
 	_drawOffsetX = _drawOffsetY = 0;
@@ -367,7 +367,7 @@ bool BaseRenderer::displayIndicator() {
 bool BaseRenderer::displaySaveloadImage() {
 	if (_saveLoadImage && !_hasDrawnSaveLoadImage) {
 		Rect32 rc;
-		rc.setRect(0, 0, _saveLoadImage->getWidth(), _saveLoadImage->getHeight());
+		BasePlatform::setRect(&rc, 0, 0, _saveLoadImage->getWidth(), _saveLoadImage->getHeight());
 		if (_loadInProgress) {
 			_saveLoadImage->displayTrans(_loadImageX, _loadImageY, rc);
 		} else {
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 19be328dd6c..4516c8729fa 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -30,6 +30,7 @@
 #include "engines/wintermute/base/gfx/base_image.h"
 #include "engines/wintermute/base/gfx/3dcamera.h"
 #include "engines/wintermute/base/gfx/3dlight.h"
+#include "engines/wintermute/platform_osystem.h"
 
 #include "graphics/opengl/system_headers.h"
 
@@ -926,7 +927,7 @@ void BaseRenderOpenGL3D::disableCulling() {
 
 // implements D3D SetViewport() for 2D renderer
 bool BaseRenderOpenGL3D::setViewport(int left, int top, int right, int bottom) {
-	_viewportRect.setRect(left, top, right, bottom);
+	BasePlatform::setRect(&_viewportRect, left, top, right, bottom);
 	_viewport._x = left;
 	_viewport._y = top;
 	_viewport._width = right - left;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
index a567dfad1fb..a12c97b79cd 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -30,6 +30,7 @@
 #include "engines/wintermute/base/gfx/base_image.h"
 #include "engines/wintermute/base/gfx/3dcamera.h"
 #include "engines/wintermute/base/gfx/3dlight.h"
+#include "engines/wintermute/platform_osystem.h"
 
 #include "graphics/opengl/system_headers.h"
 
@@ -1011,7 +1012,7 @@ void BaseRenderOpenGL3DShader::disableCulling() {
 
 // implements D3D SetViewport() for 2D renderer
 bool BaseRenderOpenGL3DShader::setViewport(int left, int top, int right, int bottom) {
-	_viewportRect.setRect(left, top, right, bottom);
+	BasePlatform::setRect(&_viewportRect, left, top, right, bottom);
 	_viewport._x = left;
 	_viewport._y = top;
 	_viewport._width = right - left;
diff --git a/engines/wintermute/base/gfx/xmodel.cpp b/engines/wintermute/base/gfx/xmodel.cpp
index db6c115e844..cf3112924eb 100644
--- a/engines/wintermute/base/gfx/xmodel.cpp
+++ b/engines/wintermute/base/gfx/xmodel.cpp
@@ -43,6 +43,7 @@
 #include "engines/wintermute/base/gfx/xfile.h"
 #include "engines/wintermute/base/gfx/xfile_loader.h"
 #include "engines/wintermute/dcgf.h"
+#include "engines/wintermute/platform_osystem.h"
 #include "engines/wintermute/utils/path_util.h"
 #include "engines/wintermute/utils/utils.h"
 #include "engines/wintermute/wintermute.h"
@@ -64,7 +65,7 @@ XModel::XModel(BaseGame *inGame, BaseObject *owner) : BaseObject(inGame) {
 	_lastOffsetX = _lastOffsetY = 0;
 
 	_BBoxStart = _BBoxEnd = DXVector3(0.0f, 0.0f, 0.0f);
-	_boundingRect.setEmpty();
+	BasePlatform::setRectEmpty(&_boundingRect);
 
 	for (int i = 0; i < X_NUM_ANIMATION_CHANNELS; i++) {
 		_channels[i] = nullptr;
diff --git a/engines/wintermute/base/particles/part_emitter.cpp b/engines/wintermute/base/particles/part_emitter.cpp
index 752f61b9ccb..bb0d3bb31a8 100644
--- a/engines/wintermute/base/particles/part_emitter.cpp
+++ b/engines/wintermute/base/particles/part_emitter.cpp
@@ -37,6 +37,7 @@
 #include "engines/wintermute/base/base_file_manager.h"
 #include "engines/wintermute/base/gfx/base_renderer.h"
 #include "engines/wintermute/utils/utils.h"
+#include "engines/wintermute/platform_osystem.h"
 #include "common/str.h"
 #include "math/utils.h"
 
@@ -48,7 +49,7 @@ IMPLEMENT_PERSISTENT(PartEmitter, false)
 PartEmitter::PartEmitter(BaseGame *inGame, BaseScriptHolder *owner) : BaseObject(inGame) {
 	_width = _height = 0;
 
-	_border.setEmpty();
+	BasePlatform::setRectEmpty(&_border);
 	_borderThicknessLeft = _borderThicknessRight = _borderThicknessTop = _borderThicknessBottom = 0;
 
 	_angle1 = _angle2 = 0;
@@ -194,7 +195,7 @@ bool PartEmitter::initParticle(PartParticle *particle, uint32 currentTime, uint3
 	float angVelocity = BaseUtils::randomFloat(_angVelocity1, _angVelocity2);
 	float growthRate = BaseUtils::randomFloat(_growthRate1, _growthRate2);
 
-	if (!_border.isRectEmpty()) {
+	if (!BasePlatform::isRectEmpty(&_border)) {
 		int thicknessLeft   = (int)(_borderThicknessLeft   - (float)_borderThicknessLeft   * posZ / 100.0f);
 		int thicknessRight  = (int)(_borderThicknessRight  - (float)_borderThicknessRight  * posZ / 100.0f);
 		int thicknessTop    = (int)(_borderThicknessTop    - (float)_borderThicknessTop    * posZ / 100.0f);
@@ -387,7 +388,7 @@ int PartEmitter::compareZ(const void *obj1, const void *obj2) {
 
 //////////////////////////////////////////////////////////////////////////
 bool PartEmitter::setBorder(int x, int y, int width, int height) {
-	_border.setRect(x, y, x + width, y + height);
+	BasePlatform::setRect(&_border, x, y, x + width, y + height);
 
 	return STATUS_OK;
 }
diff --git a/engines/wintermute/base/particles/part_particle.cpp b/engines/wintermute/base/particles/part_particle.cpp
index 0e8333325a4..50192ed9550 100644
--- a/engines/wintermute/base/particles/part_particle.cpp
+++ b/engines/wintermute/base/particles/part_particle.cpp
@@ -44,7 +44,7 @@ PartParticle::PartParticle(BaseGame *inGame) : BaseClass(inGame) {
 	_creationTime = 0;
 	_lifeTime = 0;
 	_isDead = true;
-	_border.setEmpty();
+	BasePlatform::setRectEmpty(&_border);
 
 	_state = PARTICLE_NORMAL;
 	_fadeStart = 0;
@@ -124,7 +124,7 @@ bool PartParticle::update(PartEmitter *emitter, uint32 currentTime, uint32 timer
 		}
 
 		// particle hit the border
-		if (!_isDead && !_border.isRectEmpty()) {
+		if (!_isDead && !BasePlatform::isRectEmpty(&_border)) {
 			Point32 p;
 			p.x = (int32)_pos.x;
 			p.y = (int32)_pos.y;
diff --git a/engines/wintermute/math/rect32.h b/engines/wintermute/math/rect32.h
index 1861e83862a..6607da400e2 100644
--- a/engines/wintermute/math/rect32.h
+++ b/engines/wintermute/math/rect32.h
@@ -64,15 +64,6 @@ struct Rect32 {
 	Rect32() : top(0), left(0), bottom(0), right(0) {}
 	Rect32(int32 w, int32 h) : top(0), left(0), bottom(h), right(w) {}
 	Rect32(const Common::Rect &rect) : top(rect.top), left(rect.left), bottom(rect.bottom), right(rect.right) {}
-	Rect32(int32 x1, int32 y1, int32 x2, int32 y2) : top(y1), left(x1), bottom(y2), right(x2) {
-		assert(isValidRect());
-	}
-	bool operator==(const Rect32 &rhs) const {
-		return equals(rhs);
-	}
-	bool operator!=(const Rect32 &rhs) const {
-		return !equals(rhs);
-	}
 
 	int32 width() const {
 		return right - left;
@@ -80,51 +71,6 @@ struct Rect32 {
 	int32 height() const {
 		return bottom - top;
 	}
-
-	void setWidth(int32 aWidth) {
-		right = left + aWidth;
-	}
-
-	void setHeight(int32 aHeight) {
-		bottom = top + aHeight;
-	}
-
-	void setEmpty() {
-		left = right = top = bottom = 0;
-	}
-
-	bool isRectEmpty() const {
-		return (left >= right) || (top >= bottom);
-	}
-
-	void offsetRect(int dx, int dy) {
-		left   += dx;
-		top    += dy;
-		right  += dx;
-		bottom += dy;
-	}
-
-	void setRect(int32 newLeft, int32 newTop, int32 newRight, int32 newBottom) {
-		this->left   = newLeft;
-		this->top    = newTop;
-		this->right  = newRight;
-		this->bottom = newBottom;
-	}
-
-	/**
-	 * Check if the given rect is equal to this one.
-	 *
-	 * @param r The rectangle to check
-	 *
-	 * @return true if the given rect is equal, false otherwise
-	 */
-	bool equals(const Rect32 &r) const {
-		return (left == r.left) && (right == r.right) && (top == r.top) && (bottom == r.bottom);
-	}
-
-	bool isValidRect() const {
-		return (left <= right && top <= bottom);
-	}
 };
 
 } // End of namespace Wintermute
diff --git a/engines/wintermute/platform_osystem.cpp b/engines/wintermute/platform_osystem.cpp
index e867dad6aec..937f41f49c6 100644
--- a/engines/wintermute/platform_osystem.cpp
+++ b/engines/wintermute/platform_osystem.cpp
@@ -190,17 +190,54 @@ bool BasePlatform::setCursorPos(int x, int y) {
 	return true;
 }
 
+//////////////////////////////////////////////////////////////////////////
+bool BasePlatform::setRectEmpty(Rect32 *lprc) {
+	if (lprc == nullptr) {
+		return false;
+	}
+	lprc->left = lprc->right = lprc->top = lprc->bottom = 0;
+	return true;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BasePlatform::isRectEmpty(const Rect32 *lprc) {
+	if (lprc == nullptr) {
+		return false;
+	}
+	return ((lprc->left >= lprc->right) || (lprc->top >= lprc->bottom));
+}
+
 //////////////////////////////////////////////////////////////////////////
 bool BasePlatform::ptInRect(Rect32 *lprc, Point32 p) {
+	if (lprc == nullptr) {
+		return false;
+	}
 	return (p.x >= lprc->left) && (p.x < lprc->right) && (p.y >= lprc->top) && (p.y < lprc->bottom);
 }
 
+//////////////////////////////////////////////////////////////////////////
+bool BasePlatform::setRect(Rect32 *lprc, int32 left, int32 top, int32 right, int32 bottom) {
+	if (lprc == nullptr) {
+		return false;
+	}
+
+	lprc->left   = left;
+	lprc->right  = right;
+	lprc->top    = top;
+	lprc->bottom = bottom;
+	return true;
+}
+
 //////////////////////////////////////////////////////////////////////////
 bool BasePlatform::intersectRect(Rect32 *lprcDst, const Rect32 *lprcSrc1, const Rect32 *lprcSrc2) {
-	if (lprcSrc1->isRectEmpty() || lprcSrc2->isRectEmpty() ||
-	        lprcSrc1->left >= lprcSrc2->right || lprcSrc2->left >= lprcSrc1->right ||
-	        lprcSrc1->top >= lprcSrc2->bottom || lprcSrc2->top >= lprcSrc1->bottom) {
-		lprcDst->setEmpty();
+	if (lprcDst == nullptr || lprcSrc1 == nullptr || lprcSrc2 == nullptr) {
+		return false;
+	}
+
+	if (BasePlatform::isRectEmpty(lprcSrc1) || BasePlatform::isRectEmpty(lprcSrc2) ||
+		lprcSrc1->left >= lprcSrc2->right || lprcSrc2->left >= lprcSrc1->right ||
+		lprcSrc1->top >= lprcSrc2->bottom || lprcSrc2->top >= lprcSrc1->bottom) {
+		setRectEmpty(lprcDst);
 		return false;
 	}
 	lprcDst->left   = MAX(lprcSrc1->left, lprcSrc2->left);
@@ -213,15 +250,19 @@ bool BasePlatform::intersectRect(Rect32 *lprcDst, const Rect32 *lprcSrc1, const
 
 //////////////////////////////////////////////////////////////////////////
 bool BasePlatform::unionRect(Rect32 *lprcDst, Rect32 *lprcSrc1, Rect32 *lprcSrc2) {
-	if (lprcSrc1->isRectEmpty()) {
-		if (lprcSrc2->isRectEmpty()) {
-			lprcDst->setEmpty();
+	if (lprcDst == nullptr || lprcSrc1 == nullptr || lprcSrc2 == nullptr) {
+		return false;
+	}
+
+	if (isRectEmpty(lprcSrc1)) {
+		if (isRectEmpty(lprcSrc2)) {
+			setRectEmpty(lprcDst);
 			return false;
 		} else {
 			*lprcDst = *lprcSrc2;
 		}
 	} else {
-		if (lprcSrc2->isRectEmpty()) {
+		if (isRectEmpty(lprcSrc2)) {
 			*lprcDst = *lprcSrc1;
 		} else {
 			lprcDst->left   = MIN(lprcSrc1->left, lprcSrc2->left);
@@ -244,6 +285,27 @@ bool BasePlatform::copyRect(Rect32 *lprcDst, Rect32 *lprcSrc) {
 	return true;
 }
 
+//////////////////////////////////////////////////////////////////////////
+bool BasePlatform::equalRect(Rect32 *lprc1, Rect32 *lprc2) {
+	if (lprc1 == nullptr || lprc2 == nullptr) {
+		return false;
+	}
+	
+	return ((lprc1->left == lprc2->left) && (lprc1->right == lprc2->right) &&
+			(lprc1->top == lprc2->top) && (lprc1->bottom == lprc2->bottom));
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BasePlatform::offsetRect(Rect32 *lprc, int32 x, int32 y) {
+	if (!lprc)
+		return false;
+	lprc->left   += x;
+	lprc->right  += x;
+	lprc->top    += y;
+	lprc->bottom += y;
+	return true;
+}
+
 //////////////////////////////////////////////////////////////////////////
 AnsiString BasePlatform::getPlatformName() {
 	// TODO: Should conform to the WME-spec.
diff --git a/engines/wintermute/platform_osystem.h b/engines/wintermute/platform_osystem.h
index 487358a496d..84536ac1441 100644
--- a/engines/wintermute/platform_osystem.h
+++ b/engines/wintermute/platform_osystem.h
@@ -48,11 +48,15 @@ public:
 	static bool getCursorPos(Point32 *lpPoint);
 	static bool setCursorPos(int x, int y);
 
+	static bool setRectEmpty(Rect32 *lprc);
+	static bool isRectEmpty(const Rect32 *lprc);
 	static bool ptInRect(Rect32 *lprc, Point32 p);
-	static bool setRect(Rect32 *lprc, int left, int top, int right, int bottom);
+	static bool setRect(Rect32 *lprc, int32 left, int32 top, int32 right, int32 bottom);
 	static bool intersectRect(Rect32 *lprcDst, const Rect32 *lprcSrc1, const Rect32 *lprcSrc2);
 	static bool unionRect(Rect32 *lprcDst, Rect32 *lprcSrc1, Rect32 *lprcSrc2);
 	static bool copyRect(Rect32 *lprcDst, Rect32 *lprcSrc);
+	static bool equalRect(Rect32 *lprc1, Rect32 *lprc2);
+	static bool offsetRect(Rect32 *lprc, int32 x, int32 y);
 
 	// string functions
 	static char *wintermute_strlwr(char *string);
diff --git a/engines/wintermute/ui/ui_tiled_image.cpp b/engines/wintermute/ui/ui_tiled_image.cpp
index f4e5bc5547f..c3abf822f24 100644
--- a/engines/wintermute/ui/ui_tiled_image.cpp
+++ b/engines/wintermute/ui/ui_tiled_image.cpp
@@ -43,15 +43,15 @@ IMPLEMENT_PERSISTENT(UITiledImage, false)
 UITiledImage::UITiledImage(BaseGame *inGame) : BaseObject(inGame) {
 	_image = nullptr;
 
-	_upLeft.setEmpty();
-	_upMiddle.setEmpty();
-	_upRight.setEmpty();
-	_middleLeft.setEmpty();
-	_middleMiddle.setEmpty();
-	_middleRight.setEmpty();
-	_downLeft.setEmpty();
-	_downMiddle.setEmpty();
-	_downRight.setEmpty();
+	BasePlatform::setRectEmpty(&_upLeft);
+	BasePlatform::setRectEmpty(&_upMiddle);
+	BasePlatform::setRectEmpty(&_upRight);
+	BasePlatform::setRectEmpty(&_middleLeft);
+	BasePlatform::setRectEmpty(&_middleMiddle);
+	BasePlatform::setRectEmpty(&_middleRight);
+	BasePlatform::setRectEmpty(&_downLeft);
+	BasePlatform::setRectEmpty(&_downMiddle);
+	BasePlatform::setRectEmpty(&_downRight);
 }
 
 
@@ -269,19 +269,19 @@ bool UITiledImage::loadBuffer(char *buffer, bool complete) {
 
 	if (vTiles && hTiles) {
 		// up row
-		_upLeft.setRect(0, 0, h1, v1);
-		_upMiddle.setRect(h1, 0, h1 + h2, v1);
-		_upRight.setRect(h1 + h2, 0, h1 + h2 + h3, v1);
+		BasePlatform::setRect(&_upLeft, 0, 0, h1, v1);
+		BasePlatform::setRect(&_upMiddle, h1, 0, h1 + h2, v1);
+		BasePlatform::setRect(&_upRight, h1 + h2, 0, h1 + h2 + h3, v1);
 
 		// middle row
-		_middleLeft.setRect(0, v1, h1, v1 + v2);
-		_middleMiddle.setRect(h1, v1, h1 + h2, v1 + v2);
-		_middleRight.setRect(h1 + h2, v1, h1 + h2 + h3, v1 + v2);
+		BasePlatform::setRect(&_middleLeft, 0, v1, h1, v1 + v2);
+		BasePlatform::setRect(&_middleMiddle, h1, v1, h1 + h2, v1 + v2);
+		BasePlatform::setRect(&_middleRight, h1 + h2, v1, h1 + h2 + h3, v1 + v2);
 
 		// down row
-		_downLeft.setRect(0, v1 + v2, h1, v1 + v2 + v3);
-		_downMiddle.setRect(h1, v1 + v2, h1 + h2, v1 + v2 + v3);
-		_downRight.setRect(h1 + h2, v1 + v2, h1 + h2 + h3, v1 + v2 + v3);
+		BasePlatform::setRect(&_downLeft, 0, v1 + v2, h1, v1 + v2 + v3);
+		BasePlatform::setRect(&_downMiddle, h1, v1 + v2, h1 + h2, v1 + v2 + v3);
+		BasePlatform::setRect(&_downRight, h1 + h2, v1 + v2, h1 + h2 + h3, v1 + v2 + v3);
 	}
 
 	// default
@@ -289,34 +289,34 @@ bool UITiledImage::loadBuffer(char *buffer, bool complete) {
 		int width = _image->_surface->getWidth() / 3;
 		int height = _image->_surface->getHeight() / 3;
 
-		if (_upLeft.isRectEmpty()) {
-			_upLeft.setRect(0, 0, width, height);
+		if (BasePlatform::isRectEmpty(&_upLeft)) {
+			BasePlatform::setRect(&_upLeft, 0, 0, width, height);
 		}
-		if (_upMiddle.isRectEmpty()) {
-			_upMiddle.setRect(width, 0, 2 * width, height);
+		if (BasePlatform::isRectEmpty(&_upMiddle)) {
+			BasePlatform::setRect(&_upMiddle, width, 0, 2 * width, height);
 		}
-		if (_upRight.isRectEmpty()) {
-			_upRight.setRect(2 * width, 0, 3 * width, height);
+		if (BasePlatform::isRectEmpty(&_upRight)) {
+			BasePlatform::setRect(&_upRight, 2 * width, 0, 3 * width, height);
 		}
 
-		if (_middleLeft.isRectEmpty()) {
-			_middleLeft.setRect(0, height, width, 2 * height);
+		if (BasePlatform::isRectEmpty(&_middleLeft)) {
+			BasePlatform::setRect(&_middleLeft, 0, height, width, 2 * height);
 		}
-		if (_middleMiddle.isRectEmpty()) {
-			_middleMiddle.setRect(width, height, 2 * width, 2 * height);
+		if (BasePlatform::isRectEmpty(&_middleMiddle)) {
+			BasePlatform::setRect(&_middleMiddle, width, height, 2 * width, 2 * height);
 		}
-		if (_middleRight.isRectEmpty()) {
-			_middleRight.setRect(2 * width, height, 3 * width, 2 * height);
+		if (BasePlatform::isRectEmpty(&_middleRight)) {
+			BasePlatform::setRect(&_middleRight, 2 * width, height, 3 * width, 2 * height);
 		}
 
-		if (_downLeft.isRectEmpty()) {
-			_downLeft.setRect(0, 2 * height, width, 3 * height);
+		if (BasePlatform::isRectEmpty(&_downLeft)) {
+			BasePlatform::setRect(&_downLeft, 0, 2 * height, width, 3 * height);
 		}
-		if (_downMiddle.isRectEmpty()) {
-			_downMiddle.setRect(width, 2 * height, 2 * width, 3 * height);
+		if (BasePlatform::isRectEmpty(&_downMiddle)) {
+			BasePlatform::setRect(&_downMiddle, width, 2 * height, 2 * width, 3 * height);
 		}
-		if (_downRight.isRectEmpty()) {
-			_downRight.setRect(2 * width, 2 * height, 3 * width, 3 * height);
+		if (BasePlatform::isRectEmpty(&_downRight)) {
+			BasePlatform::setRect(&_downRight, 2 * width, 2 * height, 3 * width, 3 * height);
 		}
 	}
 
diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp
index 0888be060e2..0679d8d74b6 100644
--- a/engines/wintermute/ui/ui_window.cpp
+++ b/engines/wintermute/ui/ui_window.cpp
@@ -54,8 +54,8 @@ IMPLEMENT_PERSISTENT(UIWindow, false)
 
 //////////////////////////////////////////////////////////////////////////
 UIWindow::UIWindow(BaseGame *inGame) : UIObject(inGame) {
-	_titleRect.setEmpty();
-	_dragRect.setEmpty();
+	BasePlatform::setRectEmpty(&_titleRect);
+	BasePlatform::setRectEmpty(&_dragRect);
 	_titleAlign = TAL_LEFT;
 	_transparent = false;
 
@@ -210,7 +210,7 @@ bool UIWindow::display(int offsetX, int offsetY) {
 		image->draw(_posX + offsetX, _posY + offsetY, _transparent ? nullptr : this);
 	}
 
-	if (!_titleRect.isRectEmpty() && font && _text) {
+	if (!BasePlatform::isRectEmpty(&_titleRect) && font && _text) {
 		font->drawText((byte *)_text, _posX + offsetX + _titleRect.left, _posY + offsetY + _titleRect.top, _titleRect.right - _titleRect.left, _titleAlign, _titleRect.bottom - _titleRect.top);
 	}
 
@@ -603,7 +603,7 @@ bool UIWindow::loadBuffer(char *buffer, bool complete) {
 	// HACK: Increase window title height by 1 for "5 Lethal Demons" game
 	// For some reason getFontHeight() is off-by-one comparing to height set in TITLE_RECT,
 	// Which made text being bigger then title rect and drawing was skipped.
-	if (BaseEngine::instance().getGameId() == "5ld" && !_titleRect.isRectEmpty() && _text) {
+	if (BaseEngine::instance().getGameId() == "5ld" && !BasePlatform::isRectEmpty(&_titleRect) && _text) {
 		_titleRect.bottom ++;
 	}
 
@@ -678,11 +678,11 @@ bool UIWindow::saveAsText(BaseDynamicBuffer *buffer, int indent) {
 		error("UIWindow::SaveAsText - Unhandled enum-value NUM_TEXT_ALIGN");
 	}
 
-	if (!_titleRect.isRectEmpty()) {
+	if (!BasePlatform::isRectEmpty(&_titleRect)) {
 		buffer->putTextIndent(indent + 2, "TITLE_RECT { %d, %d, %d, %d }\n", _titleRect.left, _titleRect.top, _titleRect.right, _titleRect.bottom);
 	}
 
-	if (!_dragRect.isRectEmpty()) {
+	if (!BasePlatform::isRectEmpty(&_dragRect)) {
 		buffer->putTextIndent(indent + 2, "DRAG_RECT { %d, %d, %d, %d }\n", _dragRect.left, _dragRect.top, _dragRect.right, _dragRect.bottom);
 	}
 
@@ -1229,13 +1229,13 @@ bool UIWindow::handleMouse(TMouseEvent event, TMouseButton button) {
 	bool res = UIObject::handleMouse(event, button);
 
 	// handle window dragging
-	if (!_dragRect.isRectEmpty()) {
+	if (!BasePlatform::isRectEmpty(&_dragRect)) {
 		// start drag
 		if (event == MOUSE_CLICK && button == MOUSE_BUTTON_LEFT) {
 			Rect32 dragRect = _dragRect;
 			int offsetX, offsetY;
 			getTotalOffset(&offsetX, &offsetY);
-			dragRect.offsetRect(_posX + offsetX, _posY + offsetY);
+			BasePlatform::offsetRect(&dragRect, _posX + offsetX, _posY + offsetY);
 
 			if (BasePlatform::ptInRect(&dragRect, _gameRef->_mousePos)) {
 				_dragFrom.x = _gameRef->_mousePos.x;
diff --git a/engines/wintermute/video/video_player.cpp b/engines/wintermute/video/video_player.cpp
index 1f74bd22804..be9a5f621dc 100644
--- a/engines/wintermute/video/video_player.cpp
+++ b/engines/wintermute/video/video_player.cpp
@@ -32,6 +32,7 @@
 #include "engines/wintermute/base/base_file_manager.h"
 #include "engines/wintermute/base/gfx/base_renderer.h"
 #include "engines/wintermute/base/gfx/base_surface.h"
+#include "engines/wintermute/platform_osystem.h"
 
 namespace Wintermute {
 
@@ -165,7 +166,7 @@ bool VideoPlayer::display() {
 	bool res;
 
 	if (_texture && _videoFrameReady) {
-		rc.setRect(0, 0, _texture->getWidth(), _texture->getHeight());
+		BasePlatform::setRect(&rc, 0, 0, _texture->getWidth(), _texture->getHeight());
 		if (_playZoom == 100.0f) {
 			res = _texture->display(_playPosX, _playPosY, rc);
 		} else {
diff --git a/engines/wintermute/video/video_theora_player.cpp b/engines/wintermute/video/video_theora_player.cpp
index 15ca235c32d..73692a52733 100644
--- a/engines/wintermute/video/video_theora_player.cpp
+++ b/engines/wintermute/video/video_theora_player.cpp
@@ -33,8 +33,9 @@
 #include "engines/wintermute/base/gfx/base_image.h"
 #include "engines/wintermute/base/gfx/base_renderer.h"
 #include "engines/wintermute/base/sound/base_sound_manager.h"
-#include "video/theora_decoder.h"
+#include "engines/wintermute/platform_osystem.h"
 #include "engines/wintermute/wintermute.h"
+#include "video/theora_decoder.h"
 #include "common/system.h"
 
 namespace Wintermute {
@@ -360,7 +361,7 @@ bool VideoTheoraPlayer::display(uint32 alpha) {
 	bool res;
 
 	if (_texture && _videoFrameReady) {
-		rc.setRect(0, 0, _texture->getWidth(), _texture->getHeight());
+		BasePlatform::setRect(&rc, 0, 0, _texture->getWidth(), _texture->getHeight());
 		if (_playZoom == 100.0f) {
 			res = _texture->displayTrans(_posX, _posY, rc, alpha);
 		} else {




More information about the Scummvm-git-logs mailing list