Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
channel.h
1// SPDX-FileCopyrightText: © 2018-2024 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#ifndef __GUI_WIDGETS_CHANNEL_H__
5#define __GUI_WIDGETS_CHANNEL_H__
6
7#include "common/dsp/channel.h"
8#include "gui/backend/gtk_widgets/gtk_wrapper.h"
9#include "gui/backend/gtk_widgets/meter.h"
10
11#define CHANNEL_WIDGET_TYPE (channel_widget_get_type ())
12G_DECLARE_FINAL_TYPE (ChannelWidget, channel_widget, Z, CHANNEL_WIDGET, GtkWidget)
13
14TYPEDEF_STRUCT_UNDERSCORED (PluginStripExpanderWidget);
15TYPEDEF_STRUCT_UNDERSCORED (ColorAreaWidget);
16TYPEDEF_STRUCT_UNDERSCORED (KnobWidget);
17TYPEDEF_STRUCT_UNDERSCORED (FaderWidget);
18class Channel;
19TYPEDEF_STRUCT_UNDERSCORED (ChannelSlotWidget);
20TYPEDEF_STRUCT_UNDERSCORED (RouteTargetSelectorWidget);
21TYPEDEF_STRUCT_UNDERSCORED (BalanceControlWidget);
22TYPEDEF_STRUCT_UNDERSCORED (EditableLabelWidget);
23TYPEDEF_STRUCT_UNDERSCORED (FaderButtonsWidget);
24TYPEDEF_STRUCT_UNDERSCORED (ChannelSendsExpanderWidget);
25
26using ChannelWidget = struct _ChannelWidget
27{
28 GtkWidget parent_instance;
29 GtkBox * box;
30 GtkBox * color_box;
31 GtkGrid * grid;
33 ColorAreaWidget * color;
34 GtkBox * icon_and_name_event_box;
35 EditableLabelWidget * name;
36 GtkToggleButton * instrument_ui_toggle;
37
39 gulong instrument_ui_toggled_id;
40
41 GtkBox * phase_controls;
42 GtkButton * phase_invert;
43 GtkLabel * phase_reading;
44 KnobWidget * phase_knob;
45
47 GtkBox * instrument_box;
48 ChannelSlotWidget * instrument_slot;
49
50 /* ----- mid box ------ */
51
52 GtkBox * mid_box;
55
58
59 /* -------- end mid box --------- */
60
61 FaderButtonsWidget * fader_buttons;
62
64 GtkBox * meter_area;
65 GtkBox * balance_control_box;
66 BalanceControlWidget * balance_control;
67 FaderWidget * fader;
68 MeterWidget * meter_l;
69 MeterWidget * meter_r;
70 GtkLabel * meter_reading;
71 GtkImage * icon;
72
74 double meter_reading_val;
75
77 GtkBox * highlight_left_box;
78 GtkBox * highlight_right_box;
79
82 GtkBox * aux_buttons_box;
83
85 GtkToggleButton * mono_compat_btn;
86
89 int n_press;
90
92 bool ctrl_held_at_start;
93
95 bool dragged;
96
100 bool selected_in_dnd;
101
103 std::weak_ptr<Channel> channel;
104
110 SteadyTimePoint last_plugin_press;
111
113 SteadyTimePoint last_midi_trigger_time;
114
116 GtkGestureClick * mp;
117
118 GtkGestureClick * right_mouse_mp;
119
121 GtkGestureDrag * drag;
122
123 bool setup;
124
126 GtkPopoverMenu * popover_menu;
127 FaderButtonsWidget * fader_buttons_for_popover;
128};
129
133void
134channel_widget_update_midi_fx_and_inserts (ChannelWidget * self);
135
136void
137channel_widget_redraw_fader (ChannelWidget * self);
138
142ChannelWidget *
143channel_widget_new (const std::shared_ptr<Channel> &channel);
144
145void
146channel_widget_tear_down (ChannelWidget * self);
147
154void
155channel_widget_refresh (ChannelWidget * self);
156
157void
158channel_widget_refresh_buttons (ChannelWidget * self);
159
160void
161channel_widget_refresh_instrument_ui_toggle (ChannelWidget * self);
162
167GMenu *
168channel_widget_generate_context_menu_for_track (Track * track);
169
173void
174channel_widget_show (ChannelWidget * self);
175
176#endif
struct _PluginStripExpanderWidget { ExpanderBoxWidget parent_instance; zrythm::plugins::PluginSlotType slot_type; PluginStripExpanderPosition position; GtkScrolledWindow *scroll; GtkViewport * viewport; GtkBox *box; GtkBox *strip_boxes[STRIP_SIZE]; ChannelSlotWidget *slots[STRIP_SIZE]; ChannelTrack *track;} PluginStripExpanderWidget
A TwoColExpanderBoxWidget for showing the ports in the InspectorWidget.
struct _ChannelSendsExpanderWidget { ExpanderBoxWidget parent_instance; ChannelSendsExpanderPosition position; GtkScrolledWindow *scroll; GtkViewport * viewport; GtkBox *box; std::vector< GtkBox * > strip_boxes; std::vector< ChannelSendWidget * > slots; Track *track;} ChannelSendsExpanderWidget
A TwoColExpanderBoxWidget for showing the ports in the InspectorWidget.
struct _RouteTargetSelectorWidget { AdwBin parent_instance; GtkDropDown *dropdown; ChannelTrack *track;} RouteTargetSelectorWidget
Dropdown to select the direct output of a track.
struct _KnobWidget { GtkWidget parent_instance; KnobType type; GenericFloatGetter getter; GenericFloatGetter default_getter; GenericFloatGetter snapped_getter; GenericFloatSetter setter; GenericFloatSetter init_setter; GenericFloatSetter end_setter; GenericStringGetter hover_str_getter; void *object; int size; bool hover; float zero; bool arc; int bevel; bool flat; float min; float max; GdkRGBA start_color; GdkRGBA end_color; GtkGestureDrag *drag; double last_x; double last_y; bool drag_updated; PangoLayout *layout; float last_real_val; GtkPopoverMenu *popover_menu;} KnobWidget
Basic knob widget.
Definition knob.h:37
A FaderWidget reflects a Fader object's state.
Definition fader.h:29