A2osX/LIB/LIBGUI.S.MOU.txt
burniouf 9a7d20a7e1 ProDOS 203 / FX:TC mod for year 2022-2026
FORMAT: new switches & checks
SH:BREAK in FOR and WHILE
ASM / S-C MASM: new directives, CString support and .HX
LC / UC:bugfix
DHGR.DRV:bugfix
LIBGUI:wip
CC:wip
2022-12-07 08:02:29 +01:00

425 lines
6.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
MOU.Init >PUSHW L.DEVNAME.MOUSE
>PUSHBI 0
>SYSCALL2 open
bcc .2
inc DEVNAME.MOUSE+8
lda DEVNAME.MOUSE+8
cmp #'8'
bne MOU.Init
* sec
rts
.2 sta hDevMouse
clc
rts
*--------------------------------------
* make sure mouse X,Y always in Screen
*--------------------------------------
MOU.Setup lda CLIP.Screen+S.RECT.X2+1
sta MouseClamp+3
lsr
sta PTR.Pos+S.POINT.X+1
lda CLIP.Screen+S.RECT.X2
sta MouseClamp+2
ror
sta PTR.Pos+S.POINT.X
lda CLIP.Screen+S.RECT.Y2+1
sta MouseClamp+7
lsr
sta PTR.Pos+S.POINT.Y+1
lda CLIP.Screen+S.RECT.Y2
sta MouseClamp+6
ror
sta PTR.Pos+S.POINT.Y
>PUSHB hDevMouse
>PUSHBI IOCTL.CONTROL
>PUSHW L.MouseClamp
>SYSCALL2 IOCTL
bcs .9
>LDYA L.PTR.SaveBuf
>STYA CB.PTR+S.CB.DstPtr
* clc
.9 rts
*--------------------------------------
MOU.Quit lda hDevMouse
beq .8
>PUSHA
>PUSHBI IOCTL.CLOSE
>PUSHWZ
>SYSCALL2 IOCTL
.8 clc
rts
*--------------------------------------
MOU.CheckOverMenu
.1 ldx MENU.Stack.Cnt
beq .9
.2 dex
stx MENU.Stack.Idx
lda MENU.Stack,x
>SYSCALL2 GetMemPtr
>STYA ZPObjPtr
jsr MOU.InObj
bcs .3
lda #PTR.T.ARROW
jsr PTR.Set
jmp MENU.Enter
.3 ldx MENU.Stack.Idx
bne .2
lda MSG+S.MSG.S
bit #S.XY.S.CLK
beq .9
jsr MENU.DestroyAll
.9 sec
rts
*--------------------------------------
MOU.CheckOverSysBut
>LDYA L.RECT.SysBut
jsr MOU.InRectYA
bcs .9
jmp SYSBUT.Enter
.9 jsr SYSBUT.Leave
sec
MOU.CheckOverSysBut.RTS
rts
*--------------------------------------
MOU.CheckOverWND
ldx WND.Stack.Top
beq MOU.CheckOverSysBut.RTS
.1 stx WND.Stack.Idx
lda WND.Stack-1,x
jsr OBJ.GetHWNDA
jsr MOU.ChkWNDBorders
bcc MOU.CheckOverSysBut.RTS
lda ZPWNDPtr
clc
adc #S.OBJ.X1
tay
lda ZPWNDPtr+1
adc /S.OBJ.X1
jsr MOU.InRectYA
bcs .7 not over this WND
lda MSG+S.MSG.S
bit #S.XY.S.CLK
beq .2
jsr WND.Bring2Front
.2 lda ZPWNDPtr
clc
adc #S.WND.InnerX1
tay
lda ZPWNDPtr+1
adc /S.WND.InnerX1
jsr MOU.InRectYA
bcc .8 in Inner Space
ldy #S.OBJ.S
lda (ZPWNDPtr),y
and #S.WND.S.HASTBAR
beq .3
ldy #S.WND.TBarY2
jsr MOU.WNDCmpY
bcc .3 not in TBAR
jmp MOU.MoveWND
.3 ldy #S.OBJ.S
lda (ZPWNDPtr),y
and #S.WND.S.HASMBAR
beq .4
ldy #S.WND.MBarY2
jsr MOU.WNDCmpY
bcc .4 not in MBAR
jsr MBAR.Enter
bra .5
.4 ldy #S.OBJ.S
lda (ZPWNDPtr),y
and #S.WND.S.HASSBAR
beq .5
ldy #S.WND.SBarY1
jsr MOU.WNDCmpY
bcs .5 not in SBAR
.5 lda #PTR.T.ARROW
.6 jmp PTR.Set
.7 ldx WND.Stack.Idx
dex
bne .1
lda #PTR.T.ARROW
jsr PTR.Set
.9 sec
rts
*--------------------------------------
.8 ldy #S.WND.hPTR
lda (ZPWNDPtr),y
jsr PTR.Set
jsr MOU.ToLocal
jsr MOU.ChkWNDChilds
bcc .99
clc
.99 rts
*--------------------------------------
MOU.MoveWND lda MSG+S.MSG.S
bit #S.XY.S.DRAGSTART
beq .8
lda ZPWNDPtr
clc
adc #S.OBJ.X1
tay
lda ZPWNDPtr+1
adc /S.OBJ.X1
jmp PTR.SetRect
.8 lda #PTR.T.MOVE
jmp PTR.Set
*--------------------------------------
MOU.ChkWNDChilds
jsr WND.GetChilds
beq .9
.1 jsr MOU.InObj
bcs .7 not over this Child
jsr OBJ.Enter
bra .8
.7 jsr OBJ.Leave
.8 jsr OBJ.GetNext
bne .1
.9
MOU.ChkWNDChilds.9
sec
rts
*--------------------------------------
MOU.ChkWNDBorders
ldy #S.OBJ.F
lda (ZPWNDPtr),y
and #S.OBJ.F.BORDER
beq MOU.ChkWNDChilds.9
stz IY
ldy #S.OBJ.X1
lda (ZPWNDPtr),y
sec
sbc #1
eor MSG+S.MSG.X1
bne .1
iny
lda (ZPWNDPtr),y
sbc #0
eor MSG+S.MSG.X1+1
bne .1
lda #PTR.T.RESIZEX
sta IY
.1 ldy #S.OBJ.Y1
lda (ZPWNDPtr),y
sec
sbc #1
eor MSG+S.MSG.Y1
bne .3
iny
lda (ZPWNDPtr),y
sbc #0
eor MSG+S.MSG.Y1+1
bne .3
lda IY
beq .2
lda #PTR.T.RESIZEXY1
jmp PTR.Set
.2 lda #PTR.T.RESIZEY
sta IY
.3 ldy #S.OBJ.X2
lda (ZPWNDPtr),y
clc
adc #1
eor MSG+S.MSG.X1
bne .5
iny
lda (ZPWNDPtr),y
adc #0
eor MSG+S.MSG.X1+1
bne .5
lda IY
beq .4
lda #PTR.T.RESIZEXY2
jmp PTR.Set
.4 lda #PTR.T.RESIZEX
sta IY
.5 ldy #S.OBJ.Y2
lda (ZPWNDPtr),y
clc
adc #1
eor MSG+S.MSG.Y1
bne .7
iny
lda (ZPWNDPtr),y
adc #0
eor MSG+S.MSG.Y1+1
bne .7
lda #PTR.T.RESIZEXY1
.6 jmp PTR.Set
.7 lda IY
bne .6
.9 sec
rts
*--------------------------------------
MOU.InObj lda ZPObjPtr
clc
adc #S.OBJ.X1
tay
lda ZPObjPtr+1
adc /S.OBJ.X1
*--------------------------------------
MOU.InRectYA >STYA ZPRECTPtr
ldy #S.RECT.X1
lda MSG+S.MSG.X1
cmp (ZPRECTPtr),y
iny
lda MSG+S.MSG.X1+1
sbc (ZPRECTPtr),y
bcc .9
iny #S.RECT.Y1
lda MSG+S.MSG.Y1
cmp (ZPRECTPtr),y
iny
lda MSG+S.MSG.Y1+1
sbc (ZPRECTPtr),y
bcc .9
iny #S.RECT.X2
lda (ZPRECTPtr),y
cmp MSG+S.MSG.X1
iny
lda (ZPRECTPtr),y
sbc MSG+S.MSG.X1+1
bcc .9
iny #S.RECT.Y2
lda (ZPRECTPtr),y
cmp MSG+S.MSG.Y1
iny
lda (ZPRECTPtr),y
sbc MSG+S.MSG.Y1+1
bcc .9
clc
rts
.9 sec
.99 rts
*--------------------------------------
MOU.WNDCmpY lda (ZPWNDPtr),y
cmp MSG+S.MSG.Y1
iny
lda (ZPWNDPtr),y
sbc MSG+S.MSG.Y1+1
rts
*--------------------------------------
MOU.ToLocal ldy #S.WND.InnerX1
lda MSG+S.MSG.X1
sec
sbc (ZPWNDPtr),y
sta MSG+S.MSG.X1
iny
lda MSG+S.MSG.X1+1
sbc (ZPWNDPtr),y
sta MSG+S.MSG.X1+1
iny #S.WND.InnerY1
lda MSG+S.MSG.Y1
sec
sbc (ZPWNDPtr),y
sta MSG+S.MSG.Y1
iny
lda MSG+S.MSG.Y1+1
sbc (ZPWNDPtr),y
sta MSG+S.MSG.Y1+1
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.mou
LOAD usr/src/lib/libgui.s
ASM