/*
* $Id: gnuplot_common.js,v 1.2 2009/05/29 03:14:48 sfeam Exp $
*/
// Shared helper routines for gnuplot's canvas terminal driver.
// Link to this file by reference rather than including the function definitions
// in every *.js file produced by the canvas terminal.
//
function L(x,y) {
if (zoomed) {
zoom = zoomXY(x/10.0,y/10.0);
ctx.lineTo(zoom.x,zoom.y);
} else
ctx.lineTo(x/10.0,y/10.0);
}
function M(x,y) {
if (zoomed) {
zoom = zoomXY(x/10.0,y/10.0);
ctx.moveTo(zoom.x,zoom.y);
} else
ctx.moveTo(x/10.0,y/10.0);
}
function R(x,y,w,h) {
if (zoomed) {
zoom = zoomXY(x/10.0,y/10.0);
ctx.fillRect(zoom.x, zoom.y, zoomW(w/10.0), zoomH(h/10.0));
} else
ctx.fillRect(x/10.0, y/10.0, w/10.0, h/10.0);
}
function T(x,y,fontsize,justify,string) {
xx = x/10.0; yy = y/10.0;
if (zoomed) {
zoom = zoomXY(xx,yy);
if (zoom.clip) return;
xx = zoom.x; yy = zoom.y;
if (plot_xmin < xx && xx < plot_xmax && plot_ybot > yy && yy > plot_ytop)
if ((typeof(zoom_text) != "undefined") && (zoom_text == true))
fontsize = Math.sqrt(zoomW(fontsize)*zoomH(fontsize));
}
if (justify=="") ctx.drawText("sans", fontsize, xx, yy, string);
else if (justify=="Right") ctx.drawTextRight("sans", fontsize, xx, yy, string);
else if (justify=="Center") ctx.drawTextCenter("sans", fontsize, xx, yy, string);
}
function TR(x,y,angle,fontsize,justify,string) {
ctx.save(); xx = x/10.0; yy = y/10.0;
if (zoomed) {zoom = zoomXY(xx,yy); ctx.translate(zoom.x,zoom.y);}
else ctx.translate(xx,yy);
ctx.rotate(angle * Math.PI / 180);
if (justify=="") ctx.drawText("sans", fontsize, 0, 0, string);
else if (justify=="Right") ctx.drawTextRight("sans", fontsize, 0, 0, string);
else if (justify=="Center") ctx.drawTextCenter("sans", fontsize, 0, 0, string);
ctx.restore();
}
function bp(x,y) // begin polygon
{ ctx.beginPath(); M(x,y); }
function cfp() // close and fill polygon
{ ctx.closePath(); ctx.fill(); }
function cfsp() // close and fill polygon with stroke color
{ ctx.closePath(); ctx.fillStyle = ctx.strokeStyle; ctx.fill(); }
function Dot(x,y) {
xx = x; yy = y;
if (zoomed) {zoom = zoomXY(xx,yy); xx = zoom.x; yy = zoom.y; if (zoom.clip) return;}
ctx.strokeRect(xx,yy,0.5,0.5);
}
function Pt(N,x,y,w) {
xx = x; yy = y;
if (zoomed) {zoom = zoomXY(xx,yy); xx = zoom.x; yy = zoom.y; if (zoom.clip) return;}
switch (N)
{
case 0:
ctx.beginPath();
ctx.moveTo(xx-w,yy); ctx.lineTo(xx+w,yy);
ctx.moveTo(xx,yy-w); ctx.lineTo(xx,yy+w);
ctx.stroke();
break;
case 1:
ww = w * 3/4;
ctx.beginPath();
ctx.moveTo(xx-ww,yy-ww); ctx.lineTo(xx+ww,yy+ww);
ctx.moveTo(xx+ww,yy-ww); ctx.lineTo(xx-ww,yy+ww);
ctx.stroke();
break;
case 2:
Pt(0,x,y,w); Pt(1,x,y,w);
break;
case 3:
ctx.strokeRect(xx-w/2,yy-w/2,w,w);
break;
case 4:
ctx.save(); ctx.strokeRect(xx-w/2,yy-w/2,w,w); ctx.restore();
ctx.fillRect(xx-w/2,yy-w/2,w,w);
break;
case 5:
ctx.beginPath(); ctx.arc(xx,yy,w/2,0,Math.PI*2,true); ctx.stroke();
break;
default:
case 6:
ctx.beginPath(); ctx.arc(xx,yy,w/2,0,Math.PI*2,true); ctx.fill();
break;
case 7:
ctx.beginPath();
ctx.moveTo(xx,yy-w); ctx.lineTo(xx-w,yy+w/2); ctx.lineTo(xx+w,yy+w/2);
ctx.closePath();
ctx.stroke();
break;
case 8:
ctx.beginPath();
ctx.moveTo(xx,yy-w); ctx.lineTo(xx-w,yy+w/2); ctx.lineTo(xx+w,yy+w/2);
ctx.closePath();
ctx.fill();
break;
}
}