89 lines
2.3 KiB
C++
89 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <qqmlintegration.h>
|
|
#include <qquickitem.h>
|
|
#include <qsgnode.h>
|
|
|
|
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
|