aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/xsurface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/xeen/xsurface.cpp')
-rw-r--r--engines/xeen/xsurface.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/engines/xeen/xsurface.cpp b/engines/xeen/xsurface.cpp
index cd21a588ef..dc42a6fb24 100644
--- a/engines/xeen/xsurface.cpp
+++ b/engines/xeen/xsurface.cpp
@@ -27,21 +27,34 @@
namespace Xeen {
-XSurface::XSurface() : Graphics::Surface() {
+XSurface::XSurface() : Graphics::Surface(), _freeFlag(false) {
}
-XSurface::XSurface(int w, int h) : Graphics::Surface() {
+XSurface::XSurface(int w, int h) : Graphics::Surface(), _freeFlag(false) {
create(w, h);
}
XSurface::~XSurface() {
- free();
+ if (_freeFlag)
+ free();
}
void XSurface::create(uint16 w, uint16 h) {
Graphics::Surface::create(w, h, Graphics::PixelFormat::createFormatCLUT8());
+ _freeFlag = true;
}
+void XSurface::create(XSurface *s, const Common::Rect &bounds) {
+ pixels = (byte *)s->getBasePtr(bounds.left, bounds.top);
+ format = Graphics::PixelFormat::createFormatCLUT8();
+ pitch = s->pitch;
+ w = bounds.width();
+ h = bounds.height();
+
+ _freeFlag = false;
+}
+
+
void XSurface::transBlitTo(XSurface &dest) const {
transBlitTo(dest, Common::Point());
}
@@ -78,7 +91,7 @@ void XSurface::blitTo(XSurface &dest, const Common::Point &destPos) const {
Common::copy(srcP, srcP + w, destP);
}
- dest.addDirtyRect(Common::Rect(destPos.x, destPos.y, destPos.x + w, destPos.y));
+ dest.addDirtyRect(Common::Rect(destPos.x, destPos.y, destPos.x + w, destPos.y + h));
}
} // End of namespace Xeen