Kernel 0.9.1 : GUI, Clipping...

This commit is contained in:
Rémy GIBERT 2017-12-04 08:18:24 +01:00
parent 9a9869f334
commit aaf40d628b
9 changed files with 432 additions and 67 deletions

Binary file not shown.

Binary file not shown.

View File

@ -13,7 +13,8 @@ LIBGUI.SetCursor.A .EQ 10
LIBGUI.SetCursorPos .EQ 12
LIBGUI.HideCursor .EQ 14
LIBGUI.ShowCursor .EQ 16
LIBGUI.ReadMouse .EQ 18
LIBGUI.UpdateCursor .EQ 18
LIBGUI.ReadMouse .EQ 20
*--------------------------------------
S.GC.hDev .EQ 0
S.GC.hMem .EQ 1
@ -55,10 +56,10 @@ S.CB.MODE.C16 .EQ %00001000 16 colors (4 bits/pixel)
S.CB.COLOR .EQ 3
S.CB.X1 .EQ 4 xPIXEL,xLINE,FILLRECT,BITBLT,GETRECTBUFSIZE,DRAWLINE
S.CB.Y1 .EQ 6 xPIXEL,xLINE,FILLRECT,BITBLT,GETRECTBUFSIZE,DRAWLINE
S.CB.X2 .EQ 8 HLINE,FILLRECT,GETRECTBUFSIZE,DRAWLINE
S.CB.Y2 .EQ 10
S.CB.SrcW .EQ 8
S.CB.SrcH .EQ 10
S.CB.X2 .EQ 8 VLINE,FILLRECT,DRAWLINE
S.CB.Y2 .EQ 10 HLINE,FILLRECT,DRAWLINE
S.CB.SrcW .EQ 8 BITBLT,GETRECTBUFSIZE
S.CB.SrcH .EQ 10 BITBLT,GETRECTBUFSIZE
S.CB.DestX .EQ 12 BITBLT,DRAWTEXT
S.CB.DestY .EQ 14 BITBLT,DRAWTEXT
S.CB.SrcPtr .EQ 16 BITBLT,DRAWTEXT

View File

