diff --git a/modules/juce_gui_basics/drawables/juce_SVGParser.cpp b/modules/juce_gui_basics/drawables/juce_SVGParser.cpp index e0214d87f1..cfb6b7b5f0 100644 --- a/modules/juce_gui_basics/drawables/juce_SVGParser.cpp +++ b/modules/juce_gui_basics/drawables/juce_SVGParser.cpp @@ -85,31 +85,13 @@ public: newState.viewBoxW = vwh.x; newState.viewBoxH = vwh.y; - int placementFlags = 0; + const int placementFlags = parsePlacementFlags (xml->getStringAttribute ("preserveAspectRatio").trim()); - const String aspect (xml->getStringAttribute ("preserveAspectRatio")); - - if (aspect.containsIgnoreCase ("none")) - { - placementFlags = RectanglePlacement::stretchToFit; - } - else - { - if (aspect.containsIgnoreCase ("slice")) placementFlags |= RectanglePlacement::fillDestination; - - if (aspect.containsIgnoreCase ("xMin")) placementFlags |= RectanglePlacement::xLeft; - else if (aspect.containsIgnoreCase ("xMax")) placementFlags |= RectanglePlacement::xRight; - else placementFlags |= RectanglePlacement::xMid; - - if (aspect.containsIgnoreCase ("yMin")) placementFlags |= RectanglePlacement::yTop; - else if (aspect.containsIgnoreCase ("yMax")) placementFlags |= RectanglePlacement::yBottom; - else placementFlags |= RectanglePlacement::yMid; - } - - newState.transform = RectanglePlacement (placementFlags) - .getTransformToFit (Rectangle (viewboxXY.x, viewboxXY.y, vwh.x, vwh.y), - Rectangle (newState.width, newState.height)) - .followedBy (newState.transform); + if (placementFlags != 0) + newState.transform = RectanglePlacement (placementFlags) + .getTransformToFit (Rectangle (viewboxXY.x, viewboxXY.y, vwh.x, vwh.y), + Rectangle (newState.width, newState.height)) + .followedBy (newState.transform); } } else @@ -1004,6 +986,23 @@ private: return String(); } + static int parsePlacementFlags (const String& align) noexcept + { + if (align.isEmpty()) + return 0; + + if (align.containsIgnoreCase ("none")) + return RectanglePlacement::stretchToFit; + + return (align.containsIgnoreCase ("slice") ? RectanglePlacement::fillDestination : 0) + | (align.containsIgnoreCase ("xMin") ? RectanglePlacement::xLeft + : (align.containsIgnoreCase ("xMax") ? RectanglePlacement::xRight + : RectanglePlacement::xMid)) + | (align.containsIgnoreCase ("yMin") ? RectanglePlacement::yTop + : (align.containsIgnoreCase ("yMax") ? RectanglePlacement::yBottom + : RectanglePlacement::yMid)); + } + //============================================================================== static bool isIdentifierChar (const juce_wchar c) {