4#ifndef __GUI_WIDGETS_TRACK_H__
5#define __GUI_WIDGETS_TRACK_H__
7#include "common/utils/types.h"
8#include "gui/backend/gtk_widgets/gtk_wrapper.h"
10#define TRACK_WIDGET_TYPE (track_widget_get_type ())
11G_DECLARE_FINAL_TYPE (
TrackWidget, track_widget, Z, TRACK_WIDGET, GtkWidget)
18TYPEDEF_STRUCT_UNDERSCORED (MeterWidget);
19TYPEDEF_STRUCT_UNDERSCORED (TrackCanvasWidget);
20TYPEDEF_STRUCT_UNDERSCORED (FaderButtonsWidget);
37#define TRACK_BOT_BUTTONS_SHOULD_BE_VISIBLE(height) \
39 >= (TRACK_BUTTON_SIZE + TRACK_BUTTON_PADDING_FROM_EDGE) * 2 \
40 + TRACK_BUTTON_PADDING)
42constexpr int TRACK_COLOR_AREA_WIDTH = 18;
44constexpr const char * TRACK_ICON_NAME_MONO_COMPAT =
"mono";
45constexpr const char * TRACK_ICON_NAME_SWAP_PHASE =
"phase";
46constexpr const char * TRACK_ICON_NAME_RECORD =
"media-record";
47constexpr const char * TRACK_ICON_NAME_SOLO =
"solo";
48constexpr const char * TRACK_ICON_NAME_MUTE =
"mute";
49constexpr const char * TRACK_ICON_NAME_LISTEN =
50 "gnome-icon-library-headphones-symbolic";
51constexpr const char * TRACK_ICON_NAME_SHOW_UI =
"jam-icons-screen";
52constexpr const char * TRACK_ICON_NAME_SHOW_AUTOMATION_LANES =
"automation-4p";
53constexpr const char * TRACK_ICON_NAME_SHOW_TRACK_LANES =
"untitled-ui-rows-03";
54constexpr const char * TRACK_ICON_NAME_LOCK =
55 "gnome-icon-library-padlock2-symbolic";
56constexpr const char * TRACK_ICON_NAME_UNLOCK =
57 "gnome-icon-library-padlock2-open-symbolic";
58constexpr const char * TRACK_ICON_NAME_FREEZE =
"fork-awesome-snowflake-o";
59constexpr const char * TRACK_ICON_NAME_PLUS =
"add";
60constexpr const char * TRACK_ICON_NAME_MINUS =
"remove";
61constexpr const char * TRACK_ICON_NAME_BUS =
"effect";
62constexpr const char * TRACK_ICON_NAME_CHORDS =
"minuet-chords";
63constexpr const char * TRACK_ICON_NAME_SHOW_MARKERS =
64 "gnome-icon-library-flag-outline-thick-symbolic";
65constexpr const char * TRACK_ICON_NAME_MIDI =
"instrument";
66constexpr const char * TRACK_ICON_NAME_TEMPO =
"filename-bpm-amarok";
67constexpr const char * TRACK_ICON_NAME_MODULATOR =
68 "gnome-icon-library-encoder-knob-symbolic";
69constexpr const char * TRACK_ICON_NAME_FOLD =
"fluentui-folder-regular";
70constexpr const char * TRACK_ICON_NAME_FOLD_OPEN =
71 "fluentui-folder-open-regular";
72constexpr const char * TRACK_ICON_NAME_MONITOR_AUDIO =
"audition";
74#define TRACK_ICON_IS(x, name) (x == std::string (TRACK_ICON_NAME_##name))
76#define TRACK_CB_ICON_IS(name) TRACK_ICON_IS (cb->icon_name, name)
83 TRACK_WIDGET_HIGHLIGHT_NONE,
84 TRACK_WIDGET_HIGHLIGHT_TOP,
85 TRACK_WIDGET_HIGHLIGHT_BOTTOM,
86 TRACK_WIDGET_HIGHLIGHT_INSIDE,
94 TRACK_WIDGET_RESIZE_TARGET_TRACK,
95 TRACK_WIDGET_RESIZE_TARGET_AT,
96 TRACK_WIDGET_RESIZE_TARGET_LANE,
109 GtkWidget parent_instance;
116 GtkBox * group_colors_box;
118 GtkGestureDrag * drag;
119 GtkGestureClick * click;
122 GtkGestureClick * right_click;
148 bool color_area_hovered;
175 void * resize_target;
181 int ctrl_held_at_start;
184 GtkBox * highlight_top_box;
185 GtkBox * highlight_bot_box;
203 double last_offset_y;
222 TrackCanvasWidget * canvas;
235 std::vector<std::unique_ptr<CustomButtonWidget>> top_buttons;
236 std::vector<std::unique_ptr<CustomButtonWidget>> bot_buttons;
238 MeterWidget * meter_l;
239 MeterWidget * meter_r;
247 SteadyTimePoint last_midi_out_trigger_time;
258 cairo_surface_t * cached_surface;
261 GtkPopoverMenu * popover_menu;
264 GtkPopover * track_name_popover;
265 FaderButtonsWidget * fader_buttons_for_popover;
344 const int highlight);
369track_widget_get_hovered_button (
TrackWidget * self,
int x,
int y);
372track_widget_get_hovered_am_widget (
TrackWidget * self,
int x,
int y);
375track_widget_get_at_at_y (
TrackWidget * self,
double y);