@ -10,6 +10,17 @@ CUR.bVisible .BS 1
CUR.Pos .BS S.POINT
*--------------------------------------
CUR.HotPoints .DA #0,#0 CUR.T.ARROW
.DA #0,#0 CUR.ResizeX
.DA #0,#0 CUR.ResizeY
.DA #0,#0 CUR.ResizeXY
.DA #0,#0 CUR.Cross
.DA #0,#0 CUR.Text
.DA #5,#6 CUR.Wait1
.DA #5,#6 CUR.Wait2
.DA #5,#6 CUR.Wait3
.DA #5,#6 CUR.Wait4
.DA #8,#8 CUR.Wait5
.DA #8,#8 CUR.Wait6
*--------------------------------------
CUR.CB .DA #S.CB.CMD.BITBLT
.BS 1
@ -17,7 +28,7 @@ CUR.CB .DA #S.CB.CMD.BITBLT
.DA #0
.BS 16
*--------------------------------------
CUR.SaveBuf .BS 39 13*3
CUR.SaveBuf .BS 48 16*3
*--------------------------------------
CUR.Arrow .DA #S.BM.F.BBP1
.DA #2 RowBytes
@ -53,6 +64,190 @@ CUR.Arrow.MASK .DA %111.11111100
.DA %110.00000000
.DA %110.00001111
*--------------------------------------
CUR.ResizeX
*--------------------------------------
CUR.ResizeY
*--------------------------------------
CUR.ResizeXY
*--------------------------------------
CUR.Cross
*--------------------------------------
CUR.Text
*--------------------------------------
CUR.Wait1 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
.DA 13 H
.DA CUR.Wait4.MASK-CUR.Wait1
.DA %000.00000000
.DA %001.11111100
.DA %001.00000100
.DA %000.10001000
.DA %000.01010000
.DA %000.00100000
.DA %000.00100000
.DA %000.00100000
.DA %000.01110000
.DA %000.11111000
.DA %001.11111100
.DA %001.11111100
.DA %000.00000000
*--------------------------------------
CUR.Wait2 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
.DA 13 H
.DA CUR.Wait4.MASK-CUR.Wait2
.DA %000.00000000
.DA %001.11111100
.DA %001.11111100
.DA %000.10001000
.DA %000.01010000
.DA %000.00100000
.DA %000.00100000
.DA %000.00100000
.DA %000.01110000
.DA %000.11111000
.DA %001.00000100
.DA %001.11111100
.DA %000.00000000
*--------------------------------------
CUR.Wait3 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
.DA 13 H
.DA CUR.Wait4.MASK-CUR.Wait3
.DA %000.00000000
.DA %001.11111100
.DA %001.11111100
.DA %000.11111000
.DA %000.01010000
.DA %000.00100000
.DA %000.00100000
.DA %000.00100000
.DA %000.01110000
.DA %000.10001000
.DA %001.00000100
.DA %001.11111100
.DA %000.00000000
*--------------------------------------
CUR.Wait4 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 11 W
.DA 13 H
.DA CUR.Wait4.MASK-CUR.Wait4
.DA %000.00000000
.DA %001.11111100
.DA %001.11111100
.DA %000.11111000
.DA %000.01110000
.DA %000.00100000
.DA %000.00100000
.DA %000.00100000
.DA %000.01010000
.DA %000.10001000
.DA %001.00000100
.DA %001.11111100
.DA %000.00000000
CUR.Wait4.MASK .DA %000.00000000
.DA %100.00000001
.DA %100.00000001
.DA %110.00000011
.DA %111.00000111
.DA %111.10001111
.DA %111.10001111
.DA %111.10001111
.DA %111.00000111
.DA %110.00000011
.DA %100.00000001
.DA %100.00000001
.DA %000.00000000
*--------------------------------------
CUR.Wait5 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 16 W
.DA 16 H
.DA CUR.Wait5.MASK-CUR.Wait5
.DA %00000000.00000000
.DA %00000000.00000000
.DA %00000010.00000000
.DA %00000110.00000000
.DA %00001110.00000000
.DA %00011110.00000000
.DA %00111110.00000000
.DA %00000001.00000000
.DA %00000000.10000000
.DA %00000000.01111100
.DA %00000000.01001000
.DA %00000000.01010000
.DA %00000000.01100000
.DA %00000000.01000000
.DA %00000000.00000000
.DA %00000000.00000000
CUR.Wait5.MASK .DA %11111110.11111111
.DA %11111100.11111111
.DA %11111000.11111111
.DA %11110000.11111111
.DA %11100000.11111111
.DA %11000000.11111111
.DA %10000000.01111111
.DA %00000000.00111111
.DA %11111100.00000000
.DA %11111110.00000001
.DA %11111111.00000011
.DA %11111111.00000111
.DA %11111111.00001111
.DA %11111111.00011111
.DA %11111111.00111111
.DA %11111111.01111111
*--------------------------------------
CUR.Wait6 .DA #S.BM.F.BBP1
.DA #2 RowBytes
.DA 16 W
.DA 16 H
.DA CUR.Wait6.MASK-CUR.Wait6
.DA %00000000.00000000
.DA %00000000.00000000
.DA %00000000.01000000
.DA %00000000.01100000
.DA %00000000.01010000
.DA %00000000.01001000
.DA %00000000.01111100
.DA %00000000.10000000
.DA %00000001.00000000
.DA %00111110.00000000
.DA %00011110.00000000
.DA %00001110.00000000
.DA %00000110.00000000
.DA %00000010.00000000
.DA %00000000.00000000
.DA %00000000.00000000
CUR.Wait6.MASK .DA %11111111.01111111
.DA %11111111.00111111
.DA %11111111.00011111
.DA %11111111.00001111
.DA %11111111.00000111
.DA %11111111.00000011
.DA %11111110.00000001
.DA %11111100.00000000
.DA %00000000.00111111
.DA %10000000.01111111
.DA %11000000.11111111
.DA %11100000.11111111
.DA %11110000.11111111
.DA %11111000.11111111
.DA %11111100.11111111
.DA %11111110.11111111
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBGUI.G.CUR
LOAD /A2OSX.SRC/LIB/LIBGUI.S

View File

