summaryrefslogtreecommitdiff
path: root/GadgetSupport.S
diff options
context:
space:
mode:
Diffstat (limited to 'GadgetSupport.S')
-rw-r--r--GadgetSupport.S123
1 files changed, 123 insertions, 0 deletions
diff --git a/GadgetSupport.S b/GadgetSupport.S
new file mode 100644
index 0000000..2d8b02b
--- /dev/null
+++ b/GadgetSupport.S
@@ -0,0 +1,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