30#define JUCE_CHECK_COORDS_ARE_VALID(x, y) \
31 jassert (x == x && y == y);
40 t.incrementToEndOfWhitespace();
45 while (! (
t.isEmpty() ||
t.isWhitespace()))
51 return {
start, numChars };
54 inline double lengthOf (
float x1,
float y1,
float x2,
float y2)
noexcept
56 return juce_hypot ((
double) (x1 - x2), (
double) (y1 - y2));
61const float Path::lineMarker = 100001.0f;
62const float Path::moveMarker = 100002.0f;
63const float Path::quadMarker = 100003.0f;
64const float Path::cubicMarker = 100004.0f;
65const float Path::closeSubPathMarker = 100005.0f;
67const float Path::defaultToleranceForTesting = 1.0f;
68const float Path::defaultToleranceForMeasurement = 0.6f;
134 :
data (std::move (other.data)),
142 data = std::move (other.data);
149bool Path::operator!= (
const Path& other)
const noexcept {
return ! operator== (other); }
159 data.swapWith (other.data);
160 std::swap (
bounds.pathXMin, other.bounds.pathXMin);
161 std::swap (
bounds.pathXMax, other.bounds.pathXMax);
162 std::swap (
bounds.pathYMin, other.bounds.pathYMin);
163 std::swap (
bounds.pathYMax, other.bounds.pathYMax);
202 return bounds.getRectangle();
207 return getBounds().transformedBy (transform);
213 data.ensureStorageAllocated (
data.size() + numExtraCoordsToMakeSpaceFor);
250 const float x2,
const float y2)
259 bounds.extend (x1, y1, x2, y2);
265 endPoint.
x, endPoint.
y);
269 const float x2,
const float y2,
270 const float x3,
const float y3)
280 bounds.extend (x1, y1, x2, y2, x3, y3);
287 cubicTo (controlPoint1.
x, controlPoint1.
y,
288 controlPoint2.
x, controlPoint2.
y,
289 endPoint.
x, endPoint.
y);
303 auto*
i =
data.end() - 1;
307 while (
i !=
data.begin())
317 if (
i !=
data.begin())
318 return { *(
i - 1), *
i };
325 auto x1 =
x, y1 =
y, x2 =
x +
w, y2 =
y +
h;
327 if (
w < 0) std::swap (x1, x2);
328 if (
h < 0) std::swap (y1, y2);
358 float csx,
float csy,
359 const bool curveTopLeft,
const bool curveTopRight,
360 const bool curveBottomLeft,
const bool curveBottomRight)
362 csx =
jmin (csx,
w * 0.5f);
363 csy =
jmin (csy,
h * 0.5f);
364 auto cs45x = csx * 0.45f;
365 auto cs45y = csy * 0.45f;
382 cubicTo (x2 - cs45x,
y, x2,
y + cs45y, x2,
y + csy);
389 if (curveBottomRight)
392 cubicTo (x2, y2 - cs45y, x2 - cs45x, y2, x2 - csx, y2);
402 cubicTo (
x + cs45x, y2,
x, y2 - cs45y,
x, y2 - csy);
454 auto hw55 = hw * 0.55f;
456 auto hh55 =
hh * 0.55f;
457 auto cx = area.
getX() + hw;
458 auto cy = area.
getY() +
hh;
461 cubicTo (cx + hw55, cy -
hh, cx + hw, cy - hh55, cx + hw, cy);
462 cubicTo (cx + hw, cy + hh55, cx + hw55, cy +
hh, cx, cy +
hh);
463 cubicTo (cx - hw55, cy +
hh, cx - hw, cy + hh55, cx - hw, cy);
464 cubicTo (cx - hw, cy - hh55, cx - hw55, cy -
hh, cx, cy -
hh);
469 float fromRadians,
float toRadians,
470 bool startAsNewSubPath)
472 auto radiusX =
w / 2.0f;
473 auto radiusY =
h / 2.0f;
479 fromRadians, toRadians,
484 float radiusX,
float radiusY,
485 float rotationOfEllipse,
486 float fromRadians,
float toRadians,
487 bool startAsNewSubPath)
489 if (radiusX > 0.0f && radiusY > 0.0f)
493 auto angle = fromRadians;
495 if (startAsNewSubPath)
498 if (fromRadians < toRadians)
500 if (startAsNewSubPath)
503 while (angle < toRadians)
511 if (startAsNewSubPath)
514 while (angle > toRadians)
526 float fromRadians,
float toRadians,
527 float innerCircleProportionalSize)
529 auto radiusX =
width * 0.5f;
530 auto radiusY =
height * 0.5f;
540 if (innerCircleProportionalSize > 0)
542 radiusX *= innerCircleProportionalSize;
543 radiusY *= innerCircleProportionalSize;
546 addArc (centre.
x - radiusX, centre.
y - radiusY, radiusX * 2.0f, radiusY * 2.0f, toRadians, fromRadians);
551 if (innerCircleProportionalSize > 0)
553 radiusX *= innerCircleProportionalSize;
554 radiusY *= innerCircleProportionalSize;
556 addArc (centre.
x - radiusX, centre.
y - radiusY, radiusX * 2.0f, radiusY * 2.0f, toRadians, fromRadians);
568 float fromRadians,
float toRadians,
569 float innerCircleProportionalSize)
572 segmentBounds.
getY(),
577 innerCircleProportionalSize);
584 lineThickness *= 0.5f;
588 lineTo (reversed.getPointAlongLine (0, lineThickness));
589 lineTo (reversed.getPointAlongLine (0, -lineThickness));
594 float arrowheadWidth,
float arrowheadLength)
597 lineThickness *= 0.5f;
598 arrowheadWidth *= 0.5f;
599 arrowheadLength =
jmin (arrowheadLength, 0.8f * line.
getLength());
603 lineTo (reversed.getPointAlongLine (arrowheadLength, lineThickness));
604 lineTo (reversed.getPointAlongLine (arrowheadLength, arrowheadWidth));
606 lineTo (reversed.getPointAlongLine (arrowheadLength, -arrowheadWidth));
607 lineTo (reversed.getPointAlongLine (arrowheadLength, -lineThickness));
612 float radius,
float startAngle)
616 if (numberOfSides > 1)
620 for (
int i = 0;
i < numberOfSides; ++
i)
622 auto angle = startAngle + (float)
i * angleBetweenPoints;
636 float outerRadius,
float startAngle)
640 if (numberOfPoints > 1)
644 for (
int i = 0;
i < numberOfPoints; ++
i)
646 auto angle = startAngle + (float)
i * angleBetweenPoints;
665 float arrowBaseWidth)
667 auto halfW = bodyArea.
getWidth() / 2.0f;
668 auto halfH = bodyArea.
getHeight() / 2.0f;
669 auto cornerSizeW =
jmin (cornerSize, halfW);
670 auto cornerSizeH =
jmin (cornerSize, halfH);
671 auto cornerSizeW2 = 2.0f * cornerSizeW;
672 auto cornerSizeH2 = 2.0f * cornerSizeH;
676 auto targetLimit = bodyArea.
reduced (
jmin (halfW - 1.0f, cornerSizeW + arrowBaseWidth),
677 jmin (halfH - 1.0f, cornerSizeH + arrowBaseWidth));
680 targetLimit.getWidth(), bodyArea.
getY() - maximumArea.
getY()).
contains (arrowTip))
682 lineTo (arrowTip.
x - arrowBaseWidth, bodyArea.
getY());
684 lineTo (arrowTip.
x + arrowBaseWidth, bodyArea.
getY());
713 bodyArea.
getX() - maximumArea.
getX(), targetLimit.getHeight()).
contains (arrowTip))
715 lineTo (bodyArea.
getX(), arrowTip.
y + arrowBaseWidth);
717 lineTo (bodyArea.
getX(), arrowTip.
y - arrowBaseWidth);
824 bool firstPoint =
true;
825 float*
d =
data.begin();
834 transform.transformPoint (
d[0],
d[1]);
851 transform.transformPoint (
d[0],
d[1]);
858 transform.transformPoints (
d[0],
d[1],
d[2],
d[3]);
866 transform.transformPoints (
d[0],
d[1],
d[2],
d[3],
d[4],
d[5]);
882 preserveProportions, justification);
886 bool preserveProportions,
891 if (preserveProportions)
893 if (
w <= 0 ||
h <= 0 || boundsRect.isEmpty())
897 auto srcRatio = boundsRect.getHeight() / boundsRect.getWidth();
899 if (srcRatio >
h /
w)
915 else newXCentre +=
w * 0.5f;
919 else newYCentre +=
h * 0.5f;
922 boundsRect.getHeight() * -0.5f - boundsRect.getY())
923 .scaled (newW / boundsRect.getWidth(),
924 newH / boundsRect.getHeight())
925 .translated (newXCentre, newYCentre);
930 .scaled (
w / boundsRect.getWidth(),
931 h / boundsRect.getHeight())
945 int positiveCrossings = 0;
946 int negativeCrossings = 0;
950 if ((
i.y1 <=
y &&
i.y2 >
y) || (
i.y2 <=
y &&
i.y1 >
y))
952 auto intersectX =
i.x1 + (
i.x2 -
i.x1) * (
y -
i.y1) / (
i.y2 -
i.y1);
965 : ((negativeCrossings + positiveCrossings) & 1) != 0;
970 return contains (point.
x, point.
y, tolerance);
991 if (startInside == endInside)
993 if (keepSectionOutsidePath == startInside)
1003 if (line.
intersects ({ i.x1, i.y1, i.x2, i.y2 }, intersection))
1005 if ((startInside && keepSectionOutsidePath) || (endInside && ! keepSectionOutsidePath))
1006 result.setStart (intersection);
1008 result.setEnd (intersection);
1029 float tolerance)
const
1038 if (distanceFromStart <= lineLength)
1041 distanceFromStart -= lineLength;
1044 return {
i.x2,
i.y2 };
1049 float tolerance)
const
1052 float bestPosition = 0, bestDistance = std::numeric_limits<float>::max();
1061 if (distance < bestDistance)
1063 bestDistance = distance;
1065 pointOnPath = pointOnLine;
1071 return bestPosition;
1077 if (cornerRadius <= 0.01f)
1081 int n = 0, indexOfPathStart = 0, indexOfPathStartThis = 0;
1082 auto* elements =
data.begin();
1083 bool lastWasLine =
false, firstWasLine =
false;
1085 while (
n <
data.size())
1087 auto type = elements[
n++];
1091 indexOfPathStart =
p.data.size();
1092 indexOfPathStartThis =
n - 1;
1093 auto x = elements[
n++];
1094 auto y = elements[
n++];
1095 p.startNewSubPath (
x,
y);
1096 lastWasLine =
false;
1101 float startX = 0, startY = 0, joinX = 0, joinY = 0, endX, endY;
1105 endX = elements[
n++];
1106 endY = elements[
n++];
1110 startX = elements[
n - 8];
1111 startY = elements[
n - 7];
1112 joinX = elements[
n - 5];
1113 joinY = elements[
n - 4];
1118 endX = elements[indexOfPathStartThis + 1];
1119 endY = elements[indexOfPathStartThis + 2];
1123 startX = elements[
n - 6];
1124 startY = elements[
n - 5];
1125 joinX = elements[
n - 3];
1126 joinY = elements[
n - 2];
1136 auto propNeeded =
jmin (0.5, cornerRadius / len1);
1138 *(
p.data.end() - 2) = (float) (joinX - (joinX - startX) * propNeeded);
1139 *(
p.data.end() - 1) = (float) (joinY - (joinY - startY) * propNeeded);
1146 auto propNeeded =
jmin (0.5, cornerRadius / len2);
1148 p.quadraticTo (joinX, joinY,
1149 (
float) (joinX + (endX - joinX) * propNeeded),
1150 (
float) (joinY + (endY - joinY) * propNeeded));
1153 p.lineTo (endX, endY);
1157 p.lineTo (endX, endY);
1165 startX = elements[
n - 3];
1166 startY = elements[
n - 2];
1169 endX = elements[indexOfPathStartThis + 4];
1170 endY = elements[indexOfPathStartThis + 5];
1176 auto propNeeded =
jmin (0.5, cornerRadius / len1);
1178 *(
p.data.end() - 2) = (float) (joinX - (joinX - startX) * propNeeded);
1179 *(
p.data.end() - 1) = (float) (joinY - (joinY - startY) * propNeeded);
1186 auto propNeeded =
jmin (0.5, cornerRadius / len2);
1188 endX = (float) (joinX + (endX - joinX) * propNeeded);
1189 endY = (float) (joinY + (endY - joinY) * propNeeded);
1191 p.quadraticTo (joinX, joinY, endX, endY);
1193 p.data.begin()[indexOfPathStart + 1] = endX;
1194 p.data.begin()[indexOfPathStart + 2] = endY;
1203 lastWasLine =
false;
1204 auto x1 = elements[
n++];
1205 auto y1 = elements[
n++];
1206 auto x2 = elements[
n++];
1207 auto y2 = elements[
n++];
1208 p.quadraticTo (x1, y1, x2, y2);
1212 lastWasLine =
false;
1213 auto x1 = elements[
n++];
1214 auto y1 = elements[
n++];
1215 auto x2 = elements[
n++];
1216 auto y2 = elements[
n++];
1217 auto x3 = elements[
n++];
1218 auto y3 = elements[
n++];
1219 p.cubicTo (x1, y1, x2, y2, x3, y3);
1267 cubicTo (x1, y1, x2, y2, x3, y3);
1303 for (
auto*
i =
data.begin();
i !=
data.end();)
1352 float lastMarker = 0.0f;
1354 for (
int i = 0;
i <
data.size();)
1357 char markerChar = 0;
1388 if (
s.getDataSize() != 0)
1395 while (--numCoords >= 0 &&
i <
data.size())
1405 if (
s.getDataSize() != 0)
1420 auto t = stringVersion.
text;
1428 auto firstChar = token[0];
1434 if (firstChar ==
'm' || firstChar ==
'l')
1439 else if (firstChar ==
'q')
1444 else if (firstChar ==
'c')
1449 else if (firstChar ==
'z')
1454 else if (firstChar ==
'a')
1462 values [0] = token.getFloatValue();
1465 for (
int i = startNum;
i < numValues; ++
i)
1471 case 'l':
lineTo (values[0], values[1]);
break;
1472 case 'q':
quadraticTo (values[0], values[1], values[2], values[3]);
break;
1473 case 'c':
cubicTo (values[0], values[1], values[2], values[3], values[4], values[5]);
break;
1537#undef JUCE_CHECK_COORDS_ARE_VALID
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
Type jmax(const Type a, const Type b)
Definition MathsFunctions.h:48
#define noexcept
Definition DistrhoDefines.h:72
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
int size() const noexcept
Definition juce_Array.h:215
ElementType * begin() noexcept
Definition juce_Array.h:328
Definition juce_Justification.h:41
@ left
Definition juce_Justification.h:108
@ bottom
Definition juce_Justification.h:122
@ top
Definition juce_Justification.h:119
@ right
Definition juce_Justification.h:111
bool testFlags(int flagsToTest) const noexcept
Definition juce_Justification.h:63
Definition juce_Line.h:47
Line reversed() const noexcept
Definition juce_Line.h:106
Point< ValueType > getPointAlongLine(ValueType distanceFromStart) const noexcept
Definition juce_Line.h:204
ValueType getLength() const noexcept
Definition juce_Line.h:117
ValueType getDistanceFromPoint(Point< ValueType > targetPoint, Point< ValueType > &pointOnLine) const noexcept
Definition juce_Line.h:262
Point< ValueType > getEnd() const noexcept
Definition juce_Line.h:91
bool intersects(Line line, Point< ValueType > &intersection) const noexcept
Definition juce_Line.h:184
Point< ValueType > getStart() const noexcept
Definition juce_Line.h:88
Definition juce_MemoryOutputStream.h:36
Definition juce_OutputStream.h:38
virtual bool writeFloat(float value)
Definition juce_OutputStream.cpp:155
virtual bool writeByte(char byte)
Definition juce_OutputStream.cpp:83
const Path & path
Definition juce_Path.h:756
Iterator(const Path &path) noexcept
Definition juce_Path.cpp:1481
const float * index
Definition juce_Path.h:757
float y1
Definition juce_Path.h:752
float x1
Definition juce_Path.h:752
float y3
Definition juce_Path.h:752
float x2
Definition juce_Path.h:752
PathElementType elementType
Definition juce_Path.h:750
~Iterator() noexcept
Definition juce_Path.cpp:1486
bool next() noexcept
Definition juce_Path.cpp:1490
float x3
Definition juce_Path.h:752
float y2
Definition juce_Path.h:752
@ quadraticTo
Definition juce_Path.h:745
@ closePath
Definition juce_Path.h:747
@ lineTo
Definition juce_Path.h:744
@ cubicTo
Definition juce_Path.h:746
@ startNewSubPath
Definition juce_Path.h:743
float getNearestPoint(Point< float > targetPoint, Point< float > &pointOnPath, const AffineTransform &transform=AffineTransform(), float tolerance=defaultToleranceForMeasurement) const
Definition juce_Path.cpp:1047
float getLength(const AffineTransform &transform=AffineTransform(), float tolerance=defaultToleranceForMeasurement) const
Definition juce_Path.cpp:1016
void addBubble(Rectangle< float > bodyArea, Rectangle< float > maximumArea, const Point< float > arrowTipPosition, const float cornerSize, const float arrowBaseWidth)
Definition juce_Path.cpp:661
static const float cubicMarker
Definition juce_Path.h:833
bool contains(float x, float y, float tolerance=defaultToleranceForTesting) const
Definition juce_Path.cpp:937
void loadPathFromData(const void *data, size_t numberOfBytes)
Definition juce_Path.cpp:1293
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
~Path()
Definition juce_Path.cpp:110
void addPieSegment(float x, float y, float width, float height, float fromRadians, float toRadians, float innerCircleProportionalSize)
Definition juce_Path.cpp:525
void addTriangle(float x1, float y1, float x2, float y2, float x3, float y3)
Definition juce_Path.cpp:417
static const float closeSubPathMarker
Definition juce_Path.h:834
void addEllipse(float x, float y, float width, float height)
Definition juce_Path.cpp:446
void preallocateSpace(int numExtraCoordsToMakeSpaceFor)
Definition juce_Path.cpp:211
Point< float > getCurrentPosition() const
Definition juce_Path.cpp:298
Path()
Definition juce_Path.cpp:106
void addPath(const Path &pathToAppend)
Definition juce_Path.cpp:726
void quadraticTo(float controlPointX, float controlPointY, float endPointX, float endPointY)
Definition juce_Path.cpp:249
friend class PathFlatteningIterator
Definition juce_Path.h:803
static const float quadMarker
Definition juce_Path.h:832
AffineTransform getTransformToScaleToFit(float x, float y, float width, float height, bool preserveProportions, Justification justificationType=Justification::centred) const
Definition juce_Path.cpp:885
void cubicTo(float controlPoint1X, float controlPoint1Y, float controlPoint2X, float controlPoint2Y, float endPointX, float endPointY)
Definition juce_Path.cpp:268
PathBounds bounds
Definition juce_Path.h:827
Rectangle< float > getBoundsTransformed(const AffineTransform &transform) const noexcept
Definition juce_Path.cpp:205
bool intersectsLine(Line< float > line, float tolerance=defaultToleranceForTesting) const
Definition juce_Path.cpp:973
void addRectangle(float x, float y, float width, float height)
Definition juce_Path.cpp:323
void scaleToFit(float x, float y, float width, float height, bool preserveProportions) noexcept
Definition juce_Path.cpp:173
void clear() noexcept
Definition juce_Path.cpp:151
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
static const float lineMarker
Definition juce_Path.h:830
void restoreFromString(StringRef stringVersion)
Definition juce_Path.cpp:1415
bool useNonZeroWinding
Definition juce_Path.h:828
void closeSubPath()
Definition juce_Path.cpp:292
void writePathToStream(OutputStream &destination) const
Definition juce_Path.cpp:1299
Line< float > getClippedLine(Line< float > line, bool keepSectionOutsidePath) const
Definition juce_Path.cpp:985
Rectangle< float > getBounds() const noexcept
Definition juce_Path.cpp:200
String toString() const
Definition juce_Path.cpp:1346
Point< float > getPointAlongPath(float distanceFromStart, const AffineTransform &transform=AffineTransform(), float tolerance=defaultToleranceForMeasurement) const
Definition juce_Path.cpp:1027
void lineTo(float endX, float endY)
Definition juce_Path.cpp:233
Path createPathWithRoundedCorners(float cornerRadius) const
Definition juce_Path.cpp:1075
static const float moveMarker
Definition juce_Path.h:831
void addArc(float x, float y, float width, float height, float fromRadians, float toRadians, bool startAsNewSubPath=false)
Definition juce_Path.cpp:468
void addLineSegment(Line< float > line, float lineThickness)
Definition juce_Path.cpp:581
void addStar(Point< float > centre, int numberOfPoints, float innerRadius, float outerRadius, float startAngle=0.0f)
Definition juce_Path.cpp:635
void swapWithPath(Path &) noexcept
Definition juce_Path.cpp:157
void loadPathFromStream(InputStream &source)
Definition juce_Path.cpp:1227
void addArrow(Line< float > line, float lineThickness, float arrowheadWidth, float arrowheadLength)
Definition juce_Path.cpp:593
void setUsingNonZeroWinding(bool isNonZeroWinding) noexcept
Definition juce_Path.cpp:168
Array< float > data
Definition juce_Path.h:807
bool isEmpty() const noexcept
Definition juce_Path.cpp:179
void addQuadrilateral(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
Definition juce_Path.cpp:434
void addPolygon(Point< float > centre, int numberOfSides, float radius, float startAngle=0.0f)
Definition juce_Path.cpp:611
Definition juce_Point.h:42
ValueType getDistanceFrom(Point other) const noexcept
Definition juce_Point.h:160
ValueType y
Definition juce_Point.h:247
ValueType x
Definition juce_Point.h:246
Point< FloatType > getPointOnCircumference(float radius, float angle) const noexcept
Definition juce_Point.h:194
Definition juce_Rectangle.h:67
ValueType getRight() const noexcept
Definition juce_Rectangle.h:139
bool contains(ValueType xCoord, ValueType yCoord) const noexcept
Definition juce_Rectangle.h:622
ValueType getHeight() const noexcept
Definition juce_Rectangle.h:136
ValueType getBottom() const noexcept
Definition juce_Rectangle.h:142
ValueType getX() const noexcept
Definition juce_Rectangle.h:127
ValueType getWidth() const noexcept
Definition juce_Rectangle.h:133
Rectangle reduced(ValueType deltaX, ValueType deltaY) const noexcept
Definition juce_Rectangle.h:485
ValueType getY() const noexcept
Definition juce_Rectangle.h:130
Definition juce_String.h:53
bool endsWithChar(juce_wchar character) const noexcept
Definition juce_String.cpp:1410
String dropLastCharacters(int numberToDrop) const
Definition juce_String.cpp:1555
Definition juce_StringRef.h:62
String::CharPointerType text
Definition juce_StringRef.h:130
* e
Definition inflate.c:1404
UINT_D64 w
Definition inflate.c:942
struct huft * t
Definition inflate.c:943
int y
Definition inflate.c:1588
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
static PuglViewHint int value
Definition pugl.h:1708
static int int height
Definition pugl.h:1594
static int width
Definition pugl.h:1593
virtual ASIOError start()=0
int marker
Definition jpeglib.h:950
JSAMPIMAGE data
Definition jpeglib.h:945
#define JUCE_CHECK_COORDS_ARE_VALID(x, y)
Definition juce_Path.cpp:30
float in
Definition lilv_test.c:1460
Definition juce_Path.cpp:35
static String nextToken(String::CharPointerType &t)
Definition juce_Path.cpp:38
double lengthOf(float x1, float y1, float x2, float y2) noexcept
Definition juce_Path.cpp:54
const float ellipseAngularIncrement
Definition juce_Path.cpp:36
Definition carla_juce.cpp:31
constexpr Type jmin(Type a, Type b)
Definition juce_MathsFunctions.h:106
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Definition juce_RangedDirectoryIterator.h:184
static bool isMarker(float value, float marker) noexcept
Definition juce_Path.cpp:70
wchar_t juce_wchar
Definition juce_CharacterFunctions.h:42
Type juce_hypot(Type a, Type b) noexcept
Definition juce_MathsFunctions.h:352
png_uint_32 length
Definition png.c:2247
static constexpr FloatType halfPi
Definition juce_MathsFunctions.h:388
static constexpr FloatType twoPi
Definition juce_MathsFunctions.h:385
static constexpr FloatType pi
Definition juce_MathsFunctions.h:382
void reset() noexcept
Definition juce_Path.cpp:85
PathBounds() noexcept
Definition juce_Path.cpp:76
float pathYMin
Definition juce_Path.h:824
Rectangle< float > getRectangle() const noexcept
Definition juce_Path.cpp:80
void extend(float, float) noexcept
Definition juce_Path.cpp:96
float pathXMin
Definition juce_Path.h:824
float pathYMax
Definition juce_Path.h:824
float pathXMax
Definition juce_Path.h:824
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
uch hh[RAND_HEAD_LEN]
Definition crypt.c:595
int result
Definition process.c:1455
#define const
Definition zconf.h:137