revert certain changes for blobs
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <qnamespace.h>
|
||||||
|
|
||||||
BlobRect::BlobRect(QQuickItem* parent)
|
BlobRect::BlobRect(QQuickItem* parent)
|
||||||
: BlobShape(parent) {
|
: BlobShape(parent) {
|
||||||
@@ -27,6 +28,17 @@ void BlobRect::updatePolish() {
|
|||||||
emit rawDeformMatrixChanged();
|
emit rawDeformMatrixChanged();
|
||||||
updateCenteredDeformMatrix();
|
updateCenteredDeformMatrix();
|
||||||
m_physicsActive = false;
|
m_physicsActive = false;
|
||||||
|
|
||||||
|
if (m_group) {
|
||||||
|
QMetaObject::invokeMethod(
|
||||||
|
this,
|
||||||
|
[this]() {
|
||||||
|
if (m_group)
|
||||||
|
m_group->markDirty();
|
||||||
|
},
|
||||||
|
Qt::QueuedConnection
|
||||||
|
);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
QMetaObject::invokeMethod(
|
QMetaObject::invokeMethod(
|
||||||
this,
|
this,
|
||||||
@@ -289,9 +301,20 @@ void BlobRect::checkAtRest(float speed) {
|
|||||||
m_dmVel00 = 0.0f;
|
m_dmVel00 = 0.0f;
|
||||||
m_dmVel01 = 0.0f;
|
m_dmVel01 = 0.0f;
|
||||||
m_dmVel11 = 0.0f;
|
m_dmVel11 = 0.0f;
|
||||||
m_deformMatrix = QMatrix4x4(); // identity
|
m_deformMatrix = QMatrix4x4();
|
||||||
emit rawDeformMatrixChanged();
|
emit rawDeformMatrixChanged();
|
||||||
updateCenteredDeformMatrix();
|
updateCenteredDeformMatrix();
|
||||||
m_physicsActive = false;
|
m_physicsActive = false;
|
||||||
|
|
||||||
|
if (m_group) {
|
||||||
|
QMetaObject::invokeMethod(
|
||||||
|
this,
|
||||||
|
[this]() {
|
||||||
|
if (m_group)
|
||||||
|
m_group->markDirty();
|
||||||
|
},
|
||||||
|
Qt::QueuedConnection
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,9 +76,15 @@ void BlobShape::geometryChange(const QRectF& newGeometry, const QRectF& oldGeome
|
|||||||
if (m_group) {
|
if (m_group) {
|
||||||
m_pendingDx += static_cast<float>(newGeometry.x() - oldGeometry.x());
|
m_pendingDx += static_cast<float>(newGeometry.x() - oldGeometry.x());
|
||||||
m_pendingDy += static_cast<float>(newGeometry.y() - oldGeometry.y());
|
m_pendingDy += static_cast<float>(newGeometry.y() - oldGeometry.y());
|
||||||
const auto dw = std::abs(newGeometry.width() - oldGeometry.width());
|
m_pendingDw += static_cast<float>(newGeometry.width() - oldGeometry.width());
|
||||||
const auto dh = std::abs(newGeometry.height() - oldGeometry.height());
|
m_pendingDh += static_cast<float>(newGeometry.height() - oldGeometry.height());
|
||||||
if (std::abs(m_pendingDx) > 0.5f || std::abs(m_pendingDy) > 0.5f || dw > 0.5 || dh > 0.5) {
|
|
||||||
|
const float deformMag = std::abs(m_deformMatrix(0, 0) - 1.0f) + std::abs(m_deformMatrix(0, 1)) +
|
||||||
|
std::abs(m_deformMatrix(1, 0)) + std::abs(m_deformMatrix(1, 1) - 1.0f);
|
||||||
|
const float syncThreshold = deformMag > 0.001f ? 0.05f : 0.5f;
|
||||||
|
|
||||||
|
if (std::abs(m_pendingDx) > syncThreshold || std::abs(m_pendingDy) > syncThreshold ||
|
||||||
|
std::abs(m_pendingDw) > syncThreshold || std::abs(m_pendingDh) > syncThreshold) {
|
||||||
m_pendingDx = 0;
|
m_pendingDx = 0;
|
||||||
m_pendingDy = 0;
|
m_pendingDy = 0;
|
||||||
m_group->markShapeDirty(this);
|
m_group->markShapeDirty(this);
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ float m_cachedPaddedX = 0;
|
|||||||
float m_cachedPaddedY = 0;
|
float m_cachedPaddedY = 0;
|
||||||
float m_cachedPaddedW = 0;
|
float m_cachedPaddedW = 0;
|
||||||
float m_cachedPaddedH = 0;
|
float m_cachedPaddedH = 0;
|
||||||
|
float m_pendingDw = 0;
|
||||||
|
float m_pendingDh = 0;
|
||||||
QRectF m_localPaddedRect;
|
QRectF m_localPaddedRect;
|
||||||
QVector<BlobRectData> m_cachedRects;
|
QVector<BlobRectData> m_cachedRects;
|
||||||
int m_cachedMyIndex = -2;
|
int m_cachedMyIndex = -2;
|
||||||
|
|||||||
Reference in New Issue
Block a user