summaryrefslogtreecommitdiff
path: root/amiga/bitmap.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2012-08-05 15:16:02 +0100
committerChris Young <chris@unsatisfactorysoftware.co.uk>2012-08-05 15:16:02 +0100
commitc359b9400b720f9ee175154a1ffa542b5ccc2d97 (patch)
treeed3bd27061a2cd4b3532e166fd967daff04eed8c /amiga/bitmap.c
parenta46c5ae09f2a1fe048b0da5418cf9ed33f512166 (diff)
downloadnetsurf-c359b9400b720f9ee175154a1ffa542b5ccc2d97.tar.gz
netsurf-c359b9400b720f9ee175154a1ffa542b5ccc2d97.tar.bz2
Palette-mapped bitmap support
Diffstat (limited to 'amiga/bitmap.c')
-rw-r--r--amiga/bitmap.c35
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;
+}