aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/saga/objectmap.cpp2
-rw-r--r--engines/saga/render.cpp14
-rw-r--r--engines/saga/render.h4
3 files changed, 14 insertions, 6 deletions
diff --git a/engines/saga/objectmap.cpp b/engines/saga/objectmap.cpp
index d10c4ffaa7..d259472d3d 100644
--- a/engines/saga/objectmap.cpp
+++ b/engines/saga/objectmap.cpp
@@ -171,6 +171,8 @@ void HitZone::draw(SagaEngine *vm, int color) {
} else {
if (pointsCount > 2) {
// Otherwise draw a polyline
+ // Do a full refresh so that the polyline can be shown
+ vm->_render->setFullRefresh(true);
vm->_gfx->drawPolyLine(points, pointsCount, color);
}
}
diff --git a/engines/saga/render.cpp b/engines/saga/render.cpp
index e78e6f9947..85448bc412 100644
--- a/engines/saga/render.cpp
+++ b/engines/saga/render.cpp
@@ -204,14 +204,22 @@ void Render::drawScene() {
_system->updateScreen();
}
+void Render::addDirtyRect(Common::Rect rect) {
+ // Check if the new rectangle is contained within another in the list
+ Common::List<Common::Rect>::const_iterator it;
+ for (it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
+ if (it->contains(rect))
+ return;
+ }
+
+ _dirtyRects.push_back(rect);
+}
+
void Render::drawDirtyRects() {
if (_fullRefresh) {
_system->copyRectToScreen(_vm->_gfx->getBackBufferPixels(), _vm->_gfx->getBackBufferWidth(), 0, 0,
_vm->_gfx->getBackBufferWidth(), _vm->_gfx->getBackBufferHeight());
} else {
-
- // TODO: check if dirty rectangles are intersecting or contained within each other
-
Common::List<Common::Rect>::const_iterator it;
for (it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
g_system->copyRectToScreen(_vm->_gfx->getBackBufferPixels(), it->width(), it->left, it->top, it->width(), it->height());
diff --git a/engines/saga/render.h b/engines/saga/render.h
index 772bbca1a6..8fffed4cc1 100644
--- a/engines/saga/render.h
+++ b/engines/saga/render.h
@@ -79,9 +79,7 @@ public:
return &_backGroundSurface;
}
- void addDirtyRect(Common::Rect rect) {
- _dirtyRects.push_back(rect);
- }
+ void addDirtyRect(Common::Rect rect);
void clearDirtyRects() {
_dirtyRects.clear();