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
|