diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2012-09-30 09:40:46 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2012-09-30 09:40:46 +0100 |
commit | 480b2353d815540dca310edc8496da1d3f1b3295 (patch) | |
tree | 1103a068d8674cca5c38047f172ba1167cafde74 /src/plot/32bpp.c | |
parent | 1fbc4a8b2dfc030f174aaf475f7ea6820864d1a3 (diff) | |
download | libnsfb-480b2353d815540dca310edc8496da1d3f1b3295.tar.gz libnsfb-480b2353d815540dca310edc8496da1d3f1b3295.tar.bz2 |
Split 32bpp support into xrgba, xbgr, and common. Should allow for BGR surfaces as well as RGB.
Diffstat (limited to 'src/plot/32bpp.c')
-rw-r--r-- | src/plot/32bpp.c | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/src/plot/32bpp.c b/src/plot/32bpp.c deleted file mode 100644 index aae1b39..0000000 --- a/src/plot/32bpp.c +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2009 Vincent Sanders <vince@simtec.co.uk> - * Copyright 2010 Michael Drake <tlsa@netsurf-browser.org> - * - * This file is part of libnsfb, http://www.netsurf-browser.org/ - * Licenced under the MIT License, - * http://www.opensource.org/licenses/mit-license.php - */ - -#include <stdbool.h> -#include <endian.h> -#include <stdlib.h> - -#include "libnsfb.h" -#include "libnsfb_plot.h" -#include "libnsfb_plot_util.h" - -#include "nsfb.h" -#include "plot.h" - - -#define UNUSED __attribute__((unused)) - -static inline uint32_t *get_xy_loc(nsfb_t *nsfb, int x, int y) -{ - return (void *)(nsfb->ptr + (y * nsfb->linelen) + (x << 2)); -} - -#if __BYTE_ORDER == __BIG_ENDIAN -static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint32_t pixel) -{ - return (pixel >> 8) & ~0xFF000000U; -} - -/* convert a colour value to a 32bpp pixel value ready for screen output */ -static inline uint32_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) -{ - return (c << 8); -} -#else /* __BYTE_ORDER == __BIG_ENDIAN */ -static inline nsfb_colour_t pixel_to_colour(UNUSED nsfb_t *nsfb, uint32_t pixel) -{ - return ((pixel & 0xFF) << 16) | - ((pixel & 0xFF00)) | - ((pixel & 0xFF0000) >> 16); -} - -/* convert a colour value to a 32bpp pixel value ready for screen output */ -static inline uint32_t colour_to_pixel(UNUSED nsfb_t *nsfb, nsfb_colour_t c) -{ - return ((c & 0xff0000) >> 16) | (c & 0xff00) | ((c & 0xff) << 16); -} -#endif - -#define PLOT_TYPE uint32_t -#define PLOT_LINELEN(ll) ((ll) >> 2) - -#include "common.c" - -static bool fill(nsfb_t *nsfb, nsfb_bbox_t *rect, nsfb_colour_t c) -{ - int w; - uint32_t *pvid; - uint32_t ent; - uint32_t llen; - uint32_t width; - uint32_t height; - - if (!nsfb_plot_clip_ctx(nsfb, rect)) - return true; /* fill lies outside current clipping region */ - - ent = colour_to_pixel(nsfb, c); - width = rect->x1 - rect->x0; - height = rect->y1 - rect->y0; - llen = (nsfb->linelen >> 2) - width; - - pvid = get_xy_loc(nsfb, rect->x0, rect->y0); - - while (height-- > 0) { - w = width; - while (w >= 16) { - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - w-=16; - } - while (w >= 4) { - *pvid++ = ent; *pvid++ = ent; - *pvid++ = ent; *pvid++ = ent; - w-=4; - } - while (w > 0) { - *pvid++ = ent; - w--; - } - pvid += llen; - } - - return true; -} - -const nsfb_plotter_fns_t _nsfb_32bpp_plotters = { - .line = line, - .fill = fill, - .point = point, - .bitmap = bitmap, - .glyph8 = glyph8, - .glyph1 = glyph1, - .readrect = readrect, -}; - -/* - * Local Variables: - * c-basic-offset:8 - * End: - */ |