Guest User

Untitled

a guest
Mar 21st, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.30 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head> <title> Paint ! </title> </head>
  4. <body>
  5.  
  6. <script>
  7. var thick;
  8. var canvas ;
  9. var ctx ;
  10. var imageData ;
  11.  
  12.  
  13. // Pour savoir si on arrête de dessiner définitivement la droite
  14. var booleanLine = false;
  15. var booleanCircle = false;
  16. var booleanRect = false;
  17. var booleanPen = false;
  18. var booleanFin = false;
  19.  
  20.  
  21. // Permet d'update la modif canvas car on clean a chaque fois qu'on dessine
  22. var savedDraws = [];
  23. var imgData = null;
  24.  
  25.  
  26. //Start object
  27. var startcoord = new Object();
  28. startcoord.x = 0;
  29. startcoord.y = 0;
  30.  
  31. //End object
  32. var endcoord = new Object();
  33. endcoord.x = 0;
  34. endcoord.y = 0;
  35.  
  36. //setInterval(drawgameboard,10);
  37. /-----------------------------------------------------------------------------------/
  38.  
  39. function clearboard(){
  40. var canvas=document.getElementById("gameboard");
  41. if(!canvas.getContext){return;}
  42.  
  43. //Board
  44. var ctx=canvas.getContext("2d");
  45. ctx.clearRect(0, 0, canvas.width, canvas.height);
  46. }
  47. /-----------------------------------------------------------------------------------/
  48.  
  49.  
  50. function restoreCanvas(){
  51.  
  52. var ctx=canvas.getContext("2d");
  53. var length = savedDraws.length;
  54. var img = savedDraws[length-1];
  55. if (img != null)
  56. ctx.putImageData(img,0,0);
  57.  
  58. }
  59.  
  60. function saveCanvas(){
  61. var canvas=document.getElementById("gameboard");
  62. var ctx=canvas.getContext("2d");
  63. var img = ctx.getImageData(0, 0, canvas.width, canvas.height);
  64. savedDraws.push(img);
  65. }
  66.  
  67.  
  68.  
  69. // Premier point, on recupère le point où on clique
  70. function getFirstPoint(e){
  71. canvas=document.getElementById("gameboard");
  72. var ctx=canvas.getContext("2d");
  73. var rect = canvas.getBoundingClientRect();
  74. var X = e.clientX - rect.left;
  75. var Y = e.clientY - rect.top; // Pos Y
  76.  
  77. startcoord.x = X;
  78. startcoord.y = Y;
  79.  
  80. if (document.getElementById('pen').checked) {
  81. booleanPen = true;
  82. ctx.beginPath();
  83. ctx.moveTo(startcoord.x, startcoord.y);
  84. }
  85.  
  86. else if (document.getElementById('circ').checked) {
  87. booleanCircle = true;
  88. }
  89. else if (document.getElementById('rect').checked) {
  90. booleanRect = true;
  91.  
  92. }
  93. else if (document.getElementById('line').checked) {
  94. booleanLine = true;
  95. }
  96. booleanFin = true;
  97. }
  98.  
  99. /-----------------------------------------------------------------------------------/
  100.  
  101. // Dernier point, on recupère le point où on arrrete de cliquer
  102. function drawingEnd(e){
  103. var canvas=document.getElementById("gameboard");
  104. if(!canvas.getContext){return;}
  105. var ctx=canvas.getContext("2d");
  106.  
  107.  
  108. if(booleanLine){
  109. imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  110. booleanLine = false;
  111. drawline(e);
  112.  
  113. }
  114.  
  115. if(booleanCircle){
  116. imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  117. booleanCircle = false;
  118. drawcircle(e);
  119.  
  120. }
  121.  
  122.  
  123. if(booleanRect){
  124. imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  125. booleanRect = false;
  126. drawrect(e);
  127.  
  128. }
  129.  
  130. if(booleanPen){
  131.  
  132. booleanPen = false;
  133. drawpen(e);
  134. ctx.closePath()
  135. }
  136. booleanFin = false;
  137.  
  138.  
  139. }
  140.  
  141. /-----------------------------------------------------------------------------------/
  142.  
  143. function draw(){
  144.  
  145. //ctx.clearRect(0,0,canvas.width,canvas.height);
  146. document.getElementById("gameboard").addEventListener("mousedown", getFirstPoint);
  147.  
  148. if (document.getElementById('pen').checked) {
  149. document.getElementById("gameboard").addEventListener("mousemove", drawpen);
  150. }
  151. else if (document.getElementById('circ').checked) {
  152. document.getElementById("gameboard").addEventListener("mousemove", drawcircle);
  153. }
  154. else if (document.getElementById('rect').checked) {
  155. document.getElementById("gameboard").addEventListener("mousemove", drawrect);
  156. }
  157. else if (document.getElementById('line').checked) {
  158. document.getElementById("gameboard").addEventListener("mousemove", drawline);
  159. }
  160. document.getElementById("gameboard").addEventListener("mouseup", drawingEnd);
  161.  
  162. }
  163.  
  164. /-----------------------------------------------------------------------------------/
  165. function drawpen(e){
  166. var canvas=document.getElementById("gameboard");
  167.  
  168. if(!canvas.getContext){return;}
  169. var ctx=canvas.getContext("2d");
  170. var rect = canvas.getBoundingClientRect();
  171.  
  172. var Xend = e.clientX - rect.left;
  173. var Yend = e.clientY - rect.top; // Pos Y
  174. if(!canvas.getContext){
  175. return;
  176. }
  177.  
  178. if(!booleanFin){
  179. saveCanvas();
  180. return;
  181. }
  182. if(booleanPen){
  183.  
  184. ctx.clearRect(0,0,canvas.width,canvas.height);
  185. restoreCanvas();
  186.  
  187.  
  188. ctx.strokeStyle = document.getElementById("color").value;
  189. ctx.lineWidth= document.getElementById("Thick").value;
  190. ctx.lineTo(Xend, Yend);
  191. ctx.stroke();
  192. //ctx.closePath();
  193. }
  194. }
  195. /-----------------------------------------------------------------------------------/
  196. function drawrect(e){
  197.  
  198. var canvas=document.getElementById("gameboard");
  199. if(!canvas.getContext){return;}
  200. var ctx=canvas.getContext("2d");
  201. var rect = canvas.getBoundingClientRect();
  202.  
  203. if(!booleanFin){
  204. saveCanvas();
  205. return;
  206. }
  207.  
  208. if(booleanRect){
  209. ctx.clearRect(0,0,canvas.width,canvas.height);
  210. restoreCanvas();
  211.  
  212.  
  213. ctx.strokeStyle = document.getElementById("color").value;
  214. ctx.lineWidth= document.getElementById("Thick").value;
  215. ctx.beginPath();
  216. // Init radius
  217. endcoord.x = e.clientX - rect.left;
  218. endcoord.y = e.clientY - rect.top;
  219. var length = endcoord.x-startcoord.x
  220. var width = endcoord.y - startcoord.x;
  221. ctx.rect(startcoord.x,startcoord.y, length,width);
  222. ctx.stroke();
  223. ctx.closePath();
  224.  
  225.  
  226. }
  227. }
  228.  
  229. /-----------------------------------------------------------------------------------/
  230.  
  231. function drawcircle(e){
  232. var canvas=document.getElementById("gameboard");
  233. if(!canvas.getContext){return;}
  234. var ctx=canvas.getContext("2d");
  235. var rect = canvas.getBoundingClientRect();
  236.  
  237. if(!booleanFin){
  238. saveCanvas();
  239. return;
  240. }
  241. if(booleanCircle){
  242.  
  243.  
  244.  
  245. ctx.clearRect(0,0,canvas.width,canvas.height);
  246. restoreCanvas();
  247.  
  248. ctx.strokeStyle = document.getElementById("color").value;
  249. ctx.lineWidth= document.getElementById("Thick").value;
  250. ctx.beginPath();
  251. // Init radius
  252. endcoord.x = e.clientX - rect.left;
  253. var rad = endcoord.x-startcoord.x
  254.  
  255. ctx.arc(startcoord.x,startcoord.y, Math.abs(rad),0,2*Math.PI);
  256. ctx.stroke();
  257. ctx.closePath();
  258.  
  259. }
  260. }
  261.  
  262. /-----------------------------------------------------------------------------------/
  263.  
  264. // Quand la souris bouge, on dessine la droite automatiquement
  265. function drawline(e){
  266. // Si j'ai mouseup la souris, on arrête de modifier la droite
  267. var canvas=document.getElementById("gameboard");
  268. var ctx=canvas.getContext("2d");
  269. var rect = canvas.getBoundingClientRect();
  270.  
  271. if(!canvas.getContext){
  272.  
  273. return;
  274. }
  275.  
  276. if(!booleanFin){
  277. saveCanvas();
  278. return;
  279. }
  280.  
  281. if(booleanLine){
  282.  
  283. ctx.clearRect(0,0,canvas.width,canvas.height);
  284. restoreCanvas();
  285.  
  286. // Epaisseur de la droite
  287. ctx.strokeStyle = document.getElementById("color").value;
  288. ctx.lineWidth= document.getElementById("Thick").value;
  289. ctx.beginPath();
  290. ctx.moveTo(startcoord.x,startcoord.y);
  291.  
  292. // Init point de fin
  293. endcoord.x = e.clientX - rect.left;
  294. endcoord.y = e.clientY - rect.top;
  295. ctx.lineTo(endcoord.x, endcoord.y);
  296. ctx.stroke();
  297. ctx.closePath();
  298.  
  299. }
  300.  
  301.  
  302. }
  303.  
  304. /-----------------------------------------------------------------------------------/
  305.  
  306. function drawgameboard(){
  307. var canvas=document.getElementById("gameboard");
  308. if(!canvas.getContext){return;}
  309.  
  310. draw();
  311.  
  312. //Board
  313. var ctx=canvas.getContext("2d");
  314. ctx.fillStyle = "#FFFFFF";
  315. ctx.clearRect(0,0,500,500);
  316. ctx.fillRect(0,0,500,500);
  317.  
  318. }
  319. /-----------------------------------------------------------------------------------/
  320.  
  321. function Increasethick(){
  322. var Thickness = document.getElementById("Thick");
  323. Thickness.value ++;
  324. }
  325. /-----------------------------------------------------------------------------------/
  326.  
  327. function Decreasethick(){
  328. var Thickness = document.getElementById("Thick");
  329. if (Thickness.value >1){
  330. Thickness.value --;
  331. } else {
  332. Thickness.value = Thickness.value;
  333. }
  334. }
  335.  
  336.  
  337. </script>
  338.  
  339. Paint !
  340. <br/>
  341.  
  342.  
  343. <br/>
  344. <table border="1">
  345. <tr>
  346. <th>Canvas</th>
  347. <th>Tools</th>
  348. </tr>
  349. <tr>
  350. <th rowspan="4"> <canvas id="gameboard" width="500" height="500" > This is not supported!</canvas> </th>
  351. <td><form action="">
  352. <input type="radio" name="tools" id = "pen" value="pencil" onclick="draw();"> pencil<br>
  353. <input type="radio" name="tools" id = "line" value="line" onclick="draw();"> line<br>
  354. <input type="radio" name="tools" id = "circ" value="circle" onclick="draw();"> circle<br>
  355. <input type="radio" name="tools" id = "rect" value="rectangle" onclick="draw();"> rectangle
  356. </form></td>
  357. </tr>
  358. <tr>
  359. <td>
  360. <select id="color">
  361. <option value="#000000">Black</option>
  362. <option value="#ff0000">Red</option>
  363. <option value="#0000ff">Blue</option>
  364. <option value="#00ff00">Green</option>
  365. <option value="#ffff00">Yellow</option>
  366. </select>
  367. </td>
  368. </tr>
  369. <tr>
  370. <td>
  371. <input type="text" id="Thick" readonly="readonly" value = 1 >
  372. <br>
  373. <input type="button" value="-" onclick="Decreasethick();" />
  374. <input type="button" value="+" onclick="Increasethick();" />
  375. </td>
  376. </tr>
  377. <tr>
  378. <td><input type="button" value="Clear" onclick="clearboard();" /> </td>
  379. </tr>
  380.  
  381. </table>
  382.  
  383.  
  384. </body>
  385. </html>
Add Comment
Please, Sign In to add comment