fix: reduce shader usage
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user