home *** CD-ROM | disk | FTP | other *** search
- * ============================================================================ *
- * SetupGadgetIBox: figures the real hit box for a gadget
- *
- * SetupGadgetIBox(gadget,domain,result)
- * a0 a1 a2
- *
- * This function computes the hit box for a gadget, taking the "gadget
- * relativity" flags, such as GRELWIDTH, into account.
- * ============================================================================ *
-
- include "exec/types.i"
- include "intuition/intuition.i"
- include "macros.i"
-
- SECTION gadgetbox.asm,CODE
-
- xdef _SetupGadgetIBox,SetupGadgetIBox
-
- qregs reg d2-d7/a6
-
- ;GRELBOTTOM EQU $0008
- ;GRELRIGHT EQU $0010
- ;GRELWIDTH EQU $0020
- ;GRELHEIGHT EQU $0040
-
- ; bit definitions for intuition gadget flags
-
- GBOTTOM equ 3
- GRIGHT equ 4
- GWIDTH equ 5
- GHEIGHT equ 6
-
- _SetupGadgetIBox:
- move.l a2,-(sp)
- movem.l 8(sp),a0-a2
- bsr SetupGadgetIBox
- move.l (sp)+,a2
- rts
-
- SetupGadgetIBox:
- move.l gg_LeftEdge(a0),ibox_Left(a2)
- move.l gg_Width(a0),ibox_Width(a2)
-
- move.w gg_Flags(a0),d0
-
- btst #GRIGHT,d0
- beq.s 1$
- move.w ibox_Width(a1),d1
- add.w d1,ibox_Left(a2)
-
- 1$ btst #GBOTTOM,d0
- beq.s 2$
- move.w ibox_Height(a1),d1
- add.w d1,ibox_Top(a2)
-
- 2$ btst #GWIDTH,d0
- beq.s 3$
- move.w ibox_Width(a1),d1
- add.w d1,ibox_Width(a2)
-
- 3$ btst #GHEIGHT,d0
- beq.s 4$
- move.w ibox_Height(a1),d1
- add.w d1,ibox_Height(a2)
-
- 4$ rts
-
- end
-
- /* Set up the real size of the gadget using the GRELWIDTH / GRELHEIGHT
- calculation...
- */
-
- SetupIBox(struct Gadget *gadget,struct IBox *domain, struct IBox *box)
- { box->Left = gadget->LeftEdge;
- box->Top = gadget->TopEdge;
- box->Width = gadget->Width;
- box->Height = gadget->Height;
-
- if (gadget->Flags & GRELRIGHT) box->Left += domain->Width;
- if (gadget->Flags & GRELBOTTOM) box->Top += domain->Height;
-
- if (gadget->Flags & GRELWIDTH) box->Width += domain->Width;
- if (gadget->Flags & GRELHEIGHT) box->Height += domain->Height;
- }
-