From 2dd32c7adb7116f1ad9ab2632d9fcf57a31e9fa2 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Mon, 21 Nov 2011 08:44:10 +0000 Subject: Improve API to allow for RAM surfaces instead of direct blitting Improve and update tests Fix RAM surface Fix VNC surface svn path=/trunk/libnsfb/; revision=13158 --- src/libnsfb.c | 91 ++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 32 deletions(-) (limited to 'src/libnsfb.c') diff --git a/src/libnsfb.c b/src/libnsfb.c index 405df2c..21661cd 100644 --- a/src/libnsfb.c +++ b/src/libnsfb.c @@ -14,60 +14,70 @@ #include "libnsfb_plot.h" #include "libnsfb_event.h" #include "nsfb.h" -#include "frontend.h" +#include "surface.h" -/* documented in libnsfb.h */ +/* exported interface documented in libnsfb.h */ nsfb_t* -nsfb_init(const enum nsfb_frontend_e frontend_type) +nsfb_new(const enum nsfb_type_e surface_type) { nsfb_t *newfb; newfb = calloc(1, sizeof(nsfb_t)); if (newfb == NULL) return NULL; - /* obtain frontend routines */ - newfb->frontend_rtns = nsfb_frontend_get_rtns(frontend_type); - if (newfb->frontend_rtns == NULL) { + /* obtain surface routines */ + newfb->surface_rtns = nsfb_surface_get_rtns(surface_type); + if (newfb->surface_rtns == NULL) { free(newfb); return NULL; } - newfb->frontend_rtns->defaults(newfb); + newfb->surface_rtns->defaults(newfb); return newfb; } -int nsfb_finalise(nsfb_t *nsfb) +/* exported interface documented in libnsfb.h */ +int +nsfb_init(nsfb_t *nsfb) { - int ret; - ret = nsfb->frontend_rtns->finalise(nsfb); - free(nsfb); - return ret; + return nsfb->surface_rtns->initialise(nsfb); } - -int -nsfb_init_frontend(nsfb_t *nsfb) +/* exported interface documented in libnsfb.h */ +int +nsfb_free(nsfb_t *nsfb) { - return nsfb->frontend_rtns->initialise(nsfb); + int ret; + ret = nsfb->surface_rtns->finalise(nsfb); + free(nsfb); + return ret; } -bool nsfb_event(nsfb_t *nsfb, nsfb_event_t *event, int timeout) +/* exported interface documented in libnsfb.h */ +bool +nsfb_event(nsfb_t *nsfb, nsfb_event_t *event, int timeout) { - return nsfb->frontend_rtns->input(nsfb, event, timeout); + return nsfb->surface_rtns->input(nsfb, event, timeout); } -int nsfb_claim(nsfb_t *nsfb, nsfb_bbox_t *box) +/* exported interface documented in libnsfb.h */ +int +nsfb_claim(nsfb_t *nsfb, nsfb_bbox_t *box) { - return nsfb->frontend_rtns->claim(nsfb, box); + return nsfb->surface_rtns->claim(nsfb, box); } -int nsfb_update(nsfb_t *nsfb, nsfb_bbox_t *box) +/* exported interface documented in libnsfb.h */ +int +nsfb_update(nsfb_t *nsfb, nsfb_bbox_t *box) { - return nsfb->frontend_rtns->update(nsfb, box); + return nsfb->surface_rtns->update(nsfb, box); } -int nsfb_set_geometry(nsfb_t *nsfb, int width, int height, int bpp) +/* exported interface documented in libnsfb.h */ +int +nsfb_set_geometry(nsfb_t *nsfb, int width, int height, enum nsfb_format_e format) { if (width <= 0) width = nsfb->width; @@ -75,13 +85,15 @@ int nsfb_set_geometry(nsfb_t *nsfb, int width, int height, int bpp) if (height <= 0) height = nsfb->height; - if ((bpp != 32) && (bpp != 16) && (bpp != 8)) - bpp = nsfb->bpp; + if (format == NSFB_FMT_ANY) + format = nsfb->format; - return nsfb->frontend_rtns->geometry(nsfb, width, height, bpp); + return nsfb->surface_rtns->geometry(nsfb, width, height, format); } -int nsfb_get_geometry(nsfb_t *nsfb, int *width, int *height, int *bpp) +/* exported interface documented in libnsfb.h */ +int +nsfb_get_geometry(nsfb_t *nsfb, int *width, int *height, enum nsfb_format_e *format) { if (width != NULL) *width = nsfb->width; @@ -89,15 +101,30 @@ int nsfb_get_geometry(nsfb_t *nsfb, int *width, int *height, int *bpp) if (height != NULL) *height = nsfb->height; - if (bpp != NULL) - *bpp = nsfb->bpp; + if (format != NULL) + *format = nsfb->format; return 0; } -int nsfb_get_framebuffer(nsfb_t *nsfb, uint8_t **ptr, int *linelen) +/* exported interface documented in libnsfb.h */ +int +nsfb_get_buffer(nsfb_t *nsfb, uint8_t **ptr, int *linelen) { - *ptr = nsfb->ptr; - *linelen = nsfb->linelen; + if (ptr != NULL) { + *ptr = nsfb->ptr; + } + if (linelen != NULL) { + *linelen = nsfb->linelen; + } return 0; } + + +/* + * Local variables: + * c-basic-offset: 4 + * tab-width: 8 + * End: + */ + -- cgit v1.2.1