«Sketch Pad» by eli.fieldsteel
on 27 Aug'11 09:17 inAn environment in which the user can draw using the mouse.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
//LET'S PAINT! //select all and compile var point, red, green, blue, win, view, colorTask; var redChange, greenChange, blueChange; //rate of change of each color component //mess around with these values for fun //zero results in no color change redChange = 0.01; greenChange = 0.015; blueChange = 0.02; //default starting RGB values //these values can be changed as well //maintain range of 0≤x≤1 red=0; green=0.33; blue=0.67; //window creation win = Window("FANCY ARTWORK", resizable:true, border:false); win.fullScreen; win.onClose = { if( colorTask.isPlaying, {colorTask.stop}, {} ); }; //userview creation view = UserView(win, Window.screenBounds); view.clearOnRefresh = false; view.background = Color.white; //any click sets point as current mouse location //left-click does nothing special //right-click clears palette view.mouseDownAction = { |v, x, y, mod, butNum, clkCnt| point = [x,y]; if(butNum == 1, { view.drawFunc_({nil}); view.clearDrawing; view.refresh},{} ); }; //mouse drag redefines userview drawFunc //Pen draws line from old point to current point //then sets old point equal to current point view.mouseMoveAction = { |v, x, y, mod| view.drawFunc = { Pen.strokeColor = Color.new( red.fold(0,1), green.fold(0,1), blue.fold(0,1) ); Pen.width = 3; Pen.line(point.asPoint,x@y); point = [x,y]; Pen.stroke; }; win.refresh; }; //RGB values wrap through range 0≤x<2 //and are folded into 0≤x≤1 via mouseMove function //thus RGB values oscillate linearly, out of phase with //one another, back and forth from 0 to 1 colorTask = Task({ { red = (red + redChange)%2; green = (green + greenChange)%2; blue = (blue + blueChange)%2; 0.05.wait; //arbitrary wait time }.loop; }); //comment out for no color change colorTask.start; win.front;
reception
MSPaint in less than 100 lines :)
going to extend )
Great to see this is possible! One question though: is it normal that there is a large latency? The drawing takes between one and two seconds to appear. I'm on Ubuntu with a 24" monitor and a fast computer. Is maybe the high resolution making it slow? Thanks!
what is your resolution? i have 1920x1200 and no latency at all
try to set QT_GRAPHICSSYSTEM=opengl and see if that makes it draw faster. here's a thread from the developer's list... https://www.listarc.bham.ac.uk/lists/sc-dev/msg33649.html
Thanks. Also on 1920x1200. Tried setting QT_GRAPHICS... but then SuperCollider would not boot at all. Maybe it's my integrated Intel graphics... But I can run OPENGL tests and they just spin fine. No idea.