Skip to content

Commit c47e595

Browse files
Add support for QQuaternion (#1314)
* cxx-qt-lib: add QGenericMatrix * cxx-qt-lib: add QQuaternion * cxx-qt-lib: fix SPDX dates * cxx-qt-lib: add missing QGenericMatrix docs * cxx-qt-lib: add missing SPDX * cxx-qt-lib: remove const from QGenericMatrix::data_mut * cxx-qt-lib: avoid floating-point errors in QQuaternion unit tests * cxx-qt-lib: fix QGenericMatrix documentation Co-authored-by: Leon Matthes <[email protected]> * cxx-qt-lib: construct an identity matrix inside QGenericMatrix::is_identity Co-authored-by: Leon Matthes <[email protected]> * cxx-qt-lib: use direct pointer casts instead of slice::from_raw_parts * cxx-qt-lib: fix formatting * Revert "cxx-qt-lib: use direct pointer casts instead of slice::from_raw_parts" This reverts commit 5a53669. * cxx-qt-lib: impl TryFrom insteead of From for QGeneric Matrix * cxx-qt-lib: fix test case * cxx-qt-lib: create intentionally failing test for QGenericMatrix * cxx-qt-lib: use correct values for test * cxx-qt-lib: add sizeof and align assertions for QGenericMatrix * cxx-qt-lib: use repr(C) for QGenericMatrix * cxx-qt-lib: fix array syntax --------- Co-authored-by: Leon Matthes <[email protected]>
1 parent e1e15e0 commit c47e595

File tree

23 files changed

+1043
-1
lines changed

23 files changed

+1043
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323
- `QSet::reserve` to reserve capacity up-front.
2424
- Support for further types: `QUuid`
2525
- New example: Basic greeter app
26-
- Support for further types: `qreal`, `qint64`, `qintptr`, `qsizetype`, `quint64`, `quintptr`
26+
- Support for further types: `qreal`, `qint64`, `qintptr`, `qsizetype`, `quint64`, `quintptr`, `QQuaternion`
2727
- Support for `cfg` attributes through to C++ generation
2828
- CXX-Qt-build: Improved compile time and propagation of initializers between crates
2929
- CXX-Qt-build: Multi-crate projects are now possible with Cargo and CMake (see `examples/qml_multi_crates`)

crates/cxx-qt-lib/build.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ fn main() {
201201
rust_bridges.extend([
202202
"core/qlist/qlist_qcolor",
203203
"core/qvariant/qvariant_qcolor",
204+
"core/qvariant/qvariant_qquaternion",
204205
"core/qvariant/qvariant_qvector2d",
205206
"core/qvariant/qvariant_qvector3d",
206207
"core/qvariant/qvariant_qvector4d",
@@ -209,6 +210,7 @@ fn main() {
209210
"gui/qfont",
210211
"gui/qguiapplication",
211212
"gui/qimage",
213+
"gui/qquaternion",
212214
"gui/qpainterpath",
213215
"gui/qpainter",
214216
"gui/qpen",
@@ -279,13 +281,15 @@ fn main() {
279281
cpp_files.extend([
280282
"gui/qcolor",
281283
"gui/qfont",
284+
"gui/qgenericmatrix",
282285
"gui/qguiapplication",
283286
"gui/qimage",
284287
"gui/qpainterpath",
285288
"gui/qpainter",
286289
"gui/qpen",
287290
"gui/qpolygon",
288291
"gui/qpolygonf",
292+
"gui/qquaternion",
289293
"gui/qregion",
290294
"gui/qvector2d",
291295
"gui/qvector3d",

crates/cxx-qt-lib/include/common.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,13 @@ operatorDiv(const S scalar, const T& t)
8989
return t / scalar;
9090
}
9191

92+
template<typename T>
93+
T
94+
operatorNeg(const T& t)
95+
{
96+
return -t;
97+
}
98+
9299
template<typename T, typename... Args>
93100
std::unique_ptr<T>
94101
make_unique(Args... args)

crates/cxx-qt-lib/include/core/qvariant.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
#ifdef CXX_QT_GUI_FEATURE
3535
#include <QtGui/QColor>
36+
#include <QtGui/QQuaternion>
3637
#include <QtGui/QVector2D>
3738
#include <QtGui/QVector3D>
3839
#include <QtGui/QVector4D>
@@ -83,6 +84,7 @@ CXX_QT_QVARIANT_CAN_CONVERT(I64)
8384
CXX_QT_QVARIANT_CAN_CONVERT(QByteArray)
8485
#ifdef CXX_QT_GUI_FEATURE
8586
CXX_QT_QVARIANT_CAN_CONVERT(QColor)
87+
CXX_QT_QVARIANT_CAN_CONVERT(QQuaternion)
8688
CXX_QT_QVARIANT_CAN_CONVERT(QVector2D)
8789
CXX_QT_QVARIANT_CAN_CONVERT(QVector3D)
8890
CXX_QT_QVARIANT_CAN_CONVERT(QVector4D)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// clang-format off
2+
// SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
3+
// clang-format on
4+
// SPDX-FileContributor: Joshua Booth <[email protected]>
5+
//
6+
// SPDX-License-Identifier: MIT OR Apache-2.0
7+
#pragma once
8+
9+
#include <QtGui/QGenericMatrix>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// clang-format off
2+
// SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
3+
// clang-format on
4+
// SPDX-FileContributor: Joshua Booth <[email protected]>
5+
//
6+
// SPDX-License-Identifier: MIT OR Apache-2.0
7+
#pragma once
8+
9+
#include <QtGui/QQuaternion>
10+
11+
namespace rust {
12+
namespace cxxqtlib1 {
13+
14+
inline float (*qquaternionDotProduct)(const QQuaternion&, const QQuaternion&) =
15+
QQuaternion::dotProduct;
16+
17+
inline QQuaternion (*qquaternionFromAxes)(const QVector3D&,
18+
const QVector3D&,
19+
const QVector3D&) =
20+
QQuaternion::fromAxes;
21+
22+
inline QQuaternion (*qquaternionFromAxisAndAngle)(float, float, float, float) =
23+
QQuaternion::fromAxisAndAngle;
24+
25+
inline QQuaternion (*qquaternionFromDirection)(const QVector3D&,
26+
const QVector3D&) =
27+
QQuaternion::fromDirection;
28+
29+
inline QQuaternion (*qquaternionFromEulerAngles)(float, float, float) =
30+
QQuaternion::fromEulerAngles;
31+
32+
inline QQuaternion (*qquaternionFromRotationMatrix)(const QMatrix3x3&) =
33+
QQuaternion::fromRotationMatrix;
34+
35+
inline QQuaternion (*qquaternionNlerp)(const QQuaternion&,
36+
const QQuaternion&,
37+
float) = QQuaternion::nlerp;
38+
39+
inline QQuaternion (*qquaternionRotationTo)(const QVector3D&,
40+
const QVector3D&) =
41+
QQuaternion::rotationTo;
42+
43+
inline QQuaternion (*qquaternionSlerp)(const QQuaternion&,
44+
const QQuaternion&,
45+
float) = QQuaternion::slerp;
46+
47+
}
48+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// clang-format off
2+
// SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
3+
// clang-format on
4+
// SPDX-FileContributor: Joshua Booth <[email protected]>
5+
//
6+
// SPDX-License-Identifier: MIT OR Apache-2.0
7+
#pragma once
8+
9+
#include "gui/qgenericmatrix.h"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// clang-format off
2+
// SPDX-FileCopyrightText: 2025 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
3+
// clang-format on
4+
// SPDX-FileContributor: Joshua Booth <[email protected]>
5+
//
6+
// SPDX-License-Identifier: MIT OR Apache-2.0
7+
#pragma once
8+
9+
#include "gui/qquaternion.h"

crates/cxx-qt-lib/src/core/qvariant/generate.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ generate_bridge_qt "QModelIndex" "qmodelindex"
108108
generate_bridge_qt "QPersistentModelIndex" "qpersistentmodelindex"
109109
generate_bridge_qt "QPoint" "qpoint"
110110
generate_bridge_qt "QPointF" "qpointf"
111+
generate_bridge_qt "QQuaternion" "qquaternion"
111112
generate_bridge_qt "QRect" "qrect"
112113
generate_bridge_qt "QRectF" "qrectf"
113114
generate_bridge_qt "QSize" "qsize"

crates/cxx-qt-lib/src/core/qvariant/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ impl_qvariant_value!(crate::QModelIndex, qvariant_qmodelindex);
204204
impl_qvariant_value!(crate::QPersistentModelIndex, qvariant_qpersistentmodelindex);
205205
impl_qvariant_value!(crate::QPoint, qvariant_qpoint);
206206
impl_qvariant_value!(crate::QPointF, qvariant_qpointf);
207+
#[cfg(feature = "qt_gui")]
208+
impl_qvariant_value!(crate::QQuaternion, qvariant_qquaternion);
207209
impl_qvariant_value!(crate::QRect, qvariant_qrect);
208210
impl_qvariant_value!(crate::QRectF, qvariant_qrectf);
209211
impl_qvariant_value!(crate::QSize, qvariant_qsize);

0 commit comments

Comments
 (0)