aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/dc
diff options
context:
space:
mode:
authorMarcus Comstedt2009-10-17 11:35:49 +0000
committerMarcus Comstedt2009-10-17 11:35:49 +0000
commit87247d1e4d93c4cd8c46b2234d963100fdf386f8 (patch)
treead27c16eb3415a6a53769b8046fa454c7c26700a /backends/platform/dc
parenta7cdad157eb7ba83323b1a58413fa856942b0b26 (diff)
downloadscummvm-rg350-87247d1e4d93c4cd8c46b2234d963100fdf386f8.tar.gz
scummvm-rg350-87247d1e4d93c4cd8c46b2234d963100fdf386f8.tar.bz2
scummvm-rg350-87247d1e4d93c4cd8c46b2234d963100fdf386f8.zip
Made find_unused_pixel() take the transparency mask into account, not
counting palette colours of masked pixels as used. Fixes transparency on the new default icon. svn-id: r45183
Diffstat (limited to 'backends/platform/dc')
-rw-r--r--backends/platform/dc/icon.cpp23
-rw-r--r--backends/platform/dc/icon.h2
2 files changed, 16 insertions, 9 deletions
diff --git a/backends/platform/dc/icon.cpp b/backends/platform/dc/icon.cpp
index fa1366d37a..dc19214bed 100644
--- a/backends/platform/dc/icon.cpp
+++ b/backends/platform/dc/icon.cpp
@@ -120,14 +120,21 @@ void Icon::draw(float x1, float y1, float x2, float y2, int pal,
ta_commit_list(&myvertex);
}
-int Icon::find_unused_pixel()
+int Icon::find_unused_pixel(const unsigned char *mask)
{
int use[16];
memset(use, 0, sizeof(use));
- for (int n=0; n<32*32/2; n++) {
- unsigned char pix = bitmap[n];
- use[pix&0xf]++;
- use[pix>>4]++;
+ unsigned char *p = bitmap;
+ for (int n=0; n<32*32/2/4; n++) {
+ unsigned char mbits = ~*mask++;
+ for (int i=0; i<4; i++) {
+ unsigned char pix = *p++;
+ if(mbits & 64)
+ use[pix&0xf]++;
+ if(mbits & 128)
+ use[pix>>4]++;
+ mbits <<= 2;
+ }
}
for (int i=0; i<16; i++)
if (!use[i])
@@ -165,10 +172,10 @@ bool Icon::load_image2(const void *data, int len)
palette[i] |= 0xff000000;
for (int i=hdr.used; i<16; i++)
palette[i] = 0;
- int unused = find_unused_pixel();
+ const unsigned char *mask =
+ ((const unsigned char *)data)+hdr.size+(hdr.used<<2)+32*32/2;
+ int unused = find_unused_pixel(mask);
if (unused >= 0) {
- const unsigned char *mask =
- ((const unsigned char *)data)+hdr.size+(hdr.used<<2)+32*32/2;
unsigned char *pix = bitmap;
for (int y=0; y<32; y++)
for (int x=0; x<32/8; x++) {
diff --git a/backends/platform/dc/icon.h b/backends/platform/dc/icon.h
index eeddd8a069..41ff2da5fa 100644
--- a/backends/platform/dc/icon.h
+++ b/backends/platform/dc/icon.h
@@ -33,7 +33,7 @@ class Icon
unsigned int palette[16];
void *texture;
- int find_unused_pixel();
+ int find_unused_pixel(const unsigned char *);
bool load_image1(const void *data, int len, int offs);
bool load_image2(const void *data, int len);