@ -13,8 +13,8 @@ AUTO 6
* CC : CB.Cache clipped & visible
* CS : CB.Cache invisible
*--------------------------------------
CLIP.YA >STYA ZPCmdPtr
lda (ZPCmdPtr)
CLIP.YA >STYA ZPCBPtr
lda (ZPCBPtr)
tax
jmp (J.CLIP,x)
*--------------------------------------
@ -27,37 +27,111 @@ CLIP.Rect
clc
rts
*--------------------------------------
CLIP.BitBlt ldy #S.CB.DestX+1
lda (ZPCmdPtr),y
CLIP.BitBlt.9 pla
CLIP.BitBlt.99 sec
rts
CLIP.BitBlt clc
rts
>DEBUG
ldy #S.CB.DestX+1
lda (ZPCBPtr),y
tax
dey
lda (ZPCmdPtr),y
lda (ZPCBPtr),y
pha
>SCMPAX GC.Cache+S.GC.X2 DestX after X2....exit
bmi .9
bmi CLIP.BitBlt.9
pla
>SCMPAX GC.Cache+S.GC.X1 DestX Inside X1-X2, go check if X1+fit in
>SCMPAX GC.Cache+S.GC.X1 DestX Inside X1-X2, go check if X1+W fit in
bpl .1
* S.CB.DestX before S.GC.X1: D=S.GC.X1-S.CB.DestX, S.CB.SrcW-=D, S.CB.DestX=0, S.CB.X1+=D
lda GC.Cache+S.GC.X1 Compute D....
sec
ldy #S.CB.DestX
sbc (ZPCBPtr),y
sta D
lda GC.Cache+S.GC.X1+1
iny
sbc (ZPCBPtr),y
sta D+1 ....always positive
.1
ldy #S.CB.SrcW S.CB.SrcW-=D
lda (ZPCBPtr),y
sec
sbc D
sta (ZPCBPtr),y
iny
lda (ZPCBPtr),y
sbc D
sta (ZPCBPtr),y
bcc CLIP.BitBlt.99 Negative!!!! nothing to do,exit...
ldy #S.CB.DestY+1
lda (ZPCmdPtr),y
lda #0 Dext.X=0
ldy #S.CB.DestX
sta (ZPCBPtr),y
iny
sta (ZPCBPtr),y
ldy #S.CB.X1 S.CB.X1+=D
lda (ZPCBPtr),y
clc
adc D
sta (ZPCBPtr),y
iny
lda (ZPCBPtr),y
adc D+1
sta (ZPCBPtr),y S.CB.DestX=0, new between S.GC.X1 & S.GC.X2....
* S.CB.DestX between S.GC.X1 & S.GC.X2: D=S.GC.X2-S.CB.DestX
.1 lda GC.Cache+S.GC.X2
sec
ldy #S.CB.DestY
sbc (ZPCBPtr),y
sta D
iny
lda GC.Cache+S.GC.X2
sbc (ZPCBPtr),y
sta D+1 Always positive...
lda D
ldy #S.CB.SrcW
cmp (ZPCBPtr),y
iny
lda D+1
cmp (ZPCBPtr),y
bcs CLIP.BitBlt.Y D >= SrcW....nothing to clip
lda D+1 SrcW < D, amke SrcW=D
sta (ZPCBPtr),y
dey
lda D
sta (ZPCBPtr),y
CLIP.BitBlt.Y ldy #S.CB.DestY+1
lda (ZPCBPtr),y
tax
dey
lda (ZPCmdPtr),y
lda (ZPCBPtr),y
pha
>SCMPAX GC.Cache+S.GC.Y2
bpl .9
>SCMPAX GC.Cache+S.GC.Y2 DestY after Y2....exit
bmi .9
clc
rts
.9 pla
sec
.99 sec
rts
*--------------------------------------
CLIP.Line.LEFT .EQ 1

View File

