From 83682b1d62febaca6190a132df2c8468fa5d48e1 Mon Sep 17 00:00:00 2001 From: Andrea Bogazzi Date: Sun, 9 Dec 2018 23:13:27 +0100 Subject: [PATCH] various small svg fixes (#5424) * various small svg fixes * no debugger * fontsize parsing fix - again * added a visual test * use min 9px * added comment --- src/elements_parser.js | 2 +- src/parser.js | 16 ++++++++++------ src/shapes/path.class.js | 8 +++----- src/static_canvas.class.js | 6 +++--- test/unit/path.js | 6 +++--- test/visual/assets/svg_text_letterspacing.svg | 6 ++++++ test/visual/golden/svg_text_letterspacing.png | Bin 0 -> 11234 bytes test/visual/svg_import.js | 1 + 8 files changed, 27 insertions(+), 18 deletions(-) create mode 100644 test/visual/assets/svg_text_letterspacing.svg create mode 100644 test/visual/golden/svg_text_letterspacing.png diff --git a/src/elements_parser.js b/src/elements_parser.js index ad669abdf0d..ab2088be121 100644 --- a/src/elements_parser.js +++ b/src/elements_parser.js @@ -48,7 +48,7 @@ fabric.ElementsParser = function(elements, callback, options, reviver, parsingOp var _options; _this.resolveGradient(obj, 'fill'); _this.resolveGradient(obj, 'stroke'); - if (obj instanceof fabric.Image) { + if (obj instanceof fabric.Image && obj._originalElement) { _options = obj.parsePreserveAspectRatioAttribute(el); } obj._removeTransformMatrix(_options); diff --git a/src/parser.js b/src/parser.js index 203e5dcfcdd..2f0b5da96ac 100644 --- a/src/parser.js +++ b/src/parser.js @@ -85,9 +85,7 @@ value = null; } else { - value = value.replace(/,/g, ' ').split(/\s+/).map(function(n) { - return parseFloat(n); - }); + value = value.replace(/,/g, ' ').split(/\s+/).map(parseFloat); } } else if (attr === 'transformMatrix') { @@ -130,6 +128,9 @@ value = 'stroke'; } } + else if (attr === 'href' || attr === 'xlink:href') { + return value; + } else { parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize); } @@ -821,7 +822,7 @@ var value, parentAttributes = { }, - fontSize; + fontSize, parentFontSize; if (typeof svgUid === 'undefined') { svgUid = element.getAttribute('svgUid'); @@ -843,8 +844,11 @@ ownAttributes = extend(ownAttributes, extend(getGlobalStylesForElement(element, svgUid), fabric.parseStyleAttribute(element))); - fontSize = (parentAttributes && parentAttributes.fontSize ) || - ownAttributes['font-size'] || fabric.Text.DEFAULT_SVG_FONT_SIZE; + fontSize = parentFontSize = parentAttributes.fontSize || fabric.Text.DEFAULT_SVG_FONT_SIZE; + if (ownAttributes['font-size']) { + // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers. + ownAttributes['font-size'] = fontSize = parseUnit(ownAttributes['font-size'], parentFontSize); + } var normalizedAttr, normalizedValue, normalizedStyle = {}; for (var attr in ownAttributes) { diff --git a/src/shapes/path.class.js b/src/shapes/path.class.js index d4b1b690c77..b9b4c142200 100644 --- a/src/shapes/path.class.js +++ b/src/shapes/path.class.js @@ -471,15 +471,13 @@ * of the instance */ _toSVG: function() { - var specificTransform = this._getOffsetTransform(), - path = this.path.map(function(path) { - return path.join(' '); - }).join(' '); + var path = this.path.map(function(path) { + return path.join(' '); + }).join(' '); return [ '\n' ]; }, diff --git a/src/static_canvas.class.js b/src/static_canvas.class.js index 9e05f8d50fc..caf4d941521 100644 --- a/src/static_canvas.class.js +++ b/src/static_canvas.class.js @@ -390,6 +390,7 @@ * crossOrigin: 'anonymous' * }); */ + // TODO: fix stretched examples setBackgroundImage: function (image, callback, options) { return this.__setBgOverlayImage('backgroundImage', image, callback, options); }, @@ -1293,12 +1294,11 @@ this._setSVGPreamble(markup, options); this._setSVGHeader(markup, options); - - this._setSVGBgOverlayColor(markup, 'backgroundColor'); - this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver); if (this.clipPath) { markup.push('\n'); } + this._setSVGBgOverlayColor(markup, 'backgroundColor'); + this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver); this._setSVGObjects(markup, reviver); if (this.clipPath) { markup.push('\n'); diff --git a/test/unit/path.js b/test/unit/path.js index d08fbccaddd..57cf61033a2 100644 --- a/test/unit/path.js +++ b/test/unit/path.js @@ -129,7 +129,7 @@ var done = assert.async(); makePathObject(function(path) { assert.ok(typeof path.toSVG === 'function'); - assert.deepEqual(path.toSVG(), '\n\n\n'); + assert.deepEqual(path.toSVG(), '\n\n\n'); done(); }); }); @@ -139,7 +139,7 @@ makePathObject(function(path) { makePathObject(function(path2) { path.clipPath = path2; - assert.deepEqual(path.toSVG(), '\n\n\t\n\n\n\n', 'path clipPath toSVG should match'); + assert.deepEqual(path.toSVG(), '\n\n\t\n\n\n\n', 'path clipPath toSVG should match'); done(); }); }); @@ -152,7 +152,7 @@ makePathObject(function(path2) { path.clipPath = path2; path.clipPath.absolutePositioned = true; - assert.deepEqual(path.toSVG(), '\n\n\n\t\n\n\n\n\n', 'path clipPath toSVG absolute should match'); + assert.deepEqual(path.toSVG(), '\n\n\n\t\n\n\n\n\n', 'path clipPath toSVG absolute should match'); done(); }); }); diff --git a/test/visual/assets/svg_text_letterspacing.svg b/test/visual/assets/svg_text_letterspacing.svg new file mode 100644 index 00000000000..a1261a9d348 --- /dev/null +++ b/test/visual/assets/svg_text_letterspacing.svg @@ -0,0 +1,6 @@ + +Letter-spacing in 'px' +Letter-spacing in 'em' +Letter-spacing in 'em' font-size in 'em' +Letter-spacing in 'em' no font-size + diff --git a/test/visual/golden/svg_text_letterspacing.png b/test/visual/golden/svg_text_letterspacing.png new file mode 100644 index 0000000000000000000000000000000000000000..65159dcdac7a73d1753f379a9db1297fb07839fd GIT binary patch literal 11234 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 literal 0 HcmV?d00001 diff --git a/test/visual/svg_import.js b/test/visual/svg_import.js index 6192f3aae51..2313dd0b76b 100644 --- a/test/visual/svg_import.js +++ b/test/visual/svg_import.js @@ -72,6 +72,7 @@ 'svg_radial_11', 'svg_radial_12', 'svg_radial_13', + 'svg_text_letterspacing', ].map(createTestFromSVG); tests.forEach(visualTestLoop(fabricCanvas, QUnit));