LIBGUI:Clipping stuff

This commit is contained in:
burniouf 2022-11-02 17:00:52 +01:00
parent 3d241a05d8
commit a9d7f31467
7 changed files with 145 additions and 158 deletions

Binary file not shown.

View File

@ -88,29 +88,20 @@ CB.Cache2CBBuf
rts
*--------------------------------------
CB.FlushBufToYA ldx hCBBuf
CB.FlushBufToYA jsr CLIP.GetInCache
lda hCBBuf
beq .8
pha
phy
bit PTR.bVisible
bpl .1
jsr PTR.Disable
.1 lda #0
lda #0
sta (ZPCBBufPtr)
lda hCBBuf
>SYSCALL2 GetMemPtr
>STYA ZPCBBufPtr
ply
pla
jsr OBJ.GetInCache
jsr PTR.Disable
*--------------------------------------
.2 lda (ZPCBBufPtr)
beq .7
@ -166,8 +157,85 @@ CB.GFXWrite >PUSHB WND.Screen+S.OBJ.hPARENT
>SYSCALL2 IOCTL
rts
*--------------------------------------
CB.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.ToGlobal >STYA ZPPtr1
.1 ldy #S.OBJ.X1
ldx #S.CB.X1
jsr CB.AddPtr1YtoCBX
ldy #S.WND.InnerY1
ldx #S.CB.Y1
jsr CB.AddPtr1YtoCBX
ldy #S.OBJ.X1
ldx #S.CB.X2
jsr CB.AddPtr1YtoCBX
ldy #S.WND.InnerY1
ldx #S.CB.Y2
jsr CB.AddPtr1YtoCBX
ldy #S.OBJ.hPARENT+1
lda (ZPPtr1),y
beq .8 00xx = hDev
tax
dey
lda (ZPPtr1),y
sta ZPPtr1
stx ZPPtr1+1
bra .1
.8 clc
rts
*--------------------------------------
CB.AddPtr1YtoCBX
lda (ZPPtr1),y
clc
adc CB.Cache,x
sta CB.Cache,x
iny
lda (ZPPtr1),y
adc CB.Cache+1,x
sta CB.Cache+1,x
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.cb

View File

