DviP.h revision c166fba9
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 { 33f80a6dcdSmrg int makes_compiler_happy; /* not used */ 34f80a6dcdSmrg} DviClassPart; 35f80a6dcdSmrg 36f80a6dcdSmrg/* 37f80a6dcdSmrg * Full class record declaration 38f80a6dcdSmrg */ 39f80a6dcdSmrg 40f80a6dcdSmrgtypedef struct _DviClassRec { 41f80a6dcdSmrg CoreClassPart core_class; 42f80a6dcdSmrg SimpleClassPart simple_class; 43f80a6dcdSmrg 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 { 59f80a6dcdSmrg struct _dviFontSizeList *next; 60f80a6dcdSmrg int size; 61f80a6dcdSmrg char *x_name; 62f80a6dcdSmrg#ifdef USE_XFT 63f80a6dcdSmrg XftFont *font; 64f80a6dcdSmrg Bool core; 65f80a6dcdSmrg#else 66f80a6dcdSmrg XFontStruct *font; 67f80a6dcdSmrg#endif 68f80a6dcdSmrg int doesnt_exist; 69f80a6dcdSmrg} DviFontSizeList; 70f80a6dcdSmrg 71f80a6dcdSmrgtypedef struct _dviFontList { 72f80a6dcdSmrg struct _dviFontList *next; 73f80a6dcdSmrg char *dvi_name; 74f80a6dcdSmrg char *x_name; 75f80a6dcdSmrg int dvi_number; 76f80a6dcdSmrg Boolean initialized; 77f80a6dcdSmrg Boolean scalable; 78f80a6dcdSmrg DviFontSizeList *sizes; 79f80a6dcdSmrg DviCharNameMap *char_map; 80f80a6dcdSmrg} DviFontList; 81f80a6dcdSmrg 82f80a6dcdSmrgtypedef struct _dviFontMap { 83f80a6dcdSmrg struct _dviFontMap *next; 84f80a6dcdSmrg char *dvi_name; 85f80a6dcdSmrg 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 { 93f80a6dcdSmrg char *chars; 94f80a6dcdSmrg int nchars; 95f80a6dcdSmrg int x; 96f80a6dcdSmrg XftFont *font; 97f80a6dcdSmrg} DviTextItem; 98f80a6dcdSmrg#endif 99f80a6dcdSmrg 100f80a6dcdSmrgtypedef struct _dviCharCache { 101f80a6dcdSmrg#ifdef USE_XFT 102f80a6dcdSmrg DviTextItem cache[DVI_TEXT_CACHE_SIZE]; 103f80a6dcdSmrg#else 104f80a6dcdSmrg XTextItem cache[DVI_TEXT_CACHE_SIZE]; 105f80a6dcdSmrg#endif 106f80a6dcdSmrg char char_cache[DVI_CHAR_CACHE_SIZE]; 107f80a6dcdSmrg int index; 108f80a6dcdSmrg int max; 109f80a6dcdSmrg int char_index; 110f80a6dcdSmrg int font_size; 111f80a6dcdSmrg int font_number; 112f80a6dcdSmrg#ifdef USE_XFT 113f80a6dcdSmrg XftFont *font; 114f80a6dcdSmrg#else 115f80a6dcdSmrg XFontStruct *font; 116f80a6dcdSmrg#endif 117f80a6dcdSmrg int start_x, start_y; 118f80a6dcdSmrg int x, y; 119f80a6dcdSmrg} DviCharCache; 120f80a6dcdSmrg 121f80a6dcdSmrgtypedef struct _dviState { 122f80a6dcdSmrg struct _dviState *next; 123f80a6dcdSmrg int font_size; 124f80a6dcdSmrg int font_bound; 125f80a6dcdSmrg int font_number; 126f80a6dcdSmrg int line_style; 127f80a6dcdSmrg int line_width; 128f80a6dcdSmrg int x; 129f80a6dcdSmrg int y; 130f80a6dcdSmrg} DviState; 131f80a6dcdSmrg 132f80a6dcdSmrgtypedef struct _dviFileMap { 133f80a6dcdSmrg struct _dviFileMap *next; 134f80a6dcdSmrg long position; 135f80a6dcdSmrg int page_number; 136f80a6dcdSmrg} DviFileMap; 137f80a6dcdSmrg 138f80a6dcdSmrg/* 139f80a6dcdSmrg * New fields for the Dvi widget record 140f80a6dcdSmrg */ 141f80a6dcdSmrg 142f80a6dcdSmrgtypedef struct { 143f80a6dcdSmrg /* 144f80a6dcdSmrg * resource specifiable items 145f80a6dcdSmrg */ 146f80a6dcdSmrg char *font_map_string; 147f80a6dcdSmrg unsigned long foreground; 148f80a6dcdSmrg int requested_page; 149f80a6dcdSmrg int last_page; 150f80a6dcdSmrg FILE *file; 151f80a6dcdSmrg Boolean seek; /* file is "seekable" */ 152f80a6dcdSmrg#ifdef USE_XFT 153f80a6dcdSmrg XftFont *default_font; 154f80a6dcdSmrg#else 155f80a6dcdSmrg XFontStruct *default_font; 156f80a6dcdSmrg#endif 157f80a6dcdSmrg int backing_store; 158f80a6dcdSmrg Boolean noPolyText; 159f80a6dcdSmrg int screen_resolution; 160f80a6dcdSmrg float page_width; 161f80a6dcdSmrg float page_height; 162f80a6dcdSmrg int size_scale_set; 163f80a6dcdSmrg /* 164f80a6dcdSmrg * private state 165f80a6dcdSmrg */ 166f80a6dcdSmrg FILE *tmpFile; /* used when reading stdin */ 167f80a6dcdSmrg char readingTmp; /* reading now from tmp */ 168f80a6dcdSmrg char ungot; /* have ungetc'd a char */ 169f80a6dcdSmrg GC normal_GC; 170f80a6dcdSmrg#ifdef USE_XFT 171f80a6dcdSmrg XftDraw *draw; 172f80a6dcdSmrg XftColor black; 173f80a6dcdSmrg#endif 174f80a6dcdSmrg DviFileMap *file_map; 175f80a6dcdSmrg DviFontList *fonts; 176f80a6dcdSmrg DviFontMap *font_map; 177f80a6dcdSmrg int current_page; 178f80a6dcdSmrg int font_size; 179f80a6dcdSmrg int font_number; 180f80a6dcdSmrg int device_resolution; 181f80a6dcdSmrg int line_width; 182f80a6dcdSmrg int line_style; 183f80a6dcdSmrg int desired_width; 184f80a6dcdSmrg int desired_height; 185f80a6dcdSmrg int size_scale; /* font size scale */ 186f80a6dcdSmrg#ifdef USE_XFT 187f80a6dcdSmrg XftFont *font; 188f80a6dcdSmrg#else 189f80a6dcdSmrg XFontStruct *font; 190f80a6dcdSmrg#endif 191f80a6dcdSmrg int display_enable; 192f80a6dcdSmrg double scale; /* device coordinates to pixels */ 193f80a6dcdSmrg struct ExposedExtents { 194f80a6dcdSmrg int x1, y1, x2, y2; 195f80a6dcdSmrg } extents; 196f80a6dcdSmrg DviState *state; 197f80a6dcdSmrg DviCharCache cache; 198f80a6dcdSmrg} DviPart; 199f80a6dcdSmrg 200f80a6dcdSmrgextern 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 { 241f80a6dcdSmrg CorePart core; 242f80a6dcdSmrg SimplePart simple; 243f80a6dcdSmrg DviPart dvi; 244f80a6dcdSmrg} DviRec; 245f80a6dcdSmrg 246f80a6dcdSmrg/* draw.c */ 247f80a6dcdSmrgextern void HorizontalMove(DviWidget, int); 248f80a6dcdSmrgextern void HorizontalGoto(DviWidget, int); 249f80a6dcdSmrgextern void VerticalMove(DviWidget, int); 250f80a6dcdSmrgextern void VerticalGoto(DviWidget, int); 251f80a6dcdSmrgextern void FlushCharCache(DviWidget); 252f80a6dcdSmrgextern void SetGCForDraw(DviWidget); 253f80a6dcdSmrgextern void DrawLine(DviWidget, int, int); 254f80a6dcdSmrgextern void DrawCircle(DviWidget, int); 255f80a6dcdSmrgextern void DrawEllipse(DviWidget, int, int); 256f80a6dcdSmrgextern void DrawArc(DviWidget, int, int, int, int); 257c166fba9Smrgextern void DrawSpline(DviWidget, const char *, int); 258f80a6dcdSmrg 259f80a6dcdSmrg/* font.c */ 260f80a6dcdSmrgextern void ParseFontMap(DviWidget); 261f80a6dcdSmrgextern void DestroyFontMap(DviFontMap *); 262c166fba9Smrgextern void SetFontPosition(DviWidget, int, const char *, const char *); 263f80a6dcdSmrg#ifdef USE_XFT 264f80a6dcdSmrgextern XftFont * QueryFont(DviWidget, int, int); 265f80a6dcdSmrg#else 266f80a6dcdSmrgextern XFontStruct * QueryFont(DviWidget, int, int); 267f80a6dcdSmrg#endif 268f80a6dcdSmrgextern DviCharNameMap * QueryFontMap(DviWidget, int); 269f80a6dcdSmrg 270f80a6dcdSmrg/* lex.c */ 271f80a6dcdSmrgextern char * GetLine(DviWidget, char *, int); 272f80a6dcdSmrgextern char * GetWord(DviWidget, char *, int); 273f80a6dcdSmrgextern int GetNumber(DviWidget); 274f80a6dcdSmrg 275f80a6dcdSmrg/* page.c */ 276f80a6dcdSmrgextern void DestroyFileMap(DviFileMap *); 277f80a6dcdSmrgextern void ForgetPagePositions(DviWidget); 278f80a6dcdSmrgextern void RememberPagePosition(DviWidget, int); 279f80a6dcdSmrgextern long SearchPagePosition(DviWidget, int); 280f80a6dcdSmrgextern void FileSeek(DviWidget, long); 281f80a6dcdSmrg 282f80a6dcdSmrg/* parse.c */ 283f80a6dcdSmrgextern int ParseInput(DviWidget); 284f80a6dcdSmrg 285f80a6dcdSmrg/* Dvi.c */ 286f80a6dcdSmrgextern void SetDeviceResolution(DviWidget, int); 287f80a6dcdSmrg 288f80a6dcdSmrg#endif /* _XtDviP_h */ 289