diff --git a/pixler.bas b/pixler.bas index 70a149a..3c6f827 100644 --- a/pixler.bas +++ b/pixler.bas @@ -602,12 +602,32 @@ sub do.fcircle (sx as long,sy as long,ex as long,ey as long,col as long) end if end sub -sub do.box(sx as long,sy as long,ex as long,ey as long,col as long) +sub do.box (sx as long,sy as long,ex as long,ey as long,col as long) dim osource as long dim odest as long + if state.isdrawing then osource=_source odest=_dest + + ' --- Shift Held: Perfect Square Constraint --- + if _keydown(100303) or _keydown(100304) then + dim dx as long: dx = ex - sx + dim dy as long: dy = ey - sy + + ' Determine the longest side to use as the square dimensions + dim size as long + if abs(dx) > abs(dy) then size = abs(dx) else size = abs(dy) + + ' Shift coordinates relative to the direction of the drag + dim signx as long: if dx >= 0 then signx = 1 else signx = -1 + dim signy as long: if dy >= 0 then signy = 1 else signy = -1 + + ex = sx + (size * signx) + ey = sy + (size * signy) + end if + ' --------------------------------------------- + if mouseclicked or rmouseclicked then _dest layers(1).ihandle addcommand"box ("+tst(sx)+","+tst(sy)+","+tst(ex)+","+tst(ey)+","+hex$(col)+")" @@ -621,12 +641,32 @@ sub do.box(sx as long,sy as long,ex as long,ey as long,col as long) end if end sub -sub do.fbox(sx as long,sy as long,ex as long,ey as long,col as long) +sub do.fbox (sx as long,sy as long,ex as long,ey as long,col as long) dim osource as long dim odest as long + if state.isdrawing then osource=_source odest=_dest + + ' --- Shift Held: Perfect Square Constraint --- + if _keydown(100303) or _keydown(100304) then + dim dx as long: dx = ex - sx + dim dy as long: dy = ey - sy + + ' Determine the longest side to use as the square dimensions + dim size as long + if abs(dx) > abs(dy) then size = abs(dx) else size = abs(dy) + + ' Shift coordinates relative to the direction of the drag + dim signx as long: if dx >= 0 then signx = 1 else signx = -1 + dim signy as long: if dy >= 0 then signy = 1 else signy = -1 + + ex = sx + (size * signx) + ey = sy + (size * signy) + end if + ' --------------------------------------------- + if mouseclicked or rmouseclicked then _dest layers(1).ihandle addcommand"fbox ("+tst(sx)+","+tst(sy)+","+tst(ex)+","+tst(ey)+","+hex$(col)+")"