#pragma lib     "libgnot.a"

/*
* Graphics types
*/

typedef struct  GBitmap         GBitmap;
typedef struct  GFont           GFont;
typedef struct  GSubfont        GSubfont;
typedef struct  GCacheinfo      GCacheinfo;

struct  GBitmap
{
       ulong   *base;          /* pointer to start of data */
       long    zero;           /* base+zero=&word containing (0,0) */
       ulong   width;          /* width in 32 bit words of total data area */
       int     ldepth;         /* log base 2 of number of bits per pixel */
       Rectangle r;            /* rectangle in data area, local coords */
       Rectangle clipr;        /* clipping region */
       GBitmap *cache;         /* zero; distinguishes bitmap from layer */
};


/*
* GFont etc. are not used in the library, only in devbit.c.
* GSubfont is only barely used.
*/
struct  GSubfont
{
       short   n;              /* number of chars in font */
       char    height;         /* height of bitmap */
       char    ascent;         /* top of bitmap to baseline */
       Fontchar *info;         /* n+1 character descriptors */
       GBitmap *bits;          /* where the characters are */
};
struct GCacheinfo
{
       ulong           xright; /* right edge of bits */
       Fontchar;
};

struct GFont
{
       uchar           height; /* max height of bitmap, interline spacing */
       char            ascent; /* top of bitmap to baseline */
       char            width;  /* widest so far; used in caching only */
       char            ldepth; /* of images */
       short           id;     /* of font */
       int             ncache; /* number of entries in cache */
       GCacheinfo      *cache; /* cached characters */
       GBitmap         *b;     /* cached images */
};

extern ulong     *gaddr(GBitmap*, Point);
extern uchar     *gbaddr(GBitmap*, Point);
extern void      gbitblt(GBitmap*, Point, GBitmap*, Rectangle, Fcode);
extern void      gbitbltclip(void*);
extern void      gtexture(GBitmap*, Rectangle, GBitmap*, Fcode);
extern Point     gsubfstrsize(GSubfont*, char*);
extern int       gsubfstrwidth(GSubfont*, char*);
extern Point     gsubfstring(GBitmap*, Point, GSubfont*, char*, Fcode);
extern Point     gbitbltstring(GBitmap*, Point, GSubfont*, char*, Fcode);
extern void      gsegment(GBitmap*, Point, Point, int, Fcode);
extern void      gpoint(GBitmap*, Point, int, Fcode);
extern void      gflushcpucache(void);
extern GBitmap*  gballoc(Rectangle, int);
extern void      gbfree(GBitmap*);