aboutsummaryrefslogtreecommitdiff
path: root/graphics/surface.cpp
diff options
context:
space:
mode:
authorAndre Heider2009-01-20 15:21:47 +0000
committerAndre Heider2009-01-20 15:21:47 +0000
commit311b267863d6c0202e5723504e98aa78206763e2 (patch)
tree7d4f64ec01b72846705e40cb393b996e6d4b0de5 /graphics/surface.cpp
parentb2a9393eeebb5b24f1d70cf163c21ef9c0ccd4c5 (diff)
downloadscummvm-rg350-311b267863d6c0202e5723504e98aa78206763e2.tar.gz
scummvm-rg350-311b267863d6c0202e5723504e98aa78206763e2.tar.bz2
scummvm-rg350-311b267863d6c0202e5723504e98aa78206763e2.zip
merge SurfaceKeyColored into Surface
svn-id: r35951
Diffstat (limited to 'graphics/surface.cpp')
-rw-r--r--graphics/surface.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/graphics/surface.cpp b/graphics/surface.cpp
index 263a4fd23b..df882bf4ff 100644
--- a/graphics/surface.cpp
+++ b/graphics/surface.cpp
@@ -225,4 +225,42 @@ void Surface::move(int dx, int dy, int height) {
}
}
+void Surface::blit(Surface *surf_src, int16 x, int16 y, OverlayColor transparent) {
+ if (bytesPerPixel != sizeof(OverlayColor) || surf_src->bytesPerPixel != sizeof(OverlayColor)) return ;
+
+ const OverlayColor *src = (const OverlayColor*)surf_src->pixels;
+ int blitW = surf_src->w;
+ int blitH = surf_src->h;
+
+ // clip co-ordinates
+ if (x < 0) {
+ blitW += x;
+ src -= x;
+ x = 0;
+ }
+ if (y < 0) {
+ blitH += y;
+ src -= y * surf_src->w;
+ y = 0;
+ }
+ if (blitW > w - x) blitW = w - x;
+ if (blitH > h - y) blitH = h - y;
+ if (blitW <= 0 || blitH <= 0)
+ return;
+
+ OverlayColor *dst = (OverlayColor*) getBasePtr(x, y);
+ int dstAdd = w - blitW;
+ int srcAdd = surf_src->w - blitW;
+
+ for (int i = 0; i < blitH; ++i) {
+ for (int j = 0; j < blitW; ++j, ++dst, ++src) {
+ OverlayColor col = *src;
+ if (col != transparent)
+ *dst = col;
+ }
+ dst += dstAdd;
+ src += srcAdd;
+ }
+}
+
} // End of namespace Graphics