Subversion Repositories wimsdev

Rev

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

Rev 16844 Rev 16845
Line 248... Line 248...
248
 return math_fun;\
248
 return math_fun;\
249
};");
249
};");
250
break;
250
break;
251
 
251
 
252
case INTERACTIVE:
252
case INTERACTIVE:
-
 
253
 fprintf(js_include_file,"\n/* add mouse support */\
-
 
254
var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0));\
-
 
255
var getMouse = function(e, element){\
-
 
256
   var mx,my;var offsetX = 0,offsetY = 0;\
-
 
257
   while( ( element = element.offsetParent) ){\
-
 
258
     offsetX += element.offsetLeft;offsetY += element.offsetTop;\
-
 
259
   };\
-
 
260
   /*console.log('===');*/\
-
 
261
   if(isTouch){\
-
 
262
      mx = e.pageX - offsetX; my = e.pageY - offsetY;\
-
 
263
   }else{\
253
 fprintf(js_include_file,"\n/* add mouse support */ var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0));var getMouse = function(e,element){var mx,my;var offsetX = 0,offsetY = 0;while( ( element = element.offsetParent) ){offsetX += element.offsetLeft;offsetY += element.offsetTop;};if(isTouch){mx = e.pageX - offsetX;my = e.pageY - offsetY;}else{mx = e.clientX - offsetX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft:document.body.scrollLeft);my = e.clientY - offsetY + (document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop);};return {x: mx, y: my};};");
264
      mx = e.clientX - offsetX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft:document.body.scrollLeft);\
-
 
265
      my = e.clientY - offsetY + (document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop);\
-
 
266
   };\
-
 
267
   /* test if canvas_div is inside a scrollable */\
-
 
268
   const scroll_parent = canvas_div.closest('.wims_scrollable');\
-
 
269
   if (scroll_parent){\
-
 
270
      mx = mx + scroll_parent.scrollLeft;\
-
 
271
      my = my + scroll_parent.scrollTop;\
-
 
272
   }\
-
 
273
   /* If canvas had been resized,, we have to convert these coordinates to original grid*/\
-
 
274
   /*console.log('mx before=' + mx);\
-
 
275
   console.log('xsize='+xsize);\
-
 
276
   console.log('canvas_div.offsetHeight='+canvas_div.offsetWidth);*/\
-
 
277
   mx = (mx * xsize / canvas_div.offsetWidth);\
-
 
278
   /*console.log('mx after='+mx);*/\
-
 
279
   my = (my * ysize / canvas_div.offsetHeight);\
-
 
280
   return {x: mx, y: my};\
-
 
