[Contents] [Index] [Help] [Retrace] [browse <] [Browse >]

#ifndef GRAPHICS_RASTPORT_H
#define GRAPHICS_RASTPORT_H
/*
**      $Filename: graphics/rastport.h $
**      $Release: 2.04 Includes, V37.4 $
**      $Revision: 37.0 $
**      $Date: 91/01/07 $
**
**
**
**      (C) Copyright 1985-1999 Amiga, Inc.
**          All Rights Reserved
*/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef GRAPHICS_GFX_H
#include <graphics/gfx.h>
#endif

struct AreaInfo
{
    WORD   *VctrTbl;        /* ptr to start of vector table */
    WORD   *VctrPtr;        /* ptr to current vertex */
    BYTE    *FlagTbl;        /* ptr to start of vector flag table */
    BYTE    *FlagPtr;        /* ptrs to areafill flags */
    WORD   Count;           /* number of vertices in list */
    WORD   MaxCount;        /* AreaMove/Draw will not allow Count>MaxCount*/
    WORD   FirstX,FirstY;    /* first point for this polygon */
};

struct TmpRas
{
    BYTE *RasPtr;
    LONG Size;
};

/* unoptimized for 32bit alignment of pointers */
struct GelsInfo
{
    BYTE sprRsrvd;            /* flag of which sprites to reserve from
                                vsprite system */
    UBYTE Flags;             /* system use */
    struct VSprite *gelHead, *gelTail; /* dummy vSprites for list management*/
    /* pointer to array of 8 WORDS for sprite available lines */
    WORD *nextLine;
    /* pointer to array of 8 pointers for color-last-assigned to vSprites */
    WORD **lastColor;
    struct collTable *collHandler;     /* addresses of collision routines */
    WORD leftmost, rightmost, topmost, bottommost;
   APTR firstBlissObj,lastBlissObj;    /* system use only */
};

struct RastPort
{
    struct  Layer *Layer;
    struct  BitMap   *BitMap;
    UWORD  *AreaPtrn;       /* ptr to areafill pattern */
    struct  TmpRas *TmpRas;
    struct  AreaInfo *AreaInfo;
    struct  GelsInfo *GelsInfo;
    UBYTE   Mask;            /* write mask for this raster */
    BYTE    FgPen;           /* foreground pen for this raster */
    BYTE    BgPen;           /* background pen  */
    BYTE    AOlPen;          /* areafill outline pen */
    BYTE    DrawMode;        /* drawing mode for fill, lines, and text */
    BYTE    AreaPtSz;        /* 2^n words for areafill pattern */
    BYTE    linpatcnt;       /* current line drawing pattern preshift */
    BYTE    dummy;
    UWORD  Flags;           /* miscellaneous control bits */
    UWORD  LinePtrn;        /* 16 bits for textured lines */
    WORD   cp_x, cp_y;      /* current pen position */
    UBYTE   minterms[8];
    WORD   PenWidth;
    WORD   PenHeight;
    struct  TextFont *Font;   /* current font address */
    UBYTE   AlgoStyle;       /* the algorithmically generated style */
    UBYTE   TxFlags;         /* text specific flags */
    UWORD   TxHeight;        /* text height */
    UWORD   TxWidth;         /* text nominal width */
    UWORD   TxBaseline;       /* text baseline */
    WORD    TxSpacing;       /* text spacing (per character) */
    APTR    *RP_User;
    ULONG   longreserved[2];
#ifndef GFX_RASTPORT_1_2
    UWORD   wordreserved[7];  /* used to be a node */
    UBYTE   reserved[8];      /* for future use */
#endif
};

/* drawing modes */
#define JAM1       0         /* jam 1 color into raster */
#define JAM2       1         /* jam 2 colors into raster */
#define COMPLEMENT  2        /* XOR bits into raster */
#define INVERSVID   4         /* inverse video for drawing modes */

/* these are the flag bits for RastPort flags */
#define FRST_DOT    0x01      /* draw the first dot of this line ? */
#define ONE_DOT     0x02      /* use one dot mode for drawing lines */
#define DBUFFER     0x04      /* flag set when RastPorts
                                 are double-buffered */

             /* only used for bobs */

#define AREAOUTLINE 0x08      /* used by areafiller */
#define NOCROSSFILL 0x20      /* areafills have no crossovers */

/* there is only one style of clipping: raster clipping */
/* this preserves the continuity of jaggies regardless of clip window */
/* When drawing into a RastPort, if the ptr to ClipRect is nil then there */
/* is no clipping done, this is dangerous but useful for speed */

#endif  /* GRAPHICS_RASTPORT_H */