/* $Xorg: spaces.h,v 1.3 2000/08/17 19:46:32 cpqbld Exp $ */
/* Copyright International Business Machines, Corp. 1991
* All Rights Reserved
* Copyright Lexmark International, Inc. 1991
* All Rights Reserved
*
* License to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted,
* provided that the above copyright notice appear in all copies and that
* both that copyright notice and this permission notice appear in
* supporting documentation, and that the name of IBM or Lexmark not be
* used in advertising or publicity pertaining to distribution of the
* software without specific, written prior permission.
*
* IBM AND LEXMARK PROVIDE THIS SOFTWARE "AS IS", WITHOUT ANY WARRANTIES OF
* ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO ANY
* IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
* AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE RISK AS TO THE
* QUALITY AND PERFORMANCE OF THE SOFTWARE, INCLUDING ANY DUTY TO SUPPORT
* OR MAINTAIN, BELONGS TO THE LICENSEE. SHOULD ANY PORTION OF THE
* SOFTWARE PROVE DEFECTIVE, THE LICENSEE (NOT IBM OR LEXMARK) ASSUMES THE
* ENTIRE COST OF ALL SERVICING, REPAIR AND CORRECTION. IN NO EVENT SHALL
* IBM OR LEXMARK BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
* THIS SOFTWARE.
*/
/* $XFree86: xc/lib/font/Type1/spaces.h,v 3.3 1999/08/22 08:58:53 dawes Exp $ */
/*SHARED*/
#define USER t1_User
#define IDENTITY t1_Identity
#define Context(d,u) t1_Context(d,u)
#define Transform(o,f1,f2,f3,f4) t1_Transform(o,f1,f2,f3,f4)
#define Rotate(o,d) t1_Rotate(o,d)
#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)
/* 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 );
/* returns coordinate space matrix */
extern void t1_QuerySpace ( struct XYspace *S, double *cxxP, double *cyxP,
double *cxyP, double *cyyP );
/*END SHARED*/
/*SHARED*/
/* #define KillSpace(s) Free(s)
Note - redefined KillSpace() to check references !
3-26-91 PNM */
#define KillSpace(s) if ( (--(s->references) == 0) ||\
( (s->references == 1) && ISPERMANENT(s->flag) ) )\
Free(s)
#define ConsumeSpace(s) MAKECONSUME(s,KillSpace(s))
#define UniqueSpace(s) MAKEUNIQUE(s,CopySpace(s))
/*END SHARED*/
/*SHARED*/
typedef short pel; /* integer pel locations */
typedef long fractpel; /* fractional pel locations */
#define FRACTBITS 16 /* number of fractional bits in 'fractpel' */
/*
We define the following macros to convert from 'fractpel' to 'pel' and
vice versa:
*/
#define TOFRACTPEL(p) (((fractpel)p)<<FRACTBITS)
#define FPHALF (1<<(FRACTBITS-1))
#define NEARESTPEL(fp) (((fp)+FPHALF)>>FRACTBITS)
#define FRACTFLOAT (double)(1L<<FRACTBITS)
/*END SHARED*/
/*SHARED*/
struct doublematrix {
double normal[2][2];
double inverse[2][2];
} ;
/*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)(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 */
fractpel itofract[2][2]; /* integer version of "tofract.normal" */
} ;
#define INVALIDID 0 /* no valid space will have this ID */
/*END SHARED*/
/*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)
/* initialize pre-defined coordinate spaces */
extern void t1_InitSpaces ( void );
/* duplicate a coordinate space */
extern struct XYspace *t1_CopySpace ( struct XYspace *S );
/* return user coordinates from device coordinates */
extern void t1_UnConvert ( struct XYspace *S, struct fractpoint *pt,
double *xp, double *yp );
/* return the "context" represented by a matrix */
int t1_FindContext(double M[2][2]);
/*END SHARED*/
/*SHARED*/
#define NULLCONTEXT 0
/*END SHARED*/
|