Files
z-bar-qt/Plugins/ZShell/Components/wavyline.hpp
T
zach 11e7aac195
C++ / fmt (pull_request) Failing after 5s
C++ / build (pull_request) Failing after 11s
C++ / clang-tidy (pull_request) Failing after 10s
JS/TS / fmt (pull_request) Successful in 12s
JS/TS / lint (pull_request) Successful in 10s
Python / static (pull_request) Failing after 27s
Rust / build (pull_request) Successful in 54s
Python / verify (pull_request) Failing after 1m26s
Rust / fmt (pull_request) Successful in 46s
Rust / clippy (pull_request) Successful in 1m6s
feat: better notification storage and image caching + blobs
2026-11-02 19:00:43 +01:00

130 lines
3.4 KiB
C++

#pragma once
#include <qqmlintegration.h>
#include <QCanvasPainterItem>
#include <QColor>
namespace ZShell::controls {
class WavyLineRenderer;
class WavyLine : public QCanvasPainterItem {
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(
int lineWidth READ lineWidth WRITE setLineWidth NOTIFY lineWidthChanged
FINAL)
Q_PROPERTY(
qreal amplitudeMultiplier READ amplitudeMultiplier WRITE
setAmplitudeMultiplier NOTIFY amplitudeMultiplierChanged FINAL)
Q_PROPERTY(
int frequency READ frequency WRITE setFrequency NOTIFY frequencyChanged
FINAL)
Q_PROPERTY(
qreal startX READ startX WRITE setStartX NOTIFY startXChanged FINAL)
Q_PROPERTY(
qreal fullLength READ fullLength WRITE setFullLength NOTIFY
fullLengthChanged FINAL)
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL)
Q_PROPERTY(
qreal waveProgress READ waveProgress WRITE setWaveProgress NOTIFY
waveProgressChanged FINAL)
Q_PROPERTY(
PathType pathType READ pathType WRITE setPathType NOTIFY pathTypeChanged
FINAL)
Q_PROPERTY(
qreal startAngle READ startAngle WRITE setStartAngle NOTIFY
startAngleChanged FINAL)
Q_PROPERTY(
qreal fullAngle READ fullAngle WRITE setFullAngle NOTIFY
fullAngleChanged FINAL)
Q_PROPERTY(
qreal radius READ radius WRITE setRadius NOTIFY radiusChanged FINAL)
Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged FINAL)
public:
enum PathType { Linear, Arc };
Q_ENUM(PathType)
explicit WavyLine(QQuickItem* parent = nullptr);
[[nodiscard]] int lineWidth() const;
void setLineWidth(int lineWidth);
[[nodiscard]] qreal amplitudeMultiplier() const;
void setAmplitudeMultiplier(qreal amplitudeMultiplier);
[[nodiscard]] int frequency() const;
void setFrequency(int frequency);
[[nodiscard]] qreal startX() const;
void setStartX(qreal startX);
[[nodiscard]] qreal fullLength() const;
void setFullLength(qreal fullLength);
[[nodiscard]] QColor color() const;
void setColor(const QColor& color);
[[nodiscard]] qreal waveProgress() const;
void setWaveProgress(qreal progress);
[[nodiscard]] PathType pathType() const;
void setPathType(PathType pathType);
[[nodiscard]] qreal startAngle() const;
void setStartAngle(qreal startAngle);
[[nodiscard]] qreal fullAngle() const;
void setFullAngle(qreal fullAngle);
[[nodiscard]] qreal radius() const;
void setRadius(qreal radius);
[[nodiscard]] qreal value() const;
void setValue(qreal value);
signals:
void lineWidthChanged();
void amplitudeMultiplierChanged();
void frequencyChanged();
void startXChanged();
void fullLengthChanged();
void colorChanged();
void waveProgressChanged();
void pathTypeChanged();
void startAngleChanged();
void fullAngleChanged();
void radiusChanged();
void valueChanged();
protected:
[[nodiscard]] QCanvasPainterItemRenderer* createItemRenderer()
const override;
// Keeps the renderer's device pixel ratio current: strokes and sample
// spacing are quantized in device pixels, so they must be built with the
// ratio the window actually has.
void itemChange(ItemChange change, const ItemChangeData& value) override;
private:
friend class WavyLineRenderer;
int m_lineWidth;
qreal m_amplitudeMultiplier;
int m_frequency;
qreal m_startX;
qreal m_fullLength;
QColor m_color;
qreal m_waveProgress;
PathType m_pathType;
qreal m_startAngle;
qreal m_fullAngle;
qreal m_radius;
qreal m_value;
qreal m_dpr = 1.0;
};
} // namespace ZShell::controls