mirror of
https://github.com/A2osX/A2osX.git
synced 2025-03-30 17:29:44 +00:00
LIBGUI:Clipping stuff
This commit is contained in:
parent
3d241a05d8
commit
a9d7f31467
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user