Zrythm v2.0.0-alpha.1
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
tempo_curve_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 "dsp/tempo_map_qml_adapter.h"
7#include "structure/arrangement/tempo_object_manager.h"
8
9#include <QColor>
10#include <QItemSelectionModel>
11#include <QPointer>
12#include <QtCanvasPainter/qcanvaspainteritem.h>
13
14namespace zrythm::gui::qquick
15{
16
18
29class TempoCurveCanvasItem : public QCanvasPainterItem
30{
31 Q_OBJECT
32 QML_NAMED_ELEMENT (TempoCurveCanvas)
33
34 Q_PROPERTY (
36 tempoObjectManager WRITE setTempoObjectManager NOTIFY
37 tempoObjectManagerChanged)
38 Q_PROPERTY (
39 zrythm::dsp::TempoMapWrapper * tempoMap READ tempoMap WRITE setTempoMap
40 NOTIFY tempoMapChanged)
41 Q_PROPERTY (
42 qreal pxPerTick READ pxPerTick WRITE setPxPerTick NOTIFY pxPerTickChanged)
43 Q_PROPERTY (qreal scrollX READ scrollX WRITE setScrollX NOTIFY scrollXChanged)
44 Q_PROPERTY (
45 qreal scrollXPlusWidth READ scrollXPlusWidth WRITE setScrollXPlusWidth
46 NOTIFY scrollXPlusWidthChanged)
47 Q_PROPERTY (
48 QColor curveColor READ curveColor WRITE setCurveColor NOTIFY
49 curveColorChanged)
50 Q_PROPERTY (
51 QItemSelectionModel * selectionModel READ selectionModel WRITE
52 setSelectionModel NOTIFY selectionModelChanged)
53 Q_PROPERTY (
54 bool dragActive READ dragActive WRITE setDragActive NOTIFY dragActiveChanged)
55 Q_PROPERTY (
56 qreal dragDeltaPx READ dragDeltaPx WRITE setDragDeltaPx NOTIFY
57 dragDeltaPxChanged)
59public:
60 explicit TempoCurveCanvasItem (QQuickItem * parent = nullptr);
61
62 QCanvasPainterItemRenderer * createItemRenderer () const override;
63
64 structure::arrangement::TempoObjectManager * tempoObjectManager () const
65 {
66 return manager_;
67 }
68 void
69 setTempoObjectManager (structure::arrangement::TempoObjectManager * manager);
70 dsp::TempoMapWrapper * tempoMap () const { return tempo_map_; }
71 void setTempoMap (dsp::TempoMapWrapper * wrapper);
73 double baseBpm () const;
74 qreal pxPerTick () const { return px_per_tick_; }
75 void setPxPerTick (qreal px);
76 qreal scrollX () const { return scroll_x_; }
77 void setScrollX (qreal x);
78 qreal scrollXPlusWidth () const { return scroll_x_plus_width_; }
79 void setScrollXPlusWidth (qreal w);
80 QColor curveColor () const { return curve_color_; }
81 void setCurveColor (const QColor &color);
82 QItemSelectionModel * selectionModel () const { return selection_model_; }
83 void setSelectionModel (QItemSelectionModel * model);
84 bool dragActive () const { return drag_active_; }
85 void setDragActive (bool active);
86 qreal dragDeltaPx () const { return drag_delta_px_; }
87 void setDragDeltaPx (qreal px);
88
89Q_SIGNALS:
90 void tempoObjectManagerChanged ();
91 void tempoMapChanged ();
92 void pxPerTickChanged ();
93 void scrollXChanged ();
94 void scrollXPlusWidthChanged ();
95 void curveColorChanged ();
96 void selectionModelChanged ();
97 void dragActiveChanged ();
98 void dragDeltaPxChanged ();
99
100private:
101 QPointer<structure::arrangement::TempoObjectManager> manager_;
102 QPointer<dsp::TempoMapWrapper> tempo_map_;
103 qreal px_per_tick_ = 0.0;
104 qreal scroll_x_ = 0.0;
105 qreal scroll_x_plus_width_ = 0.0;
106 QColor curve_color_ = "#009DFF";
107 QPointer<QItemSelectionModel> selection_model_;
108 bool drag_active_ = false;
109 qreal drag_delta_px_ = 0.0;
110};
111
112} // namespace zrythm::gui::qquick
double baseBpm() const
Base tempo at tick 0 from the bound tempo map (120 if unbound).
Renders the tempo automation curve in the background of the tempo lane.
Manages tempo and time signature objects for a project.