DviP.h revision f80a6dcd
1/* 2 * $XConsortium: DviP.h,v 1.10 92/02/11 01:27:15 keith Exp $ 3 */ 4/* $XFree86: xc/programs/xditview/DviP.h,v 1.4 2001/08/01 00:45:03 tsi Exp $ */ 5 6/* 7 * DviP.h - Private definitions for Dvi widget 8 */ 9 10#ifndef _XtDviP_h 11#define _XtDviP_h 12 13#ifdef USE_XFT 14#include <X11/Xft/Xft.h> 15#endif 16 17#include "Dvi.h" 18#include <X11/Xaw/SimpleP.h> 19#include "DviChar.h" 20 21/*********************************************************************** 22 * 23 * Dvi Widget Private Data 24 * 25 ***********************************************************************/ 26 27/************************************ 28 * 29 * Class structure 30 * 31 ***********************************/ 32 33/* 34 * New fields for the Dvi widget class record 35 */ 36 37typedef struct _DviClass { 38 int makes_compiler_happy; /* not used */ 39} DviClassPart; 40 41/* 42 * Full class record declaration 43 */ 44 45typedef struct _DviClassRec { 46 CoreClassPart core_class; 47 SimpleClassPart simple_class; 48 DviClassPart command_class; 49} DviClassRec; 50 51extern DviClassRec dviClassRec; 52 53/*************************************** 54 * 55 * Instance (widget) structure 56 * 57 **************************************/ 58 59/* 60 * a list of fonts we've used for this widget 61 */ 62 63typedef struct _dviFontSizeList { 64 struct _dviFontSizeList *next; 65 int size; 66 char *x_name; 67#ifdef USE_XFT 68 XftFont *font; 69 Bool core; 70#else 71 XFontStruct *font; 72#endif 73 int doesnt_exist; 74} DviFontSizeList; 75 76typedef struct _dviFontList { 77 struct _dviFontList *next; 78 char *dvi_name; 79 char *x_name; 80 int dvi_number; 81 Boolean initialized; 82 Boolean scalable; 83 DviFontSizeList *sizes; 84 DviCharNameMap *char_map; 85} DviFontList; 86 87typedef struct _dviFontMap { 88 struct _dviFontMap *next; 89 char *dvi_name; 90 char *x_name; 91} DviFontMap; 92 93#define DVI_TEXT_CACHE_SIZE 256 94#define DVI_CHAR_CACHE_SIZE 1024 95 96#ifdef USE_XFT 97typedef struct _dviTextItem { 98 char *chars; 99 int nchars; 100 int x; 101 XftFont *font; 102} DviTextItem; 103#endif 104 105typedef struct _dviCharCache { 106#ifdef USE_XFT 107 DviTextItem cache[DVI_TEXT_CACHE_SIZE]; 108#else 109 XTextItem cache[DVI_TEXT_CACHE_SIZE]; 110#endif 111 char char_cache[DVI_CHAR_CACHE_SIZE]; 112 int index; 113 int max; 114 int char_index; 115 int font_size; 116 int font_number; 117#ifdef USE_XFT 118 XftFont *font; 119#else 120 XFontStruct *font; 121#endif 122 int start_x, start_y; 123 int x, y; 124} DviCharCache; 125 126typedef struct _dviState { 127 struct _dviState *next; 128 int font_size; 129 int font_bound; 130 int font_number; 131 int line_style; 132 int line_width; 133 int x; 134 int y; 135} DviState; 136 137typedef struct _dviFileMap { 138 struct _dviFileMap *next; 139 long position; 140 int page_number; 141} DviFileMap; 142 143/* 144 * New fields for the Dvi widget record 145 */ 146 147typedef struct { 148 /* 149 * resource specifiable items 150 */ 151 char *font_map_string; 152 unsigned long foreground; 153 int requested_page; 154 int last_page; 155 FILE *file; 156 Boolean seek; /* file is "seekable" */ 157#ifdef USE_XFT 158 XftFont *default_font; 159#else 160 XFontStruct *default_font; 161#endif 162 int backing_store; 163 Boolean noPolyText; 164 int screen_resolution; 165 float page_width; 166 float page_height; 167 int size_scale_set; 168 /* 169 * private state 170 */ 171 FILE *tmpFile; /* used when reading stdin */ 172 char readingTmp; /* reading now from tmp */ 173 char ungot; /* have ungetc'd a char */ 174 GC normal_GC; 175#ifdef USE_XFT 176 XftDraw *draw; 177 XftColor black; 178#endif 179 DviFileMap *file_map; 180 DviFontList *fonts; 181 DviFontMap *font_map; 182 int current_page; 183 int font_size; 184 int font_number; 185 int device_resolution; 186 int line_width; 187 int line_style; 188 int desired_width; 189 int desired_height; 190 int size_scale; /* font size scale */ 191#ifdef USE_XFT 192 XftFont *font; 193#else 194 XFontStruct *font; 195#endif 196 int display_enable; 197 double scale; /* device coordinates to pixels */ 198 struct ExposedExtents { 199 int x1, y1, x2, y2; 200 } extents; 201 DviState *state; 202 DviCharCache cache; 203} DviPart; 204 205extern int DviGetAndPut(DviWidget, int *); 206 207#define DviGetIn(dw,cp)\ 208 (dw->dvi.tmpFile ? (\ 209 DviGetAndPut (dw, cp) \ 210 ) :\ 211 (*cp = getc (dw->dvi.file))\ 212) 213 214#define DviGetC(dw, cp)\ 215 (dw->dvi.readingTmp ? (\ 216 ((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\ 217 fseek (dw->dvi.tmpFile, 0l, 2),\ 218 (dw->dvi.readingTmp = 0),\ 219 DviGetIn (dw,cp)\ 220 ) : (\ 221 *cp\ 222 )\ 223 ) : (\ 224 DviGetIn(dw,cp)\ 225 )\ 226) 227 228#define DviUngetC(dw, c)\ 229 (dw->dvi.readingTmp ? (\ 230 ungetc (c, dw->dvi.tmpFile)\ 231 ) : ( \ 232 (dw->dvi.ungot = 1),\ 233 ungetc (c, dw->dvi.file))) 234 235#define ToX(dw,device) ((int) ((device) * (dw)->dvi.scale + 0.5)) 236#define ToDevice(dw,x) ((int) ((x) / (dw)->dvi.scale + 0.5)) 237#define SizeScale(dw) ((dw)->dvi.size_scale ? (dw)->dvi.size_scale : 4) 238#define FontSizeInPixels(dw,size) ((int) ((size) * (dw)->dvi.screen_resolution / (SizeScale(dw) * 72))) 239#define FontSizeInDevice(dw,size) ((int) ((size) * (dw)->dvi.device_resolution / (SizeScale(dw) * 72))) 240 241/* 242 * Full widget declaration 243 */ 244 245typedef struct _DviRec { 246 CorePart core; 247 SimplePart simple; 248 DviPart dvi; 249} DviRec; 250 251/* draw.c */ 252extern void HorizontalMove(DviWidget, int); 253extern void HorizontalGoto(DviWidget, int); 254extern void VerticalMove(DviWidget, int); 255extern void VerticalGoto(DviWidget, int); 256extern void FlushCharCache(DviWidget); 257extern void SetGCForDraw(DviWidget); 258extern void DrawLine(DviWidget, int, int); 259extern void DrawCircle(DviWidget, int); 260extern void DrawEllipse(DviWidget, int, int); 261extern void DrawArc(DviWidget, int, int, int, int); 262extern void DrawSpline(DviWidget, char *, int); 263 264/* font.c */ 265extern void ParseFontMap(DviWidget); 266extern void DestroyFontMap(DviFontMap *); 267extern void SetFontPosition(DviWidget, int, char *, char *); 268#ifdef USE_XFT 269extern XftFont * QueryFont(DviWidget, int, int); 270#else 271extern XFontStruct * QueryFont(DviWidget, int, int); 272#endif 273extern DviCharNameMap * QueryFontMap(DviWidget, int); 274 275/* lex.c */ 276extern char * GetLine(DviWidget, char *, int); 277extern char * GetWord(DviWidget, char *, int); 278extern int GetNumber(DviWidget); 279 280/* page.c */ 281extern void DestroyFileMap(DviFileMap *); 282extern void ForgetPagePositions(DviWidget); 283extern void RememberPagePosition(DviWidget, int); 284extern long SearchPagePosition(DviWidget, int); 285extern void FileSeek(DviWidget, long); 286 287/* parse.c */ 288extern int ParseInput(DviWidget); 289 290/* Dvi.c */ 291extern void SetDeviceResolution(DviWidget, int); 292 293#endif /* _XtDviP_h */ 294