fix: blobs now allow to be drawn in device pixels to stay sharp
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 25s
Python / static (pull_request) Successful in 34s
Rust / build (pull_request) Successful in 51s
Python / verify (pull_request) Failing after 1m25s
Rust / fmt (pull_request) Successful in 39s
Rust / clippy (pull_request) Successful in 59s
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 9s
JS/TS / lint (pull_request) Successful in 25s
Python / static (pull_request) Successful in 34s
Rust / build (pull_request) Successful in 51s
Python / verify (pull_request) Failing after 1m25s
Rust / fmt (pull_request) Successful in 39s
Rust / clippy (pull_request) Successful in 59s
This commit is contained in:
@@ -25,6 +25,7 @@ class BlobRect2 : public BlobShape2 {
|
||||
Q_PROPERTY(
|
||||
bool atRestOverride READ atRestOverride WRITE setAtRestOverride NOTIFY
|
||||
atRestOverrideChanged)
|
||||
Q_PROPERTY(bool moving READ isMoving NOTIFY movingChanged)
|
||||
Q_PROPERTY(
|
||||
qreal topLeftRadius READ topLeftRadius WRITE setTopLeftRadius NOTIFY
|
||||
topLeftRadiusChanged)
|
||||
@@ -78,18 +79,13 @@ class BlobRect2 : public BlobShape2 {
|
||||
if (m_atRestOverride == o) return;
|
||||
m_atRestOverride = o;
|
||||
emit atRestOverrideChanged();
|
||||
updateMoving();
|
||||
if (m_group) m_group->markDirty();
|
||||
}
|
||||
|
||||
bool isExcluded(const BlobShape2* other) const override;
|
||||
bool isCornerExcluded(const BlobShape2* other) const override;
|
||||
// The shape that is pushing is the one that can shape the bar edge. A shape that is
|
||||
// retiring still counts, because the retire curve is still moving the surface.
|
||||
// atRestOverride keeps the shape in the group's data even at rest; when it is false
|
||||
// the actual spring state decides, so it is not an override of the state itself.
|
||||
bool isMoving() const override {
|
||||
return m_atRestOverride || m_physicsActive || m_retiring;
|
||||
}
|
||||
bool isMoving() const override;
|
||||
void cornerRadii(float out[4]) const override;
|
||||
|
||||
[[nodiscard]] qreal topLeftRadius() const { return m_topLeftRadius; }
|
||||
@@ -117,6 +113,7 @@ class BlobRect2 : public BlobShape2 {
|
||||
void excludeChanged();
|
||||
void excludeCornersChanged();
|
||||
void atRestOverrideChanged();
|
||||
void movingChanged();
|
||||
void topLeftRadiusChanged();
|
||||
void topRightRadiusChanged();
|
||||
void bottomLeftRadiusChanged();
|
||||
@@ -124,20 +121,24 @@ class BlobRect2 : public BlobShape2 {
|
||||
|
||||
protected:
|
||||
void updatePhysics() override;
|
||||
bool needsFrame() const override;
|
||||
void resetDeformMatrix() override;
|
||||
|
||||
private:
|
||||
void checkAtRest(float speed);
|
||||
void trySettle(float speed);
|
||||
void beginRetire();
|
||||
void finishAtIdentity();
|
||||
void requestPhysics();
|
||||
void updateMoving();
|
||||
|
||||
// Physics state
|
||||
QPointF m_prevScenePos;
|
||||
QElapsedTimer m_elapsed;
|
||||
bool m_physicsActive = false;
|
||||
bool m_hasPrevPos = false;
|
||||
|
||||
// Set from QML. Keeps the shape in the group's data while it is at rest; when it is
|
||||
// false the spring state decides on its own.
|
||||
int m_stillSamples = 0;
|
||||
bool m_movingEmitted = false;
|
||||
|
||||
bool m_atRestOverride = false;
|
||||
|
||||
bool m_retiring = false;
|
||||
@@ -146,13 +147,10 @@ class BlobRect2 : public BlobShape2 {
|
||||
float m_retire01 = 0.0f;
|
||||
float m_retire11 = 1.0f;
|
||||
|
||||
// Symmetric 2x2 deformation matrix components (3 independent: m00, m01,
|
||||
// m11) Rest state is identity: m00=1, m01=0, m11=1
|
||||
float m_dm00 = 1.0f;
|
||||
float m_dm01 = 0.0f;
|
||||
float m_dm11 = 1.0f;
|
||||
|
||||
// Spring velocities for each component
|
||||
float m_dmVel00 = 0.0f;
|
||||
float m_dmVel01 = 0.0f;
|
||||
float m_dmVel11 = 0.0f;
|
||||
|
||||
Reference in New Issue
Block a user