123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- #ifndef cmGrDevCtx_h
- #define cmGrDevCtx_h
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- enum
- {
- kOkGrDcRC = cmOkRC,
- kStackFaultGrDcRC,
- kDevDrvFailGrDcRC
- };
-
- typedef cmRC_t cmGrDcRC_t;
-
- extern cmGrDcH_t cmGrDcNullHandle;
-
- enum
- {
- kSolidLsGrFl = 0x01,
- kDashLsGrFl = 0x02,
- kDotLsGrFl = 0x04
- };
-
- enum
- {
- kHelveticaFfGrId,
- kTimesFfGrId,
- kCourierFfGrId,
-
- kFontFfCnt
- };
-
- enum
- {
- kNormalFsGrFl = 0x00,
- kBoldFsGrFl = 0x01,
- kItalicFsGrFl = 0x02
- };
-
-
- typedef struct cmGrDev_str
- {
- // return true on success
- bool (*create)( void* arg, unsigned w, unsigned h );
- void (*destroy)( void* arg );
-
- void (*begin_draw)( void* arg );
- void (*end_draw)( void* arg );
- void (*draw)( void* arg, int x, int y );
-
-
- void (*set_color)( void* arg, const cmGrColor_t c );
- void (*get_color)( void* arg, cmGrColor_t* c );
-
- // Return false if the 'font' label is not recognized.
- void (*set_font_family)(void* arg, unsigned fontId );
- unsigned (*get_font_family)(void* arg );
-
- void (*set_font_style)( void* arg, unsigned styleFLags );
- unsigned (*get_font_style)( void* arg );
-
- void (*set_font_size)( void* arg, unsigned size );
- unsigned (*get_font_size)( void* arg );
-
- void (*set_pen_style)( void* arg, unsigned styleFlags );
- unsigned (*get_pen_style)( void* arg );
-
- void (*set_pen_width)( void* arg, unsigned w );
- unsigned (*get_pen_width)( void* arg );
-
- void (*draw_line)( void* arg, int x, int y, int x1, int y1 );
- void (*draw_rect)( void* arg, int x, int y, unsigned w, unsigned h );
- void (*fill_rect)( void* arg, int x, int y, unsigned w, unsigned h );
-
- // Draw an ellipse, diamond or triangle inside the rectangle formed by l,t,w,h.
- void (*draw_ellipse)( void* arg, int x, int y, unsigned w, unsigned h );
- void (*fill_ellipse)( void* arg, int x, int y, unsigned w, unsigned h );
- void (*draw_diamond)( void* arg, int x, int y, unsigned w, unsigned h );
- void (*fill_diamond)( void* arg, int x, int y, unsigned w, unsigned h );
- void (*draw_triangle)( void* arg, int x, int y, unsigned w, unsigned h, unsigned dirFlag );
- void (*fill_triangle)( void* arg, int x, int y, unsigned w, unsigned h, unsigned dirFlag );
-
- // x,y identifies the left,lower text edge
- void (*draw_text)( void* arg, const char* text, int x, int y );
- void (*draw_text_rot)(void* arg, const char* text, int x, int y, int angle );
- void (*measure_text)( void* arg, const char* text, unsigned* w, unsigned* h );
-
- // Fill p[w*h*3] with RGB data.
- void (*read_image)( void* arg, unsigned char* p, int x, int y, unsigned w, unsigned h );
- void (*draw_image)( void* arg, const unsigned char* p, int x, int y, unsigned w, unsigned h );
-
- } cmGrDev_t;
-
- cmGrDcRC_t cmGrDevCtxCreate( cmCtx_t* ctx, cmGrDcH_t* hp, cmGrDev_t* dd, void* ddArg, int x, int y, int w, int h );
- cmGrDcRC_t cmGrDevCtxDestroy( cmGrDcH_t* hp );
- bool cmGrDevCtxIsValid( cmGrDcH_t h );
-
- cmGrDcRC_t cmGrDevCtxResize( cmGrDcH_t h, int x, int y, int ww, int hh );
- void cmGrDevCtxSize( cmGrDcH_t h, cmGrPExt_t* pext );
-
- void cmGrDevCtxBeginDraw( cmGrDcH_t h );
- void cmGrDevCtxEndDraw( cmGrDcH_t h );
- void cmGrDevCtxDraw( cmGrDcH_t h );
-
-
- void cmGrDcPushCtx( cmGrDcH_t h );
- void cmGrDcPopCtx( cmGrDcH_t h );
-
- unsigned cmGrDcColor( cmGrDcH_t h );
- void cmGrDcSetColorRgb( cmGrDcH_t h, unsigned char r, unsigned char g, unsigned char b );
- void cmGrDcSetColor( cmGrDcH_t h, cmGrColor_t color );
-
- unsigned cmGrDcFontFamily( cmGrDcH_t h );
- void cmGrDcSetFontFamily( cmGrDcH_t h, unsigned fontId );
-
- unsigned cmGrDcFontStyle( cmGrDcH_t h );
- void cmGrDcSetFontStyle( cmGrDcH_t h, unsigned style );
-
- unsigned cmGrDcFontSize( cmGrDcH_t h );
- void cmGrDcSetFontSize( cmGrDcH_t h, unsigned size );
-
- unsigned cmGrDcPenWidth( cmGrDcH_t h );
- void cmGrDcSetPenWidth( cmGrDcH_t h, unsigned width );
-
- unsigned cmGrDcPenStyle( cmGrDcH_t h );
- void cmGrDcSetPenStyle( cmGrDcH_t h, unsigned style );
-
- void cmGrDcDrawLine( cmGrDcH_t h, int x, int y, int x1, int y1 );
- // x,y is the upper,left.
- void cmGrDcDrawRect( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh );
- void cmGrDcDrawRectPExt( cmGrDcH_t h, const cmGrPExt_t* pext );
-
- void cmGrDcFillRect( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh );
- void cmGrDcDrawEllipse( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh );
- void cmGrDcFillEllipse( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh );
-
- void cmGrDcDrawDiamond( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh );
- void cmGrDcFillDiamond( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh );
-
- // Set 'dirFlag' to kTopGrFl,kBottomGrFl,kRightGrFl,kLeftGrFl to indicate
- // the direction the triangle is pointeed.
- void cmGrDcDrawTriangle( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh, unsigned dirFlag );
- void cmGrDcFillTriangle( cmGrDcH_t h, int x, int y, unsigned ww, unsigned hh, unsigned dirFlag );
-
- void cmGrDcMeasure( cmGrDcH_t h, const cmChar_t* text, cmGrPSz_t* sz );
- void cmGrDcDrawText( cmGrDcH_t h, const cmChar_t* text, int x, int y );
- void cmGrDcDrawTextRot( cmGrDcH_t h, const cmChar_t* text, int x, int y, int angle );
-
- void cmGrDcReadImage( cmGrDcH_t h, unsigned char* p, const cmGrPExt_t* pext );
- void cmGrDcDrawImage( cmGrDcH_t h, const unsigned char* p, const cmGrPExt_t* pext );
-
- //
- // Composite Functions
- //
-
- void cmGrDcSetFont( cmGrDcH_t h, unsigned fontId, unsigned size, unsigned style );
- void cmGrDcFontSetAndMeasure(cmGrDcH_t h, unsigned fontId, unsigned size, unsigned style, const cmChar_t* text, cmGrPSz_t* sz );
-
- enum
- {
- kLeftJsGrFl = 0x001,
- kRightJsGrFl = 0x002,
- kTopJsGrFl = 0x004,
- kBottomJsGrFl = 0x008,
- kHorzCtrJsGrFl = 0x010,
- kVertCtrJsGrFl = 0x020,
-
- kNorthJsGrFl = 0x040,
- kEastJsGrFl = 0x080,
- kSouthJsGrFl = 0x100,
- kWestJsGrFl = 0x200
- };
-
- // Use compass (NSEW) flags to select the draw point. Defaults to center for both dir's.
- // Use TBLF flags to select the text justification relative to the point.
- // In effect the TBLF flags select the corner of the text to place at the location of
- // the point selected by the NSEW flags.
- // If neither NS flag is set then the vertical point is set to the vertical center.
- // If neither EW flags is set then the horizontal point is set to the horzontal center.
- void cmGrDcDrawTextJustify( cmGrDcH_t h, unsigned fontId, unsigned size, unsigned style, const cmChar_t* text, const cmGrPExt_t* pext, unsigned flags );
-
- // Use LBLF to set the justification - the text corner to match to the given point.
- // If neither TL flag is given then the point is matched to the vertical center of the text.
- // If neither RL flag is given then the point is matched to the horizontal center of the text.
- void cmGrDcDrawTextJustifyPt( cmGrDcH_t h, unsigned fontId, unsigned size, unsigned style, const cmChar_t* text, unsigned flags, int x, int y );
-
- // Return the rectangle around the text but do not display the text.
- void cmGrDcDrawTextJustifyRect( cmGrDcH_t h, unsigned fontId, unsigned size, unsigned style, const cmChar_t* text, unsigned flags, int x, int y, cmGrPExt_t* pext );
-
- // Is the point x,y visible in this drawing context.
- bool cmGrDcPointIsVisible( cmGrDcH_t h, int x, int y );
-
- // Is any of the rectangle visible in this drawing context.
- bool cmGrDcRectIsVisible( cmGrDcH_t h, const cmGrPExt_t* r );
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
|