4#ifndef __GUI_WIDGETS_ARRANGER_H__
5#define __GUI_WIDGETS_ARRANGER_H__
7#include "common/dsp/position.h"
8#include "common/dsp/transport.h"
9#include "common/utils/ui.h"
10#include "gui/backend/backend/editor_settings.h"
11#include "gui/backend/gtk_widgets/gtk_wrapper.h"
12#include "gui/backend/gtk_widgets/main_window.h"
14#define ARRANGER_WIDGET_TYPE (arranger_widget_get_type ())
15G_DECLARE_FINAL_TYPE (
ArrangerWidget, arranger_widget, Z, ARRANGER_WIDGET, GtkWidget)
17TYPEDEF_STRUCT_UNDERSCORED (ArrangerBgWidget);
18TYPEDEF_STRUCT_UNDERSCORED (GtkEventControllerMotion);
19TYPEDEF_STRUCT_UNDERSCORED (RulerWidget);
27#define ARRANGER_WIDGET_GET_ACTION(arr, actn) (arr->action == ##actn)
45 ARRANGER_CURSOR_STRETCHING_L,
46 ARRANGER_CURSOR_RESIZING_L_LOOP,
48 ARRANGER_CURSOR_RESIZING_R_FADE,
49 ARRANGER_CURSOR_STRETCHING_R,
50 ARRANGER_CURSOR_RESIZING_R_LOOP,
77typedef enum ArrangerWidgetHoverType
79 ARRANGER_WIDGET_HOVER_TYPE_NONE,
80 ARRANGER_WIDGET_HOVER_TYPE_TRACK,
81 ARRANGER_WIDGET_HOVER_TYPE_TRACK_LANE,
82 ARRANGER_WIDGET_HOVER_TYPE_AUTOMATION_TRACK,
83} ArrangerWidgetHoverType;
97 GtkWidget parent_instance;
102 GtkGestureDrag * drag;
103 GtkGestureClick * click;
104 GtkGestureClick * right_click;
105 GtkEventControllerMotion * motion_controller;
108 double last_offset_x;
109 double last_offset_y;
115 double offset_x_from_scroll;
116 double offset_y_from_scroll;
137 bool drag_update_started;
141 std::unique_ptr<Position> earliest_obj_start_pos;
148 Position fade_pos_at_start;
158 std::unique_ptr<ArrangerObject> start_object;
165 std::weak_ptr<ArrangerObject> prj_start_object;
168 std::weak_ptr<ArrangerObject> hovered_object;
171 bool start_object_was_selected;
180 std::unique_ptr<ArrangerSelections> sel_at_start;
189 std::vector<ArrangerObject *> live_selections;
195 std::unique_ptr<Region> region_at_start;
198 std::unique_ptr<ArrangerSelections> sel_to_delete;
209 Position playhead_pos_at_start;
213 double curr_ticks_diff_from_start;
218 double adj_ticks_diff;
221 double last_adj_ticks_diff;
228 gboolean key_is_pressed;
240 std::shared_ptr<SnapGrid> snap_grid;
251 gint64 last_frame_time;
257 int visible_track_diff;
281 int resizing_range_start;
283 AutomationTrack * hovered_at;
284 TrackLane * hovered_lane;
285 Track * hovered_track;
288 GdkTexture * symbolic_link_texture;
289 GdkTexture * music_note_16th_texture;
290 GdkTexture * fork_awesome_snowflake_texture;
291 GdkTexture * media_playlist_repeat_texture;
294 int region_icon_texture_size;
297 GskRenderNode * loop_line_node;
298 GskRenderNode * clip_start_line_node;
299 GskRenderNode * cut_line_node;
330 int hovered_chord_index;
343 double dval_at_start;
350 int last_playhead_px;
360 graphene_rect_t last_rect;
374 GdkRectangle highlight_rect;
380 GdkRectangle last_selection_rect;
388 guint drag_start_btn;
404 Transport::Display ruler_display;
412 PangoLayoutUniquePtr vel_layout;
420 PangoLayoutUniquePtr ap_layout;
425 PangoLayoutUniquePtr audio_layout;
428 PangoLayoutUniquePtr debug_layout;
437 int queued_playhead_px;
440 GtkPopoverMenu * popover_menu;
442 guint unlisten_notes_timeout_id;
462 const std::shared_ptr<SnapGrid> &snap_grid);
500 std::vector<ArrangerObject *> &objs_arr);
528 ArrangerObject::Type type,
531 std::vector<ArrangerObject *> &arr);
544 ArrangerObject::Type type,
546 std::vector<ArrangerObject *> &arr);
558 ArrangerObject::Type type,
563arranger_widget_select_all (
ArrangerWidget * self,
bool select,
bool fire_events);
565template <
typename T = ArrangerObject>
566 requires std::derived_from<T, ArrangerObject>
568arranger_widget_set_start_object (
ArrangerWidget * self, std::shared_ptr<T> obj)
570 self->start_object = obj->clone_unique ();
571 self->prj_start_object = obj;
586template <
typename T = ArrangerSelections>
587 requires std::derived_from<T, ArrangerSelections>
605 GtkEventControllerKey * key_controller,
608 GdkModifierType state,
612arranger_widget_on_key_release (
613 GtkEventControllerKey * key_controller,
616 GdkModifierType state,
635 ArrangerObject * obj,
650 ArrangerObject * clicked_object);
671EditorSettingsPtrVariant
678std::unique_ptr<EditorSettings>
685arranger_widget_handle_playhead_auto_scroll (
ArrangerWidget * self,
bool force);
687typedef void (*ArrangerWidgetForeachFunc) (
ArrangerWidget * arranger);
695ATTR_NONNULL RulerWidget *
710#define arranger_widget_print_action(self) z_debug ("action: {}", self->action)
760std::pair<ArrangerObject::ResizeType, bool>
764extern template MidiSelections *
766extern template TimelineSelections *
768extern template ChordSelections *
770extern template AutomationSelections *
UiOverlayAction
Various overlay actions to be shared.