Zrythm v2.0.0-alpha.1
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 QColor barShadeColor READ barShadeColor WRITE setBarShadeColor NOTIFY
44 barShadeColorChanged)
45 Q_PROPERTY (
46 qreal barLineOpacity READ barLineOpacity WRITE setBarLineOpacity NOTIFY
47 barLineOpacityChanged)
48 Q_PROPERTY (
49 qreal beatLineOpacity READ beatLineOpacity WRITE setBeatLineOpacity NOTIFY
50 beatLineOpacityChanged)
51 Q_PROPERTY (
52 qreal sixteenthLineOpacity READ sixteenthLineOpacity WRITE
53 setSixteenthLineOpacity NOTIFY sixteenthLineOpacityChanged)
54 Q_PROPERTY (
55 qreal detailMeasurePxThreshold READ detailMeasurePxThreshold WRITE
56 setDetailMeasurePxThreshold NOTIFY detailMeasurePxThresholdChanged)
57
58public:
59 explicit ArrangerGridCanvasItem (QQuickItem * parent = nullptr);
60
61 QCanvasPainterItemRenderer * createItemRenderer () const override;
62
63 dsp::TempoMapWrapper * tempoMap () const { return tempo_map_; }
64 void setTempoMap (dsp::TempoMapWrapper * map);
65 qreal pxPerTick () const { return px_per_tick_; }
66 void setPxPerTick (qreal px);
67 qreal scrollX () const { return scroll_x_; }
68 void setScrollX (qreal x);
69 qreal scrollXPlusWidth () const { return scroll_x_plus_width_; }
70 void setScrollXPlusWidth (qreal w);
71 QColor lineColor () const { return line_color_; }
72 void setLineColor (const QColor &color);
73 QColor barShadeColor () const { return bar_shade_color_; }
74 void setBarShadeColor (const QColor &color);
75 qreal barLineOpacity () const { return bar_line_opacity_; }
76 void setBarLineOpacity (qreal opacity);
77 qreal beatLineOpacity () const { return beat_line_opacity_; }
78 void setBeatLineOpacity (qreal opacity);
79 qreal sixteenthLineOpacity () const { return sixteenth_line_opacity_; }
80 void setSixteenthLineOpacity (qreal opacity);
81 qreal detailMeasurePxThreshold () const
82 {
83 return detail_measure_px_threshold_;
84 }
85 void setDetailMeasurePxThreshold (qreal threshold);
86
87Q_SIGNALS:
88 void tempoMapChanged ();
89 void pxPerTickChanged ();
90 void scrollXChanged ();
91 void scrollXPlusWidthChanged ();
92 void lineColorChanged ();
93 void barShadeColorChanged ();
94 void barLineOpacityChanged ();
95 void beatLineOpacityChanged ();
96 void sixteenthLineOpacityChanged ();
97 void detailMeasurePxThresholdChanged ();
98
99private:
100 QPointer<dsp::TempoMapWrapper> tempo_map_;
101 qreal px_per_tick_ = 0.0;
102 qreal scroll_x_ = 0.0;
103 qreal scroll_x_plus_width_ = 0.0;
104 QColor line_color_ = Qt::gray;
105 QColor bar_shade_color_ = Qt::transparent;
106 qreal bar_line_opacity_ = 0.8;
107 qreal beat_line_opacity_ = 0.6;
108 qreal sixteenth_line_opacity_ = 0.4;
109 qreal detail_measure_px_threshold_ = 32.0;
110};
111
112} // namespace zrythm::gui::qquick
Renders arranger background grid lines using QCanvasPainter.