plan9fox/sys/include/ttf.h
2018-06-09 14:33:19 +00:00

169 lines
3 KiB
C

#pragma src "/sys/src/libttf"
#pragma lib "libttf.a"
typedef struct TTTable TTTable;
typedef struct TTChMap TTChMap;
typedef struct TTPoint TTPoint;
typedef struct TTGlyph TTGlyph;
typedef struct TTGlyphInfo TTGlyphInfo;
typedef struct TTFontU TTFontU;
typedef struct TTFont TTFont;
typedef struct TTFunction TTFunction;
typedef struct TTGState TTGState;
typedef struct TTBitmap TTBitmap;
typedef struct TTKern TTKern;
typedef struct Biobuf Biobuf;
struct TTTable {
u32int tag;
u32int csum;
u32int offset;
u32int len;
};
struct TTChMap {
int start, end, delta;
int *tab;
enum {
TTCDELTA16 = 1,
TTCINVALID = 2,
} flags;
int temp;
};
struct TTPoint {
int x, y;
u8int flags;
};
struct TTBitmap {
u8int *bit;
int width, height, stride;
};
struct TTGlyph {
TTBitmap;
int idx;
int xmin, xmax, ymin, ymax;
int xminpx, xmaxpx, yminpx, ymaxpx;
int advanceWidthpx;
TTPoint *pt;
TTPoint *ptorg;
int npt;
u16int *confst;
int ncon;
u8int *hint;
int nhint;
TTFont *font;
TTGlyphInfo *info;
};
struct TTGlyphInfo {
int loca;
u16int advanceWidth;
short lsb;
};
struct TTFunction {
u8int *pgm;
int npgm;
};
struct TTGState {
int pvx, pvy;
int dpvx, dpvy;
int fvx, fvy;
u32int instctrl;
u32int scanctrl;
u32int scantype;
int rperiod, rphase, rthold;
u8int zp;
int rp[3];
int cvci;
int loop;
int mindist;
int deltabase, deltashift;
u8int autoflip;
u32int singlewval, singlewci;
};
struct TTKern {
u32int idx;
int val;
};
struct TTFontU {
int ref;
Biobuf *bin;
TTTable *tab;
u16int ntab;
TTChMap *cmap;
int ncmap;
short *cvtu;
int ncvtu;
u16int flags;
int emsize;
short xmin, ymin, xmax, ymax;
u16int longloca;
TTGlyphInfo *ginfo;
u16int numGlyphs;
u16int maxPoints;
u16int maxCountours;
u16int maxComponentPoints;
u16int maxComponentCountours;
u16int maxZones;
u16int maxTwilightPoints;
u16int maxStorage;
u16int maxFunctionDefs;
u16int maxInstructionDefs;
u16int maxStackElements;
u16int maxSizeOfInstructions;
u16int maxComponentElements;
u16int maxComponentDepth;
int ascent, descent;
u16int advanceWidthMax;
u16int minLeftSideBearing;
u16int minRightSideBearing;
u16int xMaxExtent;
u16int numOfLongHorMetrics;
TTKern *kern;
int nkern;
};
struct TTFont {
TTFontU *u;
int ascentpx, descentpx;
int ppem;
TTGState;
TTGState defstate;
TTPoint *twilight, *twiorg;
u32int *hintstack;
TTFunction *func;
u32int *storage;
int *cvt;
int ncvt;
};
TTFont *ttfopen(char *, int, int);
TTFont *ttfscale(TTFont *, int, int);
void ttfclose(TTFont *);
int ttffindchar(TTFont *, Rune);
int ttfenumchar(TTFont *, Rune, Rune *);
TTGlyph *ttfgetglyph(TTFont *, int, int);
void ttfputglyph(TTGlyph *);
int ttfgetcontour(TTGlyph *, int, float **, int *);
enum {
TTFLALIGN = 0,
TTFRALIGN = 1,
TTFCENTER = 2,
TTFMODE = 3,
TTFJUSTIFY = 4,
};
TTBitmap *ttfrender(TTFont *, char *, char *, int, int, int, char **);
TTBitmap *ttfrunerender(TTFont *, Rune *, Rune *, int, int, int, Rune **);
TTBitmap *ttfnewbitmap(int, int);
void ttffreebitmap(TTBitmap *);
void ttfblit(TTBitmap *, int, int, TTBitmap *, int, int, int, int);