337 lines
12 KiB
C
337 lines
12 KiB
C
/* $Xorg: psout.h,v 1.6 2001/02/09 02:04:37 xorgcvs Exp $ */
|
|
/*
|
|
|
|
Copyright 1996, 1998 The Open Group
|
|
|
|
Permission to use, copy, modify, distribute, and sell this software and its
|
|
documentation for any purpose is hereby granted without fee, provided that
|
|
the above copyright notice appear in all copies and that both that
|
|
copyright notice and this permission notice appear in supporting
|
|
documentation.
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
Except as contained in this notice, the name of The Open Group shall not be
|
|
used in advertising or otherwise to promote the sale, use or other dealings
|
|
in this Software without prior written authorization from The Open Group.
|
|
|
|
*/
|
|
/*
|
|
* (c) Copyright 1996 Hewlett-Packard Company
|
|
* (c) Copyright 1996 International Business Machines Corp.
|
|
* (c) Copyright 1996 Sun Microsystems, Inc.
|
|
* (c) Copyright 1996 Novell, Inc.
|
|
* (c) Copyright 1996 Digital Equipment Corp.
|
|
* (c) Copyright 1996 Fujitsu Limited
|
|
* (c) Copyright 1996 Hitachi, Ltd.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the
|
|
* "Software"), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
* permit persons to whom the Software is furnished to do so, subject
|
|
* to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included
|
|
* in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
|
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*
|
|
* Except as contained in this notice, the names of the copyright holders
|
|
* shall not be used in advertising or otherwise to promote the sale, use
|
|
* or other dealings in this Software without prior written authorization
|
|
* from said copyright holders.
|
|
*/
|
|
|
|
/*******************************************************************
|
|
**
|
|
** *********************************************************
|
|
** *
|
|
** * File: psout.h
|
|
** *
|
|
** * Contents: Include file for psout.c
|
|
** *
|
|
** * Created By: Roger Helmendach (Liberty Systems)
|
|
** *
|
|
** * Copyright: Copyright 1996 The Open Group, Inc.
|
|
** *
|
|
** *********************************************************
|
|
**
|
|
********************************************************************/
|
|
|
|
#ifdef HAVE_DIX_CONFIG_H
|
|
#include <dix-config.h>
|
|
#endif
|
|
|
|
#ifndef _psout_
|
|
#define _psout_
|
|
|
|
#include <stdio.h>
|
|
|
|
typedef enum PsCapEnum_ { PsCButt=0, PsCRound, PsCSquare } PsCapEnum;
|
|
typedef enum PsJoinEnum_ { PsJMiter=0, PsJRound, PsJBevel } PsJoinEnum;
|
|
typedef enum PsArcEnum_ { PsChord, PsPieSlice } PsArcEnum;
|
|
typedef enum PsRuleEnum_ { PsEvenOdd, PsNZWinding } PsRuleEnum;
|
|
typedef enum PsFillEnum_ { PsSolid=0, PsTile, PsStip, PsOpStip } PsFillEnum;
|
|
|
|
typedef struct PsPointRec_
|
|
{
|
|
int x;
|
|
int y;
|
|
} PsPointRec;
|
|
|
|
typedef PsPointRec *PsPointPtr;
|
|
|
|
typedef struct PsRectRec_
|
|
{
|
|
int x;
|
|
int y;
|
|
int w;
|
|
int h;
|
|
} PsRectRec;
|
|
|
|
typedef PsRectRec *PsRectPtr;
|
|
|
|
typedef struct PsArcRec_
|
|
{
|
|
int x;
|
|
int y;
|
|
int w;
|
|
int h;
|
|
int a1;
|
|
int a2;
|
|
PsArcEnum style;
|
|
} PsArcRec;
|
|
|
|
typedef PsArcRec *PsArcPtr;
|
|
|
|
#define PSOUT_RECT 0
|
|
#define PSOUT_ARC 1
|
|
#define PSOUT_POINTS 2
|
|
|
|
typedef struct PsElmRec_
|
|
{
|
|
int type;
|
|
int nPoints;
|
|
union
|
|
{
|
|
PsRectRec rect;
|
|
PsArcRec arc;
|
|
PsPointPtr points;
|
|
} c;
|
|
} PsElmRec;
|
|
|
|
typedef PsElmRec *PsElmPtr;
|
|
|
|
typedef struct PsClipRec_
|
|
{
|
|
int nRects;
|
|
PsRectPtr rects;
|
|
int nElms;
|
|
PsElmPtr elms;
|
|
int nOutterClips;
|
|
PsRectPtr outterClips;
|
|
} PsClipRec;
|
|
|
|
typedef PsClipRec *PsClipPtr;
|
|
|
|
typedef enum PsFTDownloadFontType_
|
|
{
|
|
PsFontBitmap=0,
|
|
PsFontType1,
|
|
PsFontType3
|
|
} PsFTDownloadFontType;
|
|
|
|
/* Define |PsOutColor| color type which can hold one RGB value
|
|
* (note: this needs to be |signed| long/long long to represent
|
|
* special values such as |PSOUTCOLOR_NOCOLOR|)
|
|
*/
|
|
#ifdef PSOUT_USE_DEEPCOLOR
|
|
/* 64bit |PsOutColor| which can hold 16bit R-,G-,B-values */
|
|
#ifdef WIN32
|
|
typedef signed __int64 PsOutColor;
|
|
#else
|
|
# if defined(__alpha__) || defined(__alpha) || \
|
|
defined(ia64) || defined(__ia64__) || \
|
|
defined(__sparc64__) || defined(_LP64) || \
|
|
defined(__s390x__) || \
|
|
defined(amd64) || defined (__amd64__) || \
|
|
defined (__powerpc64__) || \
|
|
(defined(sgi) && (_MIPS_SZLONG == 64))
|
|
typedef signed long PsOutColor;
|
|
# else
|
|
typedef signed long long PsOutColor;
|
|
# endif /* native 64bit platform */
|
|
#endif /* WIN32 */
|
|
|
|
#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 32)
|
|
#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 16) & 0xFFFF)
|
|
#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFFFF)
|
|
#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 65535.)
|
|
#define PSOUTCOLOR_WHITE (0xFFFFFFFFFFFFLL)
|
|
#define PSOUTCOLOR_NOCOLOR (-1LL)
|
|
#define PSOUTCOLOR_TO_RGB24BIT(clr) (((PSOUTCOLOR_TO_REDBITS(clr) >> 8) << 16) | \
|
|
((PSOUTCOLOR_TO_GREENBITS(clr) >> 8) << 8) | \
|
|
((PSOUTCOLOR_TO_BLUEBITS(clr) >> 8) << 0))
|
|
#else
|
|
/* 32bit |PsOutColor| which can hold 8bit R-,G-,B-values */
|
|
typedef signed long PsOutColor;
|
|
#define PSOUTCOLOR_TO_REDBITS(clr) ((clr) >> 16)
|
|
#define PSOUTCOLOR_TO_GREENBITS(clr) (((clr) >> 8) & 0xFF)
|
|
#define PSOUTCOLOR_TO_BLUEBITS(clr) ((clr) & 0xFF)
|
|
#define PSOUTCOLOR_BITS_TO_PSFLOAT(b) ((float)(b) / 255.)
|
|
#define PSOUTCOLOR_WHITE (0xFFFFFF)
|
|
#define PSOUTCOLOR_NOCOLOR (-1)
|
|
#define PSOUTCOLOR_TO_RGB24BIT(clr) ((PSOUTCOLOR_TO_REDBITS(clr) << 16) | \
|
|
(PSOUTCOLOR_TO_GREENBITS(clr) << 8) | \
|
|
(PSOUTCOLOR_TO_BLUEBITS(clr) << 0))
|
|
#endif /* PSOUT_USE_DEEPCOLOR */
|
|
|
|
#ifdef USE_PSOUT_PRIVATE
|
|
typedef void *voidPtr;
|
|
|
|
typedef struct PsPatRec_
|
|
{
|
|
PsFillEnum type;
|
|
voidPtr tag;
|
|
} PsPatRec;
|
|
|
|
typedef PsPatRec *PsPatPtr;
|
|
|
|
typedef struct PsOutRec_
|
|
{
|
|
FILE *Fp;
|
|
char Buf[16384];
|
|
PsOutColor CurColor;
|
|
int LineWidth;
|
|
PsCapEnum LineCap;
|
|
PsJoinEnum LineJoin;
|
|
int NDashes;
|
|
int *Dashes;
|
|
int DashOffset;
|
|
PsOutColor LineBClr;
|
|
PsRuleEnum FillRule;
|
|
char *FontName;
|
|
int FontSize;
|
|
float FontMtx[4];
|
|
int ImageFormat;
|
|
int RevImage;
|
|
int NPatterns;
|
|
int MxPatterns;
|
|
PsPatPtr Patterns;
|
|
int ClipType;
|
|
PsClipRec Clip;
|
|
int InFrame;
|
|
int XOff;
|
|
int YOff;
|
|
|
|
PsFillEnum InTile;
|
|
int ImgSkip;
|
|
PsOutColor ImgBClr;
|
|
PsOutColor ImgFClr;
|
|
int ImgX;
|
|
int ImgY;
|
|
int ImgW;
|
|
int ImgH;
|
|
int SclW;
|
|
int SclH;
|
|
|
|
Bool isRaw;
|
|
|
|
int pagenum;
|
|
|
|
int start_image;
|
|
} PsOutRec;
|
|
|
|
typedef struct PsOutRec_ *PsOutPtr;
|
|
|
|
extern void S_Flush(PsOutPtr self);
|
|
extern void S_OutNum(PsOutPtr self, float num);
|
|
extern void S_OutTok(PsOutPtr self, char *tok, int cr);
|
|
#else
|
|
typedef struct PsOutRec_ *PsOutPtr;
|
|
#endif /* USE_PSOUT_PRIVATE */
|
|
|
|
extern FILE * PsOut_ChangeFile(PsOutPtr self, FILE *fp);
|
|
extern PsOutPtr PsOut_BeginFile(FILE *fp, char *title, int orient, int count, int plex,
|
|
int res, int wd, int ht, Bool raw);
|
|
extern void PsOut_EndFile(PsOutPtr self, int closeFile);
|
|
extern void PsOut_BeginPage(PsOutPtr self, int orient, int count, int plex,
|
|
int res, int wd, int ht);
|
|
extern void PsOut_EndPage(PsOutPtr self);
|
|
extern void PsOut_DirtyAttributes(PsOutPtr self);
|
|
extern void PsOut_Comment(PsOutPtr self, char *comment);
|
|
extern void PsOut_Offset(PsOutPtr self, int x, int y);
|
|
|
|
extern void PsOut_Clip(PsOutPtr self, int clpTyp, PsClipPtr clpinf);
|
|
|
|
extern void PsOut_Color(PsOutPtr self, PsOutColor clr);
|
|
extern void PsOut_FillRule(PsOutPtr self, PsRuleEnum rule);
|
|
extern void PsOut_LineAttrs(PsOutPtr self, int wd, PsCapEnum cap,
|
|
PsJoinEnum join, int nDsh, int *dsh, int dshOff,
|
|
PsOutColor bclr);
|
|
extern void PsOut_TextAttrs(PsOutPtr self, char *fnam, int siz, int iso);
|
|
extern void PsOut_TextAttrsMtx(PsOutPtr self, char *fnam, float *mtx, int iso);
|
|
|
|
extern void PsOut_Polygon(PsOutPtr self, int nPts, PsPointPtr pts);
|
|
extern void PsOut_FillRect(PsOutPtr self, int x, int y, int w, int h);
|
|
extern void PsOut_FillArc(PsOutPtr self, int x, int y, int w, int h,
|
|
float ang1, float ang2, PsArcEnum style);
|
|
|
|
extern void PsOut_Lines(PsOutPtr self, int nPts, PsPointPtr pts);
|
|
extern void PsOut_Points(PsOutPtr self, int nPts, PsPointPtr pts);
|
|
extern void PsOut_DrawRect(PsOutPtr self, int x, int y, int w, int h);
|
|
extern void PsOut_DrawArc(PsOutPtr self, int x, int y, int w, int h,
|
|
float ang1, float ang2);
|
|
|
|
extern void PsOut_Text(PsOutPtr self, int x, int y, char *text, int textl,
|
|
PsOutColor bclr);
|
|
extern void PsOut_Text16(PsOutPtr self, int x, int y, unsigned short *text, int textl, PsOutColor bclr);
|
|
|
|
extern void PsOut_BeginImage(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
|
|
int w, int h, int sw, int sh, int format);
|
|
extern void PsOut_BeginImageIM(PsOutPtr self, PsOutColor bclr, PsOutColor fclr, int x, int y,
|
|
int w, int h, int sw, int sh, int format);
|
|
extern void PsOut_EndImage(PsOutPtr self);
|
|
extern void PsOut_OutImageBytes(PsOutPtr self, int nBytes, char *bytes);
|
|
|
|
extern void PsOut_BeginFrame(PsOutPtr self, int xoff, int yoff, int x, int y,
|
|
int w, int h);
|
|
extern void PsOut_EndFrame(PsOutPtr self);
|
|
|
|
extern int PsOut_BeginPattern(PsOutPtr self, void *tag, int w, int h,
|
|
PsFillEnum type, PsOutColor bclr, PsOutColor fclr);
|
|
extern void PsOut_EndPattern(PsOutPtr self);
|
|
extern void PsOut_SetPattern(PsOutPtr self, void *tag, PsFillEnum type);
|
|
|
|
extern void PsOut_RawData(PsOutPtr self, char *data, int len);
|
|
|
|
extern int PsOut_DownloadType1(PsOutPtr self, const char *auditmsg, const char *name, const char *fname);
|
|
|
|
extern int PsOut_DownloadFreeType1(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset);
|
|
extern int PsOut_DownloadFreeType3(PsOutPtr self, const char *psfontname, FontPtr pFont, long block_offset);
|
|
|
|
extern int PsOut_DownloadFreeType(PsOutPtr self, PsFTDownloadFontType downloadfonttype, const char *psfontname, FontPtr pFont, long block_offset);
|
|
extern void PsOut_Get_FreeType_Glyph_Name( char *destbuf, FontPtr pFont, unsigned long x11fontindex);
|
|
extern void PsOut_FreeType_Text(FontPtr pFont, PsOutPtr self, int x, int y, char *text, int textl);
|
|
extern void PsOut_FreeType_Text16(FontPtr pFont, PsOutPtr self, int x, int y, unsigned short *text, int textl);
|
|
|
|
extern void PsOut_FreeType_TextAttrs16(PsOutPtr self, char *fnam, int siz, int iso);
|
|
extern void PsOut_FreeType_TextAttrsMtx16(PsOutPtr self, char *fnam, float *mtx, int iso);
|
|
#endif
|