home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / talinasm.lha / gadgetbox.asm < prev    next >
Encoding:
Assembly Source File  |  1991-10-21  |  1.9 KB  |  86 lines

  1. * ============================================================================ *
  2. *    SetupGadgetIBox: figures the real hit box for a gadget
  3. *
  4. *            SetupGadgetIBox(gadget,domain,result)
  5. *                       a0    a1     a2
  6. *
  7. *    This function computes the hit box for a gadget, taking the "gadget
  8. *    relativity" flags, such as GRELWIDTH, into account.
  9. * ============================================================================ *
  10.  
  11.             include        "exec/types.i"
  12.             include        "intuition/intuition.i"
  13.             include        "macros.i"
  14.  
  15.             SECTION        gadgetbox.asm,CODE
  16.  
  17.             xdef        _SetupGadgetIBox,SetupGadgetIBox
  18.  
  19. qregs        reg            d2-d7/a6
  20.  
  21. ;GRELBOTTOM    EQU $0008
  22. ;GRELRIGHT    EQU $0010
  23. ;GRELWIDTH    EQU $0020
  24. ;GRELHEIGHT    EQU $0040
  25.  
  26. ; bit definitions for intuition gadget flags
  27.  
  28. GBOTTOM        equ            3
  29. GRIGHT        equ            4
  30. GWIDTH        equ            5
  31. GHEIGHT        equ            6
  32.  
  33. _SetupGadgetIBox:
  34.             move.l        a2,-(sp)
  35.             movem.l        8(sp),a0-a2
  36.             bsr            SetupGadgetIBox
  37.             move.l        (sp)+,a2
  38.             rts
  39.  
  40. SetupGadgetIBox:
  41.             move.l        gg_LeftEdge(a0),ibox_Left(a2)
  42.             move.l        gg_Width(a0),ibox_Width(a2)
  43.  
  44.             move.w        gg_Flags(a0),d0
  45.  
  46.             btst        #GRIGHT,d0
  47.             beq.s        1$
  48.             move.w        ibox_Width(a1),d1
  49.             add.w        d1,ibox_Left(a2)
  50.  
  51. 1$            btst        #GBOTTOM,d0
  52.             beq.s        2$
  53.             move.w        ibox_Height(a1),d1
  54.             add.w        d1,ibox_Top(a2)
  55.  
  56. 2$            btst        #GWIDTH,d0
  57.             beq.s        3$
  58.             move.w        ibox_Width(a1),d1
  59.             add.w        d1,ibox_Width(a2)
  60.  
  61. 3$            btst        #GHEIGHT,d0
  62.             beq.s        4$
  63.             move.w        ibox_Height(a1),d1
  64.             add.w        d1,ibox_Height(a2)
  65.  
  66. 4$            rts
  67.  
  68.             end
  69.  
  70.     /* Set up the real size of the gadget using the GRELWIDTH / GRELHEIGHT
  71.         calculation...
  72.     */
  73.  
  74. SetupIBox(struct Gadget *gadget,struct IBox *domain, struct IBox *box)
  75. {    box->Left = gadget->LeftEdge;
  76.     box->Top = gadget->TopEdge;
  77.     box->Width = gadget->Width;
  78.     box->Height = gadget->Height;
  79.  
  80.     if (gadget->Flags & GRELRIGHT)    box->Left += domain->Width;
  81.     if (gadget->Flags & GRELBOTTOM) box->Top += domain->Height;
  82.  
  83.     if (gadget->Flags & GRELWIDTH)  box->Width += domain->Width;
  84.     if (gadget->Flags & GRELHEIGHT) box->Height += domain->Height;
  85. }
  86.