Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qpaintengine.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3#include "qpaintengine.h"
4#include "qpaintengine_p.h"
5#include "qpainter_p.h"
6#include "qpolygon.h"
7#include "qbitmap.h"
8#include <qdebug.h>
9#include <qmath.h>
10#include <qguiapplication.h>
11#include <qvarlengtharray.h>
12#include <qpa/qplatformintegration.h>
13#include <qpa/qplatformpixmap.h>
14#include <private/qfontengine_p.h>
15#include <private/qguiapplication_p.h>
16#include <private/qpaintengineex_p.h>
17#include <private/qtextengine_p.h>
18
19#include <memory>
20
22
52{
53 const QTextItemInt *ti = static_cast<const QTextItemInt *>(this);
54 return ti->descent.toReal();
55}
56
63{
64 const QTextItemInt *ti = static_cast<const QTextItemInt *>(this);
65 return ti->ascent.toReal();
66}
67
74{
75 const QTextItemInt *ti = static_cast<const QTextItemInt *>(this);
76 return ti->width.toReal();
77}
78
84QTextItem::RenderFlags QTextItem::renderFlags() const
85{
86 const QTextItemInt *ti = static_cast<const QTextItemInt *>(this);
87 return ti->flags;
88}
89
96{
97 const QTextItemInt *ti = static_cast<const QTextItemInt *>(this);
98 return QString(ti->chars, ti->num_chars);
99}
100
107{
108 const QTextItemInt *ti = static_cast<const QTextItemInt *>(this);
109 return ti->f ? *ti->f : QGuiApplication::font();
110}
111
112
268{
271
272 if (isExtended())
273 static_cast<QPaintEngineEx *>(this)->sync();
274}
275
277struct QT_Point {
278 int x;
279 int y;
280};
282
294{
295 Q_ASSERT_X(qt_polygon_recursion != this, "QPaintEngine::drawPolygon",
296 "At least one drawPolygon function must be implemented");
298 Q_ASSERT(sizeof(QT_Point) == sizeof(QPoint));
299 QVarLengthArray<QT_Point> p(pointCount);
300 for (int i = 0; i < pointCount; ++i) {
301 p[i].x = qRound(points[i].x());
302 p[i].y = qRound(points[i].y());
303 }
304 drawPolygon((QPoint *)p.data(), pointCount, mode);
305 qt_polygon_recursion = nullptr;
306}
307
308struct QT_PointF {
311};
313
323{
324 Q_ASSERT_X(qt_polygon_recursion != this, "QPaintEngine::drawPolygon",
325 "At least one drawPolygon function must be implemented");
327 Q_ASSERT(sizeof(QT_PointF) == sizeof(QPointF));
328 QVarLengthArray<QT_PointF> p(pointCount);
329 for (int i=0; i<pointCount; ++i) {
330 p[i].x = points[i].x();
331 p[i].y = points[i].y();
332 }
333 drawPolygon((QPointF *)p.data(), pointCount, mode);
334 qt_polygon_recursion = nullptr;
335}
336
402void QPaintEngine::drawPoints(const QPointF *points, int pointCount)
403{
404 QPainter *p = painter();
405 if (!p)
406 return;
407
408 qreal penWidth = p->pen().widthF();
409 if (penWidth == 0)
410 penWidth = 1;
411
412 bool ellipses = p->pen().capStyle() == Qt::RoundCap;
413
414 p->save();
415
417 if (p->pen().isCosmetic()) {
418 transform = p->transform();
419 p->setTransform(QTransform());
420 }
421
422 p->setBrush(p->pen().brush());
423 p->setPen(Qt::NoPen);
424
425 for (int i=0; i<pointCount; ++i) {
426 QPointF pos = transform.map(points[i]);
427 QRectF rect(pos.x() - penWidth / 2, pos.y() - penWidth / 2, penWidth, penWidth);
428
429 if (ellipses)
430 p->drawEllipse(rect);
431 else
432 p->drawRect(rect);
433 }
434
435 p->restore();
436}
437
438
446void QPaintEngine::drawPoints(const QPoint *points, int pointCount)
447{
448 Q_ASSERT(sizeof(QT_PointF) == sizeof(QPointF));
449 QT_PointF fp[256];
450 while (pointCount) {
451 int i = 0;
452 while (i < pointCount && i < 256) {
453 fp[i].x = points[i].x();
454 fp[i].y = points[i].y();
455 ++i;
456 }
457 drawPoints((QPointF *)(void *)fp, i);
458 points += i;
459 pointCount -= i;
460 }
461}
462
472{
474 path.addEllipse(rect);
476 drawPath(path);
477 } else {
478 QPolygonF polygon = path.toFillPolygon();
479 drawPolygon(polygon.data(), polygon.size(), ConvexMode);
480 }
481}
482
493
504{
505 QPainter p(tile);
506 p.drawPixmap(0, 0, pixmap);
507 int x = pixmap.width();
508 while (x < tile->width()) {
509 p.drawPixmap(x, 0, *tile, 0, 0, x, pixmap.height());
510 x *= 2;
511 }
512 int y = pixmap.height();
513 while (y < tile->height()) {
514 p.drawPixmap(0, y, *tile, 0, 0, tile->width(), y);
515 y *= 2;
516 }
517}
518
520 const QPixmap &pixmap, qreal xOffset, qreal yOffset)
521{
522 qreal yPos, xPos, drawH, drawW, yOff, xOff;
523 yPos = y;
524 yOff = yOffset;
525 while(yPos < y + h) {
526 drawH = pixmap.height() - yOff; // Cropping first row
527 if (yPos + drawH > y + h) // Cropping last row
528 drawH = y + h - yPos;
529 xPos = x;
530 xOff = xOffset;
531 while(xPos < x + w) {
532 drawW = pixmap.width() - xOff; // Cropping first column
533 if (xPos + drawW > x + w) // Cropping last column
534 drawW = x + w - xPos;
535 if (drawW > 0 && drawH > 0)
536 gc->drawPixmap(QRectF(xPos, yPos, drawW, drawH), pixmap, QRectF(xOff, yOff, drawW, drawH));
537 xPos += drawW;
538 xOff = 0;
539 }
540 yPos += drawH;
541 yOff = 0;
542 }
543}
544
545
552{
553 int sw = pixmap.width();
554 int sh = pixmap.height();
555
556 if (sw*sh < 8192 && sw*sh < 16*rect.width()*rect.height()) {
557 int tw = sw, th = sh;
558 while (tw*th < 32678 && tw < rect.width()/2)
559 tw *= 2;
560 while (tw*th < 32678 && th < rect.height()/2)
561 th *= 2;
562 QPixmap tile;
563 if (pixmap.depth() == 1) {
564 tile = QBitmap(tw, th);
565 } else {
566 tile = QPixmap(tw, th);
567 if (pixmap.hasAlphaChannel())
568 tile.fill(Qt::transparent);
569 }
570 qt_fill_tile(&tile, pixmap);
571 qt_draw_tile(this, rect.x(), rect.y(), rect.width(), rect.height(), tile, p.x(), p.y());
572 } else {
573 qt_draw_tile(this, rect.x(), rect.y(), rect.width(), rect.height(), pixmap, p.x(), p.y());
574 }
575}
576
586void QPaintEngine::drawImage(const QRectF &r, const QImage &image, const QRectF &sr,
587 Qt::ImageConversionFlags flags)
588{
589 QRectF baseSize(0, 0, image.width(), image.height());
590 QImage im = image;
591 if (baseSize != sr)
592 im = im.copy(qFloor(sr.x()), qFloor(sr.y()),
593 qCeil(sr.width()), qCeil(sr.height()));
595 drawPixmap(r, pm, QRectF(QPointF(0, 0), pm.size()));
596}
597
662QPaintEngine::QPaintEngine(PaintEngineFeatures caps)
663 : state(nullptr),
664 gccaps(caps),
665 active(0),
666 selfDestruct(false),
667 extended(false),
668 d_ptr(new QPaintEnginePrivate)
669{
670 d_ptr->q_ptr = this;
671}
672
677QPaintEngine::QPaintEngine(QPaintEnginePrivate &dptr, PaintEngineFeatures caps)
678 : state(nullptr),
679 gccaps(caps),
680 active(0),
681 selfDestruct(false),
682 extended(false),
683 d_ptr(&dptr)
684{
685 d_ptr->q_ptr = this;
686}
687
694
699{
700 return state ? state->painter() : nullptr;
701}
702
708{
710 qWarning("QPaintEngine::drawPath: Must be implemented when feature PainterPaths is set");
711 }
712}
713
720void QPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
721{
722 const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
723 if (ti.glyphs.numGlyphs == 0)
724 return;
725
726 if (ti.fontEngine->glyphFormat == QFontEngine::Format_ARGB) {
727 QVarLengthArray<QFixedPoint> positions;
728 QVarLengthArray<glyph_t> glyphs;
729 QTransform matrix = QTransform::fromTranslate(p.x(), p.y() - ti.fontEngine->ascent().toReal());
730 ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
731 painter()->save();
733 bool((painter()->renderHints() & QPainter::TextAntialiasing)
734 && !(painter()->font().styleStrategy() & QFont::NoAntialias)));
735 for (int i = 0; i < ti.glyphs.numGlyphs; ++i) {
736 QImage glyph = ti.fontEngine->bitmapForGlyph(glyphs[i], QFixedPoint(), QTransform());
737 painter()->drawImage(positions[i].x.toReal(), positions[i].y.toReal(), glyph);
738 }
739 painter()->restore();
740 return;
741 }
742
744 path.setFillRule(Qt::WindingFill);
745 ti.fontEngine->addOutlineToPath(0, 0, ti.glyphs, &path, ti.flags);
746 if (!path.isEmpty()) {
747 painter()->save();
749 bool((painter()->renderHints() & QPainter::TextAntialiasing)
750 && !(painter()->font().styleStrategy() & QFont::NoAntialias)));
751 painter()->translate(p.x(), p.y());
752 painter()->fillPath(path, painter()->pen().brush());
753 painter()->restore();
754 }
755}
756
762void QPaintEngine::drawLines(const QLineF *lines, int lineCount)
763{
764 for (int i=0; i<lineCount; ++i) {
765 QPointF pts[2] = { lines[i].p1(), lines[i].p2() };
766
767 if (pts[0] == pts[1]) {
768 if (state->pen().capStyle() != Qt::FlatCap)
769 drawPoints(pts, 1);
770 continue;
771 }
772
773 drawPolygon(pts, 2, PolylineMode);
774 }
775}
776
784void QPaintEngine::drawLines(const QLine *lines, int lineCount)
785{
786 struct PointF {
787 qreal x;
788 qreal y;
789 };
790 struct LineF {
791 PointF p1;
792 PointF p2;
793 };
794 Q_ASSERT(sizeof(PointF) == sizeof(QPointF));
795 Q_ASSERT(sizeof(LineF) == sizeof(QLineF));
796 LineF fl[256];
797 while (lineCount) {
798 int i = 0;
799 while (i < lineCount && i < 256) {
800 fl[i].p1.x = lines[i].x1();
801 fl[i].p1.y = lines[i].y1();
802 fl[i].p2.x = lines[i].x2();
803 fl[i].p2.y = lines[i].y2();
804 ++i;
805 }
806 drawLines((QLineF *)(void *)fl, i);
807 lines += i;
808 lineCount -= i;
809 }
810}
811
812
820void QPaintEngine::drawRects(const QRect *rects, int rectCount)
821{
822 struct RectF {
823 qreal x;
824 qreal y;
825 qreal w;
826 qreal h;
827 };
828 Q_ASSERT(sizeof(RectF) == sizeof(QRectF));
829 RectF fr[256];
830 while (rectCount) {
831 int i = 0;
832 while (i < rectCount && i < 256) {
833 fr[i].x = rects[i].x();
834 fr[i].y = rects[i].y();
835 fr[i].w = rects[i].width();
836 fr[i].h = rects[i].height();
837 ++i;
838 }
839 drawRects((QRectF *)(void *)fr, i);
840 rects += i;
841 rectCount -= i;
842 }
843}
844
850void QPaintEngine::drawRects(const QRectF *rects, int rectCount)
851{
855 for (int i=0; i<rectCount; ++i) {
857 path.addRect(rects[i]);
858 if (path.isEmpty())
859 continue;
860 drawPath(path);
861 }
862 } else {
863 for (int i=0; i<rectCount; ++i) {
864 QRectF rf = rects[i];
865 QPointF pts[4] = { QPointF(rf.x(), rf.y()),
866 QPointF(rf.x() + rf.width(), rf.y()),
867 QPointF(rf.x() + rf.width(), rf.y() + rf.height()),
868 QPointF(rf.x(), rf.y() + rf.height()) };
869 drawPolygon(pts, 4, ConvexMode);
870 }
871 }
872}
873
879{
880 d_func()->pdev = device;
881}
882
888{
889 return d_func()->pdev;
890}
891
892
903{
904 return QPoint();
905}
906
917{
918 Q_D(QPaintEngine);
919 d->baseSystemClip = region;
920 // Be backward compatible and only call d->systemStateChanged()
921 // if we currently have a system transform/viewport set.
922 d->updateSystemClip();
923 if (d->hasSystemTransform || d->hasSystemViewport) {
924 d->systemStateChanged();
925 }
926}
927
937{
938 return d_func()->systemClip;
939}
940
948{
949 if (isActive()) {
950 qWarning("QPaintEngine::setSystemRect: Should not be changed while engine is active");
951 return;
952 }
953 d_func()->systemRect = rect;
954}
955
963{
964 return d_func()->systemRect;
965}
966
973{
974 if (Q_UNLIKELY(!qobject_cast<QGuiApplication *>(QCoreApplication::instance()))) {
975 qWarning("QPaintEngine::createPixmap: QPixmap cannot be created without a QGuiApplication");
976 return QPixmap();
977 }
978
979 std::unique_ptr<QPlatformPixmap> data(QGuiApplicationPrivate::platformIntegration()->createPlatformPixmap(QPlatformPixmap::PixmapType));
980 data->resize(size.width(), size.height());
981 return QPixmap(data.release());
982}
983
990{
991 if (Q_UNLIKELY(!qobject_cast<QGuiApplication *>(QCoreApplication::instance()))) {
992 qWarning("QPaintEngine::createPixmapFromImage: QPixmap cannot be created without a QGuiApplication");
993 return QPixmap();
994 }
995
996 std::unique_ptr<QPlatformPixmap> data(QGuiApplicationPrivate::platformIntegration()->createPlatformPixmap(QPlatformPixmap::PixmapType));
997 if (image.isDetached())
998 data->fromImageInPlace(image, flags);
999 else
1000 data->fromImage(image, flags);
1001 return QPixmap(data.release());
1002}
1003
1007
1009{
1010 if (!ti.glyphs.numGlyphs)
1011 return;
1012
1013 // any fixes here should probably also be done in QFontEngineBox::draw
1014 const int size = qRound(ti.fontEngine->ascent());
1015 QVarLengthArray<QFixedPoint> positions;
1016 QVarLengthArray<glyph_t> glyphs;
1018 ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
1019 if (glyphs.size() == 0)
1020 return;
1021
1022 QSize s(size - 3, size - 3);
1023
1024 QPainter *painter = q_func()->state->painter();
1025 painter->save();
1027 QPen pen = painter->pen();
1028 pen.setWidthF(ti.fontEngine->lineThickness().toReal());
1029 painter->setPen(pen);
1030 for (int k = 0; k < positions.size(); k++)
1031 painter->drawRect(QRectF(positions[k].toPointF(), s));
1032 painter->restore();
1033}
1034
IOBluetoothDevice * device
\inmodule QtGui
Definition qbitmap.h:16
static QCoreApplication * instance() noexcept
Returns a pointer to the application's QCoreApplication (or QGuiApplication/QApplication) instance.
\reentrant
Definition qfont.h:22
@ NoAntialias
Definition qfont.h:47
static QPlatformIntegration * platformIntegration()
static QFont font()
Returns the default application font.
\inmodule QtGui
Definition qimage.h:37
QImage copy(const QRect &rect=QRect()) const
Returns a sub-area of the image as a new image.
\inmodule QtCore\compares equality \compareswith equality QLine \endcompareswith
Definition qline.h:192
constexpr QPointF p1() const
Returns the line's start point.
Definition qline.h:317
constexpr QPointF p2() const
Returns the line's end point.
Definition qline.h:322
\inmodule QtCore\compares equality \compareswith equality QLineF \endcompareswith
Definition qline.h:18
constexpr int x2() const
Returns the x-coordinate of the line's end point.
Definition qline.h:94
constexpr int y2() const
Returns the y-coordinate of the line's end point.
Definition qline.h:99
constexpr int y1() const
Returns the y-coordinate of the line's start point.
Definition qline.h:89
constexpr int x1() const
Returns the x-coordinate of the line's start point.
Definition qline.h:84
QPaintEngine * q_ptr
void drawBoxTextItem(const QPointF &p, const QTextItemInt &ti)
bool brushNeedsResolving() const
QPainter * painter() const
Returns a pointer to the painter currently updating the paint engine.
QPen pen() const
Returns the pen in the current paint engine state.
bool penNeedsResolving() const
\inmodule QtGui
virtual QPixmap createPixmap(QSize size)
void setSystemRect(const QRect &rect)
virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s)
Reimplement this function to draw the pixmap in the given rect, starting at the given p.
virtual void drawRects(const QRect *rects, int rectCount)
This is an overloaded member function, provided for convenience. It differs from the above function o...
virtual QPixmap createPixmapFromImage(QImage image, Qt::ImageConversionFlags flags=Qt::AutoColor)
QRect systemRect() const
virtual void updateState(const QPaintEngineState &state)=0
Reimplement this function to update the state of a paint engine.
QPaintEngine(PaintEngineFeatures features=PaintEngineFeatures())
Creates a paint engine with the featureset specified by caps.
virtual void drawLines(const QLine *lines, int lineCount)
This is an overloaded member function, provided for convenience. It differs from the above function o...
virtual void drawTextItem(const QPointF &p, const QTextItem &textItem)
This function draws the text item textItem at position p.
PolygonDrawMode
\value OddEvenMode The polygon should be drawn using OddEven fill rule.
virtual void drawPoints(const QPointF *points, int pointCount)
Draws the first pointCount points in the buffer points.
virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)=0
Reimplement this function to draw the part of the pm specified by the sr rectangle in the given r.
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags=Qt::AutoColor)
Reimplement this function to draw the part of the image specified by the sr rectangle in the given re...
QPainter * painter() const
Returns the paint engine's painter.
void setPaintDevice(QPaintDevice *device)
virtual QPoint coordinateOffset() const
virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode)
Reimplement this virtual function to draw the polygon defined by the pointCount first points in point...
void setSystemClip(const QRegion &baseClip)
virtual ~QPaintEngine()
Destroys the paint engine.
QPaintEngineState * state
bool isActive() const
Returns true if the paint engine is actively drawing; otherwise returns false.
bool hasFeature(PaintEngineFeatures feature) const
Returns true if the paint engine supports the specified feature; otherwise returns false.
virtual void drawEllipse(const QRectF &r)
Reimplement this function to draw the largest ellipse that can be contained within rectangle rect.
QRegion systemClip() const
bool isExtended() const
QPaintDevice * paintDevice() const
Returns the device that this engine is painting on, if painting is active; otherwise returns \nullptr...
virtual void drawPath(const QPainterPath &path)
The default implementation ignores the path and does nothing.
QScopedPointer< QPaintEnginePrivate > d_ptr
\inmodule QtGui
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
const QPen & pen() const
Returns the painter's current pen.
void drawRect(const QRectF &rect)
Draws the current rectangle with the current pen and brush.
Definition qpainter.h:519
void setPen(const QColor &color)
This is an overloaded member function, provided for convenience. It differs from the above function o...
void restore()
Restores the current painter state (pops a saved state off the stack).
void save()
Saves the current painter state (pushes the state onto a stack).
void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect, Qt::ImageConversionFlags flags=Qt::AutoColor)
Draws the rectangular portion source of the given image into the target rectangle in the paint device...
void fillPath(const QPainterPath &path, const QBrush &brush)
Fills the given path using the given brush.
void setBrush(const QBrush &brush)
Sets the painter's brush to the given brush.
@ SmoothPixmapTransform
Definition qpainter.h:54
@ Antialiasing
Definition qpainter.h:52
@ TextAntialiasing
Definition qpainter.h:53
void translate(const QPointF &offset)
Translates the coordinate system by the given offset; i.e.
void setRenderHint(RenderHint hint, bool on=true)
Sets the given render hint on the painter if on is true; otherwise clears the render hint.
\inmodule QtGui
Definition qpen.h:28
void setWidthF(qreal width)
Sets the pen width to the given width in pixels with floating point precision.
Definition qpen.cpp:618
Qt::PenCapStyle capStyle() const
Returns the pen's cap style.
Definition qpen.cpp:636
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
QSize size() const
Returns the size of the pixmap.
Definition qpixmap.cpp:493
static QPixmap fromImage(const QImage &image, Qt::ImageConversionFlags flags=Qt::AutoColor)
Converts the given image to a pixmap using the specified flags to control the conversion.
Definition qpixmap.cpp:1437
\inmodule QtCore\reentrant
Definition qpoint.h:217
\inmodule QtCore\reentrant
Definition qpoint.h:25
The QPolygonF class provides a list of points using floating point precision.
Definition qpolygon.h:96
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore\reentrant
Definition qrect.h:30
constexpr int height() const noexcept
Returns the height of the rectangle.
Definition qrect.h:239
constexpr int x() const noexcept
Returns the x-coordinate of the rectangle's left edge.
Definition qrect.h:185
constexpr int width() const noexcept
Returns the width of the rectangle.
Definition qrect.h:236
constexpr int y() const noexcept
Returns the y-coordinate of the rectangle's top edge.
Definition qrect.h:188
The QRegion class specifies a clip region for a painter.
Definition qregion.h:27
\inmodule QtCore
Definition qsize.h:25
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
Internal QTextItem.
RenderFlags flags
const QFont * f
\inmodule QtGui
QFont font() const
Returns the font that should be used to draw the text.
qreal descent() const
Corresponds to the \l{QFontMetrics::descent()}{descent} of the piece of text that is drawn.
RenderFlags renderFlags() const
Returns the render flags used.
qreal ascent() const
Corresponds to the \l{QFontMetrics::ascent()}{ascent} of the piece of text that is drawn.
QString text() const
Returns the text that should be drawn.
qreal width() const
Specifies the total width of the text to be drawn.
The QTransform class specifies 2D transformations of a coordinate system.
Definition qtransform.h:20
static QTransform fromTranslate(qreal dx, qreal dy)
Creates a matrix which corresponds to a translation of dx along the x axis and dy along the y axis.
QPixmap p2
QPixmap p1
[0]
rect
[4]
else opt state
[0]
Combined button and popup list for selecting options.
@ transparent
Definition qnamespace.h:47
@ NoPen
@ NoBrush
@ WindingFill
@ RoundCap
@ FlatCap
Definition brush.cpp:5
Definition image.cpp:4
#define Q_UNLIKELY(x)
static const QCssKnownValue positions[NumKnownPositionModes - 1]
int qRound(qfloat16 d) noexcept
Definition qfloat16.h:327
#define qWarning
Definition qlogging.h:166
int qFloor(T v)
Definition qmath.h:42
int qCeil(T v)
Definition qmath.h:36
GLint GLint GLint GLint GLint x
[0]
GLenum mode
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLboolean r
[2]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLsizei width
GLbitfield flags
GLint y
GLfloat GLfloat GLfloat GLfloat h
GLuint GLenum GLenum transform
GLfixed GLfixed GLint GLint GLfixed points
GLdouble s
[6]
Definition qopenglext.h:235
GLuint GLenum matrix
GLsizei const GLchar *const * path
GLfloat GLfloat p
[1]
Q_GUI_EXPORT void qt_draw_tile(QPaintEngine *gc, qreal x, qreal y, qreal w, qreal h, const QPixmap &pixmap, qreal xOffset, qreal yOffset)
void qt_fill_tile(QPixmap *tile, const QPixmap &pixmap)
static QPaintEngine * qt_polygon_recursion
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_ASSERT_X(cond, x, msg)
Definition qrandom.cpp:48
#define fp
void gc(QV4::ExecutionEngine &engine, GCFlags flags)
Definition qmlutils.cpp:118
@ Q_PRIMITIVE_TYPE
Definition qtypeinfo.h:157
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:180
double qreal
Definition qtypes.h:187
QObject::connect nullptr
widget render & pixmap
QPainter painter(this)
[7]
constexpr qreal toReal() const
Definition qfixed_p.h:42