home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / BlobMgr / Interface / BlobMgr.h next >
Encoding:
C/C++ Source or Header  |  1994-02-25  |  10.3 KB  |  303 lines  |  [TEXT/KAHL]

  1. /* Blob Manager global types and constants */
  2.  
  3. # ifndef    __BLOBMGR_H__
  4.  
  5. # define    __BLOBMGR_H__
  6.  
  7.  
  8.  
  9. /*
  10.  * Blob flag masks
  11.  *
  12.  * bScaleMask, bHJustMask, and bVJustMask apparantly are unused at present
  13.  */
  14.  
  15. enum
  16. {
  17.     bEnableMask = 1,
  18.     bFreezeMask = 2,
  19.     bStatModeMask = 4,
  20.     bDragModeMask = 8,
  21.     bDrawModeMask = 12,    /* two bits, derived: bStatModeMask + bDragModeMask */
  22.     bNeedGlobMask = 16,
  23.     bScaleMask = 32,
  24.     bHJustMask = 192,    /* two bits:  64 + 128 */
  25.     bVJustMask = 768,    /* two bits:  256 + 512 */
  26.     bPicMask = 1024,
  27.     bProcManualDimMask = 2048    /* BlobDraw() assumes draw proc does own dimming */
  28. };
  29.  
  30.  
  31. /* blob drawing modes */
  32.  
  33. enum
  34. {
  35.     normalDraw = 1,        /* draw blob normally */
  36.     dimDraw = 2            /* draw dimmed blob */
  37. };
  38.  
  39. /* blob part codes */
  40.  
  41. enum
  42. {
  43.     inStatBlob = 1,             /* static region */
  44.     inDragBlob = 2,             /* drag region */
  45.     inFullBlob = 3             /* entire blob */
  46. };
  47.  
  48.  
  49. /*
  50.  * special max glue count - no limit
  51.  */
  52.  
  53. # define    infiniteGlue    0x8000
  54.  
  55.  
  56. /*
  57.  * BlobClick return codes
  58.  */
  59.  
  60. enum
  61. {
  62.     /* 0 = nothing done */
  63.     bcGlue = 1,        /* donor blob glued to receptor */
  64.     bcUnglue,        /* glob unglued from receptor */
  65.     bcXfer,            /* glob transferred from one receptor to another */
  66.     bcDup,            /* glob duplicated from one receptor onto another */
  67.     bcSwap            /* globs of two receptors swapped */
  68. };
  69.  
  70.  
  71. /*
  72.  * Messages passed by BlobClick to advisory functions
  73.  */
  74.  
  75. enum
  76. {
  77.     advDClick,        /* click in donor */
  78.     advRClick,        /* click in receptor */
  79.     advGlue,        /* glue transaction proposed */
  80.     advUnglue,        /* unglue transaction proposed */
  81.     advXfer,        /* transfer transaction proposed */
  82.     advDup,            /* duplicate transaction proposed */
  83.     advSwap            /* swap transaction proposed */
  84. };
  85.  
  86.  
  87. /* DragGrayRgn result code for bad drag - Old Inside Macintosh is wrong! */
  88.  
  89. # define    badDragResult    0x80008000L
  90.  
  91.  
  92. /*
  93.  * BlobRecord structure
  94.  *
  95.  * flags:
  96.  * bit 0: 1 = enabled, 0 = disabled
  97.  * bit 1: 1 = frozen, 0 = thawed (1/0)
  98.  * bit 2: 1 = static region is dimmed, 0 = normal
  99.  * bit 3: 1 = drag region is dimmed, 0 = normal
  100.  * bit 4: 1 = need explicit match, 0 = don't
  101.  * bit 5: 1 = scale when glued, 0 = don't
  102.  * bit 6-7: horizontal justification mask
  103.  * bit 8-9: vertical justification mask
  104.  * bit 10: 1 = is picture blob, 0 = is procedure blob
  105.  * bit 11: draw procedure does own dimming (procedure blobs only)
  106.  *
  107.  * fzflags:
  108.  * bit 2: 1 = static region was dimmed before freeze, 0 = was normal
  109.  * bit 3: 1 = drag region was dimmed before freeze, 0 = was normal
  110.  */
  111.  
  112. typedef struct BlobRecord        BlobRecord, *BlobPtr, **BlobHandle;
  113. typedef struct MatchRecord        MatchRecord, *MatchPtr, **MatchHandle;
  114. typedef struct BlobSetRecord    BlobSetRecord, *BlobSetPtr, **BlobSetHandle;
  115.  
  116. typedef pascal void (*BDrawProcPtr) (BlobHandle bDst, BlobHandle bSrc, short partCode);
  117. typedef pascal void (*BLoopProcPtr1) (BlobHandle b);
  118. typedef pascal void (*BLoopProcPtr2) (BlobHandle b, short partCode);
  119. typedef pascal Boolean (*BAdvisoryProcPtr) (short advMessage, BlobHandle b);
  120. typedef pascal Boolean (*BQuietProcPtr) (BlobHandle b);
  121. typedef pascal short (*BRandProcPtr) (short max);
  122.  
  123. struct BlobRecord
  124. {
  125.     short            flags;            /* flags word */
  126.     short            fzFlags;        /* freeze flags word */
  127.     union                            /* pic if bPicMask flag word bit set*/
  128.     {                                /* proc if bit clear */
  129.         PicHandle        bPic;        /* blob picture (and original frame) */
  130.         BDrawProcPtr    bDrawProc;    /* blob drawing procedure */
  131.     } bPicProc;
  132.     RgnHandle    statRgn;            /* current static region */
  133.     RgnHandle    dragRgn;            /* current drag region */
  134.     Rect        statRect;            /* original static region frame */
  135.     Rect        dragRect;            /* original drag region frame */
  136.     short        glueMax;            /* maximum times can glue to others */
  137.     short        glueCount;            /* number of times glued to others */
  138.     MatchHandle    matches;            /* set of valid matches */
  139.     BlobHandle    glob;                 /* currently glued blob */
  140.     long        bRefCon;            /* reference value */
  141.     BlobHandle    nextBlob;            /* next blob in set */
  142. };
  143.  
  144.  
  145. struct MatchRecord
  146. {
  147.     BlobHandle    mBlob;        /* blob that matches */
  148.     MatchHandle    nextMatch;    /* next match record */
  149. };
  150.  
  151.  
  152. struct BlobSetRecord
  153. {
  154.     BlobHandle        firstBlob;        /* first Blob of set */
  155.     BlobHandle        lastBlob;        /* last Blob of set */
  156.     BlobSetHandle    nextBlobSet;    /* next blob set */
  157. };
  158.  
  159.  
  160. pascal BlobHandle NewBlob (BlobSetHandle bSet, Boolean enable, short glueMVal,
  161.                     Boolean mustMatch, long refCon);
  162. pascal BlobSetHandle NewBlobSet (void);
  163. pascal void NewBlobMatch (BlobHandle b1, BlobHandle b2);
  164. pascal void AddBlob (BlobHandle b, BlobSetHandle bSet);
  165. pascal void DisposeBlobPic (BlobHandle b);
  166. pascal void DisposeBlobMatchSet (BlobHandle b);
  167. pascal void DisposeBlob (BlobHandle b);
  168. pascal void DisposeBlobSet (BlobSetHandle bSet);
  169. pascal void DisposeBlobSets (void);
  170. pascal void ClobberBlob (BlobHandle b, BlobSetHandle bSet);
  171. pascal void ClobberBlobMatch (BlobHandle b1, BlobHandle b2);
  172.  
  173. pascal void OpenBlob (void);
  174. pascal void CloseRectBlob (BlobHandle b, Rect *dragRect, Rect *statRect);
  175. pascal void CloseRgnBlob (BlobHandle b, RgnHandle dragRgn, RgnHandle statRgn);
  176.  
  177. pascal void SetProcRgnBlob (BlobHandle b, BDrawProcPtr p, RgnHandle dragRgn, RgnHandle statRgn);
  178. pascal void SetProcRectBlob (BlobHandle b, BDrawProcPtr p, Rect *dragRect, Rect *statRect);
  179.  
  180. pascal void SetBlobRgns (BlobHandle b, RgnHandle dragRgn, RgnHandle statRgn);
  181. pascal void SetBlobRects (BlobHandle b, Rect *dragRect, Rect *statRect);
  182.  
  183. pascal BlobHandle FirstBlob (BlobSetHandle bSet);
  184. pascal BlobHandle LastBlob (BlobSetHandle bSet);
  185. pascal BlobHandle NextBlob (BlobHandle b);
  186. pascal void SetBRefCon (BlobHandle b, long val);
  187. pascal long GetBRefCon (BlobHandle b);
  188. pascal RgnHandle BStatRgn (BlobHandle b);
  189. pascal RgnHandle BDragRgn (BlobHandle b);
  190. pascal Rect BStatBox (BlobHandle b);
  191. pascal Rect BDragBox (BlobHandle b);
  192. pascal BlobHandle BGlob (BlobHandle b);
  193. pascal BlobHandle FirstBMatch (BlobHandle b);
  194.  
  195. pascal RgnHandle BCalcRegion (BlobHandle b, short partCode);
  196.  
  197. pascal void SetBCZoomFlags (Boolean uGlueZoom, Boolean bDragZoom);
  198. pascal void GetBCZoomFlags (Boolean *uGlueZoom, Boolean *bDragZoom);
  199. pascal void SetBCPermissions (Boolean canUnglue, Boolean canXfer, Boolean canDup,
  200.                                 Boolean canSwap, Boolean canRep);
  201. pascal void    GetBCPermissions (Boolean *canUnglue, Boolean *canXfer, Boolean *canDup,
  202.                                 Boolean *canSwap, Boolean *canRep);
  203. pascal void SetBCAdvisory (BAdvisoryProcPtr p);
  204. pascal void GetBCAdvisory (BAdvisoryProcPtr *p);
  205. pascal void BlobClick (Point thePt, long t, BlobSetHandle dSet, BlobSetHandle rSet);
  206. pascal short BClickResult (void);
  207. pascal void BClickCast (BlobHandle *d1, BlobHandle *d2, BlobHandle *r1, BlobHandle *r2);
  208.  
  209. pascal void SetBDragRects (Rect *limitRect, Rect *slopRect);
  210. pascal void GetBDragRects (Rect *limitRect, Rect *slopRect);
  211. pascal void SetBDragAxis (short axis);
  212. pascal short GetBDragAxis (void);
  213. pascal long TrackBlob (BlobHandle b, short partCode, Point startPoint,
  214.                         Rect *limitRect, Rect *slopRect, short axis);
  215. pascal long DTrackBlob (BlobHandle b, short partCode, Point startPoint);
  216. pascal void DragBlob (BlobHandle b, Point startPoint,
  217.                         Rect *limitRect, Rect *slopRect, short axis);
  218. pascal void DDragBlob (BlobHandle b, Point startPoint);
  219.  
  220. pascal void SetBDimInfo (Pattern p, short mode);
  221. pascal void GetBDimInfo (Pattern *p, short *mode);
  222. pascal void DrawBlob (BlobHandle b, short partCode);
  223. pascal void DimBlobRgn (BlobHandle b, short partCode);
  224. pascal void DrawBlobSet (BlobSetHandle bSet);
  225. pascal Boolean BeginBlobDimDraw (BlobHandle b, short partCode);
  226. pascal void EndBlobDimDraw (void);
  227.  
  228. pascal void SetBlobFlags (BlobHandle b, short bitMask);
  229. pascal void ClearBlobFlags (BlobHandle b, short bitMask);
  230. pascal short TestBlobFlags (BlobHandle b, short bitMask);
  231. pascal void EnableBlob (BlobHandle b);
  232. pascal void EnableBlobSet (BlobSetHandle bSet);
  233. pascal void DisableBlob (BlobHandle b);
  234. pascal void DisableBlobSet (BlobSetHandle bSet);
  235. pascal short GetBDrawMode (BlobHandle b, short partCode);
  236. pascal void SetBDrawMode (BlobHandle b, short partCode, short mode);
  237. pascal short GetFzBDrawMode (BlobHandle b, short partCode);
  238. pascal Boolean BlobDimmed (BlobHandle b, short partCode);
  239. pascal Boolean BlobEnabled (BlobHandle b);
  240. pascal Boolean BlobFrozen (BlobHandle b);
  241. pascal Boolean PicBlob (BlobHandle b);
  242. pascal Boolean CanGlue (BlobHandle b);
  243. pascal Boolean BlobActive (BlobHandle b);
  244.  
  245. pascal void OffsetBlob (BlobHandle b, short partCode, short hoff, short voff);
  246. pascal void MoveBlob (BlobHandle b, short partCode, short h, short v);
  247.  
  248. pascal void HiliteBlob (BlobHandle b, short partCode, short mode);
  249. pascal void HiliteBlobSet (BlobSetHandle bSet, short partCode, short mode);
  250. pascal void IncBlobGlue (BlobHandle b);
  251. pascal void DecBlobGlue (BlobHandle b);
  252. pascal void SetBGlueMax (BlobHandle b, short max);
  253. pascal short GetBGlueMax (BlobHandle b);
  254.  
  255. pascal void FreezeBlob (BlobHandle b);
  256. pascal void FreezeBlobSet (BlobSetHandle bSet);
  257. pascal void ThawBlob (BlobHandle b);
  258. pascal void ThawBlobSet (BlobSetHandle bSet);
  259. pascal void BlobFeedback (BlobSetHandle bSet, short quietMode, short noisyMode);
  260.  
  261. pascal Boolean InBlobMatchSet (BlobHandle b1, BlobHandle b2);
  262. pascal Boolean BlobQuiet (BlobHandle b);
  263. pascal void SetBQuietTest (BQuietProcPtr f);
  264. pascal Boolean BlobSetQuiet (BlobSetHandle bSet);
  265.  
  266. pascal void HideBlob (BlobHandle b);
  267. pascal void HideBlobSet (BlobSetHandle bSet);
  268. pascal void ShowBlob (BlobHandle b);
  269. pascal void ShowBlobSet (BlobSetHandle bSet);
  270.  
  271. pascal short TestBlob (BlobHandle b, Point thePoint);
  272. pascal short FindBlob (Point thePoint, BlobSetHandle bSet, BlobHandle *bPtr);
  273.  
  274. pascal BlobHandle GetBlobHandle (BlobSetHandle bSet, short i);
  275. pascal short GetBlobIndex (BlobSetHandle bSet, BlobHandle b);
  276. pascal short BlobSetSize (BlobSetHandle bSet);
  277.  
  278. pascal void BlobLoopProc1 (BLoopProcPtr1 p, BlobSetHandle bSet);
  279. pascal void BlobLoopProc2 (BLoopProcPtr2 p, BlobSetHandle bSet, short partCode);
  280.  
  281. pascal short BlobRand (short max);
  282. pascal void SetBlobRand (BRandProcPtr f);
  283.  
  284. pascal void ShuffleBlobSet (BlobSetHandle bSet);
  285. pascal void ShuffleGlobSet (BlobSetHandle bSet);
  286.  
  287. pascal Boolean BTrackMouse (BlobHandle b, Point startPt, short partCode);
  288.  
  289. pascal void UnglueGlob (BlobHandle b);
  290. pascal void UnglueGlobSet (BlobSetHandle bSet);
  291. pascal void GlueGlob (BlobHandle d, BlobHandle r);
  292. pascal void TransferGlob (BlobHandle r1, BlobHandle r2);
  293. pascal void SwapGlob (BlobHandle r1, BlobHandle r2);
  294. pascal void DupGlob (BlobHandle r1, BlobHandle r2);
  295.  
  296. pascal void BMgrZoomRect (Rect *r1, Rect *r2);
  297.  
  298. pascal void ZUnglueGlob (BlobHandle b);
  299. pascal void ZUnglueGlobSet (BlobSetHandle bSet);
  300. pascal void ZGlueGlob (BlobHandle d, BlobHandle r);
  301. pascal void ZDupGlob (BlobHandle r1, BlobHandle r2);
  302.  
  303. # endif /* __BLOBMGR_H__ */