#ifndef PRECOGNITION3D_H
#define PRECOGNITION3D_H

#include "intuition_typedefs.h"


typedef struct pcg_3DPens
   {
      UBYTE FrontPen,   BackPen;    /* Foreground Pen, Background Pen */
      UBYTE BrightPen,  DarkPen;    /* 3D Highlight, shadow.          */
   } pcg_3DPens;


/* ==================== pcg_3DBox ============================
** This type is compatible with a 'Border' structure.
** It is used to create a 3D looking box, like under
** Workbench 2.0.  It consists of 2 Border structures linked
** together.
** ===========================================================
*/

typedef struct pcg_3DBox
   {
      Border     TopLeft;       /* Top & Left edge of box.     */
      Border     BottomRight;   /* Bottom & right edge of box. */
      SHORT      Points[20];    /* Box outline.                */
   } pcg_3DBox;

/* ======================= pcg_3DBevel ========================
** This type is compatible with a 'Border' structure.
** It is used to create a 3D looking Bevel, like the string
** gadgets under Workbench 2.0.
** ============================================================
*/

typedef struct pcg_3DBevel
   {
      pcg_3DBox Outer, Inner;
   } pcg_3DBevel;


typedef struct pcg_3DThinBevel
   {
      Border         b[4];
      SHORT          Points[20];
   } pcg_3DThinBevel;
   /*
   ** ThinBevels are 2 pixels along the X axis, they're used for
   ** embossed outline boxes.
   */


pcg_3DPens StandardPens( void );
   /*
   ** Returns the standard color pens.  This works for both
   ** Workbench 1.2/3 and Workbench 2.0.
   */


void pcg_Init3DBox(     pcg_3DBox *Box,
                        SHORT      LeftEdge,
                        SHORT      TopEdge,
                        USHORT     Width,
                        USHORT     Height,
                        UBYTE      TopLeftPen,
                        UBYTE      BottomRightPen,
                        Border    *NextBorder );


void pcg_Init3DBevel(   pcg_3DBevel *Bevel,
                        SHORT        LeftEdge,
                        SHORT        TopEdge,
                        USHORT       Width,
                        USHORT       Height,
                        USHORT       BevelWidth,
                        UBYTE        TopLeftPen,
                        UBYTE        BottomRightPen,
                        Border      *NextBorder );
/* LeftEdge, TopEdge, Width, Height refer to the _outer_ box.
**
** 'BevelWidth' is the amount of blankspace between the inner and
** outer border.  This number corrected for aspect ratio.  (0 is
** an ok value.)
**
** If 'TopLeftPen' is bright, and 'BottomRightPen' is dark, the bevel
** will appear to stand out.  If 'TopLeftPen' is dark, the bevel will
** appear recessed.
*/

void pcg_Init3DThinBevel(  pcg_3DThinBevel *Bevel,
                           SHORT            LeftEdge,
                           SHORT            TopEdge,
                           USHORT           Width,
                           USHORT           Height,
                           USHORT           BevelWidth,
                           UBYTE            TopLeftPen,
                           UBYTE            BottomRightPen,
                           Border          *NextBorder );


#endif
