home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / disk / misc / dcmp / source / source.lha / intuisup.c < prev    next >
C/C++ Source or Header  |  1993-01-17  |  3KB  |  112 lines

  1. /*--------------------------------------------*
  2.   $Id: intuisup.c,v 1.1 92/10/09 21:11:03 tf Exp $ 
  3.   Intuition support functions for dcmp.c,v
  4.   written 1991, slightly modified 04-Aug-1992
  5.  *--------------------------------------------*/
  6.  
  7. #include <exec/types.h>
  8. #include <intuition/intuition.h>
  9.  
  10. #define POS_3D TRUE
  11. #define NEG_3D FALSE
  12.  
  13. /*
  14.  *  draw_3d() zeichnet einen Border im RastPort rp an der Stelle (x|y).
  15.  *  Is bpen > -1, so wird der Inhalt dieses Rechtecks damit gel"oscht,
  16.  *  posneg bestimmt ob der 3D-Effekt positiv oder negativ dargestellt wird.
  17.  */
  18.  
  19. void draw_3d(struct RastPort *rp, UWORD x,UWORD y,UWORD w,UWORD h, int bpen, BOOL posneg)
  20. { if(rp != NULL)  /* have we got a RastPort to work with ? */
  21.   { w--;
  22.     h--;
  23.     if(bpen >= 0) /* fill region inside border */
  24.     { SetAPen(rp,bpen);
  25.       RectFill(rp,x+2,y+1,x+w-2,y+h-1);
  26.     }
  27.     if(posneg == POS_3D) SetAPen(rp,1L);
  28.     else SetAPen(rp,2L);
  29.     Move(rp,x+w,y);
  30.     Draw(rp,x,y);
  31.     Draw(rp,x,y+h);
  32.     Move(rp,x+1,y);
  33.     Draw(rp,x+1,y+h-1);
  34.   
  35.     if(posneg == POS_3D) SetAPen(rp,2L);
  36.     else SetAPen(rp,1L);
  37.     Move(rp,x+1,y+h);
  38.     Draw(rp,x+w,y+h);
  39.     Draw(rp,x+w,y);
  40.     Move(rp,x+w-1,y+h);
  41.     Draw(rp,x+w-1,y+1);
  42.   }
  43. }
  44.  
  45. /*
  46.  * FUNCTION
  47.  *
  48.  *   draw3dgb -- draw 3D borders around all gadgets glued to given one.
  49.  *
  50.  * SYNOPSIS
  51.  *
  52.  *   draw_3dgb(rp, gadget);
  53.  *
  54.  *   struct RastPort *rp;
  55.  *   struct Gadget *gadget;
  56.  *
  57.  * DESCRIPTION
  58.  *
  59.  *   Draw a OS2.0 box around all the gadgets chained to the given one.
  60.  *   StringGadgets and BooleanGadgets border are not equal...
  61.  *
  62.  */
  63.  
  64. draw_3dgb(struct RastPort *rp, struct Gadget *gadget)
  65. { if(rp != NULL && gadget != NULL)
  66.   { if(gadget->GadgetType != STRGADGET)
  67.     { draw_3d(rp, gadget->LeftEdge, gadget->TopEdge,
  68.         gadget->Width, gadget->Height, -1L,(gadget->Flags==SELECTED|GADGHCOMP));
  69.     }
  70.     else /* string gadgets look different */
  71.     { draw_3d(rp, gadget->LeftEdge-4, gadget->TopEdge-2,
  72.         gadget->Width+6, gadget->Height+2, -1L, TRUE);
  73.       draw_3d(rp, gadget->LeftEdge-6, gadget->TopEdge-3,
  74.         gadget->Width+10, gadget->Height+4, -1L, FALSE);
  75.     }
  76.     draw_3dgb(rp,gadget->NextGadget);
  77.   }
  78. }
  79.  
  80. /*
  81.  * This stuff down here sets the gadget flags propperly.
  82.  */
  83.  
  84. void set_gflags(struct Gadget *gadget, struct Window *window, USHORT flags)
  85. { SHORT pos= RemoveGadget(window, gadget);
  86.   RefreshGList(gadget, window, NULL, 1L); /* tricky! */
  87.   gadget->Flags= flags;
  88.   if(pos>=0) /* => we really removed the gadget */
  89.     AddGadget(window, gadget, pos);
  90.   RefreshGList(gadget, window, NULL, 1L);
  91. }
  92.  
  93. void on_3dg(struct Gadget *gadget, struct Window *window)
  94. { struct RastPort *rp= window->RPort;
  95.   if(rp != NULL && gadget != NULL)
  96.   { OnGadget(gadget, window, NULL);             /* just to please intuition */
  97.     UWORD gflags= gadget->Flags&~GADGDISABLED;  /* enable gadget selection */
  98.     set_gflags(gadget,window,gflags&~SELECTED); /* unselect it */
  99.     if(gadget->GadgetType != STRGADGET)
  100.     { draw_3d(rp, gadget->LeftEdge, gadget->TopEdge,gadget->Width, gadget->Height,
  101.         0L,FALSE); /* FALSE since our gadget is *NOT* selected */
  102.     }
  103.     else /* string gadgets look different */
  104.     { draw_3d(rp, gadget->LeftEdge-4, gadget->TopEdge-2,
  105.         gadget->Width+6, gadget->Height+2, 0L, TRUE);
  106.       draw_3d(rp, gadget->LeftEdge-6, gadget->TopEdge-3,
  107.         gadget->Width+10, gadget->Height+4, -1L, FALSE);
  108.     }
  109.     set_gflags(gadget,window,gflags); /* restore old selection state */
  110.   }
  111. }
  112.