home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / linkedit / linkedit.lha / link-edit / LinkEdit / Box / box_init.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-03-13  |  5.2 KB  |  192 lines

  1. #include <stdio.h>
  2. #include <X11/Xlib.h>
  3. #include <X11/Xatom.h>
  4. #include "box_types.h"
  5. #include "box_global.h"
  6.  
  7. Window BoxInitialize(gnrc,data)
  8.  
  9. BoxStatus *gnrc;
  10. BoxData *data;
  11.  
  12. {
  13.  
  14.   XSetWindowAttributes xswa;
  15.   XWindowAttributes xwa;
  16.   Window root,top;
  17.   XGCValues xgcv;
  18.   int x,y,width,height;
  19.   BoxAttributeList *attr;
  20.  
  21.   root = data->root;
  22.  
  23.   x = (int) (data->x * xppmm);
  24.   y = (int) (data->y * yppmm);
  25.   width = (int) (data->width * xppmm);
  26.   height = (int) (data->height * yppmm);
  27.  
  28.   xswa.border_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  29.   xswa.background_pixel = WhitePixel(dpy,DefaultScreen(dpy));;
  30.   xswa.event_mask = (KeyPressMask|ButtonPressMask|ExposureMask|
  31.                      ButtonReleaseMask|StructureNotifyMask);
  32.  
  33.   top = XCreateWindow(dpy,root,x,y,width,height,
  34.                             data->border,CopyFromParent,
  35.                             InputOutput,CopyFromParent,
  36.                             (CWBackPixel|CWEventMask|CWBorderPixel),&xswa);
  37.                             
  38.   gnrc->TopWindow = top;
  39.   if(!data->do_not_map) {
  40.      XMapWindow(dpy,top);
  41.      XGetWindowAttributes(dpy,top,&xwa);
  42.     }
  43.  
  44.   /* Create GC and reverse GC for box */
  45.  
  46.   /* Load the font */
  47.  
  48.   if((gnrc->fontstruct = XLoadQueryFont(dpy,data->font)) == NULL) {
  49.     fprintf(stderr,"Can't open font %s\n",data->font);
  50.     exit(1);
  51.    }
  52.  
  53.   gnrc->fth = gnrc->fontstruct->max_bounds.ascent +
  54.                   gnrc->fontstruct->max_bounds.descent;
  55.  
  56.   /* Create the gc */
  57.  
  58.   xgcv.font = gnrc->fontstruct->fid;
  59.   xgcv.foreground = BlackPixel(dpy,DefaultScreen(dpy));
  60.   xgcv.background = WhitePixel(dpy,DefaultScreen(dpy));
  61.   gnrc->gc = XCreateGC(dpy,gnrc->TopWindow,(GCFont|
  62.                             GCForeground|GCBackground),&xgcv);
  63.  
  64.   /* Create the reverse gc */
  65.  
  66.   xgcv.foreground = WhitePixel(dpy,DefaultScreen(dpy));
  67.   xgcv.background = BlackPixel(dpy,DefaultScreen(dpy));
  68.   gnrc->reverse_gc = XCreateGC(dpy,gnrc->TopWindow,(GCFont|
  69.                             GCForeground|GCBackground),&xgcv);
  70.  
  71.   if(data->urgent_present == BOX_YES) CreateBoxUrgentWindow(gnrc,data);
  72.   else gnrc->UrgentWindow = (Window) 0;
  73.  
  74.   if(data->title_present == BOX_YES) CreateBoxTitleWindow(gnrc,data);
  75.   else gnrc->TitleWindow = (Window) 0;
  76.  
  77.   if(data->message_present == BOX_YES)
  78.      CreateBoxMessageWindow(gnrc,data);
  79.   else gnrc->MessageWindow = (Window) 0;
  80.  
  81.   /* Initialize box specific data */
  82.   gnrc->box.exclusive = BOX_NO;
  83.   gnrc->box.next = NULL;
  84.   gnrc->box.id = 0;
  85.   gnrc->box.generation = 0;
  86.   gnrc->current_box = &(gnrc->box);
  87.   gnrc->select_box = &(gnrc->box);
  88.   gnrc->arg = data->arg;
  89.   gnrc->state_change = BOX_NO;
  90.  
  91.   /* Set up attributes */
  92.   attr = &(gnrc->attribute); attr->id = 0;
  93.   attr->gc = gnrc->gc; gnrc->attribute.reverse_gc = gnrc->reverse_gc;
  94.   attr->fontstruct = gnrc->fontstruct; attr->fth = gnrc->fth;
  95.   attr->fg = BlackPixel(dpy,DefaultScreen(dpy));
  96.   attr->bg = WhitePixel(dpy,DefaultScreen(dpy));
  97.   attr->linewidth = 1; attr->next = NULL;
  98.   gnrc->current_attribute = &(gnrc->attribute);
  99. }
  100.  
  101.  
  102. CreateBoxMessageWindow(gnrc,data)
  103.  
  104. BoxStatus *gnrc;
  105. BoxData *data;
  106.  
  107. {
  108.   XSetWindowAttributes xswa;
  109.   XWindowAttributes xwa;
  110.   int width,height,x_offset,y_offset;
  111.  
  112.   XGetWindowAttributes(dpy,gnrc->TopWindow,&xwa);
  113.  
  114.   height = gnrc->fth + 2*BOX_PAD;
  115.   width = xwa.width;
  116.  
  117.   x_offset = 0;
  118.   y_offset = xwa.height - height;
  119.  
  120.  
  121.   xswa.background_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  122.  
  123.   xswa.win_gravity = SouthWestGravity;
  124.   xswa.event_mask = (ExposureMask|ButtonPressMask|ButtonReleaseMask|
  125.                      KeyPressMask);
  126.  
  127.   gnrc->MessageWindow = XCreateWindow(dpy,gnrc->TopWindow,
  128.                            x_offset,y_offset,width,height,
  129.                            0,CopyFromParent,InputOutput,CopyFromParent,
  130.                            (CWBackPixel|CWWinGravity|
  131.                             CWEventMask),&xswa);
  132.  
  133.   BoxPrintMessage(gnrc,data->message);
  134.   XMapWindow(dpy,gnrc->MessageWindow);
  135.  
  136. }
  137.  
  138.  
  139. CreateBoxTitleWindow(gnrc,data)
  140.  
  141. BoxStatus *gnrc;
  142. BoxData *data;
  143.  
  144. {
  145.   XSetWindowAttributes xswa;
  146.   XWindowAttributes xwa;
  147.  
  148.   XGetWindowAttributes(dpy,gnrc->TopWindow,&xwa);
  149.  
  150.   xswa.background_pixel = WhitePixel(dpy,DefaultScreen(dpy));;
  151.   xswa.border_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  152.   xswa.event_mask = (ExposureMask|ButtonPressMask|
  153.                      ButtonReleaseMask);
  154.  
  155.   gnrc->TitleWindow = XCreateWindow(dpy,gnrc->TopWindow,0,0,
  156.                             xwa.width,gnrc->fth + 2*BOX_PAD,0,
  157.                             CopyFromParent,InputOutput,CopyFromParent,
  158.                             (CWBackPixel|CWBorderPixel|CWEventMask),&xswa);
  159.  
  160.   strcpy(gnrc->title,data->title);
  161.   XMapWindow(dpy,gnrc->TitleWindow);
  162.  
  163.  
  164. }
  165.  
  166.  
  167. CreateBoxUrgentWindow(gnrc,data)
  168.  
  169. BoxStatus *gnrc;
  170. BoxData *data;
  171.  
  172. {
  173.   XSetWindowAttributes xswa;
  174.   XWindowAttributes xwa;
  175.  
  176.   XGetWindowAttributes(dpy,gnrc->TopWindow,&xwa);
  177.  
  178.   xswa.background_pixel = WhitePixel(dpy,DefaultScreen(dpy));;
  179.   xswa.border_pixel = BlackPixel(dpy,DefaultScreen(dpy));
  180.   xswa.event_mask = (KeyPressMask|ExposureMask|ButtonPressMask|
  181.                      ButtonReleaseMask);
  182.  
  183.   gnrc->UrgentWindow = XCreateWindow(dpy,gnrc->TopWindow,0,
  184.                           xwa.height/2,xwa.width,gnrc->fth + 2*BOX_PAD,
  185.                             5,CopyFromParent,InputOutput,CopyFromParent,
  186.                             (CWBackPixel|CWBorderPixel|CWEventMask),&xswa);
  187.  
  188. }
  189.  
  190.  
  191.  
  192.