nosignal-shell/plugin/src/Caelestia/Blobs/blobinvertedrect.hpp
Robin Seger 6103ce19e8 improve performace of SDF
- Avoid fullscreen shading every pixel
       - Evaluate each BlobRect: localized quad, only nearby rects, instead of all 8 rects
       - O(1-3) per pixel for most passes, rather than O(N²) with N=8(~72 iterations).
       - Closed panels excluded entirely from loop.
2026-03-25 19:45:45 +01:00

58 lines
1.5 KiB
C++

#pragma once
#include "blobshape.hpp"
#include <qqmlengine.h>
class BlobInvertedRect : public BlobShape {
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(qreal borderLeft READ borderLeft WRITE setBorderLeft NOTIFY
borderLeftChanged)
Q_PROPERTY(qreal borderRight READ borderRight WRITE setBorderRight NOTIFY
borderRightChanged)
Q_PROPERTY(qreal borderTop READ borderTop WRITE setBorderTop NOTIFY
borderTopChanged)
Q_PROPERTY(qreal borderBottom READ borderBottom WRITE setBorderBottom NOTIFY
borderBottomChanged)
public:
explicit BlobInvertedRect(QQuickItem* parent = nullptr);
~BlobInvertedRect() override;
qreal borderLeft() const { return m_borderLeft; }
void setBorderLeft(qreal v);
qreal borderRight() const { return m_borderRight; }
void setBorderRight(qreal v);
qreal borderTop() const { return m_borderTop; }
void setBorderTop(qreal v);
qreal borderBottom() const { return m_borderBottom; }
void setBorderBottom(qreal v);
signals:
void borderLeftChanged();
void borderRightChanged();
void borderTopChanged();
void borderBottomChanged();
protected:
bool isInvertedRect() const override { return true; }
QSGNode* updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*) override;
void registerWithGroup() override;
void unregisterFromGroup() override;
private:
qreal m_borderLeft = 0;
qreal m_borderRight = 0;
qreal m_borderTop = 0;
qreal m_borderBottom = 0;
};