Fixed Issue 762: Editing imported SVGs with <symbols> included causes some major issues
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@1958 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
ae042a81bb
commit
ba028851bc
|
@ -6463,6 +6463,19 @@ var uniquifyElems = this.uniquifyElems = function(g) {
|
|||
}
|
||||
}
|
||||
|
||||
// Function setUseData
|
||||
// Assigns reference data for each use element
|
||||
var setUseData = this.setUseData = function(parent) {
|
||||
$(parent).find('use').each(function() {
|
||||
var id = getHref(this).substr(1);
|
||||
var ref_elem = getElem(id);
|
||||
$(this).data('ref', ref_elem);
|
||||
if(ref_elem.tagName == 'symbol' || ref_elem.tagName == 'svg') {
|
||||
$(this).data('symbol', ref_elem);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Function convertGradients
|
||||
// Converts gradients from userSpaceOnUse to objectBoundingBox
|
||||
var convertGradients = this.convertGradients = function(elem) {
|
||||
|
@ -6570,6 +6583,14 @@ var convertToGroup = this.convertToGroup = function(elem) {
|
|||
ts = $elem.attr('transform');
|
||||
var pos = $elem.attr(['x','y']);
|
||||
|
||||
var vb = elem.getAttribute('viewBox');
|
||||
|
||||
if(vb) {
|
||||
var nums = vb.split(' ');
|
||||
pos.x -= +nums[0];
|
||||
pos.y -= +nums[1];
|
||||
}
|
||||
|
||||
// Not ideal, but works
|
||||
ts += " translate(" + (pos.x || 0) + "," + (pos.y || 0) + ")";
|
||||
|
||||
|
@ -6595,8 +6616,9 @@ var convertToGroup = this.convertToGroup = function(elem) {
|
|||
$(g).append(dupeGrads);
|
||||
}
|
||||
|
||||
if (ts)
|
||||
if (ts) {
|
||||
g.setAttribute("transform", ts);
|
||||
}
|
||||
|
||||
var parent = elem.parentNode;
|
||||
|
||||
|
@ -6622,6 +6644,8 @@ var convertToGroup = this.convertToGroup = function(elem) {
|
|||
batchCmd.addSubCommand(new InsertElementCommand(g));
|
||||
}
|
||||
|
||||
setUseData(g);
|
||||
|
||||
if(svgedit.browser.isGecko()) {
|
||||
convertGradients(findDefs());
|
||||
} else {
|
||||
|
@ -6735,14 +6759,7 @@ this.setSvgString = function(xmlString) {
|
|||
// Set ref element for <use> elements
|
||||
|
||||
// TODO: This should also be done if the object is re-added through "redo"
|
||||
content.find('use').each(function() {
|
||||
var id = getHref(this).substr(1);
|
||||
var ref_elem = getElem(id);
|
||||
$(this).data('ref', ref_elem);
|
||||
if(ref_elem.tagName == 'symbol' || ref_elem.tagName == 'svg') {
|
||||
$(this).data('symbol', ref_elem);
|
||||
}
|
||||
});
|
||||
setUseData(content);
|
||||
|
||||
convertGradients(content[0]);
|
||||
|
||||
|
|
Loading…
Reference in New Issue