Subversion Repositories wimsdev

Rev

Rev 18553 | Rev 18572 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 18553 Rev 18556
Line 303... Line 303...
303
   r = userdraw_radius[p];\
303
   r = userdraw_radius[p];\
304
   userdraw_radius[p] = r_zoom(r);\
304
   userdraw_radius[p] = r_zoom(r);\
305
  };\
305
  };\
306
 };\
306
 };\
307
};");
307
};");
308
break;
308
        break;
309
 
309
 
310
case DRAG_AND_ZOOM:
310
      case DRAG_AND_ZOOM:
311
fprintf(js_include_file,"\n/* add zoom support for drag&drop */\
311
        fprintf(js_include_file,"\n/* add zoom support for drag&drop */\
312
function recalculate_dragdrop(xmin0,ymin0,xmax0,ymax0){\
312
function recalculate_dragdrop(xmin0,ymin0,xmax0,ymax0){\
313
 function x_zoom(px){\
313
 function x_zoom(px){\
314
  var x = parseFloat(px*(xmax0 - xmin0)/xsize + xmin0);\
314
  var x = parseFloat(px*(xmax0 - xmin0)/xsize + xmin0);\
315
  return parseFloat(x*xsize/(xmax - xmin) - xsize*xmin/(xmax - xmin));\
315
  return parseFloat(x*xsize/(xmax - xmin) - xsize*xmin/(xmax - xmin));\
316
 };\
316
 };\
Line 329... Line 329...
329
   dragstuff.shapes[p].x[i] = x_zoom(x);\
329
   dragstuff.shapes[p].x[i] = x_zoom(x);\
330
   dragstuff.shapes[p].y[i] = y_zoom(y);\
330
   dragstuff.shapes[p].y[i] = y_zoom(y);\
331
  };\
331
  };\
332
 };\
332
 };\
333
};");
333
};");
334
break;
334
        break;
335
 
-
 
336
case JSPLOT_AND_ZOOM:
335
      case JSPLOT_AND_ZOOM:
