/*
 * Scan 'C' Header File
 * Written by Thomas Krehbiel
 *
 * Drawing modes and such.
 *
 */

#ifndef SCAN_DRAW_H


/*
 * Drawing Tool Designations for SetDrawTool():
 */
enum Tool_Tag {
   DT_NONE = 0,            /* No drawing */
   DT_LINE,                /* Standard line */
   DT_FREEHAND1,           /* Free hand, dotted line */
   DT_FREEHAND2,           /* Free hand, solid line */
   DT_BOX,                 /* Empty box */
   DT_FILLEDBOX,           /* Filled box */
   DT_OVAL,                /* Empty oval */
   DT_FILLEDOVAL,          /* Filled Oval */
   DT_POLY,                /* Polygon */
   DT_FILLEDPOLY,          /* Filled polygon */
   DT_TEXT,                /* Text (obsolete) */
   DT_BRUSH,               /* Rectangular Brush */
   DT_FREEBRUSH,           /* Freehand Brush */
   DT_POLYBRUSH,           /* Polygon Brush */
   DT_FREEFILL,            /* Filled Freehand */
   DT_AIRBRUSH,            /* Airbrush */
   DT_FLOOD,               /* Floodfill */
   DT_CURVE,               /* Curve */
   DT_MAGICWAND,           /* "Magic Wand" brush pickup */

   /*
    * Private tools:
    */
   DT_HANDLE,              /* Set brush handle */
   DT_STRETCH,             /* Stretch brush (unused) */
   DT_ROTATE               /* Rotate brush (unused) */
};


/*
 * Brush & Drawing Modes:
 */
enum DMode_Tag {
   DM_NORMAL = 0,          /* Standard Matte */
   DM_DARKEN,              /* Darken */
   DM_LIGHTEN,             /* Lighten */
   DM_COLOR,               /* Color Only */
   DM_GRADIENT,            /* Gradient Fill */
   DM_COLORIZE,            /* Colorize greyscale */
   DM_HUE,                 /* Hue Only */
   DM_SATURATION,          /* Saturation Only */
   DM_VALUE,               /* Value Only */
   DM_BLUR,                /* Blur Area */
   DM_RUBTHRU,             /* Rubthrough to Swap */
   DM_TRACE,               /* Trace through to other buffer */
   DM_ADD,                 /* Add */
   DM_PANTOGRAPH,          /* PantoGraph mode */
};

#define DM_TINT   DM_HUE   /* Ancient compatibility, do not use */
#define DM_LUMA   DM_VALUE /* Ancient compatibility, do not use */

/*
 * Fill Modes:
 */
enum Fill_Tags {
   FM_SOLID = 0,           /* Solid Fill */
   FM_VERT,                /* Vertical Gradient */
   FM_HORIZ,               /* Horizontal Gradient */
   FM_RADIAL,              /* Radial Gradient */
   FM_DIAGLR,              /* Diagonal LR Gradient */
   FM_DIAGRL,              /* Diagonal RL Gradient */
   FM_CROSS,               /* Two Diagonal Patterns (unused) */
   FM_PATTERN,             /* Horizontal + Vertical Pattern (unused) */
   FM_BRUSH,               /* Tile with Brush */
   FM_BRUSHWARP            /* Warp brush into shape */
};

/*
 * Edge Modes:
 */
enum Edge_Tag {
   EM_NORMAL = 0,          /* Normal edge mode */
   EM_ANTIALIAS,           /* Anti-alias edges */
   EM_FEATHERIN,           /* "Feather" edges inward */
   EM_FEATHEROUT,          /* "Feather" edges outward */
   EM_FEATHERBOTH,         /* "Feather" edges both in and out (unused) */
   EM_RESTRICT             /* Restrict operations to edges (unused) */
};

/*
 * Region Modes for SetRegionTool():
 */
enum Area_Tag {
   AT_FULL = 0,            /* Entire image */
   AT_BOX,                 /* Rectangular Region */
   AT_POLY,                /* Polygon Region */
   AT_FREE,                /* Freehand Region */
   AT_FLOOD,               /* Flood region */
   AT_BRUSH                /* Brush only */
};

#define AT_WAND AT_FLOOD   /* Ancient compatibility - do not use */

/*
 * Internal structure for maintaining a list of Points:
 */
typedef struct _POINT {
   struct _POINT  *Next;   /* Next point */
   short           Y, X;   /* This point's location */
   short           Z;      /* Normally indicates pressure (ie. tablet) */
   short           pad;
} POINT;


#define SCAN_DRAW_H
#endif
