#pragma once #include #include #include #include class BlobShape; class BlobInvertedRect; class BlobGroup : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(qreal smoothing READ smoothing WRITE setSmoothing NOTIFY smoothingChanged) Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) public: explicit BlobGroup(QObject* parent = nullptr); ~BlobGroup() override; qreal smoothing() const { return m_smoothing; } void setSmoothing(qreal s); QColor color() const { return m_color; } void setColor(const QColor& c); void addShape(BlobShape* shape); void removeShape(BlobShape* shape); void setInvertedRect(BlobInvertedRect* rect); void clearInvertedRect(BlobInvertedRect* rect); const QList& shapes() const { return m_shapes; } BlobInvertedRect* invertedRect() const { return m_invertedRect; } void markDirty(); void markShapeDirty(BlobShape* source); void ensurePhysicsUpdated(); signals: void smoothingChanged(); void colorChanged(); private: qreal m_smoothing = 32.0; QColor m_color{ 0x44, 0x88, 0xff }; QList m_shapes; BlobInvertedRect* m_invertedRect = nullptr; bool m_physicsUpdated = false; };