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