summaryrefslogtreecommitdiff
path: root/GadgetSupport.S
blob: 2d8b02b1e1eff63a7b346c90709859fe65106ef7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
*+                                                                       +*
*+   GadgetSupport  -  Routinen zum De-/Selektieren v. BoolGadgets       +*
*+                                                                       +*
*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*
*+                                                                       +*
*+   Modification History:                                               +*
*+   --------------------                                                +*
*+                                                                       +*
*+   26-Oct-87  CHW  Created this file!                                  +*
*+   25-Jun-89  CHW  Cleaned up for chlib                                +*
*+   20-Jan-90  CHW  Window pointer may be 0                             +*
*+   10-Sep-90  CHW  A6 wird jetzt auch gerettet, macht jetzt brav       +*
*+                   RemoveGadget() und wieder AddGadget(), kann jetzt   +*
*+                   auch GRELRIGHT und GRELHEIGHT                       +*
*+                                                                       +*
*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*

		IDNT	GadgetSupport
		SECTION	text,CODE

		INCLUDE	"exec/macros.i"
		INCLUDE "intuition/intuition.i"

		XREF	_GfxBase,_IntuitionBase

		XDEF	@SelectGadget,@DeselectGadget


GB_RELBOTTOM:	EQU	3	; Bit 3 im WORD
GB_RELRIGHT:	EQU	4	; Bit 4 im WORD
GB_SELECTED:	EQU	7	; Bit 7 im WORD



**************************************************************************
**                                                                      **
**   SelectGadget  -  Boolean-Gadget selektieren & highlighten          **
**                                                                      **
**   Parameter :  A0.L :  Adresse der Window-Struktur oder 0            **
**                A1.L :  Zeiger auf zu selektierendes Gadget           **
**   Resultat  :  nix                                                   **
**                                                                      **
**************************************************************************

@SelectGadget:
		movem.l	d0-d4/a0-a3/a6,-(SP)	; muss so bleiben, siehe unten

		movea.l	a0,a2			; A2 : Window
		movea.l	a1,a3			; A3 : Gadget
		bset.b	#GB_SELECTED,gg_Flags+1(a3)
		bne	norefresh		; Gleicher wie vorher ---> fertig
		bra.s	commoncont		; --->



**************************************************************************
**                                                                      **
**   DeselectGadget  -  Boolean-Gadget deselektieren                    **
**                                                                      **
**   Parameter :  A0.L :  Adresse der Window-Struktur oder 0            **
**                A1.L :  Zeiger auf zu deselektierendes Gadget         **
**   Resultat  :  nix                                                   **
**                                                                      **
**************************************************************************

@DeselectGadget:
		movem.l	d0-d4/a0-a3/a6,-(SP)	; muss so bleiben

		movea.l	a0,a2			; A2 : Window
		movea.l	a1,a3			; A3 : Gadget
		bclr.b	#GB_SELECTED,gg_Flags+1(a3)
		beq.s	norefresh		; Gleicher wie vorher ---> fertig

commoncont:	move.l	a2,d0			; Window
		beq.s	norefresh		; Null ---> Kein Refresh
		movea.l	_IntuitionBase,a6
		JSRLIB	RemoveGadget
		move.l	d0,d4			; D4 :  Gadget-Position

		moveq.l	#0,d0			; Farbe 0
		movea.l	wd_RPort(a2),a1		; Window's RastPort
		movea.l	_GfxBase,a6
		JSRLIB	SetAPen			; Farbe setzen
		moveq.l	#RP_JAM2,d0
		movea.l	wd_RPort(a2),a1		; Window's RastPort
		JSRLIB	SetDrMd			; Modus setzen

		movea.l	wd_RPort(a2),a1
		movem.w	gg_LeftEdge(a3),d0-d3	; Alles auf einmal!

		btst	#GB_RELRIGHT,gg_Flags+1(a3)
		beq.s	1$
		add.w	wd_Width(a2),d0		; Korrektur von GRELRIGHT
		subq.w	#1,d0
1$:
		btst	#GB_RELBOTTOM,gg_Flags+1(a3)
		beq.s	2$
		add.w	wd_Height(a2),d1	; Korrektur von GRELBOTTOM
		subq.w	#1,d1
2$:
		add.w	d0,d2			; Width ->  X2
		add.w	d1,d3			; Height -> Y2
		subq.w	#1,d2
		subq.w	#1,d3
		JSRLIB	RectFill		; Gadget löschen

		move.l	d4,d0			; Gadget-Position
		movea.l	a2,a0			; Window
		movea.l	a3,a1			; Gadget
		movea.l	_IntuitionBase,a6
		JSRLIB	AddGadget

		movea.l	a3,a0			; Gadget
		movea.l	a2,a1			; Window
		suba.l	a2,a2			; Requester
		moveq.l	#1,d0			; nur dieses Gadget
		JSRLIB	RefreshGList

norefresh:	movem.l	(SP)+,d0-d4/a0-a3/a6
		rts

		END