@ -3,7 +3,7 @@ NEW
*--------------------------------------
* CLIPPING Functions:
* In:
* Graphic Context in OBJ.Cache
* Graphic Context in CLIP.Cache
* YA = Control Block
* Out:
* CC : CB.Cache clipped & visible
@ -21,17 +21,17 @@ CLIP.Point
rts
*--------------------------------------
CLIP.HLine >LDYA CB.Cache+S.CB.Y1
>SCMPYA OBJ.Cache+S.OBJ.Y2
>SCMPYA CLIP.Cache+S.OBJ.Y2
bpl .9
>LDYA CB.Cache+S.CB.Y2
>SCMPYA OBJ.Cache+S.OBJ.Y1
>LDYA CB.Cache+S.CB.Y1
>SCMPYA CLIP.Cache+S.OBJ.Y1
bmi .9
>LDYA OBJ.Cache+S.OBJ.X1
>LDYA CLIP.Cache+S.OBJ.X1
>STYAIFGTR CB.Cache+S.CB.X1
>LDYA OBJ.Cache+S.OBJ.X2
>LDYA CLIP.Cache+S.OBJ.X2
>STYAIFLWR CB.Cache+S.CB.X2
clc
@ -41,17 +41,17 @@ CLIP.HLine >LDYA CB.Cache+S.CB.Y1
rts
*--------------------------------------
CLIP.VLine >LDYA CB.Cache+S.CB.X1
>SCMPYA OBJ.Cache+S.OBJ.X2
>SCMPYA CLIP.Cache+S.OBJ.X2
bpl .9
>LDYA CB.Cache+S.CB.X2
>SCMPYA OBJ.Cache+S.OBJ.X1
>LDYA CB.Cache+S.CB.X1
>SCMPYA CLIP.Cache+S.OBJ.X1
bmi .9
>LDYA OBJ.Cache+S.OBJ.Y1
>LDYA CLIP.Cache+S.OBJ.Y1
>STYAIFGTR CB.Cache+S.CB.Y1
>LDYA OBJ.Cache+S.OBJ.Y2
>LDYA CLIP.Cache+S.OBJ.Y2
>STYAIFLWR CB.Cache+S.CB.Y2
clc
@ -60,19 +60,19 @@ CLIP.VLine >LDYA CB.Cache+S.CB.X1
.9 sec
rts
*--------------------------------------
CLIP.Rect jsr CB.Cache.Overlap
CLIP.Rect jsr CLIP.Cache.Overlap
bcs .9
>LDYA OBJ.Cache+S.OBJ.X1
>LDYA CLIP.Cache+S.OBJ.X1
>STYAIFGTR CB.Cache+S.CB.X1
>LDYA OBJ.Cache+S.OBJ.X2
>LDYA CLIP.Cache+S.OBJ.X2
>STYAIFLWR CB.Cache+S.CB.X2
>LDYA OBJ.Cache+S.OBJ.Y1
>LDYA CLIP.Cache+S.OBJ.Y1
>STYAIFGTR CB.Cache+S.CB.Y1
>LDYA OBJ.Cache+S.OBJ.Y2
>LDYA CLIP.Cache+S.OBJ.Y2
>STYAIFLWR CB.Cache+S.CB.Y2
clc
@ -87,17 +87,17 @@ CLIP.Text.RTS rts
*--------------------------------------
* BitBlt :
*--------------------------------------
CLIP.BitBlt jsr CB.Cache.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
CLIP.BitBlt jsr CB.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
jsr CB.Cache.Overlap
jsr CLIP.Cache.Overlap
bcs CLIP.Text.RTS
lda OBJ.Cache+S.OBJ.X1
lda CLIP.Cache+S.OBJ.X1
sec
sbc CB.Cache+S.CB.X1
sta DX
lda OBJ.Cache+S.OBJ.X1+1
lda CLIP.Cache+S.OBJ.X1+1
sbc CB.Cache+S.CB.X1+1
sta DX+1
bvc .1
@ -134,11 +134,11 @@ CLIP.BitBlt jsr CB.Cache.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
.2 lda CB.Cache+S.CB.X2
sec
sbc OBJ.Cache+S.OBJ.X2
sbc CLIP.Cache+S.OBJ.X2
sta DX
lda CB.Cache+S.CB.X2+1
sbc OBJ.Cache+S.OBJ.X2+1
sbc CLIP.Cache+S.OBJ.X2+1
sta DX+1
bvc .3
eor #$80
@ -154,12 +154,12 @@ CLIP.BitBlt jsr CB.Cache.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
sta CB.Cache+S.CB.SrcW+1
bcc .9
.4 lda OBJ.Cache+S.OBJ.Y1
.4 lda CLIP.Cache+S.OBJ.Y1
sec
sbc CB.Cache+S.CB.Y1
sta DX
lda OBJ.Cache+S.OBJ.Y1+1
lda CLIP.Cache+S.OBJ.Y1+1
sbc CB.Cache+S.CB.Y1+1
sta DX+1
bvc .5
@ -196,11 +196,11 @@ CLIP.BitBlt jsr CB.Cache.SetX2Y2 set X2=X1+W-1 Y2=X1+H-1
.6 lda CB.Cache+S.CB.Y2
sec
sbc OBJ.Cache+S.OBJ.Y2
sbc CLIP.Cache+S.OBJ.Y2
sta DX
lda CB.Cache+S.CB.Y2+1
sbc OBJ.Cache+S.OBJ.Y2+1
sbc CLIP.Cache+S.OBJ.Y2+1
sta DX+1
bvc .7
eor #$80
@ -339,7 +339,7 @@ CLIP.Line.EncodeP2
*--------------------------------------
CLIP.Line.EncodeX.AX
pha
>SCMPAX OBJ.Cache+S.OBJ.X1
>SCMPAX CLIP.Cache+S.OBJ.X1
bpl .1
pla
@ -351,7 +351,7 @@ CLIP.Line.EncodeX.AX
rts
.1 pla
>SCMPAX OBJ.Cache+S.OBJ.X2
>SCMPAX CLIP.Cache+S.OBJ.X2
bmi .8
tya
@ -362,7 +362,7 @@ CLIP.Line.EncodeX.AX
*--------------------------------------
CLIP.Line.EncodeY.AX
pha
>SCMPAX OBJ.Cache+S.OBJ.Y1
>SCMPAX CLIP.Cache+S.OBJ.Y1
bpl .1
pla
@ -373,7 +373,7 @@ CLIP.Line.EncodeY.AX
rts
.1 pla
>SCMPAX OBJ.Cache+S.OBJ.Y2
>SCMPAX CLIP.Cache+S.OBJ.Y2
bmi .8
tya
@ -382,58 +382,21 @@ CLIP.Line.EncodeY.AX
.8 rts
*--------------------------------------
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
CLIP.Cache.Overlap
>LDYA CB.Cache+S.CB.X1
>SCMPYA OBJ.Cache+S.OBJ.X2
>SCMPYA CLIP.Cache+S.OBJ.X2
bpl .9
>LDYA CB.Cache+S.CB.X2
>SCMPYA OBJ.Cache+S.OBJ.X1
>SCMPYA CLIP.Cache+S.OBJ.X1
bmi .9
>LDYA CB.Cache+S.CB.Y1
>SCMPYA OBJ.Cache+S.OBJ.Y2
>SCMPYA CLIP.Cache+S.OBJ.Y2
bpl .9
>LDYA CB.Cache+S.CB.Y2
>SCMPYA OBJ.Cache+S.OBJ.Y1
>SCMPYA CLIP.Cache+S.OBJ.Y1
bmi .9
clc
@ -442,6 +405,17 @@ CB.Cache.Overlap
.9 sec
rts
*--------------------------------------
CLIP.GetInCache >STYA .1+1
ldx #S.OBJ-1
.1 lda $ffff,x SELF MODIFIED
sta CLIP.Cache,x
dex
bpl .1
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.clip
LOAD usr/src/lib/libgui.s

