Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
event_viewer.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019, 2021-2022 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
9
10#ifndef __GUI_WIDGETS_EVENT_VIEWER_H__
11#define __GUI_WIDGETS_EVENT_VIEWER_H__
12
13#include "common/dsp/region_identifier.h"
14#include "common/utils/types.h"
15#include "gui/backend/gtk_widgets/gtk_wrapper.h"
16#include "gui/backend/gtk_widgets/item_factory.h"
17
18#define EVENT_VIEWER_WIDGET_TYPE (event_viewer_widget_get_type ())
19G_DECLARE_FINAL_TYPE (
20 EventViewerWidget,
21 event_viewer_widget,
22 Z,
23 EVENT_VIEWER_WIDGET,
24 GtkBox)
25
26TYPEDEF_STRUCT_UNDERSCORED (ArrangerWidget);
27class ArrangerSelections;
28
34
35#define MW_TIMELINE_EVENT_VIEWER MW_MAIN_NOTEBOOK->event_viewer
36#define MW_EDITOR_EVENT_VIEWER_STACK MW_BOT_DOCK_EDGE->event_viewer_stack
37#define MW_MIDI_EVENT_VIEWER MW_BOT_DOCK_EDGE->event_viewer_midi
38#define MW_CHORD_EVENT_VIEWER MW_BOT_DOCK_EDGE->event_viewer_chord
39#define MW_AUDIO_EVENT_VIEWER MW_BOT_DOCK_EDGE->event_viewer_audio
40#define MW_AUTOMATION_EVENT_VIEWER MW_BOT_DOCK_EDGE->event_viewer_automation
41
42enum class EventViewerType
43{
44 EVENT_VIEWER_TYPE_TIMELINE,
45 EVENT_VIEWER_TYPE_CHORD,
46 EVENT_VIEWER_TYPE_MIDI,
47 EVENT_VIEWER_TYPE_AUDIO,
48 EVENT_VIEWER_TYPE_AUTOMATION,
49};
50
51using EventViewerWidget = struct _EventViewerWidget
52{
53 GtkBox parent_instance;
54
56 GtkColumnView * column_view;
57
59 ItemFactoryPtrVector item_factories;
60
62 EventViewerType type;
63
66 // RegionType region_type;
67
69 std::unique_ptr<ArrangerSelections> last_selections;
70
72 bool marking_selected_objs;
73};
74
82void
83event_viewer_widget_refresh (EventViewerWidget * self, bool selections_only);
84
88void
90
98void
100 const ArrangerWidget * arranger,
101 bool selections_only);
102
103EventViewerWidget *
104event_viewer_widget_new (void);
105
109void
110event_viewer_widget_setup (EventViewerWidget * self, EventViewerType type);
111
115
116#endif
void event_viewer_widget_refresh_for_selections(ArrangerSelections *sel)
Convenience function.
void event_viewer_widget_refresh(EventViewerWidget *self, bool selections_only)
Called to update the models/selections.
struct _ArrangerWidget { GtkWidget parent_instance; ArrangerWidgetType type; GtkGestureDrag * drag; GtkGestureClick * click; GtkGestureClick * right_click; GtkEventControllerMotion *motion_controller; double last_offset_x; double last_offset_y; double offset_x_from_scroll; double offset_y_from_scroll; UiOverlayAction action; double start_x; double start_y; double start_pos_px; bool drag_update_started; std::unique_ptr< Position > earliest_obj_start_pos; Position fade_pos_at_start; std::unique_ptr< ArrangerObject > start_object; std::weak_ptr< ArrangerObject > prj_start_object; std::weak_ptr< ArrangerObject > hovered_object; bool start_object_was_selected; std::unique_ptr< ArrangerSelections > sel_at_start; std::unique_ptr< Region > region_at_start; std::unique_ptr< ArrangerSelections > sel_to_delete; Position start_pos; bool was_paused; Position playhead_pos_at_start; double curr_ticks_diff_from_start; double adj_ticks_diff; double last_adj_ticks_diff; Position curr_pos; Position end_pos; gboolean key_is_pressed; double hover_x; double hover_y; bool hovered; int n_press; std::shared_ptr< SnapGrid > snap_grid; int shift_held; int ctrl_held; int alt_held; gint64 last_frame_time; int visible_track_diff; int lane_diff; int visible_at_diff; int is_pinned; int resizing_range; int resizing_range_start; AutomationTrack *hovered_at; TrackLane * hovered_lane; Track * hovered_track; GdkTexture *symbolic_link_texture; GdkTexture *music_note_16th_texture; GdkTexture *fork_awesome_snowflake_texture; GdkTexture *media_playlist_repeat_texture; int region_icon_texture_size; GskRenderNode *loop_line_node; GskRenderNode *clip_start_line_node; GskRenderNode *cut_line_node; int hovered_note; int start_vel_val; int vel_diff; int hovered_chord_index; float fval_at_start; double dval_at_start; int last_playhead_px; bool redraw; graphene_rect_t last_rect; bool can_link; bool is_highlighted; GdkRectangle highlight_rect; GdkRectangle last_selection_rect; guint drag_start_btn; bool first_draw; double new_hadj_val; Transport::Display ruler_display; PangoLayoutUniquePtr vel_layout; PangoLayoutUniquePtr ap_layout; PangoLayoutUniquePtr audio_layout; PangoLayoutUniquePtr debug_layout; int queued_playhead_px; GtkPopoverMenu *popover_menu; guint unlisten_notes_timeout_id;} ArrangerWidget
A canvas widget for drawing and interacting with arranger objects.
Definition arranger.h:95
void event_viewer_widget_refresh_for_arranger(const ArrangerWidget *arranger, bool selections_only)
Convenience function.
void event_viewer_widget_setup(EventViewerWidget *self, EventViewerType type)
Sets up the event viewer.