A2osX/LIB/LIBGUI.S.DRAW.txt
2020-10-02 16:57:05 +02:00

326 lines
5.2 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
*--------------------------------------
DrawCBBufToYA ldx L.CB.Buf
stx ZPCBPtr
ldx L.CB.Buf+1
stx ZPCBPtr+1
DrawCBPtrToYA jsr OBJ.GetInCache
bit CUR.bVisible
bpl .1
jsr HideCursor.I
.1 lda (ZPCBPtr)
beq .8
>LDYA ZPCBPtr
jsr CB.GetInCache A = CB.CMD
cmp #S.CB.CMD.DRAWTEXT2
bne .6
lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD
sta CB.Cache+S.CB.CMD
jsr GFXWrite.CB
bcs .9
jsr CLIP.CB.Cache
bcs .2
jsr GFXWrite.CB
.2 lda CB.Cache+S.CB.SrcPtr
>SYSCALL2 FreeStkObj
bra .7
.6 jsr CLIP.CB.Cache
bcs .7
jsr GFXWrite.CB
.7 lda (ZPCBPtr) Get Cmd
lsr
tax
lda CB.CmdLen-1,x
sec +1
adc ZPCBPtr
sta ZPCBPtr
bcc .1
inc ZPCBPtr+1
bra .1
.8 clc
.9 bit CUR.bVisible
bpl .99
php
pha
jsr ShowCursor.I
pla
plp
.99 rts
*--------------------------------------
* In: Control Block in CB.Cache
* CMD
* OP
* MODE
* COLOR
* X1
* Y1
* X2
* Y2
*--------------------------------------
DrawLine >PULLW CB.Cache+S.CB.Y2
>PULLW CB.Cache+S.CB.X2
>PULLW CB.Cache+S.CB.Y1
>PULLW CB.Cache+S.CB.X1
>PULLB CB.Cache+S.CB.COLOR
>PULLB CB.Cache+S.CB.OP
>PULLA hWND
>SYSCALL2 GetMemPtr
>STYA ZPWNDPtr
lda CB.Cache+S.CB.X2
sec
sbc CB.Cache+S.CB.X1
sta DX
lda CB.Cache+S.CB.X2+1
sbc CB.Cache+S.CB.X1+1
sta DX+1 DX = X2 - X1
bmi .1 DX < 0....
ora DX
bne .2 DX > 0...
lda #S.CB.CMD.VLINE
sta CB.Cache+S.CB.CMD
jmp GFXWrite.CB DX=0 : VLIN Y1,Y2 At X1
.1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2
* >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2
lda CB.Cache+S.CB.Y1
ldx CB.Cache+S.CB.Y2
stx CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
>NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive)
.2 lda #1
sta IY
lda CB.Cache+S.CB.Y2
sec
sbc CB.Cache+S.CB.Y1
sta DY
* lda CB.Cache+S.CB.Y2+1
lda #0
* sbc CB.Cache+S.CB.Y1+1
sbc #0
sta DY+1 DY = Y2 - Y1
bmi .3 DY < 0 ...
ora DY
bne .4
lda #S.CB.CMD.HLINE
sta CB.Cache+S.CB.CMD
jmp GFXWrite.CB DY=0 : HLIN X1,X2 At Y1
.3 >NOT16 DY set DY=-DY
lda #$ff
sta IY set IY=-1
.4 lda #S.CB.CMD.SETPIXEL
sta CB.Cache+S.CB.CMD
jsr GFXWrite.CB
lda DX
sec
sbc DY
tax
lda DX+1
* sbc DY+1
sbc #0
bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis
txa
beq DrawLine.IncXY DX=DY, go inc X & Y
jmp DrawLine.IncX DY is lower than DX, we will increase on X axis
DrawLine.IncXY lda DX DX=DY
eor #$ff
sta Counter
lda DX+1
eor #$ff
sta Counter+1
.1 inc Counter
bne .2
inc Counter+1
beq .8
.2 inc CB.Cache+S.CB.X1
bne .3
inc CB.Cache+S.CB.X1+1
.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
clc
adc IY
sta CB.Cache+S.CB.Y1
jsr GFXWrite.CB
bra .1
.8 rts
DrawLine.IncY lda DY
eor #$ff
sta Counter
lda DY+1
eor #$ff
sta Counter+1
lda DX IE=2*DX
asl
sta IE
pha
lda DX+1
rol
sta IE+1
tax
pla D=IE-DY
sec
sbc DY
sta D
txa
sbc DY+1
sta D+1
lda DX INE=2*(DX-DY)
sec
sbc DY
pha
lda DX+1
sbc DY+1
tax
pla
asl
sta INE
txa
rol
sta INE+1
.1 inc Counter
bne .2
inc Counter+1
beq .8
.2 lda D+1 IF D < 0 ...
bmi .4
lda D D > 0 : D=D+INE
clc
adc INE
sta D
lda D+1
adc INE+1
sta D+1
inc CB.Cache+S.CB.X1 X1=X1+1
bne .5
inc CB.Cache+S.CB.X1+1
bra .5
.4 lda D D > 0 : D=D+IE
clc
adc IE
sta D
lda D+1
adc IE+1
sta D+1
.5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY
clc
adc IY
sta CB.Cache+S.CB.Y1
jsr GFXWrite.CB
bra .1
.8 rts
DrawLine.IncX lda DX
eor #$ff
sta Counter
lda DX+1
eor #$ff
sta Counter+1
lda DY IE=2*DY
asl
sta IE
pha
* lda DY+1
lda #0
rol
sta IE+1
tax
pla D=IE-DX
sec
sbc DX
sta D
txa
sbc DX+1
sta D+1
lda DY INE=2*(DY-DX)
sec
sbc DX
pha
* lda DY+1
lda #0
sbc DX+1
tax
pla
asl
sta INE
txa
rol
sta INE+1
.1 inc Counter
bne .2
inc Counter+1
beq .8
.2 lda D+1 ID D < 0 ....
bmi .4
lda D D > 0 : D=D+INE
clc
adc INE
sta D
lda D+1
adc INE+1
sta D+1
lda CB.Cache+S.CB.Y1 Y1=Y1+IY
clc
adc IY
sta CB.Cache+S.CB.Y1
bra .5
.4 lda D D < 0 : D=D+IE
clc
adc IE
sta D
lda D+1
adc IE+1
sta D+1
.5 inc CB.Cache+S.CB.X1 X1=X1+1
bne .6
inc CB.Cache+S.CB.X1+1
.6 jsr GFXWrite.CB
bra .1
.8 rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.draw
LOAD usr/src/lib/libgui.s
ASM