34 : originalFile (svgFile), topLevelXml (topLevel,
nullptr)
46 template <
typename OperationType>
49 for (
auto*
e :
xml->getChildIterator())
53 if (
e->compareAttribute (
"id",
id)
74 bool operator() (
const XmlPath& xmlPath)
const
162 if (newState.
width <= 0) newState.
width = 100;
183 if (placementFlags != 0)
198 drawable->setContentArea ({ viewboxXY.
x, viewboxXY.
y, newState.
viewBoxW, newState.
viewBoxH });
199 drawable->resetBoundingBoxToContentArea();
210 juce_wchar currentCommand = 0, previousCommand = 0;
211 bool isRelative =
true;
214 while (!
d.isEmpty())
218 currentCommand =
d.getAndAdvance();
219 isRelative = currentCommand >=
'a';
222 switch (currentCommand)
233 if (currentCommand ==
'M' || currentCommand ==
'm')
237 currentCommand =
'l';
316 p2 += (last - last2);
353 p2 += (last - last2);
367 bool flagValue =
false;
375 auto largeArc = flagValue;
379 auto sweep = flagValue;
388 double centreX, centreY, startAngle, deltaAngle;
389 double rx = p1.
x, ry = p1.
y;
392 angle, largeArc, sweep,
393 rx, ry, centreX, centreY,
394 startAngle, deltaAngle);
397 (
float) rx, (
float) ry,
398 angle, (
float) startAngle, (
float) (startAngle + deltaAngle),
417 last = last2 = subpathStart;
418 d.incrementToEndOfWhitespace();
419 currentCommand =
'M';
430 previousCommand = currentCommand;
449 return s.equalsIgnoreCase (
"none");
456 d.setComponentID (compID);
459 d.setVisible (
false);
474 drawable->setVisible (
true);
494 if (tag ==
"text")
return parseText (xml,
true);
495 if (tag ==
"image")
return parseImage (xml,
true);
509 if (tag ==
"path") {
parsePath (xml, path);
return true; }
510 if (tag ==
"rect") {
parseRect (xml, path);
return true; }
511 if (tag ==
"circle") {
parseCircle (xml, path);
return true; }
512 if (tag ==
"ellipse") {
parseEllipse (xml, path);
return true; }
513 if (tag ==
"line") {
parseLine (xml, path);
return true; }
514 if (tag ==
"polyline") {
parsePolygon (xml,
true, path);
return true; }
515 if (tag ==
"polygon") {
parsePolygon (xml,
false, path);
return true; }
531 if (shouldParseTransform && xml->
hasAttribute (
"transform"))
543 drawable->resetContentAreaAndBoundingBoxToFitChildren();
597 circle.
addEllipse (cx - radius, cy - radius, radius * 2.0f, radius * 2.0f);
607 ellipse.
addEllipse (cx - radiusX, cy - radiusY, radiusX * 2.0f, radiusY * 2.0f);
639 if ((! isPolyline) || first == last)
648 if (link.startsWithChar (
'#'))
658 if (linkedID.isNotEmpty())
661 return topLevelXml.applyOperationToChildWithID (linkedID, op);
669 if (
auto* drawableText =
parseText (xml,
false))
return drawableText;
670 if (
auto* drawableImage =
parseImage (xml,
false))
return drawableImage;
686 bool shouldParseTransform =
true,
689 if (shouldParseTransform && xml->
hasAttribute (
"transform"))
694 return newState.
parseShape (xml, path,
false, additonalTransform);
703 if (additonalTransform !=
nullptr)
716 if (strokeType.isNotEmpty() && !
isNone (strokeType))
728 if (strokeDashArray.isNotEmpty())
758 t.incrementToEndOfWhitespace();
764 if (dashLengths.
size() > 0)
768 for (
int i = 0;
i < dashLengths.
size(); ++
i)
772 if (dashLengths.
size() == 1)
775 const float nonZeroLength = 0.001f;
776 dashes[
i] = nonZeroLength;
778 const int pairedIndex =
i ^ 1;
781 && dashes[pairedIndex] > nonZeroLength)
782 dashes[pairedIndex] -= nonZeroLength;
786 dp.setDashLengths (dashLengths);
798 if (urlID.isNotEmpty())
801 return topLevelXml.applyOperationToChildWithID (urlID, op);
816 if (drawableClipPath->getNumChildComponents() > 0)
831 if (fillXml.
xml !=
nullptr)
842 if (
e->getStringAttribute (
"offset").containsChar (
'%'))
855 const float opacity)
const
862 if (linkedID.isNotEmpty())
865 topLevelXml.applyOperationToChildWithID (linkedID, op);
904 gradientWidth = bounds.getWidth();
905 gradientHeight = bounds.getHeight();
951 type.transform = gradientTransform;
959 .
transformedBy (gradientTransform.withAbsoluteTranslation (0, 0));
966 const float scale = perpendicular.
getDotProduct (newGradPoint2 - newGradPoint1)
967 / perpendicular.getDotProduct (perpendicular);
969 type.gradient->point1 = newGradPoint1;
970 type.gradient->point2 = newGradPoint2 - perpendicular * scale;
979 const String& fillOpacity,
980 const String& overallOpacity,
981 const Colour defaultColour)
const
983 float opacity = 1.0f;
998 if (
topLevelXml.applyOperationToChildWithID (urlID, op))
1005 return parseColour (xml, fillAttribute, defaultColour).withMultipliedAlpha (opacity);
1026 auto transformScale = std::sqrt (std::abs (
transform.getDeterminant()));
1043 UseTextOp op = {
this, &translation,
nullptr };
1047 if (linkedID.isNotEmpty())
1048 topLevelXml.applyOperationToChildWithID (linkedID, op);
1056 if (shouldParseTransform && xml->
hasAttribute (
"transform"))
1061 return newState.
parseText (xml,
false, additonalTransform);
1085 if (
e->isTextElement())
1087 auto text =
e->getText().trim();
1090 dc->addAndMakeVisible (
dt);
1093 dt->setFont (font,
true);
1095 if (additonalTransform !=
nullptr)
1096 dt->setTransform (
transform.followedBy (*additonalTransform));
1104 font.getStringWidthFloat (
text), font.getHeight());
1106 if (anchorStr ==
"middle") bounds.
setX (bounds.
getX() - bounds.
getWidth() / 2.0f);
1107 else if (anchorStr ==
"end") bounds.
setX (bounds.
getX() - bounds.
getWidth());
1109 dt->setBoundingBox (bounds);
1111 else if (
e->hasTagNameIgnoringNamespace (
"tspan"))
1125 if (family.isNotEmpty())
1126 f.setTypefaceName (family);
1143 UseImageOp op = {
this, &translation,
nullptr };
1147 if (linkedID.isNotEmpty())
1148 topLevelXml.applyOperationToChildWithID (linkedID, op);
1156 if (shouldParseTransform && xml->
hasAttribute (
"transform"))
1161 return newState.
parseImage (xml,
false, additionalTransform);
1172 std::unique_ptr<InputStream> inputStream;
1175 if (link.startsWith (
"data:"))
1177 const auto indexOfComma = link.indexOf (
",");
1178 auto format = link.substring (5, indexOfComma).trim();
1179 auto indexOfSemi =
format.indexOf (
";");
1181 if (
format.substring (indexOfSemi + 1).trim().equalsIgnoreCase (
"base64"))
1183 auto mime =
format.substring (0, indexOfSemi).trim();
1185 if (mime.equalsIgnoreCase (
"image/png") || mime.equalsIgnoreCase (
"image/jpeg"))
1187 auto base64text = link.substring (indexOfComma + 1).removeCharacters (
"\t\n\r ");
1196 auto linkedFile =
originalFile.getParentDirectory().getChildFile (link);
1198 if (linkedFile.existsAsFile())
1199 inputStream = linkedFile.createInputStream();
1202 if (inputStream !=
nullptr)
1206 if (
image.isValid())
1222 if (additionalTransform !=
nullptr)
1223 di->setTransform (di->getTransform().followedBy (
transform).followedBy (*additionalTransform));
1225 di->setTransform (di->getTransform().followedBy (
transform));
1267 if (!
s.isEmpty()) ++
s;
1274 auto len =
s.length();
1280 auto n1 =
s[len - 2];
1281 auto n2 =
s[len - 1];
1283 if (n1 ==
'i' && n2 ==
'n')
n *= dpi;
1284 else if (n1 ==
'm' && n2 ==
'm')
n *= dpi / 25.4f;
1285 else if (n1 ==
'c' && n2 ==
'm')
n *= dpi / 2.54f;
1286 else if (n1 ==
'p' && n2 ==
'c')
n *= 15.0f;
1287 else if (n2 ==
'%')
n *= 0.01f * sizeForProportions;
1295 return getCoordLength (xml->getStringAttribute (attName), sizeForProportions);
1309 auto n =
s.getFloatValue();
1310 return (std::isnan (
n) || std::isinf (
n)) ? 0.0f :
n;
1325 static String::CharPointerType
findStyleItem (String::CharPointerType source, String::CharPointerType
name)
1327 auto nameLength = (
int)
name.length();
1329 while (! source.isEmpty())
1331 if (source.getAndAdvance() ==
'.'
1334 auto endOfName = (source + nameLength).findEndOfWhitespace();
1336 if (*endOfName ==
'{')
1339 if (*endOfName ==
',')
1354 if (styleAtt.isNotEmpty())
1358 if (
value.isNotEmpty())
1367 if (openBrace.isEmpty())
1372 if (closeBrace.isEmpty())
1376 attributeName, defaultValue);
1377 if (
value.isNotEmpty())
1384 if (xml.
parent !=
nullptr)
1387 return defaultValue;
1395 if (xml.
parent !=
nullptr)
1403 if (align.isEmpty())
1430 i =
list.indexOf (
i, attributeName);
1438 i =
list.indexOfChar (
i,
':');
1443 int end =
list.indexOfChar (
i,
';');
1448 return list.substring (
i + 1,
end).trim();
1454 return defaultValue;
1467 while (
s.isWhitespace() || *
s ==
',')
1495 while (
s.isLetter())
1506 while (
s.isWhitespace() || *
s ==
',')
1515 while (
text.isWhitespace() || *
text ==
',')
1523 while (
text.isWhitespace() || *
text ==
',')
1534 if (
text.startsWithChar (
'#'))
1537 hex[6] = hex[7] = 15;
1540 auto s =
text.getCharPointer();
1542 while (numChars < 8)
1547 hex[numChars++] = (
uint32) hexValue;
1554 (
uint8) (hex[1] * 0x11),
1555 (
uint8) (hex[2] * 0x11));
1558 (
uint8) ((hex[2] << 4) + hex[3]),
1559 (
uint8) ((hex[4] << 4) + hex[5]),
1560 (
uint8) ((hex[6] << 4) + hex[7]));
1563 if (
text.startsWith (
"rgb") ||
text.startsWith (
"hsl"))
1565 auto tokens = [&
text]
1567 auto openBracket =
text.indexOfChar (
'(');
1568 auto closeBracket =
text.indexOfChar (openBracket,
')');
1572 if (openBracket >= 3 && closeBracket > openBracket)
1574 arr.
addTokens (
text.substring (openBracket + 1, closeBracket),
",",
"");
1582 auto alpha = [&tokens, &
text]
1584 if ((
text.startsWith (
"rgba") ||
text.startsWith (
"hsla")) && tokens.size() == 4)
1590 if (
text.startsWith (
"hsl"))
1596 if (tokens[0].containsChar (
'%'))
1603 (
uint8) tokens[1].getIntValue(),
1604 (
uint8) tokens[2].getIntValue(),
1608 if (
text ==
"inherit")
1622 while (
t.isNotEmpty())
1625 tokens.
addTokens (
t.fromFirstOccurrenceOf (
"(",
false,
false)
1626 .upToFirstOccurrenceOf (
")",
false,
false),
1638 if (
t.startsWithIgnoreCase (
"matrix"))
1641 numbers[1], numbers[3], numbers[5]);
1643 else if (
t.startsWithIgnoreCase (
"translate"))
1647 else if (
t.startsWithIgnoreCase (
"scale"))
1651 else if (
t.startsWithIgnoreCase (
"rotate"))
1655 else if (
t.startsWithIgnoreCase (
"skewX"))
1659 else if (
t.startsWithIgnoreCase (
"skewY"))
1665 t =
t.fromFirstOccurrenceOf (
")",
false,
false).trimStart();
1672 double x2,
double y2,
1674 bool largeArc,
bool sweep,
1675 double& rx,
double& ry,
1676 double& centreX,
double& centreY,
1677 double& startAngle,
double& deltaAngle)
noexcept
1679 const double midX = (x1 - x2) * 0.5;
1680 const double midY = (y1 - y2) * 0.5;
1682 const double cosAngle = std::cos (angle);
1683 const double sinAngle = std::sin (angle);
1684 const double xp = cosAngle * midX + sinAngle * midY;
1685 const double yp = cosAngle * midY - sinAngle * midX;
1686 const double xp2 =
xp *
xp;
1687 const double yp2 = yp * yp;
1689 double rx2 = rx * rx;
1690 double ry2 = ry * ry;
1692 const double s = (xp2 / rx2) + (yp2 / ry2);
1697 c = std::sqrt (
jmax (0.0, ((rx2 * ry2) - (rx2 * yp2) - (ry2 * xp2))
1698 / (( rx2 * yp2) + (ry2 * xp2))));
1700 if (largeArc == sweep)
1705 const double s2 = std::sqrt (
s);
1711 const double cpx = ((rx * yp) / ry) *
c;
1712 const double cpy = ((-ry *
xp) / rx) *
c;
1714 centreX = ((x1 + x2) * 0.5) + (cosAngle * cpx) - (sinAngle * cpy);
1715 centreY = ((y1 + y2) * 0.5) + (sinAngle * cpx) + (cosAngle * cpy);
1717 const double ux = (
xp - cpx) / rx;
1718 const double uy = (yp - cpy) / ry;
1719 const double vx = (-
xp - cpx) / rx;
1720 const double vy = (-yp - cpy) / ry;
1727 startAngle = -startAngle;
1731 deltaAngle = acos (
jlimit (-1.0, 1.0, ((ux * vx) + (uy * vy))
1734 if ((ux * vy) - (uy * vx) < 0)
1735 deltaAngle = -deltaAngle;
#define noexcept
Definition DistrhoDefines.h:72
#define nullptr
Definition DistrhoDefines.h:75
static float dt(char val)
Definition EnvelopeFreeEdit.cpp:124
int dp
Definition Spc_Cpu.h:149
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_Array.h:56
int size() const noexcept
Definition juce_Array.h:215
ElementType * getRawDataPointer() noexcept
Definition juce_Array.h:310
void add(const ElementType &newElement)
Definition juce_Array.h:418
Definition juce_CharPointer_ASCII.h:38
static bool isDigit(char character) noexcept
Definition juce_CharacterFunctions.cpp:69
static int compareIgnoreCaseUpTo(CharPointerType1 s1, CharPointerType2 s2, int maxChars) noexcept
Definition juce_CharacterFunctions.h:666
static bool isLetter(char character) noexcept
Definition juce_CharacterFunctions.cpp:79
static int getHexDigitValue(juce_wchar digit) noexcept
Definition juce_CharacterFunctions.cpp:112
static CharPointerType1 find(CharPointerType1 textToSearch, const CharPointerType2 substringToLookFor) noexcept
Definition juce_CharacterFunctions.h:708
Definition juce_ColourGradient.h:38
Colour getColour(int index) const noexcept
Definition juce_ColourGradient.cpp:161
Point< float > point2
Definition juce_ColourGradient.h:195
bool isRadial
Definition juce_ColourGradient.h:202
int getNumColours() const noexcept
Definition juce_ColourGradient.cpp:148
void multiplyOpacity(float multiplier) noexcept
Definition juce_ColourGradient.cpp:141
Point< float > point1
Definition juce_ColourGradient.h:195
int addColour(double proportionAlongGradient, Colour colour)
Definition juce_ColourGradient.cpp:113
double getColourPosition(int index) const noexcept
Definition juce_ColourGradient.cpp:153
Definition juce_Colour.h:38
static Colour fromHSL(float hue, float saturation, float lightness, float alpha) noexcept
Definition juce_Colour.cpp:265
void addChildComponent(Component *child, int zOrder=-1)
Definition juce_Component.cpp:1548
Definition juce_DrawableComposite.h:43
Definition juce_Drawable.h:38
static std::unique_ptr< Drawable > createFromSVGFile(const File &svgFile)
Definition juce_SVGParser.cpp:1766
static Path parseSVGPath(const String &svgPath)
Definition juce_SVGParser.cpp:1774
static std::unique_ptr< Drawable > createFromSVG(const XmlElement &svgDocument)
Definition juce_SVGParser.cpp:1757
void setClipPath(std::unique_ptr< Drawable > drawableClipPath)
Definition juce_Drawable.cpp:114
Definition juce_DrawableImage.h:38
Definition juce_DrawablePath.h:40
Definition juce_DrawableText.h:38
Definition juce_File.h:45
Definition juce_FillType.h:41
Definition juce_Font.h:42
Definition juce_MemoryOutputStream.h:36
const void * getData() const noexcept
Definition juce_MemoryOutputStream.cpp:148
size_t getDataSize() const noexcept
Definition juce_MemoryOutputStream.h:80
Definition juce_Path.h:725
bool next() noexcept
Definition juce_Path.cpp:1490
@ closePath
Definition juce_Path.h:747
Definition juce_Path.h:65
void addRoundedRectangle(float x, float y, float width, float height, float cornerSize)
Definition juce_Path.cpp:412
void startNewSubPath(float startX, float startY)
Definition juce_Path.cpp:216
void addEllipse(float x, float y, float width, float height)
Definition juce_Path.cpp:446
Point< float > getCurrentPosition() const
Definition juce_Path.cpp:298
void quadraticTo(float controlPointX, float controlPointY, float endPointX, float endPointY)
Definition juce_Path.cpp:249
void cubicTo(float controlPoint1X, float controlPoint1Y, float controlPoint2X, float controlPoint2Y, float endPointX, float endPointY)
Definition juce_Path.cpp:268
void addRectangle(float x, float y, float width, float height)
Definition juce_Path.cpp:323
void applyTransform(const AffineTransform &transform) noexcept
Definition juce_Path.cpp:821
void addCentredArc(float centreX, float centreY, float radiusX, float radiusY, float rotationOfEllipse, float fromRadians, float toRadians, bool startAsNewSubPath=false)
Definition juce_Path.cpp:483
void closeSubPath()
Definition juce_Path.cpp:292
Rectangle< float > getBounds() const noexcept
Definition juce_Path.cpp:200
void lineTo(float endX, float endY)
Definition juce_Path.cpp:233
void setUsingNonZeroWinding(bool isNonZeroWinding) noexcept
Definition juce_Path.cpp:168
Definition juce_PathStrokeType.h:42
JointStyle
Definition juce_PathStrokeType.h:47
@ curved
Definition juce_PathStrokeType.h:53
@ beveled
Definition juce_PathStrokeType.h:54
@ mitered
Definition juce_PathStrokeType.h:48
EndCapStyle
Definition juce_PathStrokeType.h:60
@ rounded
Definition juce_PathStrokeType.h:64
@ square
Definition juce_PathStrokeType.h:62
@ butt
Definition juce_PathStrokeType.h:61
Definition juce_Point.h:42
constexpr FloatType getDotProduct(Point other) const noexcept
Definition juce_Point.h:212
void setXY(ValueType newX, ValueType newY) noexcept
Definition juce_Point.h:85
ValueType y
Definition juce_Point.h:247
Point transformedBy(const AffineTransform &transform) const noexcept
Definition juce_Point.h:223
ValueType x
Definition juce_Point.h:246
Definition juce_Rectangle.h:67
ValueType getHeight() const noexcept
Definition juce_Rectangle.h:136
ValueType getX() const noexcept
Definition juce_Rectangle.h:127
ValueType getWidth() const noexcept
Definition juce_Rectangle.h:133
void setX(ValueType newX) noexcept
Definition juce_Rectangle.h:195
Definition juce_RectanglePlacement.h:40
AffineTransform getTransformToFit(const Rectangle< float > &source, const Rectangle< float > &destination) const noexcept
Definition juce_RectanglePlacement.cpp:82
@ fillDestination
Definition juce_RectanglePlacement.h:101
@ yMid
Definition juce_RectanglePlacement.h:84
@ yTop
Definition juce_RectanglePlacement.h:76
@ xMid
Definition juce_RectanglePlacement.h:71
@ xRight
Definition juce_RectanglePlacement.h:67
@ stretchToFit
Definition juce_RectanglePlacement.h:90
@ yBottom
Definition juce_RectanglePlacement.h:80
@ xLeft
Definition juce_RectanglePlacement.h:64
Definition juce_SVGParser.cpp:30
static bool parseNextFlag(String::CharPointerType &text, bool &value)
Definition juce_SVGParser.cpp:1513
static String getAttributeFromStyleList(const String &list, StringRef attributeName, const String &defaultValue)
Definition juce_SVGParser.cpp:1424
void addTransform(const XmlPath &xml)
Definition juce_SVGParser.cpp:1235
PathStrokeType getStrokeFor(const XmlPath &xml) const
Definition juce_SVGParser.cpp:1030
float height
Definition juce_SVGParser.cpp:443
static AffineTransform parseTransform(String t)
Definition juce_SVGParser.cpp:1618
String getInheritedAttribute(const XmlPath &xml, StringRef attributeName) const
Definition juce_SVGParser.cpp:1390
static bool isIdentifierChar(juce_wchar c)
Definition juce_SVGParser.cpp:1419
static String getLinkedID(const XmlPath &xml)
Definition juce_SVGParser.cpp:644
float getStrokeWidth(const String &strokeWidth) const noexcept
Definition juce_SVGParser.cpp:1024
bool parseCoords(String::CharPointerType &s, Point< float > &p, bool allowUnits) const
Definition juce_SVGParser.cpp:1256
bool parsePathElement(const XmlPath &xml, Path &path) const
Definition juce_SVGParser.cpp:505
float getCoordLength(const String &s, const float sizeForProportions) const noexcept
Definition juce_SVGParser.cpp:1271
static float parseSafeFloat(const String &s)
Definition juce_SVGParser.cpp:1307
const File originalFile
Definition juce_SVGParser.cpp:441
FillType getPathFillType(const Path &path, const XmlPath &xml, StringRef fillAttribute, const String &fillOpacity, const String &overallOpacity, const Colour defaultColour) const
Definition juce_SVGParser.cpp:976
float width
Definition juce_SVGParser.cpp:443
static PathStrokeType::JointStyle getJointStyle(const String &join) noexcept
Definition juce_SVGParser.cpp:1008
static bool isStartOfNumber(juce_wchar c) noexcept
Definition juce_SVGParser.cpp:1458
void parseDefs(const XmlPath &xml)
Definition juce_SVGParser.cpp:1319
void parseSubElements(const XmlPath &xml, DrawableComposite &parentDrawable, bool shouldParseClip=true)
Definition juce_SVGParser.cpp:463
Colour parseColour(const XmlPath &xml, StringRef attributeName, const Colour defaultColour) const
Definition juce_SVGParser.cpp:1530
static String parseURL(const String &str)
Definition juce_SVGParser.cpp:675
void parseRect(const XmlPath &xml, Path &rect) const
Definition juce_SVGParser.cpp:561
Font getFont(const XmlPath &xml) const
Definition juce_SVGParser.cpp:1120
static void endpointToCentreParameters(double x1, double y1, double x2, double y2, double angle, bool largeArc, bool sweep, double &rx, double &ry, double ¢reX, double ¢reY, double &startAngle, double &deltaAngle) noexcept
Definition juce_SVGParser.cpp:1671
bool addGradientStopsIn(ColourGradient &cg, const XmlPath &fillXml) const
Definition juce_SVGParser.cpp:827
String cssStyleText
Definition juce_SVGParser.cpp:445
void parseCircle(const XmlPath &xml, Path &circle) const
Definition juce_SVGParser.cpp:591
const XmlPath topLevelXml
Definition juce_SVGParser.cpp:442
void parseDashArray(const String &dashList, DrawablePath &dp) const
Definition juce_SVGParser.cpp:743
void parseLine(const XmlPath &xml, Path &line) const
Definition juce_SVGParser.cpp:610
static PathStrokeType::EndCapStyle getEndCapStyle(const String &cap) noexcept
Definition juce_SVGParser.cpp:1016
void parsePathString(Path &path, const String &pathString) const
Definition juce_SVGParser.cpp:205
void parsePolygon(const XmlPath &xml, bool isPolyline, Path &path) const
Definition juce_SVGParser.cpp:621
static bool parseNextNumber(String::CharPointerType &text, String &value, bool allowUnits)
Definition juce_SVGParser.cpp:1463
bool parseUsePath(const XmlPath &xml, Path &path) const
Definition juce_SVGParser.cpp:654
AffineTransform transform
Definition juce_SVGParser.cpp:444
void parsePath(const XmlPath &xml, Path &path) const
Definition juce_SVGParser.cpp:553
void getCoordList(Array< float > &coords, const String &list, bool allowUnits, bool isX) const
Definition juce_SVGParser.cpp:1298
Drawable * parseShape(const XmlPath &xml, Path &path, bool shouldParseTransform=true, AffineTransform *additonalTransform=nullptr) const
Definition juce_SVGParser.cpp:685
bool parseCoord(String::CharPointerType &s, float &value, bool allowUnits, bool isX) const
Definition juce_SVGParser.cpp:1242
bool applyClipPath(Drawable &target, const XmlPath &xmlPath)
Definition juce_SVGParser.cpp:808
Drawable * parseImage(const XmlPath &xml, bool shouldParseTransform, AffineTransform *additionalTransform=nullptr) const
Definition juce_SVGParser.cpp:1153
DrawableComposite * parseLinkElement(const XmlPath &xml)
Definition juce_SVGParser.cpp:547
Drawable * useText(const XmlPath &xml) const
Definition juce_SVGParser.cpp:1038
SVGState(const XmlElement *topLevel, const File &svgFile={})
Definition juce_SVGParser.cpp:33
float getCoordLength(const XmlPath &xml, const char *attName, const float sizeForProportions) const noexcept
Definition juce_SVGParser.cpp:1293
static bool isNone(const String &s) noexcept
Definition juce_SVGParser.cpp:447
DrawableComposite * parseGroupElement(const XmlPath &xml, bool shouldParseTransform)
Definition juce_SVGParser.cpp:529
void parseEllipse(const XmlPath &xml, Path &ellipse) const
Definition juce_SVGParser.cpp:600
bool parseCoordsOrSkip(String::CharPointerType &s, Point< float > &p, bool allowUnits) const
Definition juce_SVGParser.cpp:1262
FillType getGradientFillType(const XmlPath &fillXml, const Path &path, const float opacity) const
Definition juce_SVGParser.cpp:853
static bool pathContainsClosedSubPath(const Path &path) noexcept
Definition juce_SVGParser.cpp:734
static String::CharPointerType findStyleItem(String::CharPointerType source, String::CharPointerType name)
Definition juce_SVGParser.cpp:1325
DrawableComposite * parseSwitch(const XmlPath &xml)
Definition juce_SVGParser.cpp:521
Drawable * parseSVGElement(const XmlPath &xml)
Definition juce_SVGParser.cpp:149
bool parseClipPath(const XmlPath &xml, Drawable &d)
Definition juce_SVGParser.cpp:790
Drawable * parseText(const XmlPath &xml, bool shouldParseTransform, AffineTransform *additonalTransform=nullptr) const
Definition juce_SVGParser.cpp:1053
static void setCommonAttributes(Drawable &d, const XmlPath &xml)
Definition juce_SVGParser.cpp:452
void parseCSSStyle(const XmlPath &xml)
Definition juce_SVGParser.cpp:1314
Drawable * useImage(const XmlPath &xml) const
Definition juce_SVGParser.cpp:1138
Drawable * parseUseOther(const XmlPath &xml) const
Definition juce_SVGParser.cpp:667
Drawable * parseSubElement(const XmlPath &xml)
Definition juce_SVGParser.cpp:482
float viewBoxW
Definition juce_SVGParser.cpp:443
String getStyleAttribute(const XmlPath &xml, StringRef attributeName, const String &defaultValue=String()) const
Definition juce_SVGParser.cpp:1347
static int parsePlacementFlags(const String &align) noexcept
Definition juce_SVGParser.cpp:1401
float viewBoxH
Definition juce_SVGParser.cpp:443
SVGState(const SVGState &)=default
Definition juce_StringArray.h:35
void removeEmptyStrings(bool removeWhitespaceStrings=true)
Definition juce_StringArray.cpp:250
int size() const noexcept
Definition juce_StringArray.h:136
void trim()
Definition juce_StringArray.cpp:266
int addTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
Definition juce_StringArray.cpp:329
Definition juce_String.h:53
CharPointerType getCharPointer() const noexcept
Definition juce_String.h:1153
bool equalsIgnoreCase(const String &other) const noexcept
Definition juce_String.cpp:590
String trim() const
Definition juce_String.cpp:1656
bool startsWithIgnoreCase(StringRef text) const noexcept
Definition juce_String.cpp:1398
String upToLastOccurrenceOf(StringRef substringToFind, bool includeSubStringInResult, bool ignoreCase) const
Definition juce_String.cpp:1595
String substring(int startIndex, int endIndex) const
Definition juce_String.cpp:1498
bool isNotEmpty() const noexcept
Definition juce_String.h:316
String fromFirstOccurrenceOf(StringRef substringToStartFrom, bool includeSubStringInResult, bool ignoreCase) const
Definition juce_String.cpp:1565
Definition juce_StringRef.h:62
int length() const noexcept
Definition juce_StringRef.h:105
Definition juce_XmlElement.h:83
XmlElement * getChildByName(StringRef tagNameToLookFor) const noexcept
Definition juce_XmlElement.cpp:678
String getTagNameWithoutNamespace() const
Definition juce_XmlElement.cpp:486
Iterator< GetNextElementWithTagName > getChildWithTagNameIterator(StringRef name) const
Definition juce_XmlElement.h:730
String getAllSubText() const
Definition juce_XmlElement.cpp:928
bool hasAttribute(StringRef attributeName) const noexcept
Definition juce_XmlElement.cpp:549
bool hasTagName(StringRef possibleTagName) const noexcept
Definition juce_XmlElement.cpp:470
Iterator< GetNextElement > getChildIterator() const
Definition juce_XmlElement.h:715
const String & getStringAttribute(StringRef attributeName) const noexcept
Definition juce_XmlElement.cpp:555
bool hasTagNameIgnoringNamespace(StringRef possibleTagName) const
Definition juce_XmlElement.cpp:491
* e
Definition inflate.c:1404
unsigned * xp
Definition inflate.c:1587
struct huft * t
Definition inflate.c:943
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned f
Definition inflate.c:1572
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
static uintptr_t parent
Definition pugl.h:1644
virtual ASIOError start()=0
const Colour transparentBlack
Definition juce_Colours.h:40
JUCE_API Colour findColourForName(const String &colourName, Colour defaultColour)
Definition juce_Colours.cpp:30
const Colour black
Definition juce_Colours.h:50
Definition carla_juce.cpp:31
std::unique_ptr< XmlElement > parseXMLIfTagMatches(const String &textToParse, StringRef requiredTag)
Definition juce_XmlDocument.cpp:51
unsigned int uint32
Definition juce_MathsFunctions.h:45
constexpr Type jmax(Type a, Type b)
Definition juce_MathsFunctions.h:94
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Definition juce_RangedDirectoryIterator.h:184
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Definition juce_MathsFunctions.h:262
wchar_t juce_wchar
Definition juce_CharacterFunctions.h:42
Type juce_hypot(Type a, Type b) noexcept
Definition juce_MathsFunctions.h:352
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
constexpr FloatType degreesToRadians(FloatType degrees) noexcept
Definition juce_MathsFunctions.h:409
unsigned char uint8
Definition juce_MathsFunctions.h:37
int roundToInt(const FloatType value) noexcept
Definition juce_MathsFunctions.h:465
@ list
Definition juce_AccessibilityRole.h:56
@ image
Definition juce_AccessibilityRole.h:42
@ group
Definition juce_AccessibilityRole.h:61
constexpr int numElementsInArray(Type(&)[N]) noexcept
Definition juce_MathsFunctions.h:344
png_uint_32 length
Definition png.c:2247
static bool convertFromBase64(OutputStream &binaryOutput, StringRef base64TextInput)
Definition juce_Base64.cpp:73
static constexpr FloatType halfPi
Definition juce_MathsFunctions.h:388
static constexpr FloatType twoPi
Definition juce_MathsFunctions.h:385
Definition juce_SVGParser.cpp:107
Drawable * target
Definition juce_SVGParser.cpp:109
SVGState * state
Definition juce_SVGParser.cpp:108
Definition juce_SVGParser.cpp:129
const Path * path
Definition juce_SVGParser.cpp:131
FillType fillType
Definition juce_SVGParser.cpp:133
float opacity
Definition juce_SVGParser.cpp:132
const SVGState * state
Definition juce_SVGParser.cpp:130
Definition juce_SVGParser.cpp:118
const SVGState * state
Definition juce_SVGParser.cpp:119
ColourGradient * gradient
Definition juce_SVGParser.cpp:120
Definition juce_SVGParser.cpp:94
const SVGState * state
Definition juce_SVGParser.cpp:95
AffineTransform * transform
Definition juce_SVGParser.cpp:96
Drawable * target
Definition juce_SVGParser.cpp:97
Definition juce_SVGParser.cpp:70
Path * targetPath
Definition juce_SVGParser.cpp:72
const SVGState * state
Definition juce_SVGParser.cpp:71
Definition juce_SVGParser.cpp:81
const SVGState * state
Definition juce_SVGParser.cpp:82
AffineTransform * transform
Definition juce_SVGParser.cpp:83
Drawable * target
Definition juce_SVGParser.cpp:84
Definition juce_SVGParser.cpp:39
const XmlElement * xml
Definition juce_SVGParser.cpp:64
XmlPath(const XmlElement *e, const XmlPath *p) noexcept
Definition juce_SVGParser.cpp:40
const XmlElement * operator->() const noexcept
Definition juce_SVGParser.cpp:43
XmlPath getChild(const XmlElement *e) const noexcept
Definition juce_SVGParser.cpp:44
const XmlPath * parent
Definition juce_SVGParser.cpp:65
const XmlElement & operator*() const noexcept
Definition juce_SVGParser.cpp:42
bool applyOperationToChildWithID(const String &id, OperationType &op) const
Definition juce_SVGParser.cpp:47
const char * text
Definition swell-functions.h:167
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
int result
Definition process.c:1455
typedef int(UZ_EXP MsgFn)()
dy
Definition zipinfo.c:2288
_WDL_CSTRING_PREFIX void INT_PTR const char * format
Definition wdlcstring.h:263
#define const
Definition zconf.h:137