Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
arranger_grid_canvas_item.h
1// SPDX-FileCopyrightText: © 2026 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include <QColor>
7#include <QPointer>
8#include <QtCanvasPainter/qcanvaspainteritem.h>
9
10namespace zrythm::dsp
11{
12class TempoMapWrapper;
13}
14
15namespace zrythm::gui::qquick
16{
17
19
26class ArrangerGridCanvasItem : public QCanvasPainterItem
27{
28 Q_OBJECT
29 QML_NAMED_ELEMENT (ArrangerGridCanvas)
30
31 Q_PROPERTY (
32 dsp::TempoMapWrapper * tempoMap READ tempoMap WRITE setTempoMap NOTIFY
33 tempoMapChanged)
34 Q_PROPERTY (
35 qreal pxPerTick READ pxPerTick WRITE setPxPerTick NOTIFY pxPerTickChanged)
36 Q_PROPERTY (qreal scrollX READ scrollX WRITE setScrollX NOTIFY scrollXChanged)
37 Q_PROPERTY (
38 qreal scrollXPlusWidth READ scrollXPlusWidth WRITE setScrollXPlusWidth
39 NOTIFY scrollXPlusWidthChanged)
40 Q_PROPERTY (
41 QColor lineColor READ lineColor WRITE setLineColor NOTIFY lineColorChanged)
42 Q_PROPERTY (
43 qreal barLineOpacity READ barLineOpacity WRITE setBarLineOpacity NOTIFY
44 barLineOpacityChanged)
45 Q_PROPERTY (
46 qreal beatLineOpacity READ beatLineOpacity WRITE setBeatLineOpacity NOTIFY
47 beatLineOpacityChanged)
48 Q_PROPERTY (
49 qreal sixteenthLineOpacity READ sixteenthLineOpacity WRITE
50 setSixteenthLineOpacity NOTIFY sixteenthLineOpacityChanged)
51 Q_PROPERTY (
52 qreal detailMeasurePxThreshold READ detailMeasurePxThreshold WRITE
53 setDetailMeasurePxThreshold NOTIFY detailMeasurePxThresholdChanged)
54
55public:
56 explicit ArrangerGridCanvasItem (QQuickItem * parent = nullptr);
57
58 QCanvasPainterItemRenderer * createItemRenderer () const override;
59
60 dsp::TempoMapWrapper * tempoMap () const { return tempo_map_; }
61 void setTempoMap (dsp::TempoMapWrapper * map);
62 qreal pxPerTick () const { return px_per_tick_; }
63 void setPxPerTick (qreal px);
64 qreal scrollX () const { return scroll_x_; }
65 void setScrollX (qreal x);
66 qreal scrollXPlusWidth () const { return scroll_x_plus_width_; }
67 void setScrollXPlusWidth (qreal w);
68 QColor lineColor () const { return line_color_; }
69 void setLineColor (const QColor &color);
70 qreal barLineOpacity () const { return bar_line_opacity_; }
71 void setBarLineOpacity (qreal opacity);
72 qreal beatLineOpacity () const { return beat_line_opacity_; }
73 void setBeatLineOpacity (qreal opacity);
74 qreal sixteenthLineOpacity () const { return sixteenth_line_opacity_; }
75 void setSixteenthLineOpacity (qreal opacity);
76 qreal detailMeasurePxThreshold () const
77 {
78 return detail_measure_px_threshold_;
79 }
80 void setDetailMeasurePxThreshold (qreal threshold);
81
82Q_SIGNALS:
83 void tempoMapChanged ();
84 void pxPerTickChanged ();
85 void scrollXChanged ();
86 void scrollXPlusWidthChanged ();
87 void lineColorChanged ();
88 void barLineOpacityChanged ();
89 void beatLineOpacityChanged ();
90 void sixteenthLineOpacityChanged ();
91 void detailMeasurePxThresholdChanged ();
92
93private:
94 QPointer<dsp::TempoMapWrapper> tempo_map_;
95 qreal px_per_tick_ = 0.0;
96 qreal scroll_x_ = 0.0;
97 qreal scroll_x_plus_width_ = 0.0;
98 QColor line_color_ = Qt::gray;
99 qreal bar_line_opacity_ = 0.8;
100 qreal beat_line_opacity_ = 0.6;
101 qreal sixteenth_line_opacity_ = 0.4;
102 qreal detail_measure_px_threshold_ = 32.0;
103};
104
105} // namespace zrythm::gui::qquick
Renders arranger background grid lines using QCanvasPainter.