6#include <private/qdatabuffer_p.h>
7#include <private/qimage_p.h>
8#include <private/qpathsimplifier_p.h>
37template <FillClip clip, FillHDir dir>
45 int fromX =
qMax(0, lx >> 8);
50 qint32 val =
d + (((fromX << 8) + 0xff - lx) * dd >> 8);
62 int fromX =
qMax(0, lx >> 8);
110template <FillClip clip, FillVDir vDir, FillHDir hDir>
116 int y = lowerY - upperY;
117 if (vDir == TopDown) {
138template <FillClip clip>
144 const int yC = clip == Clip ?
qBound(0, center->y() >> 8,
height) : center->y() >> 8;
146 const int v1Frac = clip == Clip ? (
y1 << 8) + 0xff -
v1->y() :
~v1->y() & 0xff;
147 const int v2Frac = clip == Clip ? (
y2 << 8) + 0xff -
v2->y() :
~v2->y() & 0xff;
148 const int centerFrac = clip == Clip ? (yC << 8) + 0xff - center->y() : ~center->y() & 0xff;
150 int dx1 = 0,
x1 = 0, dx2 = 0,
x2 = 0;
152 if (
v1->y() != center->y()) {
153 dx1 = ((
v1->x() - center->x()) << 8) / (
v1->y() - center->y());
154 x1 = center->x() + centerFrac * (
v1->x() - center->x()) / (
v1->y() - center->y());
156 if (
v2->y() != center->y()) {
157 dx2 = ((
v2->x() - center->x()) << 8) / (
v2->y() - center->y());
158 x2 = center->x() + centerFrac * (
v2->x() - center->x()) / (
v2->y() - center->y());
161 const qint32 div = (
v2->x() - center->x()) * (
v1->y() - center->y())
162 - (
v2->y() - center->y()) * (
v1->x() - center->x());
171 d1 = centerFrac *
value / (
v1->y() - center->y());
172 dd1 = ((
value << 8) / (
v1->y() - center->y()));
174 x2, dx2,
d1, dd1, dd);
175 dx1 = ((
v1->x() -
v2->x()) << 8) / (
v1->y() -
v2->y());
176 x1 =
v1->x() + v1Frac * (
v1->x() -
v2->x()) / (
v1->y() -
v2->y());
182 d2 = centerFrac *
value / (
v2->y() - center->y());
183 dd2 = ((
value << 8) / (
v2->y() - center->y()));
185 x2, dx2,
d2, dd2, dd);
187 dx2 = ((
v1->x() -
v2->x()) << 8) / (
v1->y() -
v2->y());
188 x2 =
v2->x() + v2Frac * (
v1->x() -
v2->x()) / (
v1->y() -
v2->y());
196 int dx = ((
v1->x() -
v2->x()) << 8) / (
v1->y() -
v2->y());
198 xUp = xDn =
v2->x() + (clip == Clip ? (yC << 8) + 0xff -
v2->y()
199 : (center->y() | 0xff) -
v2->y())
200 * (
v1->x() -
v2->x()) / (
v1->y() -
v2->y());
211 int dx = ((
v1->x() -
v2->x()) << 8) / (
v1->y() -
v2->y());
213 xUp = xDn =
v1->x() + (clip == Clip ? (yC << 8) + 0xff -
v1->y()
214 : (center->y() | 0xff) -
v1->y())
215 * (
v1->x() -
v2->x()) / (
v1->y() -
v2->y());
217 xUp, dx,
value, 0, dd);
220 xDn, dx,
value, 0, dd);
227 d2 = centerFrac *
value / (
v2->y() - center->y());
228 dd2 = ((
value << 8) / (
v2->y() - center->y()));
230 x1, dx1,
d2, dd2, dd);
232 dx2 = ((
v1->x() -
v2->x()) << 8) / (
v1->y() -
v2->y());
233 x2 =
v2->x() + v2Frac * (
v1->x() -
v2->x()) / (
v1->y() -
v2->y());
240 d1 = centerFrac *
value / (
v1->y() - center->y());
241 dd1 = ((
value << 8) / (
v1->y() - center->y()));
243 x1, dx1,
d1, dd1, dd);
246 dx1 = ((
v1->x() -
v2->x()) << 8) / (
v1->y() -
v2->y());
247 x1 =
v1->x() + v1Frac * (
v1->x() -
v2->x()) / (
v1->y() -
v2->y());
256template <FillClip clip>
262 if (center1->
y() > center2->
y()) {
263 qSwap(center1, center2);
266 extValue = -extValue;
269 Q_ASSERT(ext1->
x() - center1->
x() == center1->
x() - int1->
x());
270 Q_ASSERT(ext1->
y() - center1->
y() == center1->
y() - int1->
y());
271 Q_ASSERT(ext2->
x() - center2->
x() == center2->
x() - int2->
x());
272 Q_ASSERT(ext2->
y() - center2->
y() == center2->
y() - int2->
y());
274 const int yc1 = clip == Clip ?
qBound(0, center1->
y() >> 8,
height) : center1->
y() >> 8;
275 const int yc2 = clip == Clip ?
qBound(0, center2->
y() >> 8,
height) : center2->
y() >> 8;
276 const int yi1 = clip == Clip ?
qBound(0, int1->
y() >> 8,
height) : int1->
y() >> 8;
277 const int yi2 = clip == Clip ?
qBound(0, int2->
y() >> 8,
height) : int2->
y() >> 8;
278 const int ye1 = clip == Clip ?
qBound(0, ext1->
y() >> 8,
height) : ext1->
y() >> 8;
279 const int ye2 = clip == Clip ?
qBound(0, ext2->
y() >> 8,
height) : ext2->
y() >> 8;
281 const int center1Frac = clip == Clip ? (yc1 << 8) + 0xff - center1->
y() : ~center1->y() & 0xff;
282 const int center2Frac = clip == Clip ? (yc2 << 8) + 0xff - center2->
y() : ~center2->y() & 0xff;
283 const int int1Frac = clip == Clip ? (yi1 << 8) + 0xff - int1->
y() : ~int1->y() & 0xff;
284 const int ext1Frac = clip == Clip ? (ye1 << 8) + 0xff - ext1->
y() : ~ext1->y() & 0xff;
286 int dxC = 0, dxE = 0;
288 if (ext1->
y() != int1->
y()) {
289 dxC = ((ext1->
x() - int1->
x()) << 8) / (ext1->
y() - int1->
y());
290 ddC = (extValue << 9) / (ext1->
y() - int1->
y());
292 if (ext1->
y() != ext2->
y())
293 dxE = ((ext1->
x() - ext2->
x()) << 8) / (ext1->
y() - ext2->
y());
295 const qint32 div = (ext1->
x() - int1->
x()) * (ext2->
y() - int1->
y())
296 - (ext1->
y() - int1->
y()) * (ext2->
x() - int1->
x());
299 int xe1, xe2, xc1, xc2;
302 qint32 intValue = -extValue;
304 if (center2->
x() < center1->
x()) {
306 if (int1->
y() < ext2->
y()) {
309 xe1 = ext1->
x() + ext1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
310 xe2 = int1->
x() + int1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
312 xc2 = center1->
x() + center1Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
313 xc2 += (ye1 - yc1) * dxC;
314 fillLines<clip, TopDown, LeftToRight>(
bits,
width,
height, ye1, yi1, xe1, dxE,
315 xc2, dxC, extValue, 0, dd);
318 fillLines<clip, TopDown, LeftToRight>(
bits,
width,
height, yi1, ye2, xe1, dxE,
319 xe2, dxE, extValue, 0, dd);
321 xc1 = center2->
x() + center2Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
322 xc1 += (ye2 - yc2) * dxC;
323 fillLines<clip, TopDown, RightToLeft>(
bits,
width,
height, ye2, yi2, xc1, dxC,
324 xe2, dxE, intValue, 0, dd);
329 xc1 = center2->
x() + center2Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
330 xc2 = center1->
x() + center1Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
331 xc1 += (ye2 - yc2) * dxC;
332 xc2 += (ye1 - yc1) * dxC;
334 xe1 = ext1->
x() + ext1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
335 fillLines<clip, TopDown, LeftToRight>(
bits,
width,
height, ye1, ye2, xe1, dxE,
336 xc2, dxC, extValue, 0, dd);
339 d = (clip == Clip ? (ye2 << 8) + 0xff - center2->
y()
340 : (ext2->
y() | 0xff) - center2->
y())
341 * 2 * extValue / (ext1->
y() - int1->
y());
342 fillLines<clip, TopDown, LeftToRight>(
bits,
width,
height, ye2, yi1, xc1, dxC,
343 xc2, dxC,
d, ddC, dd);
346 xe2 = int1->
x() + int1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
347 fillLines<clip, TopDown, RightToLeft>(
bits,
width,
height, yi1, yi2, xc1, dxC,
348 xe2, dxE, intValue, 0, dd);
353 if (ext1->
y() < int2->
y()) {
356 xe1 = ext1->
x() + ext1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
357 xe2 = int1->
x() + int1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
359 xc1 = center1->
x() + center1Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
360 xc1 += (yi1 - yc1) * dxC;
361 fillLines<clip, TopDown, RightToLeft>(
bits,
width,
height, yi1, ye1, xc1, dxC,
362 xe2, dxE, intValue, 0, dd);
365 fillLines<clip, TopDown, RightToLeft>(
bits,
width,
height, ye1, yi2, xe1, dxE,
366 xe2, dxE, intValue, 0, dd);
368 xc2 = center2->
x() + center2Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
369 xc2 += (yi2 - yc2) * dxC;
370 fillLines<clip, TopDown, LeftToRight>(
bits,
width,
height, yi2, ye2, xe1, dxE,
371 xc2, dxC, extValue, 0, dd);
376 xc1 = center1->
x() + center1Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
377 xc2 = center2->
x() + center2Frac * (ext1->
x() - int1->
x()) / (ext1->
y() - int1->
y());
378 xc1 += (yi1 - yc1) * dxC;
379 xc2 += (yi2 - yc2) * dxC;
381 xe2 = int1->
x() + int1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
382 fillLines<clip, TopDown, RightToLeft>(
bits,
width,
height, yi1, yi2, xc1, dxC,
383 xe2, dxE, intValue, 0, dd);
386 d = (clip == Clip ? (yi2 << 8) + 0xff - center2->
y()
387 : (int2->
y() | 0xff) - center2->
y())
388 * 2 * extValue / (ext1->
y() - int1->
y());
389 fillLines<clip, TopDown, RightToLeft>(
bits,
width,
height, yi2, ye1, xc1, dxC,
390 xc2, dxC,
d, ddC, dd);
393 xe1 = ext1->
x() + ext1Frac * (ext1->
x() - ext2->
x()) / (ext1->
y() - ext2->
y());
394 fillLines<clip, TopDown, LeftToRight>(
bits,
width,
height, ye1, ye2, xe1, dxE,
395 xc2, dxC, extValue, 0, dd);
408 for (
int i = 1;
i < indexCount; ++
i) {
419 if (
v2->y() <
v1->y())
421 int fromY =
qMax(0,
v1->y() >> 8);
425 int dx = ((
v2->x() -
v1->x()) << 8) / (
v2->y() -
v1->y());
426 int x =
v1->x() + ((fromY << 8) + 0xff -
v1->y()) * (
v2->x() -
v1->x()) / (
v2->y() -
v1->y());
427 for (
int y = fromY;
y < toY; ++
y) {
437 for (
int j = 1;
j <
size; ++
j) {
440 for (; k != 0 &&
value < scanline[k - 1]; --k)
441 scanline[k] = scanline[k - 1];
446 for (;
j + 1 <
size;
j += 2) {
451 for (
int x = scanline[
j];
x <
width; ++
x)
462 if (
path.isEmpty()) {
463 memset(
data->data, 0,
data->nbytes);
467 int imgWidth =
data->width;
468 int imgHeight =
data->height;
478 const qint32 interiorColor = -0x7f80;
479 const qint32 exteriorColor = 0x7f80;
482 for (
int i = 0;
i < imgWidth * imgHeight; ++
i)
483 bits[
i] = exteriorColor;
503 needsClipping.
clear();
515 const QPoint &from = pathVertices.
at(fromVertexIndex);
516 const QPoint &to = pathVertices.
at(toVertexIndex);
519 if (
n.x() == 0 &&
n.y() == 0)
529 needsClipping.
append((to.
x() < offs << 8) || (to.
x() >= (imgWidth - offs) << 8)
530 || (to.
y() < offs << 8) || (to.
y() >= (imgHeight - offs) << 8));
535 isConvex[prev] = normals.
at(prev).x() * normals.
at(
next).y()
536 - normals.
at(prev).y() * normals.
at(
next).x() < 0;
547 extPrev.
rx() -=
n.x();
548 extPrev.
ry() -=
n.y();
549 intPrev.
rx() +=
n.x();
550 intPrev.
ry() +=
n.y();
551 extNext.
rx() -=
n.x();
552 extNext.
ry() -=
n.y();
553 intNext.
rx() +=
n.x();
554 intNext.
ry() +=
n.y();
556 if (needsClipping[prev] || needsClipping[
next]) {
557 drawRectangle<Clip>(
bits.data(), imgWidth, imgHeight,
558 &intPrev, &vertices.
at(prev), &extPrev,
559 &intNext, &vertices.
at(
next), &extNext,
562 drawRectangle<NoClip>(
bits.data(), imgWidth, imgHeight,
563 &intPrev, &vertices.
at(prev), &extPrev,
564 &intNext, &vertices.
at(
next), &extNext,
568 if (isConvex.
at(prev)) {
570 if (needsClipping[prev]) {
572 QPoint rn((
n.x() * rotation.
x() -
n.y() * rotation.
y()) >> 14,
573 (
n.y() * rotation.
x() +
n.x() * rotation.
y()) >> 14);
575 if (
n.x() * normals.
at(prev).y() -
n.y() * normals.
at(prev).x() <= 0) {
576 p.
rx() = vertices.
at(prev).x() - normals.
at(prev).x();
577 p.ry() = vertices.
at(prev).y() - normals.
at(prev).y();
578 drawTriangle<Clip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
579 &extPrev, &
p, exteriorColor);
583 p.rx() = vertices.
at(prev).x() -
n.x();
584 p.ry() = vertices.
at(prev).y() -
n.y();
585 drawTriangle<Clip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
586 &extPrev, &
p, exteriorColor);
591 QPoint rn((
n.x() * rotation.
x() -
n.y() * rotation.
y()) >> 14,
592 (
n.y() * rotation.
x() +
n.x() * rotation.
y()) >> 14);
594 if (
n.x() * normals.
at(prev).y() -
n.y() * normals.
at(prev).x() <= 0) {
595 p.
rx() = vertices.
at(prev).x() - normals.
at(prev).x();
596 p.ry() = vertices.
at(prev).y() - normals.
at(prev).y();
597 drawTriangle<NoClip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
598 &extPrev, &
p, exteriorColor);
602 p.rx() = vertices.
at(prev).x() -
n.x();
603 p.ry() = vertices.
at(prev).y() -
n.y();
604 drawTriangle<NoClip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
605 &extPrev, &
p, exteriorColor);
611 if (needsClipping[prev]) {
613 QPoint rn((
n.x() * rotation.
x() +
n.y() * rotation.
y()) >> 14,
614 (
n.y() * rotation.
x() -
n.x() * rotation.
y()) >> 14);
616 if (
n.x() * normals.
at(prev).y() -
n.y() * normals.
at(prev).x() >= 0) {
617 p.
rx() = vertices.
at(prev).x() + normals.
at(prev).x();
618 p.ry() = vertices.
at(prev).y() + normals.
at(prev).y();
619 drawTriangle<Clip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
620 &
p, &intPrev, interiorColor);
624 p.rx() = vertices.
at(prev).x() +
n.x();
625 p.ry() = vertices.
at(prev).y() +
n.y();
626 drawTriangle<Clip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
627 &
p, &intPrev, interiorColor);
632 QPoint rn((
n.x() * rotation.
x() +
n.y() * rotation.
y()) >> 14,
633 (
n.y() * rotation.
x() -
n.x() * rotation.
y()) >> 14);
635 if (
n.x() * normals.
at(prev).y() -
n.y() * normals.
at(prev).x() >= 0) {
636 p.
rx() = vertices.
at(prev).x() + normals.
at(prev).x();
637 p.ry() = vertices.
at(prev).y() + normals.
at(prev).y();
638 drawTriangle<NoClip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
639 &
p, &intPrev, interiorColor);
643 p.rx() = vertices.
at(prev).x() +
n.x();
644 p.ry() = vertices.
at(prev).y() +
n.y();
645 drawTriangle<NoClip>(
bits.data(), imgWidth, imgHeight, &vertices.
at(prev),
646 &
p, &intPrev, interiorColor);
658 for (
int y = 0;
y < imgHeight; ++
y) {
659 for (
int x = 0;
x < imgWidth; ++
x, ++inLine, ++outLine)
660 *outLine =
uchar((0x7f80 - *inLine) >> 8);
677 for (
int x = 0;
x < im.
width(); ++
x) {
684 minHThick =
qMin(minHThick, thick);
691 int x = (im.
width() + 1) / 2;
699 minVThick =
qMin(minVThick, thick);
704 return minHThick == 1 || minVThick == 1;
714 static bool initialized =
false;
766 if (glyphIndices.
isEmpty() || glyphIndices[0] == 0)
814 , nbytes(
other.nbytes)
831 if (
size.isValid()) {
922 path.translate(-
path.boundingRect().topLeft());
954 if (
w <= 0 ||
h <= 0)
973 int pixels_to_copy =
qMax(
w - dx, 0);
976 else if (pixels_to_copy > d->
width -
x)
977 pixels_to_copy = d->
width -
x;
978 int lines_to_copy =
qMax(
h - dy, 0);
981 else if (lines_to_copy > d->
height -
y)
986 for (
int i = 0;
i < lines_to_copy; ++
i) {
987 memcpy(dest,
src, pixels_to_copy);
1049 if (
image.depth() == 8) {
1054 for (
int x = 0;
x < d->
width; ++
x) {
T loadRelaxed() const noexcept
static QDistanceFieldData * create(const QSize &size)
void setGlyph(const QRawFont &font, glyph_t glyph, bool doubleResolution=false)
const uchar * constScanLine(int) const
QImage toImage(QImage::Format format=QImage::Format_ARGB32_Premultiplied) const
friend class QDistanceFieldData
QDistanceField copy(const QRect &rect=QRect()) const
const uchar * constBits() const
virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, QPainterPath *path, QTextItem::RenderFlags flags)
virtual QFontEngine * cloneWithSize(qreal) const
virtual QImage alphaMapForGlyph(glyph_t)
virtual glyph_t glyphIndex(uint ucs4) const =0
void setPixelSize(int)
Sets the font size to pixelSize pixels, with a maxiumum size of an unsigned 16-bit integer.
QRgb pixel(int x, int y) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
int width() const
Returns the width of the image.
bool isNull() const
Returns true if it is a null image, otherwise returns false.
int height() const
Returns the height of the image.
Format
The following image formats are available in Qt.
@ Format_ARGB32_Premultiplied
bool isEmpty() const noexcept
const_reference at(qsizetype i) const noexcept
void translate(qreal dx, qreal dy)
Translates all elements in the path by ({dx}, {dy}).
void setFillRule(Qt::FillRule fillRule)
Sets the fill rule of the painter path to the given fillRule.
QRectF boundingRect() const
Returns the bounding rectangle of this painter path as a rectangle with floating point precision.
\inmodule QtCore\reentrant
constexpr int & ry() noexcept
Returns a reference to the y coordinate of this point.
constexpr int & rx() noexcept
Returns a reference to the x coordinate of this point.
constexpr int x() const noexcept
Returns the x coordinate of this point.
constexpr int y() const noexcept
Returns the y coordinate of this point.
The QRawFont class provides access to a single physical instance of a font.
void setPixelSize(qreal pixelSize)
Sets the pixel size with which this font should be rendered to pixelSize.
QPainterPath pathForGlyph(quint32 glyphIndex) const
This function returns the shape of the glyph at a given glyphIndex in the underlying font if the QRaw...
constexpr QPointF topLeft() const noexcept
Returns the position of the rectangle's top-left corner.
\inmodule QtCore\reentrant
constexpr size_type size() const noexcept
const T & at(qsizetype idx) const
void resize(qsizetype sz)
Combined button and popup list for selecting options.
static void makeDistanceField(QDistanceFieldData *data, const QPainterPath &path, int dfScale, int offs)
static int QT_DISTANCEFIELD_DEFAULT_SCALE
int QT_DISTANCEFIELD_HIGHGLYPHCOUNT()
void fillLines(qint32 *bits, int width, int height, int upperY, int lowerY, int &lx, int ldx, int &rx, int rdx, qint32 &d, qint32 ddy, qint32 ddx)
void fillLine< NoClip, LeftToRight >(qint32 *line, int, int lx, int rx, qint32 d, qint32 dd)
static void drawPolygons(qint32 *bits, int width, int height, const QPoint *vertices, const quint32 *indices, int indexCount, qint32 value)
void fillLine< NoClip, RightToLeft >(qint32 *line, int, int lx, int rx, qint32 d, qint32 dd)
void drawRectangle(qint32 *bits, int width, int height, const QPoint *int1, const QPoint *center1, const QPoint *ext1, const QPoint *int2, const QPoint *center2, const QPoint *ext2, qint32 extValue)
void fillLine(qint32 *, int, int, int, qint32, qint32)
bool qt_fontHasNarrowOutlines(QFontEngine *fontEngine)
int QT_DISTANCEFIELD_RADIUS(bool narrowOutlineFont)
static int QT_DISTANCEFIELD_DEFAULT_HIGHGLYPHCOUNT
int QT_DISTANCEFIELD_SCALE(bool narrowOutlineFont)
static int QT_DISTANCEFIELD_DEFAULT_BASEFONTSIZE
void fillLine< Clip, LeftToRight >(qint32 *line, int width, int lx, int rx, qint32 d, qint32 dd)
static int QT_DISTANCEFIELD_DEFAULT_RADIUS
static void initialDistanceFieldFactor()
void drawTriangle(qint32 *bits, int width, int height, const QPoint *center, const QPoint *v1, const QPoint *v2, qint32 value)
int QT_DISTANCEFIELD_BASEFONTSIZE(bool narrowOutlineFont)
static bool imageHasNarrowOutlines(const QImage &im)
void fillLine< Clip, RightToLeft >(qint32 *line, int width, int lx, int rx, qint32 d, qint32 dd)
int Q_GUI_EXPORT QT_DISTANCEFIELD_RADIUS(bool narrowOutlineFont)
int Q_GUI_EXPORT QT_DISTANCEFIELD_BASEFONTSIZE(bool narrowOutlineFont)
int Q_GUI_EXPORT QT_DISTANCEFIELD_SCALE(bool narrowOutlineFont)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
qfloat16 qSqrt(qfloat16 f)
int qRound(qfloat16 d) noexcept
int qt_depthForFormat(QImage::Format format)
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
constexpr float qDegreesToRadians(float degrees)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qBound(const T &min, const T &val, const T &max)
constexpr const T & qMax(const T &a, const T &b)
GLint GLfloat GLfloat GLfloat v2
GLsizei const GLfloat * v
[13]
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint GLfloat GLfloat GLfloat GLfloat y1
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLfloat GLfloat GLfloat x1
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLsizei GLsizei GLenum format
GLsizei GLenum const void * indices
GLfloat GLfloat GLfloat GLfloat h
GLuint GLenum GLenum transform
GLfixed GLfixed GLfixed y2
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
GLsizei const GLchar *const * path
GLfloat GLfloat GLfloat alpha
GLenum GLenum GLenum GLenum GLenum scale
void qSimplifyPath(const QVectorPath &path, QDataBuffer< QPoint > &vertices, QDataBuffer< quint32 > &indices, const QTransform &matrix)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
constexpr int qAlpha(QRgb rgb)
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) noexcept
Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nullptr) noexcept