@ -5,6 +5,16 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
UpdateCursor lda CUR.T
cmp #CUR.T.WAIT
bcc SetCursor.A.RTS
inc
inc
cmp #CUR.T.WAIT+12
bne SetCursor.A
lda #CUR.T.WAIT
*--------------------------------------
* Set X2,Y2,SrcPtr
*--------------------------------------
SetCursor.A sta CUR.T
@ -48,7 +58,7 @@ SetCursor.A sta CUR.T
lda CUR.bVisible
bmi ShowCursor.I
rts
SetCursor.A.RTS rts
*--------------------------------------
* Set DestX,DestY
*--------------------------------------
@ -89,11 +99,7 @@ ShowCursor lda CUR.bVisible
*--------------------------------------
HideCursor.I lda #S.CB.OP.RESTORE
sta CUR.CB+S.CB.OP
>LDYA L.CUR.CB
jsr GoDevGfx.YA
rts
bra DrawCursor.I
*--------------------------------------
ShowCursor.I lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
sta CUR.CB+S.CB.OP
@ -118,9 +124,13 @@ ShowCursor.I lda #S.CB.OP.ORA+S.CB.OP.MASK+S.CB.OP.SAVE
sbc #0
sta CUR.CB+S.CB.DestY+1
DrawCursor.I >LDYA L.CUR.CB
jsr CLIP.YA
bcs .9
>LDYA L.CUR.CB
jsr GoDevGfx.YA
rts
jmp GoDevGfx.YA
.9 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBGUI.S.CUR

View File

@ -4,9 +4,9 @@ NEW
INC 1
AUTO 6
*--------------------------------------
Draw >PULLW ZPCmdPtr
Draw >PULLW ZPCBPtr
lda (ZPCmdPtr) Get Cmd
lda (ZPCBPtr) Get Cmd
.1 tax
cpx #S.CB.CMD.DRAWLINE
@ -14,7 +14,7 @@ Draw >PULLW ZPCmdPtr
ldy CB.CmdLen,x
.2 lda (ZPCmdPtr),y Y=Byte count-1 to cache
.2 lda (ZPCBPtr),y Y=Byte count-1 to cache
sta CB.Cache,y
dey
bpl .2
@ -22,26 +22,26 @@ Draw >PULLW ZPCmdPtr
jsr Draw.Jmp
bra .7
.3 >LDYA ZPCmdPtr
.3 >LDYA ZPCBPtr
jsr GoDevGfx.YA
.7 lda (ZPCmdPtr) Get Cmd
.7 lda (ZPCBPtr) Get Cmd
tax
lda CB.CmdLen,x
sec
adc ZPCmdPtr
sta ZPCmdPtr
adc ZPCBPtr
sta ZPCBPtr
bcc .8
inc ZPCmdPtr+1
inc ZPCBPtr+1
.8 lda (ZPCmdPtr) Get Cmd
.8 lda (ZPCBPtr) Get Cmd
bne .1
clc
rts
Draw.Jmp jmp (J.Cmds,x)
Draw.Jmp jmp (J.Cmds-S.CB.CMD.DRAWLINE,x)
*--------------------------------------
* In: Control Block in CB.Cache
* CMD
@ -319,6 +319,9 @@ DrawLine.IncX lda DX
.8 rts
*--------------------------------------
DrawText
rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBGUI.S.DRAW
LOAD /A2OSX.SRC/LIB/LIBGUI.S

View File

