QtGui: mark more types as primitive/movable

These types are held in QVarLengthArrays, so benefit
from being trivially relocatable. They are also part
of the private API, so there's no BC issues with
potential uses of these types in QList, except for
QPainter::PixmapFragment, which consequently has been
marked as relocatable only.

Change-Id: I90fb9a19231c6f5c71c593602fc997ffafe8f047
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
bb10
Marc Mutz 2016-04-24 00:07:28 +02:00
parent 0d19a571cd
commit ebbfc55667
5 changed files with 15 additions and 1 deletions

View File

@ -310,6 +310,7 @@ struct QT_Point {
int x;
int y;
};
Q_DECLARE_TYPEINFO(QT_Point, Q_PRIMITIVE_TYPE);
/*!
\fn void QPaintEngine::drawPolygon(const QPointF *points, int pointCount,
@ -340,6 +341,8 @@ struct QT_PointF {
qreal x;
qreal y;
};
Q_DECLARE_TYPEINFO(QT_PointF, Q_PRIMITIVE_TYPE);
/*!
\overload

View File

@ -486,6 +486,7 @@ private:
friend class QPreviewPaintEngine;
friend class QTextEngine;
};
Q_DECLARE_TYPEINFO(QPainter::PixmapFragment, Q_RELOCATABLE_TYPE);
Q_DECLARE_OPERATORS_FOR_FLAGS(QPainter::RenderHints)

View File

@ -1047,7 +1047,15 @@ void addSegmentsToPath(Segment *segment, QPainterPath &path)
}
}
}
} // unnamed namespace
// the following is really a lie, because Segments cannot be relocated, as they
// reference each other by address. For the same reason, they aren't even copyable,
// but the code works with the compiler-generated (wrong) copy and move special
// members, so use this as an optimization. The only container these are used in
// (a QVarLengthArray in qt_regionToPath()) is resized once up-front, so doesn't
// have a problem with this, but benefits from not having to run Segment ctors:
Q_DECLARE_TYPEINFO(Segment, Q_PRIMITIVE_TYPE);
Q_GUI_EXPORT QPainterPath qt_regionToPath(const QRegion &region)
{

View File

@ -180,6 +180,7 @@ struct QGlyphAttributes {
uchar reserved : 2;
};
Q_STATIC_ASSERT(sizeof(QGlyphAttributes) == 1);
Q_DECLARE_TYPEINFO(QGlyphAttributes, Q_PRIMITIVE_TYPE);
struct QGlyphLayout
{

View File

@ -210,6 +210,7 @@ public:
return *t;
}
};
Q_DECLARE_TYPEINFO(QGridLayoutBox, Q_MOVABLE_TYPE); // cannot be Q_PRIMITIVE_TYPE, as q_maximumSize, say, is != 0
bool operator==(const QGridLayoutBox &box1, const QGridLayoutBox &box2);
inline bool operator!=(const QGridLayoutBox &box1, const QGridLayoutBox &box2)