Radial Gradients
Sync with latest SVG-Edit, which supports radial gradients.
This commit is contained in:
parent
9ed0772978
commit
7e7ae4c6f0
7 changed files with 1026 additions and 379 deletions
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue