wolffd@0: load ('def.lefty'); wolffd@0: definit (); wolffd@0: # wolffd@0: # initialize window data wolffd@0: # wolffd@0: canvas = defcanvas; wolffd@0: wrect = [0 = ['x' = 0; 'y' = 0;]; 1 = ['x' = 400; 'y' = 500;];]; wolffd@0: setwidgetattr (canvas, ['window' = wrect;]); wolffd@0: # wolffd@0: # data structures wolffd@0: # wolffd@0: objarray = []; wolffd@0: objnum = 0; wolffd@0: # wolffd@0: # misc functions wolffd@0: # wolffd@0: min = function (a, b) { wolffd@0: if (a <= b) wolffd@0: return a; wolffd@0: return b; wolffd@0: }; wolffd@0: max = function (a, b) { wolffd@0: if (b <= a) wolffd@0: return a; wolffd@0: return b; wolffd@0: }; wolffd@0: rectof = function (p1, p2) { wolffd@0: return [ wolffd@0: 0 = ['x' = min (p1.x, p2.x); 'y' = min (p1.y, p2.y);]; wolffd@0: 1 = ['x' = max (p1.x, p2.x); 'y' = max (p1.y, p2.y);]; wolffd@0: ]; wolffd@0: }; wolffd@0: pointadd = function (p1, p2) { wolffd@0: return ['x' = p2.x + p1.x; 'y' = p2.y + p1.y;]; wolffd@0: }; wolffd@0: pointsub = function (p1, p2) { wolffd@0: return ['x' = p2.x - p1.x; 'y' = p2.y - p1.y;]; wolffd@0: }; wolffd@0: # wolffd@0: # rendering functions wolffd@0: # wolffd@0: drawbox = function (obj, color) { wolffd@0: box (canvas, obj, obj.rect, ['color' = color;]); wolffd@0: }; wolffd@0: redrawboxes = function () { wolffd@0: local i; wolffd@0: clear (canvas); wolffd@0: for (i = 0; i < objnum; i = i + 1) wolffd@0: drawbox (objarray[i], 1); wolffd@0: }; wolffd@0: redraw = function (canvas) { wolffd@0: redrawboxes (); wolffd@0: }; wolffd@0: # wolffd@0: # editing functions wolffd@0: # wolffd@0: new = function (rect) { wolffd@0: objarray[objnum] = [ wolffd@0: 'rect' = rect; wolffd@0: 'id' = objnum; wolffd@0: ]; wolffd@0: objnum = objnum + 1; wolffd@0: return objarray[objnum - 1]; wolffd@0: }; wolffd@0: reshape = function (obj, rect) { wolffd@0: obj.rect = rect; wolffd@0: return obj; wolffd@0: }; wolffd@0: move = function (obj, p) { wolffd@0: obj.rect[0] = pointadd (obj.rect[0], p); wolffd@0: obj.rect[1] = pointadd (obj.rect[1], p); wolffd@0: return obj; wolffd@0: }; wolffd@0: delete = function (obj) { wolffd@0: if (obj.id ~= objnum - 1) { wolffd@0: objarray[obj.id] = objarray[objnum - 1]; wolffd@0: objarray[obj.id].id = obj.id; wolffd@0: } wolffd@0: remove (objnum - 1, objarray); wolffd@0: objnum = objnum - 1; wolffd@0: }; wolffd@0: # wolffd@0: # user interface functions wolffd@0: # wolffd@0: # left mouse button creates new box wolffd@0: # middle button moves a box wolffd@0: # right button deletes a box wolffd@0: # wolffd@0: leftdown = function (data) { wolffd@0: if (data.obj ~= null) wolffd@0: return; wolffd@0: leftbox = new (rectof (data.pos, data.pos)); wolffd@0: drawbox (leftbox, 1); wolffd@0: setgfxattr (canvas, ['mode' = 'xor';]); wolffd@0: }; wolffd@0: leftmove = function (data) { wolffd@0: if (~leftbox) wolffd@0: return; wolffd@0: drawbox (leftbox, 1); wolffd@0: clearpick (canvas, leftbox); wolffd@0: reshape (leftbox, rectof (data.ppos, data.pos)); wolffd@0: drawbox (leftbox, 1); wolffd@0: }; wolffd@0: leftup = function (data) { wolffd@0: if (~leftbox) wolffd@0: return; wolffd@0: drawbox (leftbox, 1); wolffd@0: clearpick (canvas, leftbox); wolffd@0: reshape (leftbox, rectof (data.ppos, data.pos)); wolffd@0: setgfxattr (canvas, ['mode' = 'src';]); wolffd@0: drawbox (leftbox, 1); wolffd@0: remove ('leftbox'); wolffd@0: }; wolffd@0: middledown = function (data) { wolffd@0: if (data.obj == null) wolffd@0: return; wolffd@0: middlebox = data.obj; wolffd@0: middlepos = data.pos; wolffd@0: setgfxattr (canvas, ['mode' = 'xor';]); wolffd@0: }; wolffd@0: middlemove = function (data) { wolffd@0: if (~middlebox) wolffd@0: return; wolffd@0: drawbox (middlebox, 1); wolffd@0: clearpick (canvas, middlebox); wolffd@0: move (middlebox, pointsub (middlepos, data.pos)); wolffd@0: middlepos = data.pos; wolffd@0: drawbox (middlebox, 1); wolffd@0: }; wolffd@0: middleup = function (data) { wolffd@0: if (~middlebox) wolffd@0: return; wolffd@0: drawbox (middlebox, 1); wolffd@0: clearpick (canvas, middlebox); wolffd@0: move (middlebox, pointsub (middlepos, data.pos)); wolffd@0: setgfxattr (canvas, ['mode' = 'src';]); wolffd@0: drawbox (middlebox, 1); wolffd@0: remove ('middlepos'); wolffd@0: remove ('middlebox'); wolffd@0: }; wolffd@0: rightup = function (data) { wolffd@0: if (data.pobj == null) wolffd@0: return; wolffd@0: drawbox (data.obj, 0); wolffd@0: clearpick (canvas, data.obj); wolffd@0: delete (data.obj); wolffd@0: }; wolffd@0: dops = function () { wolffd@0: local s; wolffd@0: wolffd@0: s = ['x' = 8 * 300; 'y' = 10.5 * 300;]; wolffd@0: canvas = createwidget (-1, ['type' = 'ps'; 'size' = s;]); wolffd@0: setwidgetattr (canvas, ['window' = wrect;]); wolffd@0: redraw (canvas); wolffd@0: destroywidget (canvas); wolffd@0: canvas=defcanvas; wolffd@0: };