294 lines
6.1 KiB
C
294 lines
6.1 KiB
C
/*
|
|
* $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 <X11/Xft/Xft.h>
|
|
#endif
|
|
|
|
#include "Dvi.h"
|
|
#include <X11/Xaw/SimpleP.h>
|
|
#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 SizeScale(dw) ((dw)->dvi.size_scale ? (dw)->dvi.size_scale : 4)
|
|
#define FontSizeInPixels(dw,size) ((int) ((size) * (dw)->dvi.screen_resolution / (SizeScale(dw) * 72)))
|
|
#define FontSizeInDevice(dw,size) ((int) ((size) * (dw)->dvi.device_resolution / (SizeScale(dw) * 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 */
|