337
fprintf(js_include_file,"\n/* add zoom support for jscurves */\
336
        fprintf(js_include_file,"\n/* add zoom support for jscurves */\
338
function redraw_jsplot(){for(var p=0; p <= all_jsplots;p++){try{var fun = eval('js_plot'+p);fun();}catch(e){};};};");
337
function redraw_jsplot(){for(var p=0; p <= all_jsplots;p++){try{var fun = eval('js_plot'+p);fun();}catch(e){};};};");
339
break;
338
        break;
340
 
-
 
341
case JS_ZOOM:
339
      case JS_ZOOM:
342
fprintf(js_include_file,"\n/* add zoom support */\
340
        fprintf(js_include_file,"\n/* add zoom support */\
343
var x_min_start = xmin;var x_max_start = xmax;var y_min_start = ymin;var y_max_start = ymax;\
341
var x_min_start = xmin;var x_max_start = xmax;var y_min_start = ymin;var y_max_start = ymax;\
344
var zoomcanvas = create_canvas%d(%d,xsize,ysize);\
342
var zoomcanvas = create_canvas%d(%d,xsize,ysize);\
345
function redraw_canvas%d(key){\
343
function redraw_canvas%d(key){\
346
 var xmin0 = xmin;var xmax0 = xmax;var ymin0 = ymin;var ymax0 = ymax;\
344
 var xmin0 = xmin;var xmax0 = xmax;var ymin0 = ymin;var ymax0 = ymax;\
347
 switch(key){\
345
 switch(key){\
Line 386... Line 384...
386
   return;\
384
   return;\
387
  };\
385
  };\
388
 };\
386
 };\
389
 return;\
387
 return;\
390
};",canvas_root_id,ZOOM_CANVAS,canvas_root_id,canvas_root_id,canvas_root_id);
388
};",canvas_root_id,ZOOM_CANVAS,canvas_root_id,canvas_root_id,canvas_root_id);
391
break;
389
        break;
392
 
390
 
393
case DRAW_FILL_PATTERN:
391
      case DRAW_FILL_PATTERN:
394
fprintf(js_include_file,"\n /* add fill pattern */ \
392
        fprintf(js_include_file,"\n /* add fill pattern */ \
395
function create_Pattern(x0,y0,type,color){document.body.style.cursor = 'wait';var idx = Math.ceil(1000*(Math.random()));var canvas = create_canvas%d(idx,xsize,ysize);canvas.style.visibility = 'hidden';var ctx = canvas.getContext(\"2d\");var x;var y;var dx = 6;var dy = 6;ctx.lineWidth = 1;ctx.strokeStyle = color;ctx.fillStyle = color;var pat;\
393
function create_Pattern(x0,y0,type,color){document.body.style.cursor = 'wait';var idx = Math.ceil(1000*(Math.random()));var canvas = create_canvas%d(idx,xsize,ysize);canvas.style.visibility = 'hidden';var ctx = canvas.getContext(\"2d\");var x;var y;var dx = 6;var dy = 6;ctx.lineWidth = 1;ctx.strokeStyle = color;ctx.fillStyle = color;var pat;\
396
 switch(type){\
394
 switch(type){\
397
  case 2: for( x = 0 ; x < xsize ; x = x + dx ){ctx.beginPath();ctx.moveTo(x,0);ctx.lineTo(x,ysize);ctx.closePath();ctx.stroke();};for( y = 0 ; y < ysize; y = y + dy ){ctx.beginPath();ctx.moveTo(0,y);ctx.lineTo(xsize,y);ctx.closePath();ctx.stroke();}; pat = ctx.createPattern(canvas,\"no-repeat\");break;\
395
  case 2: for( x = 0 ; x < xsize ; x = x + dx ){ctx.beginPath();ctx.moveTo(x,0);ctx.lineTo(x,ysize);ctx.closePath();ctx.stroke();};for( y = 0 ; y < ysize; y = y + dy ){ctx.beginPath();ctx.moveTo(0,y);ctx.lineTo(xsize,y);ctx.closePath();ctx.stroke();}; pat = ctx.createPattern(canvas,\"no-repeat\");break;\
398
  case 3: y = ysize;ctx.beginPath();for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(x,0);ctx.lineTo(xsize,y);y = y - dy;};y = 0;for( x = xsize ; x > 0 ; x = x - dx){ctx.moveTo(x,ysize);ctx.lineTo(0,y); y = y + dy;};ctx.closePath();ctx.stroke(); pat = ctx.createPattern(canvas,\"no-repeat\");break;\
396
  case 3: y = ysize;ctx.beginPath();for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(x,0);ctx.lineTo(xsize,y);y = y - dy;};y = 0;for( x = xsize ; x > 0 ; x = x - dx){ctx.moveTo(x,ysize);ctx.lineTo(0,y); y = y + dy;};ctx.closePath();ctx.stroke(); pat = ctx.createPattern(canvas,\"no-repeat\");break;\
399
  case 4: y = ysize;ctx.beginPath();for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(x,0); ctx.lineTo(xsize,y); y = y - dy;};y = 0;for( x = xsize ; x > 0 ; x = x - dx){ctx.moveTo(x,ysize);ctx.lineTo(0,y);y = y + dy;};y = 0;for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(x,0); ctx.lineTo(0,y); y = y + dy;};y = 0;for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(xsize,y);ctx.lineTo(x,ysize);y = y + dy;};ctx.closePath(); ctx.stroke(); pat = ctx.createPattern(canvas,\"no-repeat\");break;\
397
  case 4: y = ysize;ctx.beginPath();for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(x,0); ctx.lineTo(xsize,y); y = y - dy;};y = 0;for( x = xsize ; x > 0 ; x = x - dx){ctx.moveTo(x,ysize);ctx.lineTo(0,y);y = y + dy;};y = 0;for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(x,0); ctx.lineTo(0,y); y = y + dy;};y = 0;for( x = 0 ; x < xsize ; x = x + dx ){ctx.moveTo(xsize,y);ctx.lineTo(x,ysize);y = y + dy;};ctx.closePath(); ctx.stroke(); pat = ctx.createPattern(canvas,\"no-repeat\");break;\
Line 401... Line 399...
401
  case 6: alert('wait for image '+(image_cnt+1)+'...');pat = image_patterns[image_cnt];image_cnt++;break;\
399
  case 6: alert('wait for image '+(image_cnt+1)+'...');pat = image_patterns[image_cnt];image_cnt++;break;\
402
  default: break;\
400
  default: break;\
403
 };\
401
 };\
404
 document.body.style.cursor = 'default';return pat;\
402
 document.body.style.cursor = 'default';return pat;\
405
};",canvas_root_id);
403
};",canvas_root_id);
406
break;
404
        break;
407
 
405
 
408
case JS_TRANSFORM_MOUSE:
406
      case JS_TRANSFORM_MOUSE:
409
/* identify mouse coordinates on transformed objects using command affine */
407
/* identify mouse coordinates on transformed objects using command affine */
410
fprintf(js_include_file,"\n/* translate mouse */\
408
        fprintf(js_include_file,"\n/* translate mouse */\
411
function transform_mouse(mx,my,obj){\
409
function transform_mouse(mx,my,obj){\
412
if( typeof(obj.affine_matrix) === 'undefined' ){console.log('translate_mouse() affine_matrix undefined');{x:mx,y:my};};\
410
if( typeof(obj.affine_matrix) === 'undefined' ){console.log('translate_mouse() affine_matrix undefined');{x:mx,y:my};};\
413
var m = obj.affine_matrix;\
411
var m = obj.affine_matrix;\
414
var d = 1/(m[0]*m[3]-m[1]*m[2]);\
412
var d = 1/(m[0]*m[3]-m[1]*m[2]);\
415
var im = [ m[3]*d, -m[1]*d,-m[2]*d,m[0]*d,d*(m[2]*m[5]-m[3]*m[4]),d*(m[1]*m[4]-m[0]*m[5]) ];\
413
var im = [ m[3]*d, -m[1]*d,-m[2]*d,m[0]*d,d*(m[2]*m[5]-m[3]*m[4]),d*(m[1]*m[4]-m[0]*m[5]) ];\
416
return { x:mx*im[0]+my*im[2]+im[4], y:mx*im[1]+my*im[3]+im[5] };};");
414
return { x:mx*im[0]+my*im[2]+im[4], y:mx*im[1]+my*im[3]+im[5] };};");
417
break;
415
        break;
418
 
-
 
419
case JS_ROTATE_MOUSE:
416
      case JS_ROTATE_MOUSE:
420
/*
417
/*
421
identify mouse coordinates on rotated STRING (no 14) objects used for command rotate :
418
identify mouse coordinates on rotated STRING (no 14) objects used for command rotate :
422
faster than transform matrix
419
faster than transform matrix
423
*/
420
*/
424
fprintf(js_include_file,"\n/* rotate mouse */\
421
        fprintf(js_include_file,"\n/* rotate mouse */\
425
function rotate_mouse(mx,my,obj){\
422
function rotate_mouse(mx,my,obj){\
426
 if( typeof(obj.angle) === 'undefined' ){console.log('rotate_mouse() angle undefined');return {x:mx,y:my};};\
423
 if( typeof(obj.angle) === 'undefined' ){console.log('rotate_mouse() angle undefined');return {x:mx,y:my};};\
427
 var cos = Math.cos(obj.angle);\
424
 var cos = Math.cos(obj.angle);\
428
 var sin = Math.sin(obj.angle);\
425
 var sin = Math.sin(obj.angle);\
429
 var xc = obj.rotation_center[0];\
426
 var xc = obj.rotation_center[0];\
430
 var yc = obj.rotation_center[1];\
427
 var yc = obj.rotation_center[1];\
431
 var x_r = parseInt((cos * (mx - xc)) + (sin * (my - yc)) + xc);\
428
 var x_r = parseInt((cos * (mx - xc)) + (sin * (my - yc)) + xc);\
432
 var y_r = parseInt((cos * (my - yc)) - (sin * (mx - xc)) + yc);\
429
 var y_r = parseInt((cos * (my - yc)) - (sin * (mx - xc)) + yc);\
433
 return {x:x_r,y:y_r};};");
430
 return {x:x_r,y:y_r};};");
434
break;
431
        break;
435
 
-
 
436
case JS_FIND_ANGLE:
432
      case JS_FIND_ANGLE:
437
 fprintf(js_include_file,"\n/* function find_angle() */ function find_angle(xc,yc,x1,y1){var dx = x1 - xc;var dy = yc - y1;return Math.atan2(dx,dy);};");
433
        fprintf(js_include_file,"\n/* function find_angle() */ function find_angle(xc,yc,x1,y1){var dx = x1 - xc;var dy = yc - y1;return Math.atan2(dx,dy);};");
438
break;
434
        break;
439
 
-
 
440
case DRAG_EXTERNAL_IMAGE:
435
      case DRAG_EXTERNAL_IMAGE:
441
/*
436
/*
442
the external_canvas is already created: it needs to be FIRST in order to do some drawing onto it
437
the external_canvas is already created: it needs to be FIRST in order to do some drawing onto it
443
reply is object{} and identical to reply from dragstuff library for drag&drop&click
438
reply is object{} and identical to reply from dragstuff library for drag&drop&click
444
*/
439
*/
445
fprintf(js_include_file,"\n/* drag external images */\
440
        fprintf(js_include_file,"\n/* drag external images */\
446
var external_ctx = external_canvas.getContext(\"2d\");\
441
var external_ctx = external_canvas.getContext(\"2d\");\
447
var external_canvas_rect = external_canvas.getBoundingClientRect();\
442
var external_canvas_rect = external_canvas.getBoundingClientRect();\
448
canvas_div.addEventListener(\"mousedown\",setxy,false);\
443
canvas_div.addEventListener(\"mousedown\",setxy,false);\
449
canvas_div.addEventListener(\"mouseup\",dragstop,false);\
444
canvas_div.addEventListener(\"mouseup\",dragstop,false);\
450
canvas_div.addEventListener(\"mousemove\",dragxy,false);\
445
canvas_div.addEventListener(\"mousemove\",dragxy,false);\
Line 556... Line 551...
556
  };\
551
  };\
557
 } else {\
552
 } else {\
558
  selected_image = null;\
553
  selected_image = null;\
559
 };\
554
 };\
560
};");
555
};");
561
break;
556
        break;
562
 
-
 
563
case DRAW_EXTERNAL_IMAGE:
557
      case DRAW_EXTERNAL_IMAGE:
564
/*
558
/*
565
the external_canvas is already created: it needs to be FIRST in order to do some drawing onto it
559
the external_canvas is already created: it needs to be FIRST in order to do some drawing onto it
566
only drag_xy !
560
only drag_xy !
567
snaptogrid | xsnaptogrid | ysnaptogrid works
561
snaptogrid | xsnaptogrid | ysnaptogrid works
568
14/5/2019
562
14/5/2019
569
on heavy styled wims (unice.fr etc problems with mouse?
563
on heavy styled wims (unice.fr etc problems with mouse?
570
now uniform method of retreiving mouse coordinates getMouse()
564
now uniform method of retreiving mouse coordinates getMouse()
571
*/
565
*/
572
fprintf(js_include_file,"\n/* draw external images */\
566
        fprintf(js_include_file,"\n/* draw external images */\
573
function draw_external_image(URL,sx,sy,swidth,sheight,x0,y0,width,height,use_offset,resize){\
567
function draw_external_image(URL,sx,sy,swidth,sheight,x0,y0,width,height,use_offset,resize){\
574
 var external_ctx = image_copy_canvas.getContext(\"2d\");\n\
568
 var external_ctx = image_copy_canvas.getContext(\"2d\");\n\
575
 var image = new Image();\
569
 var image = new Image();\
576
 image.src = URL;\
570
 image.src = URL;\
577
 image.onload = function(){\
571
 image.onload = function(){\
Line 592... Line 586...
592
  if(use_offset == 4 ){img[5] = parseInt(img[5] - 0.5*width);img[6] = parseInt(img[6] - 0.5*height);};\
586
  if(use_offset == 4 ){img[5] = parseInt(img[5] - 0.5*width);img[6] = parseInt(img[6] - 0.5*height);};\
593
  img[7] = width;img[8] = height;\
587
  img[7] = width;img[8] = height;\
594
  external_ctx.drawImage(img[0],img[1],img[2],img[3],img[4],img[5],img[6],img[7],img[8]);\
588
  external_ctx.drawImage(img[0],img[1],img[2],img[3],img[4],img[5],img[6],img[7],img[8]);\
595
 };\
589
 };\
596
};");
590
};");
597
break;
591
        break;
598
 
-
 
599
case DRAW_BEZIER:
592
      case DRAW_BEZIER:
600
fprintf(js_include_file,"\n/* draw bezier curve */\
593
        fprintf(js_include_file,"\n/* draw bezier curve */\
601
if( typeof(all_fill_patterns) != 'object' ){ var all_fill_patterns = []; };\
594
if( typeof(all_fill_patterns) != 'object' ){ var all_fill_patterns = []; };\
602
function draw_bezier(canvas_type,linewidth,xy_points,fill_color,fill_opacity,stroke_color,stroke_opacity,use_filled,use_dashed,dashtype0,dashtype1,use_rotate,angle){\
595
function draw_bezier(canvas_type,linewidth,xy_points,fill_color,fill_opacity,stroke_color,stroke_opacity,use_filled,use_dashed,dashtype0,dashtype1,use_rotate,angle){\
603
 var obj;\
596
 var obj;\
604
 if( document.getElementById(\"wims_canvas%d\"+canvas_type) ){\
597
 if( document.getElementById(\"wims_canvas%d\"+canvas_type) ){\
605
  obj = document.getElementById(\"wims_canvas%d\"+canvas_type);\
598
  obj = document.getElementById(\"wims_canvas%d\"+canvas_type);\
Line 618... Line 611...
618
 var color = \"rgba(\"+fill_color+\",\"+fill_opacity+\")\";\
611
 var color = \"rgba(\"+fill_color+\",\"+fill_opacity+\")\";\
619
 if(use_filled > 1 ){ if(! all_fill_patterns[use_filled] ){ var pat = create_Pattern(0,0,use_filled,color); all_fill_patterns[use_filled] = pat;};ctx.fillStyle = all_fill_patterns[use_filled]; } else { ctx.fillStyle = color;};\
612
 if(use_filled > 1 ){ if(! all_fill_patterns[use_filled] ){ var pat = create_Pattern(0,0,use_filled,color); all_fill_patterns[use_filled] = pat;};ctx.fillStyle = all_fill_patterns[use_filled]; } else { ctx.fillStyle = color;};\
620
 ctx.stroke();\
613
 ctx.stroke();\
621
 ctx.restore();\
614
 ctx.restore();\
622
};",canvas_root_id,canvas_root_id,canvas_root_id);
615
};",canvas_root_id,canvas_root_id,canvas_root_id);
623
break;
616
        break;
624
 
-
 
625
case DRAW_GRIDFILL:/* not used for userdraw */
617
      case DRAW_GRIDFILL:/* not used for userdraw */
626
fprintf(js_include_file,"\n/* draw gridfill */\
618
        fprintf(js_include_file,"\n/* draw gridfill */\
627
var grid_fill_pattern;\
619
var grid_fill_pattern;\
628
function draw_gridfill(canvas_type,x0,y0,dx,dy,linewidth,color,opacity,xsize,ysize,use_userdraw){\
620
function draw_gridfill(canvas_type,x0,y0,dx,dy,linewidth,color,opacity,xsize,ysize,use_userdraw){\
629
 if( dx == 0 || dy == 0 ){alert(\"increment is zero !!! \");return;};\
621
 if( dx == 0 || dy == 0 ){alert(\"increment is zero !!! \");return;};\
630
 var fc = %d+canvas_type;\
622
 var fc = %d+canvas_type;\
631
 var obj = create_canvas%d(fc,xsize,ysize);\
623
 var obj = create_canvas%d(fc,xsize,ysize);\
632
 var ctx = obj.getContext('2d');\
624
 var ctx = obj.getContext('2d');\
633
 var x,y;\
625
 var x,y;\
634
 ctx.fillStyle='rgba(255,255,255,0.01)';\
626
 ctx.fillStyle='rgba(255,255,255,0.01)';\
635
 ctx.rect(0,0,xsize,ysize);\
627
 ctx.rect(0,0,xsize,ysize);\
636
 ctx.fill();\
628
 ctx.fill();\
637
 ctx.lineWidth = linewidth;\
629
 ctx.lineWidth = linewidth;\
638
 ctx.strokeStyle=\"rgba(\"+color+\",0.01)\";\
630
 ctx.strokeStyle=\"rgba(\"+color+\",0.01)\";\
639
 for( x = 0 ; x <= xsize ; x = x + dx ){\
631
 for( x = 0 ; x <= xsize ; x = x + dx ){\
640
  ctx.beginPath();\
632
  ctx.beginPath();\
641
  ctx.moveTo(x,0);\
633
  ctx.moveTo(x,0);\
Line 653... Line 645...
653
 if( use_userdraw ){\
645
 if( use_userdraw ){\
654
  grid_fill_pattern = ctx;\
646
  grid_fill_pattern = ctx;\
655
 } else {\
647
 } else {\
656
  setTimeout(function(){ filltoborder( x0,y0,color,color,canvas_type,true,ctx); },500);};return;\
648
  setTimeout(function(){ filltoborder( x0,y0,color,color,canvas_type,true,ctx); },500);};return;\
657
};",canvas_root_id,canvas_root_id);
649
};",canvas_root_id,canvas_root_id);
658
break;
650
        break;
659
 
-
 
660
case DRAW_IMAGEFILL:/* not  used for userdraw */
651
      case DRAW_IMAGEFILL:/* not  used for userdraw */
661
fprintf(js_include_file,"\n/* draw imagefill */\
652
        fprintf(js_include_file,"\n/* draw imagefill */\
662
function draw_imagefill(canvas_type,x0,y0,URL,xsize,ysize,use_userdraw,use_scaling){\
653
function draw_imagefill(canvas_type,x0,y0,URL,xsize,ysize,use_userdraw,use_scaling){\
663
 var fc = %d+canvas_type;\
654
 var fc = %d+canvas_type;\
664
 var obj = create_canvas%d(fc,xsize,ysize);\
655
 var obj = create_canvas%d(fc,xsize,ysize);\
665
 var ctx = obj.getContext('2d');\
656
 var ctx = obj.getContext('2d');\
666
 var img = new Image();\
657
 var img = new Image();\
Line 683... Line 674...
683
   setTimeout(function(){ filltoborder( x0,y0,'red','red',canvas_type,true,ctx); },500);\
674
   setTimeout(function(){ filltoborder( x0,y0,'red','red',canvas_type,true,ctx); },500);\
684
  };\
675
  };\
685
 };\
676
 };\
686
};",canvas_root_id,canvas_root_id);
677
};",canvas_root_id,canvas_root_id);
687
        break;
678
        break;
688
 
-
 
689
      case DRAW_DOTFILL:/* not  used for userdraw */
679
      case DRAW_DOTFILL:/* not  used for userdraw */
690
        fprintf(js_include_file,"\n/* draw dotfill */\
680
        fprintf(js_include_file,"\n/* draw dotfill */\
691
var dot_fill_pattern;\
681
var dot_fill_pattern;\
692
function draw_dotfill(canvas_type,x0,y0,dx,dy,radius,color,opacity,xsize,ysize,use_userdraw){\
682
function draw_dotfill(canvas_type,x0,y0,dx,dy,radius,color,opacity,xsize,ysize,use_userdraw){\
693
if( dx == 0 || dy == 0 ){alert(\"increment is zero !!! \");return;};\
683
if( dx == 0 || dy == 0 ){alert(\"increment is zero !!! \");return;};\
Line 702... Line 692...
702
 ctx.strokeStyle=\"rgba(\"+color+\",0.01)\";\
692
 ctx.strokeStyle=\"rgba(\"+color+\",0.01)\";\
703
 for( x = 0 ; x < xsize ; x = x + dx ){\
693
 for( x = 0 ; x < xsize ; x = x + dx ){\
704
  for( y = 0 ; y < ysize ; y = y + dy ){\
694
  for( y = 0 ; y < ysize ; y = y + dy ){\
705
   ctx.beginPath();\
695
   ctx.beginPath();\
706
   ctx.arc(x,y,radius,0,2*Math.PI,false);\
696
   ctx.arc(x,y,radius,0,2*Math.PI,false);\
707
   ctx.closePath();\
697
   ctx.closePath();\
708
   ctx.fill();\
698
   ctx.fill();\
709
  };\
699
  };\
710
 };\
700
 };\
711
 if( use_userdraw ){\
701
 if( use_userdraw ){\
712
  dot_fill_pattern = ctx;\
702
  dot_fill_pattern = ctx;\
Line 835... Line 825...
835
};\
825
};\
836
ctx.closePath();\
826
ctx.closePath();\
837
ctx.stroke();\
827
ctx.stroke();\
838
if( use_userdraw ){\
828
if( use_userdraw ){\
839
 diamond_fill_pattern = ctx;\
829
 diamond_fill_pattern = ctx;\
840
}\
830
}\
841
else\
831
else\
842
{\
832
{\
843
 setTimeout(function(){ filltoborder( x0,y0,color,color,canvas_type,true,ctx); },500);\
833
 setTimeout(function(){ filltoborder( x0,y0,color,color,canvas_type,true,ctx); },500);\
844
};\
834
};\
845
return;\
835
return;\
846
}",canvas_root_id,canvas_root_id);
836
}",canvas_root_id,canvas_root_id);
Line 881... Line 871...
881
{\
871
{\
882
 setTimeout(function(){ filltoborder( x0,y0,color,color,canvas_type,true,ctx); },500);\
872
 setTimeout(function(){ filltoborder( x0,y0,color,color,canvas_type,true,ctx); },500);\
883
};\
873
};\
884
return;};",canvas_root_id,canvas_root_id);
874
return;};",canvas_root_id,canvas_root_id);
885
        break;
875
        break;
886
 
-
 
887
      case DRAW_LINES:/*  used for js-tracing */
876
      case DRAW_LINES:/*  used for js-tracing */
888
        fprintf(js_include_file,"\n/* draw lines */\
877
        fprintf(js_include_file,"\n/* draw lines */\
889
function calc_line(x1,x2,y1,y2){\
878
function calc_line(x1,x2,y1,y2){\
890
 var marge = 2;\
879
 var marge = 2;\
891
 if(x1 < x2+marge && x1>x2-marge){\
880
 if(x1 < x2+marge && x1>x2-marge){\
Line 915... Line 904...
915
  }\
904
  }\
916
  ctx.restore();\
905
  ctx.restore();\
917
  return;\
906
  return;\
918
 };");
907
 };");
919
        break;
908
        break;
920
 
-
 
921
      case DRAW_CROSSHAIRS:/*  used for tracing */
909
      case DRAW_CROSSHAIRS:/*  used for tracing */
922
        fprintf(js_include_file,"\n/* draw crosshairs  */\
910
        fprintf(js_include_file,"\n/* draw crosshairs  */\
923
var draw_crosshairs = function(ctx,x_points,y_points,line_width,crosshair_size,stroke_color,stroke_opacity,use_rotate,angle){\
911
var draw_crosshairs = function(ctx,x_points,y_points,line_width,crosshair_size,stroke_color,stroke_opacity,use_rotate,angle){\
924
 ctx.save();\
912
 ctx.save();\
925
 if(use_rotate == 1 ){ctx.rotate(angle*Math.PI/180);}\
913
 if(use_rotate == 1 ){ctx.rotate(angle*Math.PI/180);}\
Line 1617... Line 1605...
1617
   if(skip == 0 ){\
1605
   if(skip == 0 ){\
1618
    skip = parseInt(1.4*font_size/ystep);\
1606
    skip = parseInt(1.4*font_size/ystep);\
1619
    disp_cnt = cnt.toFixed(prec);\
1607
    disp_cnt = cnt.toFixed(prec);\
1620
    if(f_x == -1 ){corr = parseInt(zero_x - (2 + tics_length + ctx.measureText(disp_cnt).width));};\
1608
    if(f_x == -1 ){corr = parseInt(zero_x - (2 + tics_length + ctx.measureText(disp_cnt).width));};\
1621
    ctx.fillText(disp_cnt,parseInt(corr),parseInt(p+(0.4*font_size)));\
1609
    ctx.fillText(disp_cnt,parseInt(corr),parseInt(p+(0.4*font_size)));\
1622
   } else {\
1610
   } else {\
1623
    skip--;\
1611
    skip--;\
1624
   };\
1612
   };\
1625
   cnt = cnt + ymajor;\
1613
   cnt = cnt + ymajor;\
1626
  };\
1614
  };\
1627
 };\
1615
 };\
Line 1800... Line 1788...
1800
  };\
1788
  };\
1801
 };\
1789
 };\
1802
 ctx.restore();\
1790
 ctx.restore();\
1803
};",canvas_root_id,canvas_root_id,canvas_root_id);
1791
};",canvas_root_id,canvas_root_id,canvas_root_id);
1804
        break;
1792
        break;
1805
 
-
 
1806
      case DRAW_JSBOXPLOT:
1793
      case DRAW_JSBOXPLOT:
1807
        fprintf(js_include_file,"\n/* draw jsboxplots */\
1794
        fprintf(js_include_file,"\n/* draw jsboxplots */\
1808
if( typeof(all_fill_patterns) != 'object' ){ var all_fill_patterns = []; };\
1795
if( typeof(all_fill_patterns) != 'object' ){ var all_fill_patterns = []; };\
1809
function statistics(data){\
1796
function statistics(data){\
1810
 var len = data.length;\
1797
 var len = data.length;\