Move QPainterPathPrivate to the private header files.
This was made inline for the sake of performance, but has in hindsight proven to be not really worth it. It also prevents us from aligning the internal datastructure of QPainterPath with that of QPolygonF and the internal QVectorPath class which would make mapping between the two inside QPainter a lot faster. Making all this out-of-line now as discussed in the task https://bugreports.qt-project.org/browse/QTBUG-19998 so we can adress this in a binary compatible fashion during Qt 5.x Change-Id: I61058171ed31f8a845fa45517248367c85ce52cd Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
parent
19524b7499
commit
84caba25d8
@ -44,6 +44,7 @@
|
||||
#include "qmatrix.h"
|
||||
#include "qregion.h"
|
||||
#include "qpainterpath.h"
|
||||
#include "qpainterpath_p.h"
|
||||
#include "qvariant.h"
|
||||
#include <qmath.h>
|
||||
|
||||
|
@ -478,14 +478,26 @@ static void qt_debug_path(const QPainterPath &path)
|
||||
\sa ElementType, elementAt(), isEmpty()
|
||||
*/
|
||||
|
||||
int QPainterPath::elementCount() const
|
||||
{
|
||||
return d_ptr ? d_ptr->elements.size() : 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn const QPainterPath::Element &QPainterPath::elementAt(int index) const
|
||||
\fn QPainterPath::Element QPainterPath::elementAt(int index) const
|
||||
|
||||
Returns the element at the given \a index in the painter path.
|
||||
|
||||
\sa ElementType, elementCount(), isEmpty()
|
||||
*/
|
||||
|
||||
QPainterPath::Element QPainterPath::elementAt(int i) const
|
||||
{
|
||||
Q_ASSERT(d_ptr);
|
||||
Q_ASSERT(i >= 0 && i < elementCount());
|
||||
return d_ptr->elements.at(i);
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn void QPainterPath::setElementPositionAt(int index, qreal x, qreal y)
|
||||
\since 4.2
|
||||
@ -494,6 +506,17 @@ static void qt_debug_path(const QPainterPath &path)
|
||||
x and \a y.
|
||||
*/
|
||||
|
||||
void QPainterPath::setElementPositionAt(int i, qreal x, qreal y)
|
||||
{
|
||||
Q_ASSERT(d_ptr);
|
||||
Q_ASSERT(i >= 0 && i < elementCount());
|
||||
detach();
|
||||
QPainterPath::Element &e = d_ptr->elements[i];
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
}
|
||||
|
||||
|
||||
/*###
|
||||
\fn QPainterPath &QPainterPath::operator +=(const QPainterPath &other)
|
||||
|
||||
@ -535,6 +558,13 @@ QPainterPath::QPainterPath(const QPointF &startPoint)
|
||||
d_func()->elements << e;
|
||||
}
|
||||
|
||||
void QPainterPath::detach()
|
||||
{
|
||||
if (d_ptr->ref.load() != 1)
|
||||
detach_helper();
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
@ -1451,6 +1481,11 @@ QRectF QPainterPath::controlPointRect() const
|
||||
\sa elementCount()
|
||||
*/
|
||||
|
||||
bool QPainterPath::isEmpty() const
|
||||
{
|
||||
return !d_ptr || (d_ptr->elements.size() == 1 && d_ptr->elements.first().type == MoveToElement);
|
||||
}
|
||||
|
||||
/*!
|
||||
Creates and returns a reversed copy of the path.
|
||||
|
||||
|
@ -165,7 +165,7 @@ public:
|
||||
Qt::FillRule fillRule() const;
|
||||
void setFillRule(Qt::FillRule fillRule);
|
||||
|
||||
inline bool isEmpty() const;
|
||||
bool isEmpty() const;
|
||||
|
||||
QPainterPath toReversed() const;
|
||||
QList<QPolygonF> toSubpathPolygons(const QMatrix &matrix = QMatrix()) const;
|
||||
@ -175,9 +175,9 @@ public:
|
||||
QList<QPolygonF> toFillPolygons(const QTransform &matrix) const;
|
||||
QPolygonF toFillPolygon(const QTransform &matrix) const;
|
||||
|
||||
inline int elementCount() const;
|
||||
inline const QPainterPath::Element &elementAt(int i) const;
|
||||
inline void setElementPositionAt(int i, qreal x, qreal y);
|
||||
int elementCount() const;
|
||||
QPainterPath::Element elementAt(int i) const;
|
||||
void setElementPositionAt(int i, qreal x, qreal y);
|
||||
|
||||
qreal length() const;
|
||||
qreal percentAtLength(qreal t) const;
|
||||
@ -211,7 +211,7 @@ private:
|
||||
|
||||
inline void ensureData() { if (!d_ptr) ensureData_helper(); }
|
||||
void ensureData_helper();
|
||||
inline void detach();
|
||||
void detach();
|
||||
void detach_helper();
|
||||
void setDirty(bool);
|
||||
void computeBoundingRect() const;
|
||||
@ -233,29 +233,6 @@ private:
|
||||
#endif
|
||||
};
|
||||
|
||||
class QPainterPathPrivate
|
||||
{
|
||||
public:
|
||||
friend class QPainterPath;
|
||||
friend class QPainterPathData;
|
||||
friend class QPainterPathStroker;
|
||||
friend class QPainterPathStrokerPrivate;
|
||||
friend class QMatrix;
|
||||
friend class QTransform;
|
||||
friend class QVectorPath;
|
||||
friend struct QPainterPathPrivateDeleter;
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QPainterPath &);
|
||||
friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QPainterPath &);
|
||||
#endif
|
||||
|
||||
QPainterPathPrivate() : ref(1) {}
|
||||
|
||||
private:
|
||||
QAtomicInt ref;
|
||||
QVector<QPainterPath::Element> elements;
|
||||
};
|
||||
|
||||
Q_DECLARE_TYPEINFO(QPainterPath::Element, Q_PRIMITIVE_TYPE);
|
||||
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
@ -391,40 +368,6 @@ inline void QPainterPath::translate(const QPointF &offset)
|
||||
inline QPainterPath QPainterPath::translated(const QPointF &offset) const
|
||||
{ return translated(offset.x(), offset.y()); }
|
||||
|
||||
inline bool QPainterPath::isEmpty() const
|
||||
{
|
||||
return !d_ptr || (d_ptr->elements.size() == 1 && d_ptr->elements.first().type == MoveToElement);
|
||||
}
|
||||
|
||||
inline int QPainterPath::elementCount() const
|
||||
{
|
||||
return d_ptr ? d_ptr->elements.size() : 0;
|
||||
}
|
||||
|
||||
inline const QPainterPath::Element &QPainterPath::elementAt(int i) const
|
||||
{
|
||||
Q_ASSERT(d_ptr);
|
||||
Q_ASSERT(i >= 0 && i < elementCount());
|
||||
return d_ptr->elements.at(i);
|
||||
}
|
||||
|
||||
inline void QPainterPath::setElementPositionAt(int i, qreal x, qreal y)
|
||||
{
|
||||
Q_ASSERT(d_ptr);
|
||||
Q_ASSERT(i >= 0 && i < elementCount());
|
||||
detach();
|
||||
QPainterPath::Element &e = d_ptr->elements[i];
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
}
|
||||
|
||||
|
||||
inline void QPainterPath::detach()
|
||||
{
|
||||
if (d_ptr->ref.load() != 1)
|
||||
detach_helper();
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG_STREAM
|
||||
Q_GUI_EXPORT QDebug operator<<(QDebug, const QPainterPath &);
|
||||
|
@ -65,6 +65,29 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QPainterPathPrivate
|
||||
{
|
||||
public:
|
||||
friend class QPainterPath;
|
||||
friend class QPainterPathData;
|
||||
friend class QPainterPathStroker;
|
||||
friend class QPainterPathStrokerPrivate;
|
||||
friend class QMatrix;
|
||||
friend class QTransform;
|
||||
friend class QVectorPath;
|
||||
friend struct QPainterPathPrivateDeleter;
|
||||
#ifndef QT_NO_DATASTREAM
|
||||
friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QPainterPath &);
|
||||
friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QPainterPath &);
|
||||
#endif
|
||||
|
||||
QPainterPathPrivate() : ref(1) {}
|
||||
|
||||
private:
|
||||
QAtomicInt ref;
|
||||
QVector<QPainterPath::Element> elements;
|
||||
};
|
||||
|
||||
class QPainterPathStrokerPrivate
|
||||
{
|
||||
public:
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "qmatrix.h"
|
||||
#include "qregion.h"
|
||||
#include "qpainterpath.h"
|
||||
#include "qpainterpath_p.h"
|
||||
#include "qvariant.h"
|
||||
#include <qmath.h>
|
||||
#include <qnumeric.h>
|
||||
|
Loading…
Reference in New Issue
Block a user