X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=gfx%2Fgfx_p.h;h=c2f10b49fdb340591059e03c401182f551b68dad;hb=633a26b43c6a9a43ecb1d08425fbb53145e10bc1;hp=8482d8e6bd91baa333af0c5a91bf4e923eb8e6fb;hpb=d55b8fe80965724ece68c9e8467ad93ab35babe3;p=bertos.git diff --git a/gfx/gfx_p.h b/gfx/gfx_p.h old mode 100755 new mode 100644 index 8482d8e6..c2f10b49 --- a/gfx/gfx_p.h +++ b/gfx/gfx_p.h @@ -1,9 +1,34 @@ -/*! +/** * \file * * * \version $Id$ @@ -15,6 +40,21 @@ /*#* *#* $Log$ + *#* Revision 1.7 2006/07/19 12:56:26 bernie + *#* Convert to new Doxygen style. + *#* + *#* Revision 1.6 2006/05/27 17:17:34 bernie + *#* Optimize away divisions in RAST_ADDR/MASK macros. + *#* + *#* Revision 1.5 2006/05/25 23:35:40 bernie + *#* Cleanup. + *#* + *#* Revision 1.4 2006/03/22 09:50:37 bernie + *#* Use the same format for fonts and rasters. + *#* + *#* Revision 1.3 2006/02/15 09:10:15 bernie + *#* Implement prop fonts; Fix algo styles. + *#* *#* Revision 1.2 2006/02/10 12:28:33 bernie *#* Add font support in bitmaps; Make bitmap formats public. *#* @@ -26,22 +66,32 @@ #ifndef GFX_GFX_P_H #define GFX_GFX_P_H +#include #if CONFIG_BITMAP_FMT == BITMAP_FMT_PLANAR_H_MSB - #define BM_ADDR(bm, x, y) ((bm)->raster + (y) * (bm)->stride + ((x) / 8)) - #define BM_MASK(bm, x, y) (1 << (7 - (x) % 8)) + /* We use ucoord_t to let the compiler optimize away the division/modulo. */ + #define RAST_ADDR(raster, x, y, stride) \ + ((raster) + (ucoord_t)(y) * (ucoord_t)(stride) + (ucoord_t)(x) / 8) + #define RAST_MASK(raster, x, y) \ + (1 << (7 - (ucoord_t)(x) % 8)) #elif CONFIG_BITMAP_FMT == BITMAP_FMT_PLANAR_V_LSB - #define BM_ADDR(bm, x, y) ((bm)->raster + ((y) / 8) * (bm)->stride + (x)) - #define BM_MASK(bm, x, y) (1 << ((y) % 8)) + /* We use ucoord_t to let the compiler optimize away the division/modulo. */ + #define RAST_ADDR(raster, x, y, stride) \ + ((raster) + ((ucoord_t)(y) / 8) * (ucoord_t)(stride) + (ucoord_t)(x)) + #define RAST_MASK(raster, x, y) \ + (1 << ((ucoord_t)(y) % 8)) #else #error Unknown value of CONFIG_BITMAP_FMT #endif /* CONFIG_BITMAP_FMT */ -/*! +#define BM_ADDR(bm, x, y) RAST_ADDR((bm)->raster, (x), (y), (bm)->stride) +#define BM_MASK(bm, x, y) RAST_MASK((bm)->raster, (x), (y)) + +/** * Plot a pixel in bitmap \a bm. * * \note bm is evaluated twice. @@ -50,7 +100,7 @@ #define BM_PLOT(bm, x, y) \ ( *BM_ADDR(bm, x, y) |= BM_MASK(bm, x, y) ) -/*! +/** * Clear a pixel in bitmap \a bm. * * \note bm is evaluated twice. @@ -59,7 +109,7 @@ #define BM_CLEAR(bm, x, y) \ ( *BM_ADDR(bm, x, y) &= ~BM_MASK(bm, x, y) ) -/*! +/** * Set a pixel in bitmap \a bm to the specified color. * * \note bm is evaluated twice. @@ -73,7 +123,7 @@ *p = (*p & ~mask) | ((fg_pen) ? mask : 0); \ } while (0) -/*! +/** * Get the value of the pixel in bitmap \a bm. * * \return The returned value is either 0 or 1. @@ -84,5 +134,7 @@ #define BM_READPIXEL(bm, x, y) \ ( *BM_ADDR(bm, x, y) & BM_MASK(bm, x, y) ? 1 : 0 ) +#define RAST_READPIXEL(raster, x, y, stride) \ + ( *RAST_ADDR(raster, x, y, stride) & RAST_MASK(raster, x, y) ? 1 : 0 ) #endif /* GFX_GFX_P_H */