/* * $XConsortium: DviP.h,v 1.10 92/02/11 01:27:15 keith Exp $ */ /* $XFree86: xc/programs/xditview/DviP.h,v 1.4 2001/08/01 00:45:03 tsi Exp $ */ /* * DviP.h - Private definitions for Dvi widget */ #ifndef _XtDviP_h #define _XtDviP_h #ifdef USE_XFT #include #endif #include "Dvi.h" #include #include "DviChar.h" /*********************************************************************** * * Dvi Widget Private Data * ***********************************************************************/ /************************************ * * Class structure * ***********************************/ /* * New fields for the Dvi widget class record */ typedef struct _DviClass { int makes_compiler_happy; /* not used */ } DviClassPart; /* * Full class record declaration */ typedef struct _DviClassRec { CoreClassPart core_class; SimpleClassPart simple_class; DviClassPart command_class; } DviClassRec; extern DviClassRec dviClassRec; /*************************************** * * Instance (widget) structure * **************************************/ /* * a list of fonts we've used for this widget */ typedef struct _dviFontSizeList { struct _dviFontSizeList *next; int size; char *x_name; #ifdef USE_XFT XftFont *font; Bool core; #else XFontStruct *font; #endif int doesnt_exist; } DviFontSizeList; typedef struct _dviFontList { struct _dviFontList *next; char *dvi_name; char *x_name; int dvi_number; Boolean initialized; Boolean scalable; DviFontSizeList *sizes; DviCharNameMap *char_map; } DviFontList; typedef struct _dviFontMap { struct _dviFontMap *next; char *dvi_name; char *x_name; } DviFontMap; #define DVI_TEXT_CACHE_SIZE 256 #define DVI_CHAR_CACHE_SIZE 1024 #ifdef USE_XFT typedef struct _dviTextItem { char *chars; int nchars; int x; XftFont *font; } DviTextItem; #endif typedef struct _dviCharCache { #ifdef USE_XFT DviTextItem cache[DVI_TEXT_CACHE_SIZE]; #else XTextItem cache[DVI_TEXT_CACHE_SIZE]; #endif char char_cache[DVI_CHAR_CACHE_SIZE]; int index; int max; int char_index; int font_size; int font_number; #ifdef USE_XFT XftFont *font; #else XFontStruct *font; #endif int start_x, start_y; int x, y; } DviCharCache; typedef struct _dviState { struct _dviState *next; int font_size; int font_bound; int font_number; int line_style; int line_width; int x; int y; } DviState; typedef struct _dviFileMap { struct _dviFileMap *next; long position; int page_number; } DviFileMap; /* * New fields for the Dvi widget record */ typedef struct { /* * resource specifiable items */ char *font_map_string; unsigned long foreground; int requested_page; int last_page; FILE *file; Boolean seek; /* file is "seekable" */ #ifdef USE_XFT XftFont *default_font; #else XFontStruct *default_font; #endif int backing_store; Boolean noPolyText; int screen_resolution; float page_width; float page_height; int size_scale_set; /* * private state */ FILE *tmpFile; /* used when reading stdin */ char readingTmp; /* reading now from tmp */ char ungot; /* have ungetc'd a char */ GC normal_GC; #ifdef USE_XFT XftDraw *draw; XftColor black; #endif DviFileMap *file_map; DviFontList *fonts; DviFontMap *font_map; int current_page; int font_size; int font_number; int device_resolution; int line_width; int line_style; int desired_width; int desired_height; int size_scale; /* font size scale */ #ifdef USE_XFT XftFont *font; #else XFontStruct *font; #endif int display_enable; double scale; /* device coordinates to pixels */ struct ExposedExtents { int x1, y1, x2, y2; } extents; DviState *state; DviCharCache cache; } DviPart; extern int DviGetAndPut(DviWidget, int *); #define DviGetIn(dw,cp)\ (dw->dvi.tmpFile ? (\ DviGetAndPut (dw, cp) \ ) :\ (*cp = getc (dw->dvi.file))\ ) #define DviGetC(dw, cp)\ (dw->dvi.readingTmp ? (\ ((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\ fseek (dw->dvi.tmpFile, 0l, 2),\ (dw->dvi.readingTmp = 0),\ DviGetIn (dw,cp)\ ) : (\ *cp\ )\ ) : (\ DviGetIn(dw,cp)\ )\ ) #define DviUngetC(dw, c)\ (dw->dvi.readingTmp ? (\ ungetc (c, dw->dvi.tmpFile)\ ) : ( \ (dw->dvi.ungot = 1),\ ungetc (c, dw->dvi.file))) #define ToX(dw,device) ((int) ((device) * (dw)->dvi.scale + 0.5)) #define ToDevice(dw,x) ((int) ((x) / (dw)->dvi.scale + 0.5)) #define FontSizeInPixels(dw,size) ((int) ((size) * (dw)->dvi.screen_resolution / ((dw)->dvi.size_scale * 72))) #define FontSizeInDevice(dw,size) ((int) ((size) * (dw)->dvi.device_resolution / ((dw)->dvi.size_scale * 72))) /* * Full widget declaration */ typedef struct _DviRec { CorePart core; SimplePart simple; DviPart dvi; } DviRec; /* draw.c */ extern void HorizontalMove(DviWidget, int); extern void HorizontalGoto(DviWidget, int); extern void VerticalMove(DviWidget, int); extern void VerticalGoto(DviWidget, int); extern void FlushCharCache(DviWidget); extern void SetGCForDraw(DviWidget); extern void DrawLine(DviWidget, int, int); extern void DrawCircle(DviWidget, int); extern void DrawEllipse(DviWidget, int, int); extern void DrawArc(DviWidget, int, int, int, int); extern void DrawSpline(DviWidget, char *, int); /* font.c */ extern void ParseFontMap(DviWidget); extern void DestroyFontMap(DviFontMap *); extern void SetFontPosition(DviWidget, int, char *, char *); #ifdef USE_XFT extern XftFont * QueryFont(DviWidget, int, int); #else extern XFontStruct * QueryFont(DviWidget, int, int); #endif extern DviCharNameMap * QueryFontMap(DviWidget, int); /* lex.c */ extern char * GetLine(DviWidget, char *, int); extern char * GetWord(DviWidget, char *, int); extern int GetNumber(DviWidget); /* page.c */ extern void DestroyFileMap(DviFileMap *); extern void ForgetPagePositions(DviWidget); extern void RememberPagePosition(DviWidget, int); extern long SearchPagePosition(DviWidget, int); extern void FileSeek(DviWidget, long); /* parse.c */ extern int ParseInput(DviWidget); /* Dvi.c */ extern void SetDeviceResolution(DviWidget, int); #endif /* _XtDviP_h */