summaryrefslogtreecommitdiff
path: root/amiga/bitmap.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2008-12-27 18:32:20 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2008-12-27 18:32:20 +0000
commit78f912d5d347038d66d2f61d8079549848081926 (patch)
treea735189375d36510c6c474bffb335a29ce91dac3 /amiga/bitmap.c
parentd27a1c625f9d41da04101392a3cf8005c3faf862 (diff)
downloadnetsurf-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.c29
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)