/*
 * $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;
    }
}
