diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-08-05 15:16:02 +0100 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2012-08-05 15:16:02 +0100 |
commit | c359b9400b720f9ee175154a1ffa542b5ccc2d97 (patch) | |
tree | ed3bd27061a2cd4b3532e166fd967daff04eed8c /amiga/bitmap.c | |
parent | a46c5ae09f2a1fe048b0da5418cf9ed33f512166 (diff) | |
download | netsurf-c359b9400b720f9ee175154a1ffa542b5ccc2d97.tar.gz netsurf-c359b9400b720f9ee175154a1ffa542b5ccc2d97.tar.bz2 |
Palette-mapped bitmap support
Diffstat (limited to 'amiga/bitmap.c')
-rw-r--r-- | amiga/bitmap.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/amiga/bitmap.c b/amiga/bitmap.c index ce665aaf7..5377adf3c 100644 --- a/amiga/bitmap.c +++ b/amiga/bitmap.c @@ -117,7 +117,11 @@ void bitmap_destroy(void *bitmap) if(bm) { - if(bm->nativebm) p96FreeBitMap(bm->nativebm); + if((bm->nativebm) && (bm->dto == NULL)) + p96FreeBitMap(bm->nativebm); + + if(bm->dto) DisposeDTObject(bm->dto); + FreeVec(bm->pixdata); bm->pixdata = NULL; FreeVec(bm); @@ -160,8 +164,13 @@ bool bitmap_save(void *bitmap, const char *path, unsigned flags) void bitmap_modified(void *bitmap) { struct bitmap *bm = bitmap; - p96FreeBitMap(bm->nativebm); + if((bm->nativebm) && (bm->dto == NULL)) + p96FreeBitMap(bm->nativebm); + + if(bm->dto) DisposeDTObject(bm->dto); bm->nativebm = NULL; + bm->dto = NULL; + bm->native_mask = NULL; } @@ -454,3 +463,25 @@ struct BitMap *ami_getcachenativebm(struct bitmap *bitmap,int width,int height,s return tbm; } + +struct BitMap *ami_bitmap_get_palettemapped(struct bitmap *bitmap, + int width, int height) +{ + struct BitMap *dtbm; + + if(bitmap->dto == NULL) + bitmap->dto = ami_datatype_object_from_bitmap(bitmap); + + SetDTAttrs(bitmap->dto, NULL, NULL, + PDTA_Screen, scrn, + TAG_DONE); + + if(DoDTMethod(bitmap->dto, 0, 0, DTM_PROCLAYOUT, 0, 1)) { + GetDTAttrs(bitmap->dto, + PDTA_DestBitMap, &dtbm, + PDTA_MaskPlane, &bitmap->native_mask, + TAG_END); + } +/* TODO: support scaling */ + return dtbm; +} |