home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / BORDOBJ.H < prev    next >
C/C++ Source or Header  |  1990-04-05  |  8KB  |  220 lines

  1. /*
  2.     bordobj.h
  3.  
  4.     % "public" header for border objects
  5.  
  6.     OWL 1.2
  7.     Copyright (c) 1986, 1987, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      9/01/87 jmd     added NO_PROTO option
  13.      6/23/88 jmd    converted generic pointers to VOID*
  14.      7/09/88 jmd    added windows
  15.      8/08/88 jmd    added bord_FixSides
  16.      8/09/88 jmd    added new object stuff
  17.      8/13/88 jmd    changed bd_ names to bord_
  18.      9/12/88 jmd    Added in and out data to objects
  19.     10/05/88 jmd    Added BD_PROMPTLEN
  20.     11/02/88 ted    Changed to new non-window border scheme
  21.     12/04/88 jmd    moved some routines from bordod.h to here
  22.     12/16/88 jmd    Added bord_SendMsg
  23.  
  24.      3/31/89 ted    split attr into xd struct
  25.      4/10/89 jmd    added NULL test to bord_Attr
  26.      5/12/89 jmd    renamed bord_Open to win_SetBorder
  27.      5/23/89 jmd    added "border features"
  28.      5/28/89 jmd    added Shadow support
  29.      7/12/89 ted    Converted '_func' prototypes from typedef to macro.
  30.      8/04/89 jmd    added BD_TOP feature
  31.      5/28/89 jmd    moved Shadow support out.
  32.  
  33.      9/27/89 ted    Added bord_GetSides funcs and IsCharSize/IsFixedSize dummies.
  34.     11/10/89 jmd    added border scaling strategy, set title and prompt macros
  35.     11/16/89 jmd    fixed IsChar macros
  36.     11/30/89 ted    Fixed IsChar macros again.
  37.     12/02/89 ted    Made bord_GetSides a macro to bord_getfwhsides.
  38.     12/10/89 jmd    made win_GetBorder macro
  39.     12/20/89 ted    Moved features from border od to xd.
  40.     12/20/89 ted    Added hzscroll, vtscroll, maxmin & mousethru feature flags.
  41.      1/08/89 ted    Added BDM_SET & GET MENU msg for border-attached menus.
  42.      1/17/90 ted    Added shademsg args to _Expose functions.
  43.      3/28/90 jmd    ansi-fied
  44. */
  45.  
  46. #include "bord.h"    /* file of all border object class function names */
  47. /* winobj.h is already included for all owl files */
  48.  
  49. extern class_func        (border_Class);
  50.  
  51. #define    bd_fptr    class_fptr        /* make it look like it does in the manual */
  52.  
  53. #define bord_Do(win, msg, indata, outdata)            \
  54.     ((win_GetBorder(win) != NULL) ? obj_Do(win_GetBorder(win), msg, indata, outdata) : 0)
  55.  
  56. /*** Border Window messages ***/
  57.  
  58. /* messages used externally */
  59. #define BDM_SETTITLE        (OBJM_LASTMSG+0)
  60. #define BDM_GETTITLE        (OBJM_LASTMSG+1)
  61. #define BDM_PROMPT            (OBJM_LASTMSG+2)
  62. #define BDM_SETMENU            (OBJM_LASTMSG+3)
  63. #define BDM_GETMENU            (OBJM_LASTMSG+4)
  64.  
  65. /* messages used internally */
  66. #define BDM_DRAW            (OBJM_LASTMSG+10)
  67. #define BDM_SHADOW            (OBJM_LASTMSG+11)
  68. #define BDM_RESIZE            (OBJM_LASTMSG+12)
  69. #define BDM_SCROLL            (OBJM_LASTMSG+13)
  70. #define BDM_STARTMOUSE        (OBJM_LASTMSG+14)
  71. #define BDM_MOUSE            (OBJM_LASTMSG+15)
  72. #define BDM_ENDMOUSE        (OBJM_LASTMSG+16)
  73.  
  74. #define BDM_LASTMSG            (OBJM_LASTMSG+22)
  75.  
  76. /** border "mouse feature" flags (bit masks) **/
  77.  
  78. #define    BD_MOVE            0x01        
  79. #define    BD_RESIZE        0x02
  80. #define    BD_OUTLINE         0x04
  81. #define    BD_TOP             0x08
  82. #define    BD_MAXMIN         0x10
  83. #define    BD_HZSCROLL        0x20
  84. #define    BD_VTSCROLL        0x40
  85. #define    BD_MOUSETHRU    0x80
  86.  
  87. /** border scaling strategy flags **/
  88.  
  89. #define BDS_CHARSIZE    0x00
  90. #define BDS_FIXEDSIZE    0x01
  91.  
  92. /* -------------------------------------------------------------------------- */
  93. typedef struct _borderxd {
  94.     common_xd    cd;            /* common object super class */
  95.     byte        attr;        /* the border's foreground/background attribute */
  96.     unsigned      scale:1;    /* border scaling strategy */
  97.     unsigned    feature;    /* Border's set of features */
  98.  
  99. } border_xd;
  100.  
  101. /* Macros-------------------------------------------------------------------- */
  102. #define bord_GetId(border)            obj_GetId(border)
  103. #define bord_getxd(border)            ((border_xd *) obj_getxd(border))
  104. /* -------------------------------------------------------------------------- */
  105.  
  106. #define bord_GetAttr(win)                            \
  107.     ((win_GetBorder(win) != NULL) ? (bord_getxd(win_GetBorder(win))->attr) : 0x00)
  108.  
  109. #define bord_setxdattr(bord, at)    (bord_getxd(bord)->attr = (at))
  110. #define bord_SetAttr(win, at)                        \
  111.     ((win_GetBorder(win) != NULL) ? (bord_setxdattr(win_GetBorder(win), at), 1) : 0)
  112.  
  113. #define bord_GetPixWidth(win)        ((opcoord)opbox_GetWidth(win_pixboxp(win)))
  114. #define bord_GetPixHeight(win)        ((opcoord)opbox_GetHeight(win_pixboxp(win)))
  115.  
  116. #define bord_GetWidth(win)                            \
  117.     ((int)(bord_GetPixWidth(win)/win_GetFontWidth(win)))
  118.  
  119. #define bord_GetHeight(win)                            \
  120.     ((int)(bord_GetPixHeight(win)/win_GetFontHeight(win)))
  121.  
  122. /*    Paints all unobscured parts of win and border. */
  123. #define    bord_Paint(win)                bord_Expose(win, WINM_PAINT, NULL, WINM_SHADOW, NULL)
  124.  
  125. #define bord_xoffs(win)                (-win_inboxp(win)->xmin)
  126. #define bord_yoffs(win)                (-win_inboxp(win)->ymin)
  127.  
  128. #define bord_GetColOff(win)            (bord_xoffs(win)/win_GetFontWidth(win))
  129. #define bord_GetRowOff(win)            (bord_yoffs(win)/win_GetFontHeight(win))
  130.  
  131. #define bord_GetXmin(win)            (win_pixboxp(win)->xmin)
  132. #define bord_GetYmin(win)            (win_pixboxp(win)->ymin)
  133. #define bord_GetXmax(win)            (win_pixboxp(win)->xmax)
  134. #define bord_GetYmax(win)            (win_pixboxp(win)->ymax)
  135.  
  136. #define bord_GetLeftCol(win)                        \
  137.     opcoord_GetXCol(bord_GetXmin(win), win_GetFont(win))
  138. #define bord_GetTopRow(win)                            \
  139.     opcoord_GetYRow(bord_GetYmin(win), win_GetFont(win))
  140. #define bord_GetRightCol(win)                        \
  141.     (opcoord_GetXCol(bord_GetXmax(win), win_GetFont(win)) - 1)
  142. #define bord_GetBotRow(win)                            \
  143.     (opcoord_GetYRow(bord_GetYmax(win), win_GetFont(win)) - 1)
  144.  
  145. #define bord_setxdscaling(bord, s)    (bord_getxd(bord)->scale = (s))
  146. #define bord_SetScaling(win, s)                        \
  147.     ((win_GetBorder(win) != NULL) ? (bord_setxdscaling(win_GetBorder(win), s), 1) : 0)
  148.  
  149. #define bord_getxdscaling(bord)        (bord_getxd(bord)->scale)
  150. #define bord_GetScaling(win)                        \
  151.     ((win_GetBorder(win) != NULL) ? bord_getxdscaling(win_GetBorder(win)) : BDS_CHARSIZE)
  152.  
  153. #define bord_GetSides(win, x1op, y1op, x2op, y2op)    \
  154.     bord_getfwhsides(win, win_GetFontWidth(win), win_GetFontHeight(win), x1op, y1op, x2op, y2op)
  155.  
  156. #define bord_IsCharSize(win)        (bord_GetScaling(win) == BDS_CHARSIZE)
  157. #define bord_IsFixedSize(win)        (bord_GetScaling(win) == BDS_FIXEDSIZE)
  158.  
  159. #define bord_SetPrompt(win, prompt)                    \
  160.     bord_SendMsg(win, BDM_PROMPT, (VOID *) (prompt), NULL)
  161. #define bord_SetTitle(win, title)                    \
  162.     bord_SendMsg(win, BDM_SETTITLE, (VOID *) (title), NULL)
  163. #define bord_SetMenu(win, mw)                        \
  164.     bord_SendMsg(win, BDM_SETMENU, (VOID *) (mw), NULL)
  165.  
  166. #define bord_setxdfeature(bord, f)    (bord_getxd(bord)->feature = (f))
  167. #define bord_SetFeature(win, f)                        \
  168.     ((win_GetBorder(win) != NULL) ? (bord_setxdfeature(win_GetBorder(win), f), 1) : 0)
  169.  
  170. #define bord_getxdfeature(bord)        (bord_getxd(bord)->feature)
  171. #define bord_GetFeature(win)                        \
  172.     ((win_GetBorder(win) != NULL) ? bord_getxdfeature(win_GetBorder(win)) : 0)
  173.  
  174. /* -------------------------------------------------------------------------- */
  175. /* function prototypes ***/
  176.  
  177. /* BORDAUX.C */
  178. extern void        bord_GetPixBox(win_type win, opbox *boxp);
  179. extern void        bord_GetBox(win_type win, ocbox *cboxp);
  180. extern void        bord_Expose(win_type win, int emsg, VOID *emsgdata, int shademsg, VOID *shademsgdata);
  181.  
  182. /* BORDCLOS.C */
  183. extern void        bord_Close(win_type win);
  184.  
  185. /* BORDDRWT.C */
  186. extern void        bord_DrawTitle(ptd_struct *ptd, int row, int col, char *title, byte attr, int width);
  187.  
  188. /* BORDGHZB.C */
  189. extern void        bord_GetHzBar(win_type win, int *lend, int *rend, boolean *left, boolean *right);
  190.  
  191. /* BORDGLTS.C */
  192. extern void        bord_GetLights(win_type win, boolean *up, boolean *down, boolean *left, boolean *right);
  193.  
  194. /* BORDGVTB.C */
  195. extern void        bord_GetVtBar(win_type win, int *top, int *bot, boolean *up, boolean *down);
  196.  
  197. /* BORDIMO.C */
  198. extern void        bord_MouseInit(void);
  199.  
  200. /* BORDOBJ.C */
  201. extern boolean    win_SetBorder(win_type win, class_fptr func);
  202.  
  203.  
  204. /* BORDSEND.C */
  205. extern int        bord_SendMsg(win_type win, int msg, VOID *indata, VOID *outdata);
  206.  
  207. /* BORDSETP.C */
  208. extern void        bord_SetPosition(win_type win, int row, int col);
  209. extern void        bord_SetPixPosition(win_type win, opcoord xpos, opcoord ypos);
  210.  
  211. /* BORDSSDS.C */
  212. extern void        bord_SetSides(win_type win, int topoffs, int leftoffs, int botoffs, int rightoffs);
  213. extern void        bord_SetPixSides(win_type win, opcoord xminoffs, opcoord yminoffs, opcoord xmaxoffs, opcoord ymaxoffs);
  214. extern boolean    bord_getfwhsides(win_type win, opcoord fw, opcoord fh, int *topoffsp, int *leftoffsp, int *botoffsp, int *rightoffsp);
  215. extern boolean    bord_GetPixSides(win_type win, opcoord *xminoffsp, opcoord *yminoffsp, opcoord *xmaxoffsp, opcoord *ymaxoffsp);
  216.  
  217. /* bordout.c - see winpriv.h */
  218. /* -------------------------------------------------------------------------- */
  219.  
  220.