00001
00043 #ifndef GFX_GFX_H
00044 #define GFX_GFX_H
00045
00046 #include "cfg/cfg_gfx.h"
00047 #include <cfg/compiler.h>
00048
00049 #include <cpu/attr.h>
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
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
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
00158
00159 #if CONFIG_GFX_VCOORDS
00160
00164 vcoord_t orgX, orgY;
00165 vcoord_t scaleX, scaleY;
00166
00167 #endif
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
00200
00201
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
00234
00235 EXTERN_C_END
00236
00237 #endif