View File

@ -50,7 +50,7 @@ DRAW.Line jsr DRAW.PullY2X2Y1X1
lda #S.CB.CMD.HLINE DY=0 : HLINE X1,X2 At Y1
.20 sta CB.Cache+S.CB.CMD
>DEBUG
jsr CLIP.CB.Cache
bcs .8
@ -399,90 +399,46 @@ DRAW.PullX >PULLA
DRAW.PullInnerWND
jsr OBJ.PullHWND get dest window at ZPWNDPtr
jsr DRAW.GetInnerWND get inners in OBJ.Cache
jsr DRAW.GetInnerWND get inners in CLIP.Cache
jmp DRAW.ToGlobal set CB.Cache to global coord.
>LDYA ZPWNDPtr
jmp CB.ToGlobal set CB.Cache to global coord.
*--------------------------------------
DRAW.GetInnerWND
ldy #S.OBJ.X1
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.X1
sta CLIP.Cache+S.OBJ.X1
iny
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.X1+1
sta CLIP.Cache+S.OBJ.X1+1
ldy #S.WND.InnerY1
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.Y1
sta CLIP.Cache+S.OBJ.Y1
iny
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.Y1+1
sta CLIP.Cache+S.OBJ.Y1+1
ldy #S.WND.InnerW
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.W
sta CLIP.Cache+S.OBJ.W
iny
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.W+1
sta CLIP.Cache+S.OBJ.W+1
ldy #S.WND.InnerH
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.H
sta CLIP.Cache+S.OBJ.H
iny
lda (ZPWNDPtr),y
sta OBJ.Cache+S.OBJ.H+1
sta CLIP.Cache+S.OBJ.H+1
>LDYA L.OBJ.Cache
>LDYA L.CLIP.Cache
jmp OBJ.SetX2Y2 set X2 = X1 + W - 1...
*--------------------------------------
DRAW.ToGlobal >LDYA ZPWNDPtr
>STYA ZPPtr1
.1 ldy #S.OBJ.X1
ldx #S.CB.X1
jsr DRAW.AddPtr1YtoCBX
ldy #S.WND.InnerY1
ldx #S.CB.Y1
jsr DRAW.AddPtr1YtoCBX
ldy #S.OBJ.X1
ldx #S.CB.X2
jsr DRAW.AddPtr1YtoCBX
ldy #S.WND.InnerY1
ldx #S.CB.Y2
jsr DRAW.AddPtr1YtoCBX
ldy #S.OBJ.hPARENT+1
lda (ZPPtr1),y
beq .8 00xx = hDev
tax
dey
lda (ZPPtr1),y
sta ZPPtr1
stx ZPPtr1+1
bra .1
.8 clc
rts
*--------------------------------------
DRAW.AddPtr1YtoCBX
lda (ZPPtr1),y
clc
adc CB.Cache,x
sta CB.Cache,x
iny
lda (ZPPtr1),y
adc CB.Cache+1,x
sta CB.Cache+1,x
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.draw
LOAD usr/src/lib/libgui.s

View File

@ -159,17 +159,6 @@ OBJ.GetHWNDA >SYSCALL2 GetMemPtr
>STYA ZPWNDPtr
rts
*--------------------------------------
OBJ.GetInCache >STYA .1+1
ldx #S.OBJ-1
.1 lda $ffff,x SELF MODIFIED
sta OBJ.Cache,x
dex
bpl .1
rts
*--------------------------------------
OBJ.DrawBorders >STYA ZPObjPtr
stx IY

View File

@ -158,7 +158,7 @@ PTR.Show.I ldx PTR.T
PTR.Draw.I sta CB.PTR+S.CB.OP
>LDYA L.WND.Screen
jsr OBJ.GetInCache
jsr CLIP.GetInCache
>LDYA L.CB.PTR
jsr CLIP.YA

View File

@ -153,7 +153,7 @@ L.MSG .DA MSG
L.MSG.XY .DA MSG+S.MSG.X1
L.CB.PTR .DA CB.PTR
L.CB.Cache .DA CB.Cache
L.OBJ.Cache .DA OBJ.Cache
L.CLIP.Cache .DA CLIP.Cache
L.WND.Screen .DA WND.Screen
L.WND.Desktop .DA WND.Desktop
L.WND.SysBar .DA WND.SysBar
@ -346,7 +346,7 @@ CB.PTR .DA #S.CB.CMD.BITBLT
.BS S.CB-4
*--------------------------------------
CB.Cache .BS S.CB
OBJ.Cache .BS S.OBJ
CLIP.Cache .BS S.OBJ
*--------------------------------------
MENU.Stack.Owner .BS 1
MENU.Stack.Idx .BS 1