1f80a6dcdSmrg/* 2f80a6dcdSmrg * DviP.h - Private definitions for Dvi widget 3f80a6dcdSmrg */ 4f80a6dcdSmrg 5f80a6dcdSmrg#ifndef _XtDviP_h 6f80a6dcdSmrg#define _XtDviP_h 7f80a6dcdSmrg 8f80a6dcdSmrg#ifdef USE_XFT 9f80a6dcdSmrg#include <X11/Xft/Xft.h> 10f80a6dcdSmrg#endif 11f80a6dcdSmrg 12f80a6dcdSmrg#include "Dvi.h" 13f80a6dcdSmrg#include <X11/Xaw/SimpleP.h> 14f80a6dcdSmrg#include "DviChar.h" 15f80a6dcdSmrg 16f80a6dcdSmrg/*********************************************************************** 17f80a6dcdSmrg * 18f80a6dcdSmrg * Dvi Widget Private Data 19f80a6dcdSmrg * 20f80a6dcdSmrg ***********************************************************************/ 21f80a6dcdSmrg 22f80a6dcdSmrg/************************************ 23f80a6dcdSmrg * 24f80a6dcdSmrg * Class structure 25f80a6dcdSmrg * 26f80a6dcdSmrg ***********************************/ 27f80a6dcdSmrg 28f80a6dcdSmrg/* 29f80a6dcdSmrg * New fields for the Dvi widget class record 30f80a6dcdSmrg */ 31f80a6dcdSmrg 32f80a6dcdSmrgtypedef struct _DviClass { 3300994698Smrg int makes_compiler_happy; /* not used */ 34f80a6dcdSmrg} DviClassPart; 35f80a6dcdSmrg 36f80a6dcdSmrg/* 37f80a6dcdSmrg * Full class record declaration 38f80a6dcdSmrg */ 39f80a6dcdSmrg 40f80a6dcdSmrgtypedef struct _DviClassRec { 4100994698Smrg CoreClassPart core_class; 4200994698Smrg SimpleClassPart simple_class; 4300994698Smrg DviClassPart command_class; 44f80a6dcdSmrg} DviClassRec; 45f80a6dcdSmrg 46f80a6dcdSmrgextern DviClassRec dviClassRec; 47f80a6dcdSmrg 48f80a6dcdSmrg/*************************************** 49f80a6dcdSmrg * 50f80a6dcdSmrg * Instance (widget) structure 51f80a6dcdSmrg * 52f80a6dcdSmrg **************************************/ 53f80a6dcdSmrg 54f80a6dcdSmrg/* 55f80a6dcdSmrg * a list of fonts we've used for this widget 56f80a6dcdSmrg */ 57f80a6dcdSmrg 58f80a6dcdSmrgtypedef struct _dviFontSizeList { 5900994698Smrg struct _dviFontSizeList *next; 6000994698Smrg int size; 6100994698Smrg char *x_name; 62f80a6dcdSmrg#ifdef USE_XFT 6300994698Smrg XftFont *font; 6400994698Smrg Bool core; 65f80a6dcdSmrg#else 6600994698Smrg XFontStruct *font; 67f80a6dcdSmrg#endif 6800994698Smrg int doesnt_exist; 69f80a6dcdSmrg} DviFontSizeList; 70f80a6dcdSmrg 71f80a6dcdSmrgtypedef struct _dviFontList { 7200994698Smrg struct _dviFontList *next; 7300994698Smrg char *dvi_name; 7400994698Smrg char *x_name; 7500994698Smrg int dvi_number; 7600994698Smrg Boolean initialized; 7700994698Smrg Boolean scalable; 7800994698Smrg DviFontSizeList *sizes; 7900994698Smrg DviCharNameMap *char_map; 80f80a6dcdSmrg} DviFontList; 81f80a6dcdSmrg 82f80a6dcdSmrgtypedef struct _dviFontMap { 8300994698Smrg struct _dviFontMap *next; 8400994698Smrg char *dvi_name; 8500994698Smrg char *x_name; 86f80a6dcdSmrg} DviFontMap; 87f80a6dcdSmrg 88f80a6dcdSmrg#define DVI_TEXT_CACHE_SIZE 256 89f80a6dcdSmrg#define DVI_CHAR_CACHE_SIZE 1024 90f80a6dcdSmrg 91f80a6dcdSmrg#ifdef USE_XFT 92f80a6dcdSmrgtypedef struct _dviTextItem { 9300994698Smrg char *chars; 9400994698Smrg int nchars; 9500994698Smrg int x; 9600994698Smrg XftFont *font; 97f80a6dcdSmrg} DviTextItem; 98f80a6dcdSmrg#endif 99f80a6dcdSmrg 100f80a6dcdSmrgtypedef struct _dviCharCache { 101f80a6dcdSmrg#ifdef USE_XFT 10200994698Smrg DviTextItem cache[DVI_TEXT_CACHE_SIZE]; 103f80a6dcdSmrg#else 10400994698Smrg XTextItem cache[DVI_TEXT_CACHE_SIZE]; 105f80a6dcdSmrg#endif 10600994698Smrg char char_cache[DVI_CHAR_CACHE_SIZE]; 10700994698Smrg int index; 10800994698Smrg int max; 10900994698Smrg int char_index; 11000994698Smrg int font_size; 11100994698Smrg int font_number; 112f80a6dcdSmrg#ifdef USE_XFT 11300994698Smrg XftFont *font; 114f80a6dcdSmrg#else 11500994698Smrg XFontStruct *font; 116f80a6dcdSmrg#endif 11700994698Smrg int start_x, start_y; 11800994698Smrg int x, y; 119f80a6dcdSmrg} DviCharCache; 120f80a6dcdSmrg 121f80a6dcdSmrgtypedef struct _dviState { 12200994698Smrg struct _dviState *next; 12300994698Smrg int font_size; 12400994698Smrg int font_bound; 12500994698Smrg int font_number; 12600994698Smrg int line_style; 12700994698Smrg int line_width; 12800994698Smrg int x; 12900994698Smrg int y; 130f80a6dcdSmrg} DviState; 131f80a6dcdSmrg 132f80a6dcdSmrgtypedef struct _dviFileMap { 13300994698Smrg struct _dviFileMap *next; 13400994698Smrg long position; 13500994698Smrg int page_number; 136f80a6dcdSmrg} DviFileMap; 137f80a6dcdSmrg 138f80a6dcdSmrg/* 139f80a6dcdSmrg * New fields for the Dvi widget record 140f80a6dcdSmrg */ 141f80a6dcdSmrg 142f80a6dcdSmrgtypedef struct { 14300994698Smrg /* 14400994698Smrg * resource specifiable items 14500994698Smrg */ 14600994698Smrg char *font_map_string; 14700994698Smrg unsigned long foreground; 14800994698Smrg int requested_page; 14900994698Smrg int last_page; 15000994698Smrg FILE *file; 15100994698Smrg Boolean seek; /* file is "seekable" */ 152f80a6dcdSmrg#ifdef USE_XFT 15300994698Smrg XftFont *default_font; 154f80a6dcdSmrg#else 15500994698Smrg XFontStruct *default_font; 156f80a6dcdSmrg#endif 15700994698Smrg int backing_store; 15800994698Smrg Boolean noPolyText; 15900994698Smrg int screen_resolution; 16000994698Smrg float page_width; 16100994698Smrg float page_height; 16200994698Smrg int size_scale_set; 16300994698Smrg /* 16400994698Smrg * private state 16500994698Smrg */ 16600994698Smrg FILE *tmpFile; /* used when reading stdin */ 16700994698Smrg char readingTmp; /* reading now from tmp */ 16800994698Smrg char ungot; /* have ungetc'd a char */ 16900994698Smrg GC normal_GC; 170f80a6dcdSmrg#ifdef USE_XFT 17100994698Smrg XftDraw *draw; 17200994698Smrg XftColor black; 173f80a6dcdSmrg#endif 17400994698Smrg DviFileMap *file_map; 17500994698Smrg DviFontList *fonts; 17600994698Smrg DviFontMap *font_map; 17700994698Smrg int current_page; 17800994698Smrg int font_size; 17900994698Smrg int font_number; 18000994698Smrg int device_resolution; 18100994698Smrg int line_width; 18200994698Smrg int line_style; 18300994698Smrg int desired_width; 18400994698Smrg int desired_height; 18500994698Smrg int size_scale; /* font size scale */ 186f80a6dcdSmrg#ifdef USE_XFT 18700994698Smrg XftFont *font; 188f80a6dcdSmrg#else 18900994698Smrg XFontStruct *font; 190f80a6dcdSmrg#endif 19100994698Smrg int display_enable; 19200994698Smrg double scale; /* device coordinates to pixels */ 19300994698Smrg struct ExposedExtents { 19400994698Smrg int x1, y1, x2, y2; 19500994698Smrg } extents; 19600994698Smrg DviState *state; 19700994698Smrg DviCharCache cache; 198f80a6dcdSmrg} DviPart; 199f80a6dcdSmrg 20000994698Smrgextern int DviGetAndPut(DviWidget, int *); 201f80a6dcdSmrg 202f80a6dcdSmrg#define DviGetIn(dw,cp)\ 203f80a6dcdSmrg (dw->dvi.tmpFile ? (\ 204f80a6dcdSmrg DviGetAndPut (dw, cp) \ 205f80a6dcdSmrg ) :\ 206f80a6dcdSmrg (*cp = getc (dw->dvi.file))\ 207f80a6dcdSmrg) 208f80a6dcdSmrg 209f80a6dcdSmrg#define DviGetC(dw, cp)\ 210f80a6dcdSmrg (dw->dvi.readingTmp ? (\ 211f80a6dcdSmrg ((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\ 212c166fba9Smrg fseek (dw->dvi.tmpFile, 0l, SEEK_END),\ 213f80a6dcdSmrg (dw->dvi.readingTmp = 0),\ 214f80a6dcdSmrg DviGetIn (dw,cp)\ 215f80a6dcdSmrg ) : (\ 216f80a6dcdSmrg *cp\ 217f80a6dcdSmrg )\ 218f80a6dcdSmrg ) : (\ 219f80a6dcdSmrg DviGetIn(dw,cp)\ 220f80a6dcdSmrg )\ 221f80a6dcdSmrg) 222f80a6dcdSmrg 223f80a6dcdSmrg#define DviUngetC(dw, c)\ 224f80a6dcdSmrg (dw->dvi.readingTmp ? (\ 225f80a6dcdSmrg ungetc (c, dw->dvi.tmpFile)\ 226f80a6dcdSmrg ) : ( \ 227f80a6dcdSmrg (dw->dvi.ungot = 1),\ 228f80a6dcdSmrg ungetc (c, dw->dvi.file))) 229f80a6dcdSmrg 230f80a6dcdSmrg#define ToX(dw,device) ((int) ((device) * (dw)->dvi.scale + 0.5)) 231f80a6dcdSmrg#define ToDevice(dw,x) ((int) ((x) / (dw)->dvi.scale + 0.5)) 232f80a6dcdSmrg#define SizeScale(dw) ((dw)->dvi.size_scale ? (dw)->dvi.size_scale : 4) 233f80a6dcdSmrg#define FontSizeInPixels(dw,size) ((int) ((size) * (dw)->dvi.screen_resolution / (SizeScale(dw) * 72))) 234f80a6dcdSmrg#define FontSizeInDevice(dw,size) ((int) ((size) * (dw)->dvi.device_resolution / (SizeScale(dw) * 72))) 235f80a6dcdSmrg 236f80a6dcdSmrg/* 237f80a6dcdSmrg * Full widget declaration 238f80a6dcdSmrg */ 239f80a6dcdSmrg 240f80a6dcdSmrgtypedef struct _DviRec { 24100994698Smrg CorePart core; 24200994698Smrg SimplePart simple; 24300994698Smrg DviPart dvi; 244f80a6dcdSmrg} DviRec; 245f80a6dcdSmrg 2468c7c3c7eSmrg/* previously in draw.c */ 2478c7c3c7eSmrgstatic inline void 2488c7c3c7eSmrgHorizontalMove(DviWidget dw, int delta) 2498c7c3c7eSmrg{ 2508c7c3c7eSmrg dw->dvi.state->x += delta; 2518c7c3c7eSmrg} 2528c7c3c7eSmrg 2538c7c3c7eSmrgstatic inline void 2548c7c3c7eSmrgHorizontalGoto(DviWidget dw, int NewPosition) 2558c7c3c7eSmrg{ 2568c7c3c7eSmrg dw->dvi.state->x = NewPosition; 2578c7c3c7eSmrg} 2588c7c3c7eSmrg 2598c7c3c7eSmrgstatic inline void 2608c7c3c7eSmrgVerticalMove(DviWidget dw, int delta) 2618c7c3c7eSmrg{ 2628c7c3c7eSmrg dw->dvi.state->y += delta; 2638c7c3c7eSmrg} 2648c7c3c7eSmrg 2658c7c3c7eSmrgstatic inline void 2668c7c3c7eSmrgVerticalGoto(DviWidget dw, int NewPosition) 2678c7c3c7eSmrg{ 2688c7c3c7eSmrg dw->dvi.state->y = NewPosition; 2698c7c3c7eSmrg} 2708c7c3c7eSmrg 271f80a6dcdSmrg/* draw.c */ 27200994698Smrgextern void FlushCharCache(DviWidget); 27300994698Smrgextern void SetGCForDraw(DviWidget); 27400994698Smrgextern void DrawLine(DviWidget, int, int); 27500994698Smrgextern void DrawCircle(DviWidget, int); 27600994698Smrgextern void DrawEllipse(DviWidget, int, int); 27700994698Smrgextern void DrawArc(DviWidget, int, int, int, int); 27800994698Smrgextern void DrawSpline(DviWidget, const char *, int); 279f80a6dcdSmrg 280f80a6dcdSmrg/* font.c */ 28100994698Smrgextern void ParseFontMap(DviWidget); 28200994698Smrgextern void DestroyFontMap(DviFontMap *); 28300994698Smrgextern void SetFontPosition(DviWidget, int, const char *, const char *); 28400994698Smrg 285f80a6dcdSmrg#ifdef USE_XFT 28600994698Smrgextern XftFont *QueryFont(DviWidget, int, int); 287f80a6dcdSmrg#else 28800994698Smrgextern XFontStruct *QueryFont(DviWidget, int, int); 289f80a6dcdSmrg#endif 29000994698Smrgextern DviCharNameMap *QueryFontMap(DviWidget, int); 291f80a6dcdSmrg 292f80a6dcdSmrg/* lex.c */ 29300994698Smrgextern char *GetLine(DviWidget, char *, int); 29400994698Smrgextern char *GetWord(DviWidget, char *, int); 29500994698Smrgextern int GetNumber(DviWidget); 296f80a6dcdSmrg 297f80a6dcdSmrg/* page.c */ 29800994698Smrgextern void DestroyFileMap(DviFileMap *); 29900994698Smrgextern void ForgetPagePositions(DviWidget); 30000994698Smrgextern void RememberPagePosition(DviWidget, int); 30100994698Smrgextern long SearchPagePosition(DviWidget, int); 30200994698Smrgextern void FileSeek(DviWidget, long); 303f80a6dcdSmrg 304f80a6dcdSmrg/* parse.c */ 30500994698Smrgextern int ParseInput(DviWidget); 306f80a6dcdSmrg 307f80a6dcdSmrg/* Dvi.c */ 30800994698Smrgextern void SetDeviceResolution(DviWidget, int); 309f80a6dcdSmrg 31000994698Smrg#endif /* _XtDviP_h */ 311