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 |
|
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+ |
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+ |
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+ |
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+ |
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+ |
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] + |
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. |
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( |
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 | };\ |