281
};");
254
break;
282
break;
255
case USERDRAW_AND_ZOOM:
283
case USERDRAW_AND_ZOOM:
256
fprintf(js_include_file,"\n/* add zoom support for multidraw */\
284
fprintf(js_include_file,"\n/* add zoom support for multidraw */\
257
function recalculate_userdraw(xmin0,ymin0,xmax0,ymax0){\
285
function recalculate_userdraw(xmin0,ymin0,xmax0,ymax0){\
258
 function x_zoom(px){\
286
 function x_zoom(px){\
Line 710... Line 738...
710
 3=xyoffset
738
 3=xyoffset
711
 4=centered
739
 4=centered
712
*/
740
*/
713
fprintf(js_include_file,"\n/* draw sub sup imitation in canvas */\
741
fprintf(js_include_file,"\n/* draw sub sup imitation in canvas */\
714
function draw_subsup(ctx,x,y,txt,use_offset){\
742
function draw_subsup(ctx,x,y,txt,use_offset){\
715
 var fnt = ctx.font;\
-
 
716
 var S = fnt.replace(/[A-Za-z]/g, '');\
-
 
717
 var s = 0.8*S;\
-
 
718
 var px;if(fnt.indexOf('px')>0){px = 'px';}else{if(fnt.indexOf('em')>0){px = 'em';}else{px = 'pt';}};\
-
 
719
 var C;var c;var len = txt.length;var baseline = 'middle';var space = 0;ctx.save();var subsup=0;\
743
 var C;var c;var len = txt.length;var baseline = 'middle';var space = 0;ctx.save();var subsup=0;\
720
 var m = 0.4*(ctx.measureText(txt).width);\
744
 var m = 0.4*(ctx.measureText(txt).width);\
721
 var h = ctx.measureText('M').width;\
745
 var h = ctx.measureText('M').width;\
722
 switch(use_offset){\
746
 switch(use_offset){\
723
  case 0:break;\
747
  case 0:break;\
Line 725... Line 749...
725
  case 2:x=x+h;break;\
749
  case 2:x=x+h;break;\
726
  case 3:x=x+h;y=y-h;;break;\
750
  case 3:x=x+h;y=y-h;;break;\
727
  case 4:x=x-m;break;\
751
  case 4:x=x-m;break;\
728
  default:break;\
752
  default:break;\
729
 };\
753
 };\
-
 
754
 var S = parseInt(ctx.font) || 10;var s = 0.8*(parseInt(ctx.font)) || 8;\
730
 ctx.font = S+px+' Helvetica';ctx.textBaseline = baseline;\
755
 ctx.font = S+'px Helvetica';ctx.textBaseline = baseline;\
731
 for( c = 0 ; c < len ;c++){\
756
 for( c = 0 ; c < len ;c++){\
732
  C = txt.charAt(c);space = 0;\
757
  C = txt.charAt(c);space = 0;\
733
  if(C == '_'){ctx.font = s+px+' Helvetica';subsup = 1;c++;space = 3;baseline='top';C = txt.charAt(c);}\
758
  if(C == '_'){ctx.font = s+'px Helvetica';subsup = 1;c++;space = 3;baseline='top';C = txt.charAt(c);}\
734
  else\
759
  else\
735
  if(C == '^'){ctx.font = s+px+' Helvetica';subsup = 1;c++;space = 3;baseline='bottom';C = txt.charAt(c);}\
760
  if(C == '^'){ctx.font = s+'px Helvetica';subsup = 1;c++;space = 3;baseline='bottom';C = txt.charAt(c);}\
736
  else\
761
  else\
737
  if(C == ' '){ctx.font = S+px+' Helvetica';if(subsup == 1){space = 0.6*s - (ctx.measureText('M').width);subsup = 0;};baseline = 'middle';}\
762
  if(C == ' '){ctx.font = S+'px Helvetica';if(subsup == 1){space = 0.6*s - (ctx.measureText('M').width);subsup = 0;};baseline = 'middle';}\
738
  else\
763
  else\
739
  if(C >= '0' && C <= '9'){ctx.font = s+'px Helvetica';}\
764
  if(C >= '0' && C <= '9'){ctx.font = s+'px Helvetica';}\
740
  else{ctx.font = S+px+' Helvetica';};\
765
  else{ctx.font = S+'px Helvetica';};\
741
  ctx.textBaseline = baseline;ctx.fillText(C,x,y);x = space + x + ctx.measureText(C).width;\
766
  ctx.textBaseline = baseline;ctx.fillText(C,x,y);x = space + x + ctx.measureText(C).width;\
742
 };\
767
 };\
743
 ctx.stroke();\
768
 ctx.stroke();\
744
 ctx.restore();\
769
 ctx.restore();\
745
 return;\
770
 return;\
Line 1027... Line 1052...
1027
fprintf(js_include_file,"\n/* draw xml */\
1052
fprintf(js_include_file,"\n/* draw xml */\
1028
function centered(xml_div,obj){\
1053
function centered(xml_div,obj){\
1029
 var ww = 0.5*(parseFloat(window.getComputedStyle(xml_div).width));\
1054
 var ww = 0.5*(parseFloat(window.getComputedStyle(xml_div).width));\
1030
 var hh = 0.5*(parseFloat(window.getComputedStyle(xml_div).height));\
1055
 var hh = 0.5*(parseFloat(window.getComputedStyle(xml_div).height));\
1031
 obj.offset = [ ww , hh ];\
1056
 obj.offset = [ ww , hh ];\
-
 
1057
 /*xml_div.style.left = obj.x[0] - obj.offset[0] +'px';\
-
 
1058
 xml_div.style.top  = obj.y[0] - obj.offset[1] +'px';*/\
1032
 xml_div.style.left = obj.x[0] - obj.offset[0] +'px';xml_div.style.top  = obj.y[0] - obj.offset[1] +'px';\
1059
 xml_div.style.left = (obj.x[0] - obj.offset[0])/xsize*100 +'%%';\
-
 
1060
 xml_div.style.top  = (obj.y[0] - obj.offset[1])/ysize*100 +'%%';\
1033
};\
1061
};\
1034
function rad2deg(rad){return rad*180/(Math.PI);};\
1062
function rad2deg(rad){return rad*180/(Math.PI);};\
1035
if( typeof(slidergroup) !== 'object' ){ var slidergroup = [];};\
1063
if( typeof(slidergroup) !== 'object' ){ var slidergroup = [];};\
1036
function draw_xml(obj){\
1064
function draw_xml(obj){\
1037
 var mouse;var xy = [obj.x[0],obj.y[0]];\
1065
 var mouse;var xy = [obj.x[0],obj.y[0]];\
Line 1041... Line 1069...
1041
  xml_div = document.createElement('DIV');\
1069
  xml_div = document.createElement('DIV');\
1042
  canvas_div.appendChild(xml_div);\
1070
  canvas_div.appendChild(xml_div);\
1043
  if( obj.type == 'katex' ){ obj.mathml = LoadKaTeX('html',obj.mathml);};\
1071
  if( obj.type == 'katex' ){ obj.mathml = LoadKaTeX('html',obj.mathml);};\
1044
  xml_div.id = 'xml_div'+obj.id;\
1072
  xml_div.id = 'xml_div'+obj.id;\
1045
  xml_div.innerHTML = obj.mathml;\
1073
  xml_div.innerHTML = obj.mathml;\
1046
  xml_div.style.position = \"absolute\";\
1074
  xml_div.classList.add('canvasdraw_xml');\
1047
  xml_div.style.color = \"rgba(\"+obj.stroke_color+\",\"+obj.stroke_opacity+\")\";\
1075
  xml_div.style.color = \"rgba(\"+obj.stroke_color+\",\"+obj.stroke_opacity+\")\";\
1048
  xml_div.style.font = obj.fontfamily;\
1076
  xml_div.style.font = obj.fontfamily;\
1049
  if( ! obj.rotation_center){obj.rotation_center = [obj.x[0],obj.y[0]];}else{obj.rotation_center=[x2px(obj.rotation_center[0]) ,y2px(obj.rotation_center[1]) ];};\
1077
  if( ! obj.rotation_center){obj.rotation_center = [obj.x[0],obj.y[0]];}else{obj.rotation_center=[x2px(obj.rotation_center[0]) ,y2px(obj.rotation_center[1]) ];};\
1050
  if( obj.use_center == 1 ){if( obj.type == 'image' ){xml_div.addEventListener('load',function(e){centered(xml_div,obj);},true);}else{%s};};\
1078
  if( obj.use_center == 1 ){if( obj.type == 'image' ){xml_div.addEventListener('load',function(e){centered(xml_div,obj);},true);}else{%s};};\
1051
 } else {\
1079
 } else {\
1052
  xml_div = document.getElementById('xml_div'+obj.id );\
1080
  xml_div = document.getElementById('xml_div'+obj.id );\
1053
 };\
1081
 };\
1054
 if( typeof(xml_div) === 'undefined' ){console.log('hmmmmm'); return;};\
1082
 if( typeof(xml_div) === 'undefined' ){console.log('[canvasutil] xml_div undefined'); return;};\
1055
 xml_div.style.left = parseInt(obj.x[0] - obj.offset[0]) +'px';\
1083
 /*xml_div.style.left = parseInt(obj.x[0] - obj.offset[0]) +'px';\
1056
 xml_div.style.top  = parseInt(obj.y[0] - obj.offset[1]) +'px';\
1084
 xml_div.style.top  = parseInt(obj.y[0] - obj.offset[1]) +'px';*/\
-
 
1085
 xml_div.style.left = parseInt((obj.x[0] - obj.offset[0])/xsize*100) +'%%';\
-
 
1086
 xml_div.style.top  = parseInt((obj.y[0] - obj.offset[1])/ysize*100) +'%%';\
1057
 var back_color = 'rgba('+obj.fill_color+','+obj.fill_opacity+')';\
1087
 var back_color = 'rgba('+obj.fill_color+','+obj.fill_opacity+')';\
1058
 var no_color = 'rgba(255,255,255,0)';var dragging = false;\
1088
 var no_color = 'rgba(255,255,255,0)';var dragging = false;\
1059
 if( obj.use_affine != 0 || obj.angle != 0 ){\
1089
 if( obj.use_affine != 0 || obj.angle != 0 ){\
1060
  xml_div.style.transform = 'matrix('+obj.transform[0]+','+obj.transform[1]+','+obj.transform[2]+','+obj.transform[3]+','+obj.transform[4]+','+obj.transform[5]+') rotate('+rad2deg(obj.angle)+'deg)';\
1090
  xml_div.style.transform = 'matrix('+obj.transform[0]+','+obj.transform[1]+','+obj.transform[2]+','+obj.transform[3]+','+obj.transform[4]+','+obj.transform[5]+') rotate('+rad2deg(obj.angle)+'deg)';\
1061
 };\
1091
 };\