command history
This commit is contained in:
parent
d26e95b462
commit
b686bb6633
1 changed files with 92 additions and 11 deletions
103
pixler.bas
103
pixler.bas
|
|
@ -20,9 +20,10 @@ end type
|
||||||
|
|
||||||
redim shared layers(3) as layertype
|
redim shared layers(3) as layertype
|
||||||
dim shared state as statetype
|
dim shared state as statetype
|
||||||
|
redim shared commands(0) as string
|
||||||
dim shared showtoolbox as _byte: showtoolbox=-1
|
dim shared showtoolbox as _byte: showtoolbox=-1
|
||||||
dim shared showcolorpicker as _byte: showcolorpicker=-1
|
dim shared showcolorpicker as _byte: showcolorpicker=-1
|
||||||
|
dim shared showcommands as _byte: showcommands=0
|
||||||
|
|
||||||
dim shared mouseclicked as integer
|
dim shared mouseclicked as integer
|
||||||
dim shared mousedown as integer
|
dim shared mousedown as integer
|
||||||
|
|
@ -132,16 +133,36 @@ do
|
||||||
showtoolbox=not showtoolbox
|
showtoolbox=not showtoolbox
|
||||||
case "c"
|
case "c"
|
||||||
showcolorpicker=not showcolorpicker
|
showcolorpicker=not showcolorpicker
|
||||||
|
case "l"
|
||||||
|
showcommands=not showcommands
|
||||||
end select
|
end select
|
||||||
|
|
||||||
canvas
|
canvas
|
||||||
if showtoolbox then toolbox
|
if showtoolbox then toolbox
|
||||||
if showcolorpicker then colorpicker
|
if showcolorpicker then colorpicker
|
||||||
|
if showcommands then commandlist
|
||||||
_limit 30
|
_limit 30
|
||||||
_display
|
_display
|
||||||
loop
|
loop
|
||||||
|
|
||||||
|
sub commandlist
|
||||||
|
dim i as long
|
||||||
|
dim listWidth as integer: listWidth = 150
|
||||||
|
dim x as integer: x = _width - listWidth
|
||||||
|
|
||||||
|
' Draw background for the list
|
||||||
|
line (x, 0)-(_width - 1, _height - 1), _rgb32(40, 40, 40), bf
|
||||||
|
line (x, 0)-(x, _height - 1), _rgb32(100, 100, 100)
|
||||||
|
|
||||||
|
_printmode _keepbackground
|
||||||
|
for i = 0 to ubound(commands) - 1
|
||||||
|
dim y as integer: y = i * 16
|
||||||
|
if y < _height - 20 then
|
||||||
|
_printstring (x + 5, y + 5), left$(commands(i), 18)
|
||||||
|
end if
|
||||||
|
next i
|
||||||
|
end sub
|
||||||
|
|
||||||
sub toolbox
|
sub toolbox
|
||||||
dim i, x, y
|
dim i, x, y
|
||||||
dim btnSize : btnSize = 32
|
dim btnSize : btnSize = 32
|
||||||
|
|
@ -173,20 +194,31 @@ sub colorpicker
|
||||||
select case imagebutton(i*16,_height-17,16,16,img)
|
select case imagebutton(i*16,_height-17,16,16,img)
|
||||||
case -1
|
case -1
|
||||||
state.fcolor=pal(i)
|
state.fcolor=pal(i)
|
||||||
|
addcommand "fcolor ("+hex$(pal(i))+")"
|
||||||
case -2
|
case -2
|
||||||
state.bcolor=pal(i)
|
state.bcolor=pal(i)
|
||||||
|
addcommand "bcolor ("+hex$(pal(i))+")"
|
||||||
end select
|
end select
|
||||||
next i
|
next i
|
||||||
_freeimage img
|
_freeimage img
|
||||||
end sub
|
end sub
|
||||||
|
|
||||||
sub canvas
|
sub addcommand(cmd as string)
|
||||||
|
'this check is probably more clever than good is.
|
||||||
|
if commands(ubound(commands)+(ubound(commands)>0))<>cmd then
|
||||||
|
commands(ubound(commands))=cmd
|
||||||
|
redim _preserve commands(ubound(commands)+1) as string
|
||||||
|
end if
|
||||||
|
|
||||||
|
end sub
|
||||||
|
|
||||||
|
sub canvas
|
||||||
' 1. Define the Viewport (The "Window" on your screen)
|
' 1. Define the Viewport (The "Window" on your screen)
|
||||||
dim viewX1 as integer
|
dim viewX1 as integer
|
||||||
if showtoolbox then viewX1 = 70 else viewX1 = 0
|
if showtoolbox then viewX1 = 70 else viewX1 = 0
|
||||||
dim viewY1 as integer: viewY1 = 0
|
dim viewY1 as integer: viewY1 = 0
|
||||||
dim viewX2 as integer: viewX2 = _width - 1
|
dim viewX2 as integer
|
||||||
|
if showcommands then viewX2 = _width - 151 else viewX2 = _width - 1
|
||||||
dim viewY2 as integer
|
dim viewY2 as integer
|
||||||
if showcolorpicker then viewY2 = _height - 20 else viewY2 = _height - 1
|
if showcolorpicker then viewY2 = _height - 20 else viewY2 = _height - 1
|
||||||
|
|
||||||
|
|
@ -248,11 +280,19 @@ sub canvas
|
||||||
exit sub
|
exit sub
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
if showcommands then
|
||||||
|
if _mousex >= drawX2 then
|
||||||
|
exit sub
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
dim r as integer
|
||||||
|
|
||||||
' 3. Calculate Canvas Coordinates
|
' 3. Calculate Canvas Coordinates
|
||||||
dim canX as integer: canX = int((_mousex - state.offsetX) / state.zoom)
|
dim canX as integer
|
||||||
dim canY as integer: canY = int((_mousey - state.offsetY) / state.zoom)
|
dim canY as integer
|
||||||
|
canX = int((_mousex - state.offsetX) / state.zoom)
|
||||||
|
canY = int((_mousey - state.offsetY) / state.zoom)
|
||||||
|
|
||||||
static polypoints(200) as single
|
static polypoints(200) as single
|
||||||
static pointCount as integer
|
static pointCount as integer
|
||||||
|
|
@ -269,8 +309,10 @@ sub canvas
|
||||||
_source layers(1).ihandle
|
_source layers(1).ihandle
|
||||||
if mouseclicked then
|
if mouseclicked then
|
||||||
floodfill canX,canY,state.fcolor
|
floodfill canX,canY,state.fcolor
|
||||||
|
addcommand "floodfill ("+str$(canX)+","+str$(canY)+","+hex$(state.fcolor)+")"
|
||||||
else
|
else
|
||||||
floodfill canX,canY,state.bcolor
|
floodfill canX,canY,state.bcolor
|
||||||
|
addcommand "floodfill ("+str$(canX)+","+str$(canY)+","+hex$(state.bcolor)+")"
|
||||||
end if
|
end if
|
||||||
_dest 0
|
_dest 0
|
||||||
_source 0
|
_source 0
|
||||||
|
|
@ -282,8 +324,10 @@ sub canvas
|
||||||
_source layers(1).ihandle
|
_source layers(1).ihandle
|
||||||
if mouseclicked then
|
if mouseclicked then
|
||||||
state.fcolor=point(canX,canY)
|
state.fcolor=point(canX,canY)
|
||||||
|
addcommand "fcolor ("+hex$(point(canX,canY))+")"
|
||||||
else
|
else
|
||||||
state.bcolor=point(canX,canY)
|
state.bcolor=point(canX,canY)
|
||||||
|
addcommand "bcolor ("+hex$(point(canX,cany))+")"
|
||||||
end if
|
end if
|
||||||
_dest 0
|
_dest 0
|
||||||
_source 0
|
_source 0
|
||||||
|
|
@ -314,15 +358,16 @@ sub canvas
|
||||||
case 1 ' Pencil
|
case 1 ' Pencil
|
||||||
_dest layers(1).ihandle
|
_dest layers(1).ihandle
|
||||||
thickline state.startX, state.startY, canX, canY, drawCol
|
thickline state.startX, state.startY, canX, canY, drawCol
|
||||||
|
addcommand "line ("+str$(state.startX)+","+ str$(state.startY)+","+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
|
||||||
state.startX = canX: state.startY = canY
|
state.startX = canX: state.startY = canY
|
||||||
case 2 ' Straight Line
|
case 2 ' Straight Line
|
||||||
thickline state.startX, state.startY, canX, canY, drawCol
|
thickline state.startX, state.startY, canX, canY, drawCol
|
||||||
case 3 ' Circle
|
case 3 ' Circle
|
||||||
dim r as single: r = sqr((canX - state.startX)^2 + (canY - state.startY)^2)
|
r = sqr((canX - state.startX)^2 + (canY - state.startY)^2)
|
||||||
thickcircle state.startX, state.startY, r + 1, drawCol
|
thickcircle state.startX, state.startY, r + 1, drawCol
|
||||||
case 4 ' Filled Circle
|
case 4 ' Filled Circle
|
||||||
dim r_f as single: r_f = sqr((canX - state.startX)^2 + (canY - state.startY)^2)
|
r = sqr((canX - state.startX)^2 + (canY - state.startY)^2)
|
||||||
filledcircle state.startX, state.startY, r_f, drawCol
|
filledcircle state.startX, state.startY, r, drawCol
|
||||||
case 5 ' Rect
|
case 5 ' Rect
|
||||||
thickline state.startX, state.startY, canX, state.startY, drawCol
|
thickline state.startX, state.startY, canX, state.startY, drawCol
|
||||||
thickline canX, state.startY, canX, canY, drawCol
|
thickline canX, state.startY, canX, canY, drawCol
|
||||||
|
|
@ -352,10 +397,46 @@ sub canvas
|
||||||
if (state.tool = 8 or state.tool=7) and pointCount > 2 then
|
if (state.tool = 8 or state.tool=7) and pointCount > 2 then
|
||||||
redim finalP(pointCount * 2 - 1) as long
|
redim finalP(pointCount * 2 - 1) as long
|
||||||
for p = 0 to (pointCount * 2) - 1: finalP(p) = polypoints(p): next
|
for p = 0 to (pointCount * 2) - 1: finalP(p) = polypoints(p): next
|
||||||
if state.tool =8 then filledPolygon finalP(), state.fcolor else Polygon finalP(), state.fcolor
|
dim tmpstr as string
|
||||||
|
if state.tool =8 then
|
||||||
|
filledPolygon finalP(), state.fcolor
|
||||||
|
tmpstr="fpolygon ("
|
||||||
|
for i=0 to ubound(finalP)-1
|
||||||
|
tmpstr=tmpstr+str$(finalP(i))+","
|
||||||
|
next i
|
||||||
|
tmpstr=tmpstr+str$(finalP(i))+","+hex$(state.fcolor)+")"
|
||||||
|
addcommand tmpstr
|
||||||
|
else
|
||||||
|
Polygon finalP(), state.fcolor
|
||||||
|
tmpstr="polygon ("
|
||||||
|
for i=0 to ubound(finalP)-1
|
||||||
|
tmpstr=tmpstr+str$(finalP(i))+","
|
||||||
|
next i
|
||||||
|
tmpstr=tmpstr+str$(finalP(i))+","+hex$(state.fcolor)+")"
|
||||||
|
addcommand tmpstr
|
||||||
|
end if
|
||||||
else
|
else
|
||||||
' Merge the preview into the drawing layer
|
' Merge the preview into the drawing layer
|
||||||
_putimage , layers(2).ihandle, layers(1).ihandle
|
_putimage , layers(2).ihandle, layers(1).ihandle
|
||||||
|
select case state.tool
|
||||||
|
case 2 ' Line
|
||||||
|
thickline state.startX, state.startY, canX, canY, drawCol
|
||||||
|
addcommand "line ("+str$(state.startX)+","+str$(state.startY)+","+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
|
||||||
|
case 3 ' Circle
|
||||||
|
r = int(sqr((canX - state.startX)^2 + (canY - state.startY)^2))
|
||||||
|
thickcircle state.startX, state.startY, r + 1, drawCol
|
||||||
|
addcommand "circle ("+str$(state.startX)+","+str$(state.startY)+","+str$(int(r))+","+hex$(drawCol)+")"
|
||||||
|
case 4
|
||||||
|
r = int(sqr((canX - state.startX)^2 + (canY - state.startY)^2))
|
||||||
|
filledcircle state.startX, state.startY, r + 1, drawCol
|
||||||
|
addcommand "fcircle ("+str$(state.startX)+","+str$(state.startY)+","+str$(int(r))+","+hex$(drawCol)+")"
|
||||||
|
case 5 ' Box
|
||||||
|
line (state.startX, state.startY)-(canX, canY), drawCol, b
|
||||||
|
addcommand "box ("+str$(state.startX)+","+str$(state.startY)+","+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
|
||||||
|
case 6 ' Filled Box
|
||||||
|
line (state.startX, state.startY)-(canX, canY), drawCol, bf
|
||||||
|
addcommand "fbox ("+str$(state.startX)+","+str$(state.startY)+","+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
|
||||||
|
end select
|
||||||
end if
|
end if
|
||||||
|
|
||||||
_dest layers(2).ihandle: cls , 0
|
_dest layers(2).ihandle: cls , 0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue