source: [view]
matrix = matrix || m.identity;
var f1 = m.multiplyPoint(matrix, grad.x1, grad.y1),
f2 = m.multiplyPoint(matrix, grad.x2, grad.y2),
angle = Math.atan2(f2.y - f1.y, f2.x - f1.x),
project = m.project(f2.x - f1.x, f2.y - f1.y),
pf1 = m.multiplyPoint(project, f1),
pf2 = m.multiplyPoint(project, f2),
shiftAndRotate = new m.Matrix2D([m.rotate(-angle), {dx: -pf1.x, dy: -pf1.y}]),
scale = m.multiplyPoint(shiftAndRotate, pf2).x,
//comboMatrix = new m.Matrix2D([shiftAndRotate, project, matrix]),
// bbox-specific calculations
points = [
getPoint(tl.x, tl.y, matrix, project, shiftAndRotate, scale),
getPoint(rb.x, rb.y, matrix, project, shiftAndRotate, scale),
getPoint(tl.x, rb.y, matrix, project, shiftAndRotate, scale),
getPoint(rb.x, tl.y, matrix, project, shiftAndRotate, scale)
].sort(sortPoints),
from = points[0].o,
to = points[3].o,
stops = dojox.gfx.gradient.rescale(grad.colors, from, to),
//angle2 = Math.atan2(Math.abs(points[3].r.y - points[0].r.y) * (f2.y - f1.y), Math.abs(points[3].r.x - points[0].r.x) * (f2.x - f1.x));
angle2 = Math.atan2(points[3].r.y - points[0].r.y, points[3].r.x - points[0].r.x);
return {
type: "linear",
x1: points[0].p.x, y1: points[0].p.y, x2: points[3].p.x, y2: points[3].p.y,
colors: stops,
// additional helpers (for VML)
angle: angle
};