aboutsummaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
authorStephen Kennedy2008-07-07 21:10:58 +0000
committerStephen Kennedy2008-07-07 21:10:58 +0000
commit641e3d752e9fc3b631474773a815b019f8d507e7 (patch)
treee9d477999b603e56787437cd56178294893ab856 /graphics
parent43c0fb8d895654394ac3a047947d15703a4557fa (diff)
downloadscummvm-rg350-641e3d752e9fc3b631474773a815b019f8d507e7.tar.gz
scummvm-rg350-641e3d752e9fc3b631474773a815b019f8d507e7.tar.bz2
scummvm-rg350-641e3d752e9fc3b631474773a815b019f8d507e7.zip
MILESTONE: bitmap showing with key color transparency implemented!
- SurfaceKeyColored class handles blitting of keycolor transparency data - ImageMap tested - Rect and Polygon areas seem to be working as expected svn-id: r32950
Diffstat (limited to 'graphics')
-rw-r--r--graphics/module.mk3
-rw-r--r--graphics/surface-keycolored.cpp28
-rw-r--r--graphics/surface-keycolored.h17
3 files changed, 47 insertions, 1 deletions
diff --git a/graphics/module.mk b/graphics/module.mk
index 93e2db26c5..a44042a044 100644
--- a/graphics/module.mk
+++ b/graphics/module.mk
@@ -16,7 +16,8 @@ MODULE_OBJS := \
primitives.o \
scaler.o \
scaler/thumbnail.o \
- surface.o
+ surface.o \
+ surface-keycolored.o
ifndef DISABLE_SCALERS
MODULE_OBJS += \
diff --git a/graphics/surface-keycolored.cpp b/graphics/surface-keycolored.cpp
new file mode 100644
index 0000000000..79beb5d5b5
--- /dev/null
+++ b/graphics/surface-keycolored.cpp
@@ -0,0 +1,28 @@
+#include "graphics/surface-keycolored.h"
+
+namespace Graphics {
+
+void SurfaceKeyColored::blit(Surface *surf_src, int16 x, int16 y, OverlayColor trans) {
+
+ if (bytesPerPixel != sizeof(OverlayColor) || surf_src->bytesPerPixel != sizeof(OverlayColor)) return ;
+
+ OverlayColor *dst = (OverlayColor*) getBasePtr(x, y);
+ const OverlayColor *src = (const OverlayColor*)surf_src->pixels;
+
+ int blitW = (surf_src->w + x > w) ? w - x : surf_src->w;
+ int blitH = (surf_src->h + y > h) ? h - y : surf_src->h;
+ 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 != trans)
+ *dst = col;
+ }
+ dst += dstAdd;
+ src += srcAdd;
+ }
+}
+
+} // end of namespace Graphics \ No newline at end of file
diff --git a/graphics/surface-keycolored.h b/graphics/surface-keycolored.h
new file mode 100644
index 0000000000..d2788b204e
--- /dev/null
+++ b/graphics/surface-keycolored.h
@@ -0,0 +1,17 @@
+
+#ifndef GRAPHICS_SURFACE_KEYCOLORED_H
+#define GRAPHICS_SURFACE_KEYCOLORED_H
+
+#include "graphics/surface.h"
+
+namespace Graphics {
+
+struct SurfaceKeyColored : Surface {
+
+ void blit(Surface *surf_src, int16 x, int16 y, OverlayColor trans);
+};
+
+
+} // end of namespace Graphics
+
+#endif \ No newline at end of file