#pragma once #include #include #include namespace ZShell::components { class RoundedClip : public QQuickItem { Q_OBJECT QML_ELEMENT Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged) Q_PROPERTY( qreal topLeftRadius READ topLeftRadius WRITE setTopLeftRadius NOTIFY topLeftRadiusChanged) Q_PROPERTY( qreal topRightRadius READ topRightRadius WRITE setTopRightRadius NOTIFY topRightRadiusChanged) Q_PROPERTY( qreal bottomRightRadius READ bottomRightRadius WRITE setBottomRightRadius NOTIFY bottomRightRadiusChanged) Q_PROPERTY( qreal bottomLeftRadius READ bottomLeftRadius WRITE setBottomLeftRadius NOTIFY bottomLeftRadiusChanged) public: explicit RoundedClip(QQuickItem* parent = nullptr); qreal radius() const { return m_radius; } void setRadius(qreal radius) { if (updateRadius(m_radius, radius)) emit radiusChanged(); } [[nodiscard]] qreal topLeftRadius() const { return m_topLeftRadius; } void setTopLeftRadius(qreal radius) { if (updateRadius(m_topLeftRadius, radius)) emit topLeftRadiusChanged(); } [[nodiscard]] qreal topRightRadius() const { return m_topRightRadius; } void setTopRightRadius(qreal radius) { if (updateRadius(m_topRightRadius, radius)) emit topRightRadiusChanged(); } [[nodiscard]] qreal bottomRightRadius() const { return m_bottomRightRadius; } void setBottomRightRadius(qreal radius) { if (updateRadius(m_bottomRightRadius, radius)) emit bottomRightRadiusChanged(); } [[nodiscard]] qreal bottomLeftRadius() const { return m_bottomLeftRadius; } void setBottomLeftRadius(qreal radius) { if (updateRadius(m_bottomLeftRadius, radius)) emit bottomLeftRadiusChanged(); } signals: void radiusChanged(); void topLeftRadiusChanged(); void topRightRadiusChanged(); void bottomRightRadiusChanged(); void bottomLeftRadiusChanged(); protected: QSGNode* updatePaintNode( QSGNode* oldNode, UpdatePaintNodeData* data) override; void geometryChange( const QRectF& newGeometry, const QRectF& oldGeometry) override; private: bool updateRadius(qreal& member, qreal radius); qreal m_radius = 0; qreal m_topLeftRadius = 0; qreal m_topRightRadius = 0; qreal m_bottomRightRadius = 0; qreal m_bottomLeftRadius = 0; }; } // namespace ZShell::components