diff --git a/CHANGELOG.md b/CHANGELOG.md index 58498e865..8c92236f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - SVG Frames export - blend modes - SVG Frames export - filter - SVG Shapes export - non-scaling strokes +- SVG Shapes import - non-scaling strokes ### Fixed - Close action on SWF inside DefineBinaryData diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java index 40a2dcfb7..b5a52df3d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java @@ -102,6 +102,12 @@ public class SvgImporter { public Tag importSvg(ShapeTag st, String svgXml, boolean fill) { shapeTag = st; + if (st instanceof DefineShape4Tag) { + DefineShape4Tag shape4 = (DefineShape4Tag) st; + shape4.usesNonScalingStrokes = false; + shape4.usesScalingStrokes = false; + } + SHAPEWITHSTYLE shapes = new SHAPEWITHSTYLE(); shapes.fillStyles = new FILLSTYLEARRAY(); shapes.lineStyles = new LINESTYLEARRAY(); @@ -1685,6 +1691,22 @@ public class SvgImporter { SvgLineJoin lineJoin = style.getStrokeLineJoin(); if (lineStyle instanceof LINESTYLE2) { LINESTYLE2 lineStyle2 = (LINESTYLE2) lineStyle; + + String vectorEffect = style.getVectorEffect(); + if ("non-scaling-stroke".equals(vectorEffect)) { + lineStyle2.noHScaleFlag = true; + lineStyle2.noVScaleFlag = true; + if (shapeTag instanceof DefineShape4Tag) { + DefineShape4Tag shape4 = (DefineShape4Tag) shapeTag; + shape4.usesNonScalingStrokes = true; + } + } else { + if (shapeTag instanceof DefineShape4Tag) { + DefineShape4Tag shape4 = (DefineShape4Tag) shapeTag; + shape4.usesScalingStrokes = true; + } + } + int swfCap = lineCap == SvgLineCap.BUTT ? LINESTYLE2.NO_CAP : lineCap == SvgLineCap.ROUND ? LINESTYLE2.ROUND_CAP : lineCap == SvgLineCap.SQUARE ? LINESTYLE2.SQUARE_CAP : 0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java index 112915808..c29826af4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyle.java @@ -204,6 +204,10 @@ class SvgStyle { public double getStopOpacity() { return getValue(element, "stop-opacity"); } + + public String getVectorEffect() { + return getValue(element, "vector-effect"); + } public SvgFill getFillWithOpacity() { SvgFill fill = getFill(); @@ -704,6 +708,9 @@ class SvgStyle { double stopOpacity = Double.parseDouble(value); return stopOpacity; } + case "vector-effect": { + return value; + } } } catch (NumberFormatException ex) { //ignore diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyleProperty.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyleProperty.java index 648129efb..f813bf909 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyleProperty.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgStyleProperty.java @@ -67,6 +67,7 @@ public class SvgStyleProperty { p.put("opacity", new SvgStyleProperty("opacity", false, 1.0)); p.put("stop-color", new SvgStyleProperty("stop-color", false, Color.BLACK)); p.put("stop-opacity", new SvgStyleProperty("stop-opacity", false, 1.0)); + p.put("vector-effect", new SvgStyleProperty("vector-effect", false, "none")); properties = p; }