function magnifier(e) {
var de = svgNode(e), g, m = {$number:magnification}, s = {$number:sensitivity},
w, h, x, y, x1, y1, m1, xform, n, pos;
while(de) {
pos = svgCursorCoords(e,de);
w = de.width.baseVal.value;
h = de.height.baseVal.value;
for(x = 0; x < de.childNodes.length; ++x) {
n = de.childNodes[x];
if(n.classList && n.classList.contains('svggraph-magnifier')) {
g = n;
break;
}
}
if(g) {
de = null;
} else {
de = de.parentNode;
while(de && de.nodeName != '{$string:namespace}svg')
de = de.parentNode;
}
}
if(!g)
return;
if(pos[0] < 0 || pos[1] < 0 || pos[0] > w || pos[1] > h) {
setattr(g, 'transform', '');
return;
}
x1 = magPan(pos[0], w, s);
y1 = magPan(pos[1], h, s);
m1 = m - 1.0;
x = -x1 * m1;
y = -y1 * m1;
xform = '';
xform += 'translate(' + x + ' ' + y + ')';
xform += 'scale(' + m + ' ' + m + ')';
setattr(g, 'transform', xform);
}
function closeMagnifier(e) {
var de = svgNode(e), g;
if(!de)
return;
g = de.querySelector('.svggraph-magnifier');
if(!g)
return;
setattr(g, 'transform', '');
}
function magPan(x, w, s) {
var x1 = 0.5 * w / s;
if(x <= x1)
return 0;
if(x >= w - x1)
return w;
return ((x - x1) * s / (s - 1));
}
|