kwin: KWin::PaintData optimization

QGraphicsScale and QGraphicsRotation are for use with QGraphicsItem, have
signals and more setters and getters than KWin::PaintData needs making its
use in KWin::PaintData sub-optimal

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-10-21 13:14:20 +03:00
parent e51cf82b56
commit 4b3d2080e9
3 changed files with 46 additions and 39 deletions

View file

@ -65,11 +65,23 @@ void WindowPrePaintData::setTransformed()
class PaintDataPrivate {
public:
QGraphicsScale scale;
PaintDataPrivate();
qreal xScale;
qreal yScale;
qreal zScale;
QVector3D translation;
QGraphicsRotation rotation;
QVector3D rotationOrigin;
qreal rotationAngle;
QVector3D rotationAxis;
};
PaintDataPrivate::PaintDataPrivate()
: xScale(1.0), yScale(1.0), zScale(1.0),
rotationAngle(0), rotationAxis(0.0, 0.0, 1.0)
{
}
PaintData::PaintData()
: d(new PaintDataPrivate())
{
@ -82,50 +94,44 @@ PaintData::~PaintData()
qreal PaintData::xScale() const
{
return d->scale.xScale();
return d->xScale;
}
qreal PaintData::yScale() const
{
return d->scale.yScale();
return d->yScale;
}
qreal PaintData::zScale() const
{
return d->scale.zScale();
}
void PaintData::setScale(const QVector2D &scale)
{
d->scale.setXScale(scale.x());
d->scale.setYScale(scale.y());
return d->zScale;
}
void PaintData::setScale(const QVector3D &scale)
{
d->scale.setXScale(scale.x());
d->scale.setYScale(scale.y());
d->scale.setZScale(scale.z());
d->xScale = scale.x();
d->yScale = scale.y();
d->zScale = scale.z();
}
void PaintData::setXScale(qreal scale)
{
d->scale.setXScale(scale);
d->xScale = scale;
}
void PaintData::setYScale(qreal scale)
{
d->scale.setYScale(scale);
d->yScale = scale;
}
void PaintData::setZScale(qreal scale)
{
d->scale.setZScale(scale);
d->zScale = scale;
}
const QGraphicsScale &PaintData::scale() const
QVector3D PaintData::scale() const
{
return d->scale;
return QVector3D(d->xScale, d->yScale, d->zScale);
}
void PaintData::setXTranslation(qreal translate)
@ -175,37 +181,50 @@ const QVector3D &PaintData::translation() const
qreal PaintData::rotationAngle() const
{
return d->rotation.angle();
return d->rotationAngle;
}
QVector3D PaintData::rotationAxis() const
{
return d->rotation.axis();
return d->rotationAxis;
}
QVector3D PaintData::rotationOrigin() const
{
return d->rotation.origin();
return d->rotationOrigin;
}
void PaintData::setRotationAngle(qreal angle)
{
d->rotation.setAngle(angle);
d->rotationAngle = angle;
}
void PaintData::setRotationAxis(Qt::Axis axis)
{
d->rotation.setAxis(axis);
switch (axis) {
case Qt::XAxis: {
d->rotationAxis = QVector3D(1.0, 0.0, 0.0);
break;
}
case Qt::YAxis: {
d->rotationAxis = QVector3D(0.0, 1.0, 0.0);
break;
}
case Qt::ZAxis: {
d->rotationAxis = QVector3D(0.0, 0.0, 1.0);
break;
}
}
}
void PaintData::setRotationAxis(const QVector3D &axis)
{
d->rotation.setAxis(axis);
d->rotationAxis = axis;
}
void PaintData::setRotationOrigin(const QVector3D &origin)
{
d->rotation.setOrigin(origin);
d->rotationOrigin = origin;
}
class WindowPaintDataPrivate {

View file

@ -32,7 +32,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <QVector2D>
#include <QVector3D>
#include <QFont>
#include <QGraphicsScale>
#include <QKeyEvent>
#include <QVector>
#include <QList>
@ -1685,19 +1684,13 @@ public:
* @since 4.10
**/
void setZScale(qreal scale);
/**
* Sets the scale factor in X and Y direction.
* @param scale The scale factor for X and Y direction
* @since 4.10
**/
void setScale(const QVector2D &scale);
/**
* Sets the scale factor in X, Y and Z direction
* @param scale The scale factor for X, Y and Z direction
* @since 4.10
**/
void setScale(const QVector3D &scale);
const QGraphicsScale &scale() const;
QVector3D scale() const;
const QVector3D &translation() const;
/**
* @returns the translation in X direction.

View file

@ -152,11 +152,6 @@ void TestScreenPaintData::testSetScale()
QCOMPARE(data.xScale(), 2.0);
QCOMPARE(data.yScale(), 3.0);
QCOMPARE(data.zScale(), 4.0);
// setting a vector2d should affect x and y components
data.setScale(QVector2D(0.5, 2.0));
QCOMPARE(data.xScale(), 0.5);
QCOMPARE(data.yScale(), 2.0);
QCOMPARE(data.zScale(), 4.0);
// setting a vector3d should affect all components
data.setScale(QVector3D(1.5, 2.5, 3.5));
QCOMPARE(data.xScale(), 1.5);