mirror of
https://github.com/A2osX/A2osX.git
synced 2024-08-13 21:29:33 +00:00
206 lines
3.6 KiB
Plaintext
206 lines
3.6 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.BUILD
|
||
NEW
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
* CLIPPING Functions:
|
||
* In:
|
||
* Graphic Context in GC.Cache
|
||
* YA = Control Block
|
||
* Out:
|
||
* CC : CB.Cache clipped & visible
|
||
* CS : CB.Cache invisible
|
||
*--------------------------------------
|
||
CLIP.YA >STYA ZPCmdPtr
|
||
lda (ZPCmdPtr)
|
||
tax
|
||
jmp (J.CLIP,x)
|
||
*--------------------------------------
|
||
CLIP.Point
|
||
CLIP.HLine
|
||
CLIP.VLine
|
||
|
||
CLIP.Rect
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CLIP.BitBlt ldy #S.CB.DestX+1
|
||
lda (ZPCmdPtr),y
|
||
tax
|
||
dey
|
||
lda (ZPCmdPtr),y
|
||
pha
|
||
|
||
>SCMPAX GC.Cache+S.GC.X2 DestX after X2....exit
|
||
bmi .9
|
||
|
||
pla
|
||
>SCMPAX GC.Cache+S.GC.X1 DestX Inside X1-X2, go check if X1+fit in
|
||
bpl .1
|
||
|
||
|
||
.1
|
||
|
||
ldy #S.CB.DestY+1
|
||
lda (ZPCmdPtr),y
|
||
tax
|
||
dey
|
||
lda (ZPCmdPtr),y
|
||
|
||
>SCMPAX GC.Cache+S.GC.Y2
|
||
bpl .9
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 pla
|
||
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....
|
||
* DY=Y2-Y1;
|
||
|
||
jsr CLIP.Line.EncodeP1
|
||
bra .1
|
||
|
||
.2 bit #CLIP.Line.BOTTOM
|
||
beq .3
|
||
* 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
|
||
* 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
|
||
* 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
|
||
* 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
|
||
>SCMPAX GC.Cache+S.GC.X1
|
||
bmi .1
|
||
tya
|
||
ora #CLIP.Line.LEFT
|
||
plx
|
||
rts
|
||
|
||
.1 pla
|
||
>SCMPAX GC.Cache+S.GC.X1
|
||
bpl .8
|
||
tya
|
||
ora #CLIP.Line.RIGHT
|
||
.8 rts
|
||
*--------------------------------------
|
||
CLIP.Line.EncodeY.AX
|
||
pha
|
||
>SCMPAX GC.Cache+S.GC.Y1
|
||
bmi .1
|
||
tya
|
||
ora #CLIP.Line.TOP
|
||
plx
|
||
rts
|
||
|
||
.1 pla
|
||
>SCMPAX GC.Cache+S.GC.Y1
|
||
bpl .8
|
||
tya
|
||
ora #CLIP.Line.BOTTOM
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.SRC/LIB/LIBGUI.S.CLIP
|
||
LOAD /A2OSX.SRC/LIB/LIBGUI.S
|
||
ASM
|