A2osX/LIB/LIBGUI.S.CLIP.txt

325 lines
5.8 KiB
Plaintext
Raw Normal View History

NEW
2019-07-30 08:57:25 +00:00
AUTO 3,1
*--------------------------------------
* CLIPPING Functions:
* In:
2019-01-10 16:26:58 +00:00
* Graphic Context in OBJ.Cache
* YA = Control Block
* Out:
* CC : CB.Cache clipped & visible
* CS : CB.Cache invisible
*--------------------------------------
2020-09-04 15:21:15 +00:00
CLIP.YA jsr CB.Get Put CB in cache
2020-09-03 15:19:25 +00:00
CLIP.CB.Cache ldx CB.Cache+S.CB.CMD
2020-09-02 15:47:23 +00:00
bpl CLIP.X
2020-09-03 15:19:25 +00:00
2020-09-02 15:47:23 +00:00
txa
and #$7F
tax
2020-09-03 15:19:25 +00:00
2020-09-02 15:47:23 +00:00
CLIP.X jmp (J.CLIP-2,x)
*--------------------------------------
CLIP.Point
2020-09-03 15:19:25 +00:00
clc
rts
*--------------------------------------
2020-09-04 15:21:15 +00:00
CLIP.HLine
clc
rts
*--------------------------------------
2020-09-04 15:21:15 +00:00
CLIP.VLine
clc
rts
sec
2017-12-04 07:18:24 +00:00
rts
2020-09-04 15:21:15 +00:00
*--------------------------------------
* OBJ.Cache = Target Context
* CB.Cache = Src Control Block
*--------------------------------------
CLIP.Rect jsr CB.Cache.Overlap
bcs .9
2020-09-02 15:47:23 +00:00
2020-09-04 15:21:15 +00:00
>LDYA OBJ.Cache+S.OBJ.X1
>STYAIFGTR CB.Cache+S.CB.X1
2017-12-04 16:42:08 +00:00
2020-09-04 15:21:15 +00:00
>LDYA OBJ.Cache+S.OBJ.X2
>STYAIFLWR CB.Cache+S.CB.X2
2017-12-04 07:18:24 +00:00
2020-09-04 15:21:15 +00:00
>LDYA OBJ.Cache+S.OBJ.Y1
>STYAIFGTR CB.Cache+S.CB.Y1
2020-09-03 15:19:25 +00:00
2020-09-04 15:21:15 +00:00
>LDYA OBJ.Cache+S.OBJ.Y2
>STYAIFLWR CB.Cache+S.CB.Y2
2020-09-03 15:19:25 +00:00
clc
2020-09-04 15:21:15 +00:00
.9 rts
*--------------------------------------
CLIP.Text
2017-12-04 07:18:24 +00:00
clc
2020-09-04 15:21:15 +00:00
CLIP.Text.RTS rts
*--------------------------------------
* BitBlt :
*--------------------------------------
CLIP.BitBlt jsr CB.Cache.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
2017-12-04 07:18:24 +00:00
2020-09-04 15:21:15 +00:00
jsr CB.Cache.Overlap
bcs CLIP.Text.RTS
2017-12-04 16:42:08 +00:00
2020-09-04 15:21:15 +00:00
lda OBJ.Cache+S.OBJ.X1
2017-12-04 07:18:24 +00:00
sec
2020-09-04 15:21:15 +00:00
sbc CB.Cache+S.CB.X1
sta DX
lda OBJ.Cache+S.OBJ.X1+1
sbc CB.Cache+S.CB.X1+1
sta DX+1
bvc .1
eor #$80
.1 bmi .2
>DEBUG
lda S.CB.X1
clc
adc DX
sta S.CB.X1
2020-09-03 15:19:25 +00:00
2020-09-04 15:21:15 +00:00
lda CB.Cache+S.CB.X1+1
adc DX+1
sta CB.Cache+S.CB.X1+1
2020-09-03 15:19:25 +00:00
2020-09-04 15:21:15 +00:00
lda CB.Cache+S.CB.SrcX
clc
adc DX
sta CB.Cache+S.CB.SrcX
lda CB.Cache+S.CB.SrcX+1
adc DX+1
sta CB.Cache+S.CB.SrcX+1
lda CB.Cache+S.CB.SrcW
2017-12-05 07:09:16 +00:00
sec
2020-09-04 15:21:15 +00:00
sbc DX
sta CB.Cache+S.CB.SrcW
2020-09-03 15:19:25 +00:00
2020-09-04 15:21:15 +00:00
lda CB.Cache+S.CB.SrcW+1
sbc DX+1
sta CB.Cache+S.CB.SrcW+1
bcc .9
2020-09-03 15:19:25 +00:00
2020-09-04 15:21:15 +00:00
.2 lda CB.Cache+S.CB.X2
2017-12-05 07:09:16 +00:00
sec
2020-09-04 15:21:15 +00:00
sbc OBJ.Cache+S.OBJ.X2
sta DX
lda CB.Cache+S.CB.X2+1
sbc OBJ.Cache+S.OBJ.X2+1
sta DX+1
bvc .3
eor #$80
.3 bmi .4
>DEBUG
lda CB.Cache+S.CB.SrcW
2017-12-05 07:09:16 +00:00
sec
2020-09-04 15:21:15 +00:00
sbc DX
sta CB.Cache+S.CB.SrcW
2020-09-04 15:21:15 +00:00
lda CB.Cache+S.CB.SrcW+1
sbc DX+1
sta CB.Cache+S.CB.SrcW+1
bcc .9
2020-09-03 15:19:25 +00:00
2020-09-04 15:21:15 +00:00
.4 clc
.99 rts
.9 sec
rts
*--------------------------------------
CLIP.Line.LEFT .EQ 1
CLIP.Line.RIGHT .EQ 2
CLIP.Line.BOTTOM .EQ 4
CLIP.Line.TOP .EQ 8
*--------------------------------------
CLIP.Line jsr CLIP.Line.EncodeP1
jsr CLIP.Line.EncodeP2
.1 lda CLIP.Line.P1
ora CLIP.Line.P2
beq .88
lda CLIP.Line.P1
and CLIP.Line.P2
bne .99
lda CLIP.Line.P1
beq .5
bit #CLIP.Line.TOP
beq .2
* Y1 is above S.CB.Y1....
2019-10-03 06:25:27 +00:00
* DY=Y2-Y1;
jsr CLIP.Line.EncodeP1
bra .1
.2 bit #CLIP.Line.BOTTOM
beq .3
2019-10-03 06:25:27 +00:00
* Y1 is below S.CB.Y2....
jsr CLIP.Line.EncodeP1
bra .1
.3 bit #CLIP.Line.RIGHT
beq .4
* X1 is after S.CB.X2....
jsr CLIP.Line.EncodeP1
bra .1
2019-10-03 06:25:27 +00:00
* X1 is before S.CB.X1....
.4
jsr CLIP.Line.EncodeP1
bra .1
* P2
.5 lda CLIP.Line.P2
bit #CLIP.Line.TOP
beq .6
2019-10-03 06:25:27 +00:00
* Y2 is above S.CB.Y1....
jsr CLIP.Line.EncodeP2
bra .1
.6 bit #CLIP.Line.BOTTOM
beq .7
* Y2 is below S.CB.Y2....
jsr CLIP.Line.EncodeP2
bra .1
.7 bit #CLIP.Line.RIGHT
beq .8
* X2 is after S.CB.X2....
jsr CLIP.Line.EncodeP2
bra .1
2019-10-03 06:25:27 +00:00
* X2 is before S.CB.X1....
.8
jsr CLIP.Line.EncodeP2
bra .1
.88 clc
rts
.99 sec
rts
*--------------------------------------
CLIP.Line.EncodeP1
ldy #0
lda CB.Cache+S.CB.X1
ldx CB.Cache+S.CB.X1+1
jsr CLIP.Line.EncodeX.AX
tay
lda CB.Cache+S.CB.Y1
ldx CB.Cache+S.CB.Y1+1
jsr CLIP.Line.EncodeY.AX
sta CLIP.Line.P1
rts
*--------------------------------------
CLIP.Line.EncodeP2
ldy #0
lda CB.Cache+S.CB.X2
ldx CB.Cache+S.CB.X2+1
jsr CLIP.Line.EncodeX.AX
tay
lda CB.Cache+S.CB.Y2
ldx CB.Cache+S.CB.Y2+1
jsr CLIP.Line.EncodeY.AX
sta CLIP.Line.P2
rts
*--------------------------------------
CLIP.Line.EncodeX.AX
pha
2019-01-10 16:26:58 +00:00
>SCMPAX OBJ.Cache+S.OBJ.X1
bmi .1
tya
ora #CLIP.Line.LEFT
plx
rts
.1 pla
2019-01-10 16:26:58 +00:00
>SCMPAX OBJ.Cache+S.OBJ.X1
bpl .8
tya
ora #CLIP.Line.RIGHT
.8 rts
*--------------------------------------
CLIP.Line.EncodeY.AX
pha
2019-01-10 16:26:58 +00:00
>SCMPAX OBJ.Cache+S.OBJ.Y1
bmi .1
tya
ora #CLIP.Line.TOP
plx
rts
.1 pla
2019-01-10 16:26:58 +00:00
>SCMPAX OBJ.Cache+S.OBJ.Y1
bpl .8
tya
ora #CLIP.Line.BOTTOM
2019-10-03 06:25:27 +00:00
.8 rts
*--------------------------------------
2020-09-04 15:21:15 +00:00
CB.Cache.SetX2Y2
lda CB.Cache+S.CB.SrcW
clc
adc CB.Cache+S.CB.X1
pha
lda CB.Cache+S.CB.SrcW+1
adc CB.Cache+S.CB.X1+1
tax
pla
bne .2
dex
.2 dec
sta CB.Cache+S.CB.X2
stx CB.Cache+S.CB.X2+1
lda CB.Cache+S.CB.SrcH
clc
adc CB.Cache+S.CB.Y1
pha
lda CB.Cache+S.CB.SrcH+1
adc CB.Cache+S.CB.Y1+1
tax
pla
bne .3
dex
.3 dec
sta CB.Cache+S.CB.Y2
stx CB.Cache+S.CB.Y2+1
rts
*--------------------------------------
CB.Cache.Overlap
>LDYA CB.Cache+S.CB.X1
>SCMPYA OBJ.Cache+S.OBJ.X2
bpl .9
>LDYA CB.Cache+S.CB.X2
>SCMPYA OBJ.Cache+S.OBJ.X1
bmi .9
>LDYA CB.Cache+S.CB.Y1
>SCMPYA OBJ.Cache+S.OBJ.Y2
bpl .9
>LDYA CB.Cache+S.CB.Y2
>SCMPYA OBJ.Cache+S.OBJ.Y1
bmi .9
clc
rts
.9 sec
rts
*--------------------------------------
MAN
2020-06-30 15:32:23 +00:00
SAVE usr/src/lib/libgui.s.clip
LOAD usr/src/lib/libgui.s
ASM