diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2008-12-27 18:32:20 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2008-12-27 18:32:20 +0000 |
commit | 78f912d5d347038d66d2f61d8079549848081926 (patch) | |
tree | a735189375d36510c6c474bffb335a29ce91dac3 /amiga/bitmap.c | |
parent | d27a1c625f9d41da04101392a3cf8005c3faf862 (diff) | |
download | netsurf-78f912d5d347038d66d2f61d8079549848081926.tar.gz netsurf-78f912d5d347038d66d2f61d8079549848081926.tar.bz2 |
Handle opaqueness a bit
svn path=/trunk/netsurf/; revision=5935
Diffstat (limited to 'amiga/bitmap.c')
-rw-r--r-- | amiga/bitmap.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/amiga/bitmap.c b/amiga/bitmap.c index 372d241a0..77f85d1df 100644 --- a/amiga/bitmap.c +++ b/amiga/bitmap.c @@ -34,12 +34,17 @@ void *bitmap_create(int width, int height, unsigned int state) { struct bitmap *bitmap; - bitmap = AllocVec(sizeof(struct bitmap),MEMF_PRIVATE | MEMF_CLEAR); + bitmap = AllocVec(sizeof(struct bitmap),MEMF_PRIVATE); if(bitmap) { - bitmap->pixdata = AllocVec(width*height*4*2,MEMF_PRIVATE | MEMF_CLEAR); + bitmap->pixdata = AllocVecTags(width*height*4, + AVT_Type,MEMF_PRIVATE, + AVT_ClearWithValue,0xff, + TAG_DONE); bitmap->width = width; bitmap->height = height; + if(state & BITMAP_OPAQUE) bitmap->opaque = true; + else bitmap->opaque = false; } return bitmap; } @@ -147,8 +152,9 @@ void bitmap_set_suspendable(void *bitmap, void *private_word, */ void bitmap_set_opaque(void *bitmap, bool opaque) { + struct bitmap *bm = bitmap; assert(bitmap); -/* todo: set bitmap as opaque */ + bm->opaque = opaque; } @@ -160,9 +166,19 @@ void bitmap_set_opaque(void *bitmap, bool opaque) */ bool bitmap_test_opaque(void *bitmap) { + struct bitmap *bm = bitmap; + uint32 p = bm->width * bm->height; + uint32 a = 0; + uint32 *bmi = bm->pixdata; + assert(bitmap); -/* todo: test if bitmap as opaque */ - return false; + + for(a=0;a<p;a+=4) + { + if ((*bmi & 0xff000000U) != 0xff000000U) return false; + bmi++; + } + return true; } @@ -173,9 +189,10 @@ bool bitmap_test_opaque(void *bitmap) */ bool bitmap_get_opaque(void *bitmap) { + struct bitmap *bm = bitmap; assert(bitmap); /* todo: get whether bitmap is opaque */ - return false; + return bm->opaque; } int bitmap_get_width(void *bitmap) |