Radial Gradients

Sync with latest SVG-Edit, which 
supports radial gradients.
This commit is contained in:
Jacques Distler 2010-03-10 19:02:40 -06:00
parent 9ed0772978
commit 7e7ae4c6f0
7 changed files with 1026 additions and 379 deletions

View file

@ -943,6 +943,14 @@ function BatchCommand(text) {
$(svgroot).appendTo(container);
var opac_ani = document.createElementNS(svgns, 'animate');
$(opac_ani).attr({
attributeName: 'opacity',
begin: 'indefinite',
dur: 1,
fill: 'freeze'
}).appendTo(svgroot);
//nonce to uniquify id's
var nonce = Math.floor(Math.random()*100001);
var randomize_ids = false;
@ -1501,11 +1509,11 @@ function BatchCommand(text) {
}
});
var lgrads = svgcontent.getElementsByTagNameNS(svgns, "linearGradient"),
var grads = $(svgcontent).find("linearGradient, radialGradient");
grad_ids = [],
i = lgrads.length;
i = grads.length;
while (i--) {
var grad = lgrads[i];
var grad = grads[i];
var id = grad.id;
if($.inArray(id, grad_uses) == -1) {
// Not found, so remove
@ -1600,7 +1608,7 @@ function BatchCommand(text) {
// map various namespaces to our fixed namespace prefixes
// (the default xmlns attribute itself does not get a prefix)
if(!attr.namespaceURI || nsMap[attr.namespaceURI]) {
if(!attr.namespaceURI || attr.namespaceURI == svgns || nsMap[attr.namespaceURI]) {
out.push(attr.nodeName); out.push("=\"");
out.push(attrVal); out.push("\"");
}
@ -3677,6 +3685,21 @@ function BatchCommand(text) {
} else if (element != null) {
canvas.addedNew = true;
var ani_dur = .2, c_ani;
if(opac_ani.beginElement && element.getAttribute('opacity') != cur_shape.opacity) {
c_ani = $(opac_ani).clone().attr({
to: cur_shape.opacity,
dur: ani_dur
}).appendTo(element);
c_ani[0].beginElement();
} else {
ani_dur = 0;
}
// Ideally this would be done on the endEvent of the animation,
// but that doesn't seem to be supported in Webkit
setTimeout(function() {
if(c_ani) c_ani.remove();
element.setAttribute("opacity", cur_shape.opacity);
element.setAttribute("style", "pointer-events:inherit");
cleanupElement(element);
@ -3690,6 +3713,7 @@ function BatchCommand(text) {
// undo means to call cmd.unapply(), redo means to call cmd.apply()
addCommandToHistory(new InsertElementCommand(element));
call("changed",[element]);
}, ani_dur * 1000);
}
start_transform = null;
@ -6627,10 +6651,12 @@ function BatchCommand(text) {
var findDuplicateGradient = function(grad) {
var defs = findDefs();
var existing_grads = defs.getElementsByTagNameNS(svgns, "linearGradient");
var existing_grads = $(defs).find("linearGradient, radialGradient");
var i = existing_grads.length;
var rad_attrs = ['r','cx','cy','fx','fy'];
while (i--) {
var og = existing_grads.item(i);
var og = existing_grads[i];
if(grad.tagName == "linearGradient") {
if (grad.getAttribute('x1') != og.getAttribute('x1') ||
grad.getAttribute('y1') != og.getAttribute('y1') ||
grad.getAttribute('x2') != og.getAttribute('x2') ||
@ -6638,6 +6664,17 @@ function BatchCommand(text) {
{
continue;
}
} else {
var grad_attrs = $(grad).attr(rad_attrs);
var og_attrs = $(og).attr(rad_attrs);
var diff = false;
$.each(rad_attrs, function(i, attr) {
if(grad_attrs[attr] != og_attrs[attr]) diff = true;
});
if(diff) continue;
}
// else could be a duplicate, iterate through stops
var stops = grad.getElementsByTagNameNS(svgns, "stop");
@ -6649,8 +6686,8 @@ function BatchCommand(text) {
var j = stops.length;
while(j--) {
var stop = stops.item(j);
var ostop = ostops.item(j);
var stop = stops[j];
var ostop = ostops[j];
if (stop.getAttribute('offset') != ostop.getAttribute('offset') ||
stop.getAttribute('stop-opacity') != ostop.getAttribute('stop-opacity') ||
@ -6684,6 +6721,10 @@ function BatchCommand(text) {
canvas.strokeGrad = p.linearGradient;
if(addGrad) addGradient();
}
else if(p.type == "radialGradient") {
canvas.strokeGrad = p.radialGradient;
if(addGrad) addGradient();
}
else {
// console.log("none!");
}
@ -6703,6 +6744,10 @@ function BatchCommand(text) {
canvas.fillGrad = p.linearGradient;
if(addGrad) addGradient();
}
else if(p.type == "radialGradient") {
canvas.fillGrad = p.radialGradient;
if(addGrad) addGradient();
}
else {
// console.log("none!");
}
@ -7990,7 +8035,7 @@ function BatchCommand(text) {
// Function: getVersion
// Returns a string which describes the revision number of SvgCanvas.
this.getVersion = function() {
return "svgcanvas.js ($Rev: 1450 $)";
return "svgcanvas.js ($Rev: 1454 $)";
};
this.setUiStrings = function(strs) {