diff options
author | Stephen Kennedy | 2008-07-07 21:10:58 +0000 |
---|---|---|
committer | Stephen Kennedy | 2008-07-07 21:10:58 +0000 |
commit | 641e3d752e9fc3b631474773a815b019f8d507e7 (patch) | |
tree | e9d477999b603e56787437cd56178294893ab856 /graphics | |
parent | 43c0fb8d895654394ac3a047947d15703a4557fa (diff) | |
download | scummvm-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.mk | 3 | ||||
-rw-r--r-- | graphics/surface-keycolored.cpp | 28 | ||||
-rw-r--r-- | graphics/surface-keycolored.h | 17 |
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 |