home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 517a.lha / VFont_v2.0 / include / vfont / vfont.h < prev   
C/C++ Source or Header  |  1991-06-09  |  9KB  |  293 lines

  1. #ifndef VFONT_H
  2. #define VFONT_H
  3.  
  4. #ifndef EXEC_TYPES_H
  5. #include <exec/types.h>
  6. #endif
  7. #ifndef EXEC_LISTS_H
  8. #include <exec/lists.h>
  9. #endif
  10. #ifndef EXEC_LIBRARIES_H
  11. #include <exec/libraries.h>
  12. #endif
  13. #ifndef EXEC_SEMAPHORES_H
  14. #include <exec/semaphores.h>
  15. #endif
  16. #ifndef GRAPHICS_GFX_H
  17. #include <graphics/gfx.h>
  18. #endif
  19. #ifndef GRAPHICS_RASTPORT_H
  20. #include <graphics/rastport.h>
  21. #endif
  22. #ifndef VFONT_CURVE_H
  23. #include <vfont/curve.h>
  24. #endif
  25.  
  26. /*****************\
  27. |* Debug macros. *|
  28. \*****************/
  29.  
  30. #define Trace \
  31. if (vFontBase==NULL) KPutStr("NULL-Base!"); \
  32. else if (vFontBase->Flags&VFB_DEBUG) KPrintF("%s %s.\n",__FILE__,__FUNC__)
  33. #define LibStart    geta4(); Trace;
  34. #define Show(fmt,str) \
  35. if (vFontBase==NULL) KPutStr("NULL-Base!"); \
  36. else if (vFontBase->Flags&VFB_DEBUG) KPrintF("%s %s:" fmt,__FILE__,__FUNC__,str)
  37.  
  38.  
  39.  
  40. /**********************\
  41. |* VFont Class stuff. *|
  42. \**********************/
  43.  
  44. #define CharWidth(f,c)  ((f)->Class->Chars[c].Width)
  45. #define CharHeight(f,c) ((f)->Class->Chars[c].Height)
  46.  
  47. #define VC_FILL         0x01        /* Draw solid characters. */
  48. #define VC_WIRE         0x02        /* Draw wire character. Contour otherwise*/
  49. #define VC_CONTINUES    0x04        /* Continue on next curve. */    
  50. #define VC_BEND         0x08        /* Bend the line. */
  51. #define VC_CURVE        0x10        /* No end points. */
  52. #define VC_CONTINUED    0x20        /* Continued from the previous curve. */
  53. #define VC_ROUND        0x40        /* Bended line with no end points. */
  54. #define VC_THINCURVE    0x80        /* Should be shrunk when mapped. */
  55.  
  56. typedef struct VCurve {
  57.     struct  VCurve *Next;           /* The next. */
  58.     Point   *Verticies;             /* The verticies. */
  59.     UWORD   Used;                   /* The number of verticies. */
  60.     UWORD   Size;                   /* The actual space for the curve. */
  61.     WORD    R;                      /* The roundness. */
  62.     UBYTE   E;                      /* The edginess. */
  63.     UBYTE   Flags;                  /* Flags. */
  64.     BYTE    FgPen;                  /* Foreground color. */
  65.     BYTE    BgPen;                  /* Background color. */
  66.     BYTE    OlPen;                  /* Outline color. */
  67.     BYTE    DMode;                  /* Draw mode */
  68.     WORD    sym_x;                  /* Symetry point. */
  69.     WORD    sym_y;                  /* -"- */
  70. } VCurve;
  71.  
  72. typedef struct VClassChar {
  73.     VCurve  *Curve;
  74.     UWORD   Width;
  75.     UWORD   Height;
  76. } VClassChar;
  77.  
  78.  
  79. typedef struct VFontClass {
  80.     struct VFontClass *Next;    /* Next font class. */
  81.     UBYTE       *Name;          /* Symbolic name of the font class. */
  82.     UBYTE       *Author;        /* The name of the author. */
  83.     UWORD       XSize;          /* Size of the average template chars. */
  84.     UWORD       YSize;          /* Size of the average template chars. */
  85.     FIX         UpVector;       /* Default Up direction of char. */
  86.     FIX         Tilt;            /* Factor of italic text. */
  87.     UBYTE       Flags;          /* The flags. */
  88.     UBYTE       Style;          /* The styles. */
  89.     UBYTE       Locked;         /* Semaphore of exlusive use of class. */
  90.     UBYTE       LowChar;        /* First defined character. */
  91.     UBYTE       HighChar;       /* The last defined character. */
  92.     UBYTE       Space;          /* Default spacing between char. */
  93.     VClassChar  *Chars;         /* The actual definition of chars. */
  94.     UWORD       Baseline;       /* Baseline. */
  95.     UWORD       Users;          /* Pad. */
  96. } VFontClass;
  97.  
  98.  
  99.  
  100. /************************\
  101. |* VFont instance stuff *|
  102. \************************/
  103.  
  104. #define VFC_FILL        0x01        /* Area fill the character. */
  105. #define VFC_MAPPED      0x02        /* Character is mapped. */
  106. #define VFC_NOCOOKIECUT 0x04        /* Don't render a'la cookie-cut. */
  107. #define VFC_CACHED      0x08
  108. #define VFC_RESERVED    0xf0        /* Reserved for future use. */
  109.  
  110. #define VCM_NAME        0x01U
  111. #define VCM_SIZE        0x02U
  112. #define VCM_STYLE       0x04U
  113. #define VCM_UP          0x08U
  114. #define VCM_PATH        0x10U
  115. #define VCM_TILT        0x20U
  116. #define VCM_BOLD        0x40U
  117.  
  118.  
  119. typedef struct Lines {
  120.     struct  Lines *Next;
  121.     Point   *XY;
  122.     UWORD   Count;
  123.     BYTE    FgPen;
  124.     BYTE    BgPen;
  125.     BYTE    OlPen;
  126.     BYTE    DMode;
  127. } Lines;
  128.  
  129. typedef struct charDef {
  130.     WORD charOffset;
  131.     WORD charBitWidth;
  132. } CharDef;
  133.  
  134. typedef struct VFontChar {
  135.     Lines   *Lines;
  136.     FIX     DeltaX;
  137.     FIX     DeltaY;
  138.     UBYTE   Flags;
  139.     UBYTE   pad[3];
  140. } VFontChar;
  141.  
  142. typedef struct VFont {
  143.  
  144.     /* struct TextFont compatible part */
  145.  
  146.     struct Node *ln_Succ;
  147.     struct Node *ln_Pred;
  148.     UBYTE   ln_Type;
  149.     BYTE    ln_Pri;
  150.     UBYTE   *Name;
  151.     struct  MsgPort *ReplyPort;
  152.     UWORD   Length;
  153.  
  154.     UWORD   TFYSize;
  155.     UBYTE   Style;
  156.     UBYTE   Flags;
  157.     UWORD   TFXSize;
  158.     UWORD   TFBaseline;
  159.     UWORD   BoldSmear;
  160.     UWORD   Accessors;
  161.     UBYTE   LoChar;
  162.     UBYTE   HiChar;
  163.     APTR    CharData;
  164.     UWORD   Modulo;
  165.     CharDef *CharLoc;
  166.     WORD    *CharSpace;
  167.     WORD    *CharKern; 
  168.  
  169.     /* struct ColorTextFont compatible extension. */
  170.     UWORD   ColorFlags;
  171.     UBYTE   Depth;
  172.     UBYTE   FgColor;
  173.     UBYTE   Low;
  174.     UBYTE   High;
  175.     UBYTE   PlanePick;
  176.     UBYTE   PlaneOnOff;
  177.     struct ColorFontColors *ColorFontColors;
  178.     APTR    ColorCharData[8];
  179.  
  180.     /* The Vector specific part. */
  181.     UWORD       XSize;
  182.     UWORD       YSize;
  183.     UWORD       Baseline;
  184.     Point       *BasePoints;    /* The origin of each character within CharData.*/
  185.     FIX         UpVector;        /* The Up direction of char. */
  186.     FIX         AlfaPath;       /* The direction of text: X-Y angle */
  187.     FIX         BetaPath;       /* The direction of text: Y-Z angle */
  188.     FIX         Tilt;            /* Factor of italic text. */
  189.     struct SignalSemaphore Lock;/* Semaphore for mutual exclusion. */
  190.     VFontChar   *Chars;            /* Character data. */
  191.     VFontClass  *Class;         /* The definition of the font. */
  192.     struct BitMap BM;           /* A bitmap */
  193.     UWORD       FreeCharOffset; /* Next free bitoffset in the bitmap. */
  194.     UWORD       CacheSize;      /* Size of the cache. */
  195.     struct VFont *Next;
  196. } VFont;
  197.  
  198.  
  199.  
  200. /********************\
  201. |* RasterPort hook. *|
  202. \********************/
  203.  
  204. #define MAXBINDS 256
  205.  
  206. typedef struct VFontBind {
  207.     VFont               *VFont;     /* The font. */
  208.     struct  RastPort    *RPort;     /* The rastport. */
  209.     struct  VFontBind   *Next;      /* The next. */
  210. } VFontBind;
  211.  
  212.  
  213.  
  214. /*****************\
  215. |* LoadSeg hook. *|
  216. \*****************/
  217.  
  218. typedef struct LoadSegs {
  219.     struct LoadSegs     *Next;      /* The next loadseg. */
  220.     ULONG               Seg;        /* The Segment list. */
  221. } LoadSegs;
  222.  
  223.  
  224.  
  225. /*****************************\
  226. |* VFont library base stuff. *|
  227. \*****************************/
  228.  
  229. #define MyOpenDiskFont  (*(vFontBase->OldOpenDisk))
  230.  
  231. #define VFB_MUTE        0x0000
  232. #define VFB_DEBUG       0x0001
  233. #define VFB_VERBOSE     0x0002
  234. #define VFB_FLUSHCLASS  0x0004
  235. #define VFB_FLUSHFONTS  0x0008
  236. #define VFB_MAPPED      0x0010
  237. #define VFB_EXCLUSIVE   0x0020
  238. #define VFB_FORCED      0x0040
  239. #define VFB_NOCONVERT   0x0080
  240. #define VFB_ANYSIZE     0x0100
  241. #define VFB_NOBITCACHE  0x0200
  242. #define VFB_RESERVED    0xfc00
  243.  
  244. typedef struct vFontBase {
  245.     struct      Library Lib;        /* Library stuff. */
  246.     ULONG       SegList;
  247.     VFontClass  *VFontClass;        /* List of font classes. */
  248.     VFontBind   *VFontBinds;        /* List of binding RPort<->VFont. */
  249.     VFont       *DefVFont;          /* List of instansiated fonts. */
  250.     LoadSegs    *DiskFonts;         /* List of loadsegs of diskfonts. */
  251.     struct      List mpool;         /* List with MemLists */
  252.     struct      List epool;         /* List with MemEntries. */
  253.     WORD        Flags;              /* For debug purpose etc. */
  254.     struct Layer *drawable;         /* Private. */
  255.     struct Layer_Info *li;
  256.     ULONG       Users;
  257.     struct SignalSemaphore Lock;    /* Semaphore for mutual exclusion. */
  258. } VFontBase;
  259.  
  260.  
  261.  
  262. /**********************\
  263. |* Vector Text stuff. *|
  264. \**********************/
  265.  
  266. typedef struct TextVAttr {
  267.     UBYTE   *Name;          /* The name of the desired class or Bitmap font. */
  268.     unsigned YSize : 15;    /* The height. */
  269.     unsigned VectorFont : 1;/* TRUE if vector font. */
  270.     UBYTE   Style;          /* The desired style. */
  271.     UBYTE   Flags;          /* Flags. */
  272.     UBYTE   *FontName;      /* The vector font name. */
  273.     UWORD   XSize;          /* Horizontal size. */
  274.     UWORD   VFlags;         /* Flags for vector fonts. */
  275.     UBYTE   *Type;          /* Indicates the storage format. */
  276. } TextVAttr;
  277.  
  278. typedef struct VectorText {
  279.     UBYTE       FrontPen, BackPen;
  280.     UBYTE       DrawMode;
  281.     WORD        LeftEdge, TopEdge;
  282.     TextVAttr   *VFontAttr;
  283.     UBYTE       *Text;
  284.     struct      VectorText   *Next;
  285. } VectorText;
  286.  
  287. /*******************\
  288. |* Usefull macros. *|
  289. \*******************/
  290.  
  291. #define SetVSize(font, sx, sy, map) {struct VFont req; req.XSize = sx; req.YSize = sy; ChangeVFont(font, (UBYTE)VCM_SIZE, &req, (long)map); }
  292. #endif
  293.