Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
ruler_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 <QFont>
8#include <QPointer>
9#include <QtCanvasPainter/qcanvaspainteritem.h>
10
11namespace zrythm::dsp
12{
13class TempoMapWrapper;
14}
15
16namespace zrythm::gui::qquick
17{
18
20
28class RulerGridCanvasItem : public QCanvasPainterItem
29{
30 Q_OBJECT
31 QML_NAMED_ELEMENT (RulerGridCanvas)
32
33 Q_PROPERTY (
34 dsp::TempoMapWrapper * tempoMap READ tempoMap WRITE setTempoMap NOTIFY
35 tempoMapChanged)
36 Q_PROPERTY (
37 qreal pxPerTick READ pxPerTick WRITE setPxPerTick NOTIFY pxPerTickChanged)
38 Q_PROPERTY (qreal scrollX READ scrollX WRITE setScrollX NOTIFY scrollXChanged)
39 Q_PROPERTY (
40 qreal scrollXPlusWidth READ scrollXPlusWidth WRITE setScrollXPlusWidth
41 NOTIFY scrollXPlusWidthChanged)
42 Q_PROPERTY (
43 QColor textColor READ textColor WRITE setTextColor NOTIFY textColorChanged)
44 Q_PROPERTY (
45 qreal barLineOpacity READ barLineOpacity WRITE setBarLineOpacity NOTIFY
46 barLineOpacityChanged)
47 Q_PROPERTY (
48 qreal beatLineOpacity READ beatLineOpacity WRITE setBeatLineOpacity NOTIFY
49 beatLineOpacityChanged)
50 Q_PROPERTY (
51 qreal sixteenthLineOpacity READ sixteenthLineOpacity WRITE
52 setSixteenthLineOpacity NOTIFY sixteenthLineOpacityChanged)
53 Q_PROPERTY (
54 qreal detailMeasurePxThreshold READ detailMeasurePxThreshold WRITE
55 setDetailMeasurePxThreshold NOTIFY detailMeasurePxThresholdChanged)
56 Q_PROPERTY (
57 qreal detailMeasureLabelPxThreshold READ detailMeasureLabelPxThreshold WRITE
58 setDetailMeasureLabelPxThreshold NOTIFY detailMeasureLabelPxThresholdChanged)
59 Q_PROPERTY (
60 QFont barLabelFont READ barLabelFont WRITE setBarLabelFont NOTIFY
61 barLabelFontChanged)
62 Q_PROPERTY (
63 QFont beatLabelFont READ beatLabelFont WRITE setBeatLabelFont NOTIFY
64 beatLabelFontChanged)
65 Q_PROPERTY (
66 QFont sixteenthLabelFont READ sixteenthLabelFont WRITE setSixteenthLabelFont
67 NOTIFY sixteenthLabelFontChanged)
68
69public:
70 explicit RulerGridCanvasItem (QQuickItem * parent = nullptr);
71
72 QCanvasPainterItemRenderer * createItemRenderer () const override;
73
74 dsp::TempoMapWrapper * tempoMap () const { return tempo_map_; }
75 void setTempoMap (dsp::TempoMapWrapper * map);
76 qreal pxPerTick () const { return px_per_tick_; }
77 void setPxPerTick (qreal px);
78 qreal scrollX () const { return scroll_x_; }
79 void setScrollX (qreal x);
80 qreal scrollXPlusWidth () const { return scroll_x_plus_width_; }
81 void setScrollXPlusWidth (qreal w);
82 QColor textColor () const { return text_color_; }
83 void setTextColor (const QColor &color);
84 qreal barLineOpacity () const { return bar_line_opacity_; }
85 void setBarLineOpacity (qreal opacity);
86 qreal beatLineOpacity () const { return beat_line_opacity_; }
87 void setBeatLineOpacity (qreal opacity);
88 qreal sixteenthLineOpacity () const { return sixteenth_line_opacity_; }
89 void setSixteenthLineOpacity (qreal opacity);
90 qreal detailMeasurePxThreshold () const
91 {
92 return detail_measure_px_threshold_;
93 }
94 void setDetailMeasurePxThreshold (qreal threshold);
95 qreal detailMeasureLabelPxThreshold () const
96 {
97 return detail_measure_label_px_threshold_;
98 }
99 void setDetailMeasureLabelPxThreshold (qreal threshold);
100 QFont barLabelFont () const { return bar_label_font_; }
101 void setBarLabelFont (const QFont &font);
102 QFont beatLabelFont () const { return beat_label_font_; }
103 void setBeatLabelFont (const QFont &font);
104 QFont sixteenthLabelFont () const { return sixteenth_label_font_; }
105 void setSixteenthLabelFont (const QFont &font);
106
107Q_SIGNALS:
108 void tempoMapChanged ();
109 void pxPerTickChanged ();
110 void scrollXChanged ();
111 void scrollXPlusWidthChanged ();
112 void textColorChanged ();
113 void barLineOpacityChanged ();
114 void beatLineOpacityChanged ();
115 void sixteenthLineOpacityChanged ();
116 void detailMeasurePxThresholdChanged ();
117 void detailMeasureLabelPxThresholdChanged ();
118 void barLabelFontChanged ();
119 void beatLabelFontChanged ();
120 void sixteenthLabelFontChanged ();
121
122private:
123 QPointer<dsp::TempoMapWrapper> tempo_map_;
124 qreal px_per_tick_ = 0.0;
125 qreal scroll_x_ = 0.0;
126 qreal scroll_x_plus_width_ = 0.0;
127 QColor text_color_ = Qt::black;
128 qreal bar_line_opacity_ = 0.8;
129 qreal beat_line_opacity_ = 0.6;
130 qreal sixteenth_line_opacity_ = 0.4;
131 qreal detail_measure_px_threshold_ = 32.0;
132 qreal detail_measure_label_px_threshold_ = 64.0;
133 QFont bar_label_font_;
134 QFont beat_label_font_;
135 QFont sixteenth_label_font_;
136};
137
138} // namespace zrythm::gui::qquick
Renders ruler grid lines and labels using QCanvasPainter.