summaryrefslogtreecommitdiff
path: root/framebuffer/bitmap.c
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2011-11-21 08:45:08 +0000
committerVincent Sanders <vince@netsurf-browser.org>2011-11-21 08:45:08 +0000
commit820312eb35e6fa4f0930a343e8d418c4e2011755 (patch)
tree6a151f91e1be6496b11e843c8af603addd690727 /framebuffer/bitmap.c
parent747c66c982cd36979e17d2b845f93559a9d5affd (diff)
downloadnetsurf-820312eb35e6fa4f0930a343e8d418c4e2011755.tar.gz
netsurf-820312eb35e6fa4f0930a343e8d418c4e2011755.tar.bz2
Update for modified libnsfb API
Make thumbnailing work svn path=/trunk/netsurf/; revision=13159
Diffstat (limited to 'framebuffer/bitmap.c')
-rw-r--r--framebuffer/bitmap.c154
1 files changed, 82 insertions, 72 deletions
diff --git a/framebuffer/bitmap.c b/framebuffer/bitmap.c
index 4d4821686..491ee1594 100644
--- a/framebuffer/bitmap.c
+++ b/framebuffer/bitmap.c
@@ -18,11 +18,12 @@
#include <inttypes.h>
#include <sys/types.h>
+#include <stdbool.h>
+#include <assert.h>
-#include "assert.h"
-#include "image/bitmap.h"
-#include "framebuffer/bitmap.h"
+#include <libnsfb.h>
+#include "image/bitmap.h"
#include "utils/log.h"
/**
@@ -36,26 +37,29 @@
void *bitmap_create(int width, int height, unsigned int state)
{
- struct bitmap *bitmap;
+ nsfb_t *bm;
LOG(("width %d, height %d, state %u",width,height,state));
- bitmap = calloc(1 , sizeof(struct bitmap));
- if (bitmap) {
- bitmap->pixdata = calloc(4, width * height);
- if (bitmap->pixdata != NULL) {
- bitmap->width = width;
- bitmap->height = height;
- bitmap->opaque = (state & BITMAP_OPAQUE) != 0;
- } else {
- free(bitmap);
- bitmap=NULL;
- }
- }
+ bm = nsfb_new(NSFB_SURFACE_RAM);
+ if (bm == NULL) {
+ return NULL;
+ }
+
+ if ((state & BITMAP_OPAQUE) == 0) {
+ nsfb_set_geometry(bm, width, height, NSFB_FMT_ABGR8888);
+ } else {
+ nsfb_set_geometry(bm, width, height, NSFB_FMT_XBGR8888);
+ }
- LOG(("bitmap %p", bitmap));
+ if (nsfb_init(bm) == -1) {
+ nsfb_free(bm);
+ return NULL;
+ }
- return bitmap;
+ LOG(("bitmap %p", bm));
+
+ return bm;
}
@@ -71,14 +75,14 @@ void *bitmap_create(int width, int height, unsigned int state)
unsigned char *bitmap_get_buffer(void *bitmap)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
+ unsigned char *bmpptr;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return NULL;
- }
-
- return bm->pixdata;
+ assert(bm != NULL);
+
+ nsfb_get_buffer(bm, &bmpptr, NULL);
+
+ return bmpptr;
}
@@ -91,14 +95,14 @@ unsigned char *bitmap_get_buffer(void *bitmap)
size_t bitmap_get_rowstride(void *bitmap)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
+ int bmpstride;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return 0;
- }
+ assert(bm != NULL);
+
+ nsfb_get_buffer(bm, NULL, &bmpstride);
- return (bm->width) * 4;
+ return bmpstride;
}
@@ -110,15 +114,11 @@ size_t bitmap_get_rowstride(void *bitmap)
void bitmap_destroy(void *bitmap)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return;
- }
-
- free(bm->pixdata);
- free(bm);
+ assert(bm != NULL);
+
+ nsfb_free(bm);
}
@@ -158,22 +158,24 @@ void bitmap_set_suspendable(void *bitmap, void *private_word,
}
/**
- * Sets whether a bitmap should be plotted opaque
+ * Sets wether a bitmap should be plotted opaque
*
* \param bitmap a bitmap, as returned by bitmap_create()
* \param opaque whether the bitmap should be plotted opaque
*/
void bitmap_set_opaque(void *bitmap, bool opaque)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return;
- }
+ assert(bm != NULL);
LOG(("setting bitmap %p to %s", bm, opaque?"opaque":"transparent"));
- bm->opaque = opaque;
+
+ if (opaque) {
+ nsfb_set_geometry(bm, 0, 0, NSFB_FMT_XBGR8888);
+ } else {
+ nsfb_set_geometry(bm, 0, 0, NSFB_FMT_ABGR8888);
+ }
}
@@ -186,17 +188,21 @@ void bitmap_set_opaque(void *bitmap, bool opaque)
bool bitmap_test_opaque(void *bitmap)
{
int tst;
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
+ unsigned char *bmpptr;
+ int width;
+ int height;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return false;
- }
+ assert(bm != NULL);
+
+ nsfb_get_buffer(bm, &bmpptr, NULL);
- tst = bm->width * bm->height;
+ nsfb_get_geometry(bm, &width, &height, NULL);
+
+ tst = width * height;
while (tst-- > 0) {
- if (bm->pixdata[(tst << 2) + 3] != 0xff) {
+ if (bmpptr[(tst << 2) + 3] != 0xff) {
LOG(("bitmap %p has transparency",bm));
return false;
}
@@ -207,46 +213,50 @@ bool bitmap_test_opaque(void *bitmap)
/**
- * Gets whether a bitmap should be plotted opaque
+ * Gets weather a bitmap should be plotted opaque
*
* \param bitmap a bitmap, as returned by bitmap_create()
*/
bool bitmap_get_opaque(void *bitmap)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
+ enum nsfb_format_e format;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return false;
- }
+ assert(bm != NULL);
+
+ nsfb_get_geometry(bm, NULL, NULL, &format);
- return bm->opaque;
+ if (format == NSFB_FMT_ABGR8888)
+ return false;
+
+ return true;
}
int bitmap_get_width(void *bitmap)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
+ int width;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return 0;
- }
+ assert(bm != NULL);
- return(bm->width);
+ nsfb_get_geometry(bm, &width, NULL, NULL);
+
+ return(width);
}
int bitmap_get_height(void *bitmap)
{
- struct bitmap *bm = bitmap;
+ nsfb_t *bm = bitmap;
+ int height;
- if (bitmap == NULL) {
- LOG(("NULL bitmap!"));
- return 0;
- }
+ assert(bm != NULL);
+
+ nsfb_get_geometry(bm, NULL, &height, NULL);
- return(bm->height);
+ return(height);
}
+/* get bytes per pixel */
size_t bitmap_get_bpp(void *bitmap)
{
return 4;