@ -43,8 +43,8 @@ AUTO 6
.EM
*--------------------------------------
ZPPtr1 .EQ ZPLIB
ZPDCPtr .EQ ZPLIB+2
ZPCmdPtr .EQ ZPLIB+4
ZPGCPtr .EQ ZPLIB+2
ZPCBPtr .EQ ZPLIB+4
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -63,21 +63,35 @@ CS.START cld
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA InitGUI
J.Cmds .DA CloseGUI J.Cmds-12 !!!
.DA CloseGUI
.DA Draw
.DA SetCursor.A
.DA SetCursorPos
.DA HideCursor
.DA ShowCursor
.DA UpdateCursor
.DA ReadMouse
.DA DrawLine
J.Cmds .DA DrawLine
.DA DrawText
L.DEVNAME.GFX .DA DEVNAME.GFX
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
L.MouseClamp .DA MouseClamp
L.GC.Screen .DA GC.Screen
L.CB.Cache .DA CB.Cache
L.CUR.CB .DA CUR.CB
L.CUR.SaveBuf .DA CUR.SaveBuf
L.Cursors .DA CUR.Arrow
.DA CUR.ResizeX
.DA CUR.ResizeY
.DA CUR.ResizeXY
.DA CUR.Cross
.DA CUR.Text
.DA CUR.Wait1
.DA CUR.Wait2
.DA CUR.Wait3
.DA CUR.Wait4
.DA CUR.Wait5
.DA CUR.Wait6
J.Clip .DA CLIP.Point SETPIXEL
.DA CLIP.Point GETPIXEL
.DA CLIP.HLine
@ -105,28 +119,7 @@ InitGUI lda GC.Screen+S.GC.hDev
txa
ldx #DEVMGR.OPEN
jsr GoDevGfx.Jmp
.1 >LDYA L.DEVNAME.MOUSE
>SYSCALL GetDevByName.YA
bcc .2
inc DEVNAME.MOUSE+3
lda DEVNAME.MOUSE+3
cmp #'8'
bne .1
.8 clc No mouse found, skip mouse init
.9 rts
.2 stx hDevMouse
>STYA GoDevMouse+1
txa
ldx #DEVMGR.OPEN
jsr GoDevMouse
ldx #DEVMGR.CONTROL Mouse driver disturb graphic screen....
jsr GoDevGfx.Jmp
ldx #DEVMGR.STATUS get graphic mode and resolution....
jsr GoDevGfx.Jmp
@ -163,6 +156,31 @@ InitGUI lda GC.Screen+S.GC.hDev
ror
sta CUR.Pos+S.POINT.Y
>LDYA L.GC.Screen
jsr GC.SetX2Y2
.1 >LDYA L.DEVNAME.MOUSE
>SYSCALL GetDevByName.YA
bcc .2
inc DEVNAME.MOUSE+3
lda DEVNAME.MOUSE+3
cmp #'8'
bne .1
.8 ldx #DEVMGR.CONTROL Mouse driver disturb graphic screen....
jsr GoDevGfx.Jmp
clc
.9 rts
.2 stx hDevMouse
>STYA GoDevMouse+1
txa
ldx #DEVMGR.OPEN
jsr GoDevMouse
>LDYA L.MouseClamp
ldx #DEVMGR.CONTROL
jsr GoDevMouse
@ -172,9 +190,7 @@ InitGUI lda GC.Screen+S.GC.hDev
lda #CUR.T.ARROW
jsr SetCursor.A
clc
rts
bra .8
*--------------------------------------
CloseGUI lda hDevMouse
beq .1
@ -186,6 +202,59 @@ CloseGUI lda hDevMouse
sec
rts
*--------------------------------------
GC.SetX2Y2 >STYA ZPGCPtr
ldy #S.GC.X1+1
lda (ZPGCPtr),y
tax
dey
lda (ZPGCPtr),y
clc
ldy #S.GC.W
adc (ZPGCPtr),y
pha
iny
txa
adc (ZPGCPtr),y
tax
pla
sbc #0
bcs .1
dex
.1 ldy #S.GC.X2
sta (ZPGCPtr),y
iny
txa
sta (ZPGCPtr),y
ldy #S.GC.Y1+1
lda (ZPGCPtr),y
tax
dey
lda (ZPGCPtr),y
clc
ldy #S.GC.H
adc (ZPGCPtr),y
pha
iny
txa
adc (ZPGCPtr),y
tax
pla
sbc #0
bcs .2
dex
.2 ldy #S.GC.Y2
sta (ZPGCPtr),y
iny
txa
sta (ZPGCPtr),y
rts
*--------------------------------------
ReadMouse >PULLYA
ldx hDevMouse Mouse is active ?
@ -238,6 +307,9 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL
MouseClamp .BS 8
*--------------------------------------
GC.Screen .BS S.GC
GC.Desktop .BS S.GC
GC.Bar .BS S.GC
*--------------------------------------
GC.Cache .BS S.GC
CB.Cache .BS S.CB
*--------------------------------------

View File

@ -81,6 +81,9 @@ CS.INIT >LDYA L.MSG.INIT
jsr Destop.Paint
lda #CUR.T.WAIT
>LIBCALL hLIBGUI,LIBGUI.SetCursor.A
>LIBCALL hLIBGUI,LIBGUI.ShowCursor
lda (pPs)
@ -123,7 +126,14 @@ CS.RUN lda A2osX.ASCREEN GUI screen active ?
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
CS.DOEVENT lda (pEvent)
bpl .9
* asl
* bpl .9
>LIBCALL hLIBGUI,LIBGUI.UpdateCursor
.9 sec
rts
*--------------------------------------
CS.QUIT clc