gfx.h

Go to the documentation of this file.
00001 
00043 #ifndef GFX_GFX_H
00044 #define GFX_GFX_H
00045 
00046 #include "cfg/cfg_gfx.h"    /* CONFIG_GFX_* */
00047 #include <cfg/compiler.h>
00048 
00049 #include <cpu/attr.h>       /* CPU_HARVARD */
00050 
00051 
00052 #define CONFIG_CHART_TYPE_X uint8_t ///< Type for the chart dataset
00053 #define CONFIG_CHART_TYPE_Y uint8_t ///< Type for the chart dataset
00054 
00060 #define BITMAP_FMT_PLANAR_H_MSB  1  
00061 #define BITMAP_FMT_PLANAR_V_LSB  2  
00062 /* \} */
00063 
00064 #if !defined(CONFIG_BITMAP_FMT) || (CONFIG_BITMAP_FMT != BITMAP_FMT_PLANAR_H_MSB && CONFIG_BITMAP_FMT != BITMAP_FMT_PLANAR_V_LSB)
00065     #error CONFIG_BITMAP_FMT must be defined to either BITMAP_FMT_PLANAR_H_LSB or BITMAP_FMT_PLANAR_V_LSB
00066 #endif
00067 #if !defined(CONFIG_GFX_CLIPPING) || (CONFIG_GFX_CLIPPING != 0 && CONFIG_GFX_CLIPPING != 1)
00068     #error CONFIG_GFX_CLIPPING must be defined to either 0 or 1
00069 #endif
00070 #if !defined(CONFIG_GFX_TEXT) || (CONFIG_GFX_TEXT != 0 && CONFIG_GFX_TEXT != 1)
00071     #error CONFIG_GFX_TEXT must be defined to either 0 or 1
00072 #endif
00073 
00074 EXTERN_C_BEGIN
00075 
00077 typedef int coord_t;
00078 typedef unsigned int ucoord_t;
00079 
00080 #if CONFIG_GFX_VCOORDS
00081 
00082 typedef float vcoord_t;
00083 #endif /* CONFIG_GFX_VCOORDS */
00084 
00085 
00108 typedef struct Rect { coord_t xmin, ymin, xmax, ymax; } Rect;
00109 
00115 #define RECT_WIDTH(r)   ((r)->xmax - (r)->xmin)
00116 
00122 #define RECT_HEIGHT(r)  ((r)->ymax - (r)->ymin)
00123 
00124 /* Fwd decl */
00125 struct Font;
00126 
00133 typedef struct Bitmap
00134 {
00135     uint8_t *raster;        
00136     coord_t width, height;  
00137     coord_t stride;         
00138     coord_t penX, penY;     
00140 #if CONFIG_GFX_CLIPPING || CONFIG_GFX_VCOORDS
00141     Rect cr;                
00142 #endif
00143 
00144 #if CONFIG_GFX_TEXT
00145     const struct Font *font;
00156     uint8_t styles;
00157 #endif /* CONFIG_GFX_TEXT */
00158 
00159 #if CONFIG_GFX_VCOORDS
00160 
00164     vcoord_t orgX, orgY;
00165     vcoord_t scaleX, scaleY;
00166     /*\}*/
00167 #endif /* CONFIG_GFX_VCOORDS */
00168 
00169 } Bitmap;
00170 
00176 typedef struct Image
00177 {
00178     const uint8_t *raster;   
00179     coord_t width;     
00180     coord_t height;    
00181     coord_t stride;    
00182 } Image;
00183 
00184 #if CONFIG_BITMAP_FMT == BITMAP_FMT_PLANAR_H_MSB
00185 
00189     #define RAST_SIZE(width, height) ( (((width) + 7) / 8) * (height) )
00190 
00191 #elif CONFIG_BITMAP_FMT == BITMAP_FMT_PLANAR_V_LSB
00192 
00196     #define RAST_SIZE(width, height) ( (width) * (((height) + 7) / 8) )
00197 #else
00198     #error Unknown value of CONFIG_BITMAP_FMT
00199 #endif /* CONFIG_BITMAP_FMT */
00200 
00201 /* Function prototypes */
00202 void gfx_bitmapInit (Bitmap *bm, uint8_t *raster, coord_t w, coord_t h);
00203 void gfx_bitmapClear(Bitmap *bm);
00204 void gfx_blit       (Bitmap *dst, const Rect *rect, const Bitmap *src, coord_t srcx, coord_t srcy);
00205 void gfx_blitRaster (Bitmap *dst, coord_t dx, coord_t dy, const uint8_t *raster, coord_t w, coord_t h, coord_t stride);
00206 void gfx_blitImage  (Bitmap *dst, coord_t dx, coord_t dy, const Image *image);
00207 void gfx_line       (Bitmap *bm, coord_t x1, coord_t y1, coord_t x2, coord_t y2);
00208 void gfx_rectDraw   (Bitmap *bm, coord_t x1, coord_t y1, coord_t x2, coord_t y2);
00209 void gfx_rectFillC  (Bitmap *bm, coord_t x1, coord_t y1, coord_t x2, coord_t y2, uint8_t color);
00210 void gfx_rectFill   (Bitmap *bm, coord_t x1, coord_t y1, coord_t x2, coord_t y2);
00211 void gfx_rectClear  (Bitmap *bm, coord_t x1, coord_t y1, coord_t x2, coord_t y2);
00212 void gfx_moveTo     (Bitmap *bm, coord_t x,  coord_t y);
00213 void gfx_lineTo     (Bitmap *bm, coord_t x,  coord_t y);
00214 void gfx_setClipRect(Bitmap *bm, coord_t xmin, coord_t ymin, coord_t xmax, coord_t ymax);
00215 
00216 #if CPU_HARVARD
00217     #include <cpu/pgm.h>
00218     void gfx_blit_P(Bitmap *bm, const pgm_uint8_t *raster);
00219 #endif
00220 
00221 #if CONFIG_GFX_TEXT
00222 INLINE void gfx_setFont(Bitmap *bm, const struct Font *font)
00223 {
00224     bm->font = font;
00225 }
00226 #endif
00227 
00228 #if CONFIG_GFX_VCOORDS
00229 void gfx_setViewRect(Bitmap *bm, vcoord_t x1, vcoord_t y1, vcoord_t x2, vcoord_t y2);
00230 coord_t gfx_transformX(Bitmap *bm, vcoord_t x);
00231 coord_t gfx_transformY(Bitmap *bm, vcoord_t y);
00232 void gfx_vline(Bitmap *bm, vcoord_t x1, vcoord_t y1, vcoord_t x2, vcoord_t y2);
00233 #endif /* CONFIG_GFX_VCOORDS */
00234 
00235 EXTERN_C_END
00236 
00237 #endif /* GFX_GFX_H */