diff options
Diffstat (limited to 'src/Type1/spaces.h')
-rw-r--r-- | src/Type1/spaces.h | 104 |
1 files changed, 68 insertions, 36 deletions
diff --git a/src/Type1/spaces.h b/src/Type1/spaces.h index 21eee17..efbcecb 100644 --- a/src/Type1/spaces.h +++ b/src/Type1/spaces.h @@ -26,6 +26,8 @@ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ +/* $XFree86: xc/lib/font/Type1/spaces.h,v 3.4 2001/01/17 19:43:23 dawes Exp $ */ + /*SHARED*/ #define USER t1_User @@ -37,35 +39,26 @@ #define Scale(o,sx,sy) t1_Scale(o,sx,sy) #define QuerySpace(S,f1,f2,f3,f4) t1_QuerySpace(S,f1,f2,f3,f4) #define Warp(s1,o,s2) t1_Warp(s1,o,s2) - -struct XYspace *t1_Context(); /* creates a coordinate space for a device */ -struct xobject *t1_Transform(); /* transform an object */ + +/* IDENTITY space */ +extern struct XYspace *IDENTITY; + +/* creates a coordinate space for a device */ +extern struct XYspace *Context(pointer device, double units); +/* transform an object */ +extern struct xobject *t1_Transform ( struct xobject *obj, double cxx, + double cyx, double cxy, double cyy ); +#if 0 struct xobject *t1_Rotate(); /* rotate an object */ -struct xobject *t1_Scale(); /* scale an object */ +#endif +/* scale an object */ +extern struct xobject *t1_Scale ( struct xobject *obj, double sx, double sy ); +#if 0 struct xobject *t1_Warp(); /* transform like delta of two spaces */ -void t1_QuerySpace(); /* returns coordinate space matrix */ - -/*END SHARED*/ -/*SHARED*/ - -#define DeviceResolution t1_DeviceResolution -#define InitSpaces() t1_InitSpaces() -#define CopySpace(s) t1_CopySpace(s) -#define Xform(o,M) t1_Xform(o,M) -#define UnConvert(S,pt,xp,yp) t1_UnConvert(S,pt,xp,yp) -#define MatrixMultiply(A,B,C) t1_MMultiply(A,B,C) -#define MatrixInvert(A,B) t1_MInvert(A,B) -#define PseudoSpace(S,M) t1_PseudoSpace(S,M) -#define FindContext(M) t1_FindContext(M) - -void t1_InitSpaces(); /* initialize pre-defined coordinate spaces */ -struct XYspace *t1_CopySpace(); /* duplicate a coordinate space */ -struct xobject *t1_Xform(); /* transform object by matrix */ -void t1_UnConvert(); /* return user coordinates from device coordinates */ -void t1_MMultiply(); /* multiply two matrices */ -void t1_MInvert(); /* invert a matrix */ -void t1_PseudoSpace(); /* force a coordinate space from a matrix */ -int t1_FindContext(); /* return the "context" represented by a matrix */ +#endif +/* returns coordinate space matrix */ +extern void t1_QuerySpace ( struct XYspace *S, double *cxxP, double *cyxP, + double *cxyP, double *cyyP ); /*END SHARED*/ /*SHARED*/ @@ -108,15 +101,24 @@ struct doublematrix { /*END SHARED*/ /*SHARED*/ +struct fractpoint { + fractpel x,y; +} ; + +/*SHARED*/ + +typedef fractpel (*convertFunc)(double, double, double, double); +typedef fractpel (*iconvertFunc)(fractpel, fractpel, long, long); + struct XYspace { XOBJ_COMMON /* xobject common data define 3-26-91 PNM */ /* type = SPACETYPE */ - void (*convert)(); /* calculate "fractpoint" X,Y from float X,Y */ - void (*iconvert)(); /* calculate "fractpoint" X,Y from int X,Y */ - fractpel (*xconvert)(); /* subroutine of convert */ - fractpel (*yconvert)(); /* subroutine of convert */ - fractpel (*ixconvert)(); /* subroutine of iconvert */ - fractpel (*iyconvert)(); /* subroutine of iconvert */ + void (*convert)(struct fractpoint *, struct XYspace *, double, double); /* calculate "fractpoint" X,Y from float X,Y */ + void (*iconvert)(struct fractpoint *, struct XYspace *, long, long); /* calculate "fractpoint" X,Y from int X,Y */ + convertFunc xconvert; /* subroutine of convert */ + convertFunc yconvert; /* subroutine of convert */ + iconvertFunc ixconvert; /* subroutine of iconvert */ + iconvertFunc iyconvert; /* subroutine of iconvert */ int ID; /* unique identifier (used in font caching) */ unsigned char context; /* device context of coordinate space */ struct doublematrix tofract; /* xform to get to fractional pels */ @@ -126,15 +128,45 @@ struct XYspace { #define INVALIDID 0 /* no valid space will have this ID */ /*END SHARED*/ +/*END SHARED*/ /*SHARED*/ -struct fractpoint { - fractpel x,y; -} ; +#define DeviceResolution t1_DeviceResolution +#define InitSpaces t1_InitSpaces +#define CopySpace(s) t1_CopySpace(s) +#define Xform(o,M) t1_Xform(o,M) +#define UnConvert(S,pt,xp,yp) t1_UnConvert(S,pt,xp,yp) +#define MatrixMultiply(A,B,C) t1_MMultiply(A,B,C) +#define MatrixInvert(A,B) t1_MInvert(A,B) +#define PseudoSpace(S,M) t1_PseudoSpace(S,M) +#define FindContext(M) t1_FindContext(M) +/* initialize pre-defined coordinate spaces */ +extern void t1_InitSpaces ( void ); +/* duplicate a coordinate space */ +extern struct XYspace *t1_CopySpace ( struct XYspace *S ); +/* transform object by matrix */ +extern struct xobject *t1_Xform ( struct xobject *obj, double M[2][2] ); +/* return user coordinates from device coordinates */ +extern void t1_UnConvert ( struct XYspace *S, struct fractpoint *pt, + double *xp, double *yp ); +/* multiply two matrices */ +extern void t1_MMultiply ( double A[2][2], double B[2][2], double C[2][2] ); +/* invert a matrix */ +extern void t1_MInvert ( double M[2][2], double Mprime[2][2] ); +/* force a coordinate space from a matrix */ +extern void t1_PseudoSpace ( struct XYspace *S, double M[2][2] ); +/* return the "context" represented by a matrix */ +int t1_FindContext(double M[2][2]); + /*END SHARED*/ /*SHARED*/ #define NULLCONTEXT 0 /*END SHARED*/ + +/* dump a coordinate space structure */ +extern void t1_DumpSpace ( struct XYspace *S ); +/* dump a format a "fractpel" coordinate */ +extern void t1_FormatFP ( char *string, fractpel fpel ); |