pencil tool (thickpixel)

This commit is contained in:
visionmercer 2026-05-11 10:29:29 +02:00
commit c7c145f0b1
2 changed files with 29 additions and 9 deletions

View file

@ -42,13 +42,21 @@ sub filledPolygon (Points() as long, col as long)
next y next y
end sub end sub
sub thickpixel(x,y,col as long)
if state.brushsize=1 then
pset(x,y),col
else
line(x-0.5 * state.brushsize,y-0.5 * state.brushsize)-(x+0.5 * state.brushsize,y+0.5 * state.brushsize),col,bf
end if
end sub
sub thickline(x1,y1,x2,y2, col as long) sub thickline(x1,y1,x2,y2, col as long)
if state.brushsize=1 then if state.brushsize=1 then
line(x1,y1)-(x2,y2),col line(x1,y1)-(x2,y2),col
else else
dim tempimg as long dim tempimg as long
dim od as long dim od as long
tempimg=_newimage(10,10,32) tempimg=_newimage(1,1,32)
od =_dest od =_dest
_dest tempimg _dest tempimg
pset(0,0),col pset(0,0),col

View file

@ -6,8 +6,8 @@ type statetype
offsetY as long offsetY as long
zoom as single zoom as single
brushsize as integer brushsize as integer
startX as integer startX as long
startY as integer startY as long
isDrawing as integer isDrawing as integer
end type end type
@ -303,8 +303,8 @@ sub canvas
dim r as integer dim r as integer
' 3. Calculate Canvas Coordinates ' 3. Calculate Canvas Coordinates
dim canX as integer dim canX as long
dim canY as integer dim canY as long
canX = int((_mousex - state.offsetX) / state.zoom) canX = int((_mousex - state.offsetX) / state.zoom)
canY = int((_mousey - state.offsetY) / state.zoom) canY = int((_mousey - state.offsetY) / state.zoom)
@ -370,8 +370,15 @@ sub canvas
select case state.tool select case state.tool
case 1 ' Pencil case 1 ' Pencil
_dest layers(1).ihandle _dest layers(1).ihandle
if canX=state.startX and canY=state.startY then
thickpixel canX,canY,drawCol
addcommand "pixel ("+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
else
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)+")" addcommand "line ("+str$(state.startX)+","+str$(state.startY)+","+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
end if
'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
@ -433,8 +440,13 @@ sub canvas
'_putimage , layers(2).ihandle, layers(1).ihandle '_putimage , layers(2).ihandle, layers(1).ihandle
select case state.tool select case state.tool
case 2 ' Line case 2 ' Line
if canX=state.startX and canY=state.startY then
thickpixel canX,canY,drawCol
addcommand "pixel ("+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
else
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)+")" addcommand "line ("+str$(state.startX)+","+str$(state.startY)+","+str$(canX)+","+str$(canY)+","+hex$(drawCol)+")"
end if
case 3 ' Circle case 3 ' Circle
r = int(sqr((canX - state.startX)^2 + (canY - state.startY)^2)) r = int(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