21 #include "gtk2ardour-config.h"
32 #include "canvas/canvas.h"
33 #include "canvas/rectangle.h"
34 #include "canvas/pixbuf.h"
35 #include "canvas/scroll_group.h"
36 #include "canvas/text.h"
37 #include "canvas/debug.h"
71 _track_canvas_viewport =
new ArdourCanvas::GtkCanvasViewport (horizontal_adjustment, vertical_adjustment);
72 _track_canvas = _track_canvas_viewport->canvas ();
79 no_scroll_group =
new ArdourCanvas::Container (_track_canvas->root());
81 ArdourCanvas::ScrollGroup* hsg;
82 ArdourCanvas::ScrollGroup* hg;
83 ArdourCanvas::ScrollGroup* cg;
85 h_scroll_group = hg =
new ArdourCanvas::ScrollGroup (_track_canvas->root(), ArdourCanvas::ScrollGroup::ScrollsHorizontally);
86 CANVAS_DEBUG_NAME (h_scroll_group,
"canvas h scroll");
87 _track_canvas->add_scroller (*hg);
89 hv_scroll_group = hsg =
new ArdourCanvas::ScrollGroup (_track_canvas->root(),
90 ArdourCanvas::ScrollGroup::ScrollSensitivity (ArdourCanvas::ScrollGroup::ScrollsVertically|
91 ArdourCanvas::ScrollGroup::ScrollsHorizontally));
92 CANVAS_DEBUG_NAME (hv_scroll_group,
"canvas hv scroll");
93 _track_canvas->add_scroller (*hsg);
95 cursor_scroll_group = cg =
new ArdourCanvas::ScrollGroup (_track_canvas->root(), ArdourCanvas::ScrollGroup::ScrollsHorizontally);
96 CANVAS_DEBUG_NAME (cursor_scroll_group,
"canvas cursor scroll");
97 _track_canvas->add_scroller (*cg);
114 global_rect_group =
new ArdourCanvas::Container (hv_scroll_group);
115 CANVAS_DEBUG_NAME (global_rect_group,
"global rect group");
117 transport_loop_range_rect =
new ArdourCanvas::Rectangle (global_rect_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, ArdourCanvas::COORD_MAX));
118 CANVAS_DEBUG_NAME (transport_loop_range_rect,
"loop rect");
119 transport_loop_range_rect->hide();
121 transport_punch_range_rect =
new ArdourCanvas::Rectangle (global_rect_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, ArdourCanvas::COORD_MAX));
122 CANVAS_DEBUG_NAME (transport_punch_range_rect,
"punch rect");
123 transport_punch_range_rect->hide();
126 time_line_group =
new ArdourCanvas::Container (h_scroll_group);
127 CANVAS_DEBUG_NAME (time_line_group,
"time line group");
129 _trackview_group =
new ArdourCanvas::Container (hv_scroll_group);
130 CANVAS_DEBUG_NAME (_trackview_group,
"Canvas TrackViews");
133 rubberband_rect =
new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, 0.0));
134 rubberband_rect->hide();
139 _drag_motion_group =
new ArdourCanvas::Container (hv_scroll_group);
140 CANVAS_DEBUG_NAME (_drag_motion_group,
"Canvas Drag Motion");
144 _time_markers_group =
new ArdourCanvas::Container (h_scroll_group);
145 CANVAS_DEBUG_NAME (_time_markers_group,
"time bars");
147 cd_marker_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, 0.0));
148 CANVAS_DEBUG_NAME (cd_marker_group,
"cd marker group");
152 videotl_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple(0.0, 0.0));
153 CANVAS_DEBUG_NAME (videotl_group,
"videotl group");
154 marker_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, timebar_height + 1.0));
155 CANVAS_DEBUG_NAME (marker_group,
"marker group");
156 transport_marker_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 2.0) + 1.0));
157 CANVAS_DEBUG_NAME (transport_marker_group,
"transport marker group");
158 range_marker_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0));
159 CANVAS_DEBUG_NAME (range_marker_group,
"range marker group");
160 tempo_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
161 CANVAS_DEBUG_NAME (tempo_group,
"tempo group");
162 meter_group =
new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
163 CANVAS_DEBUG_NAME (meter_group,
"meter group");
165 meter_bar =
new ArdourCanvas::Rectangle (meter_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
166 CANVAS_DEBUG_NAME (meter_bar,
"meter Bar");
167 meter_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
169 tempo_bar =
new ArdourCanvas::Rectangle (tempo_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
170 CANVAS_DEBUG_NAME (tempo_bar,
"Tempo Bar");
171 tempo_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
173 range_marker_bar =
new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
174 CANVAS_DEBUG_NAME (range_marker_bar,
"Range Marker Bar");
175 range_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
177 transport_marker_bar =
new ArdourCanvas::Rectangle (transport_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
178 CANVAS_DEBUG_NAME (transport_marker_bar,
"transport Marker Bar");
179 transport_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
181 marker_bar =
new ArdourCanvas::Rectangle (marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
182 CANVAS_DEBUG_NAME (marker_bar,
"Marker Bar");
183 marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
185 cd_marker_bar =
new ArdourCanvas::Rectangle (cd_marker_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
186 CANVAS_DEBUG_NAME (cd_marker_bar,
"CD Marker Bar");
187 cd_marker_bar->set_outline_what (ArdourCanvas::Rectangle::BOTTOM);
191 cd_marker_bar_drag_rect =
new ArdourCanvas::Rectangle (cd_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height));
192 CANVAS_DEBUG_NAME (cd_marker_bar_drag_rect,
"cd marker drag");
193 cd_marker_bar_drag_rect->set_outline (
false);
194 cd_marker_bar_drag_rect->hide ();
196 range_bar_drag_rect =
new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height));
197 CANVAS_DEBUG_NAME (range_bar_drag_rect,
"range drag");
198 range_bar_drag_rect->set_outline (
false);
199 range_bar_drag_rect->hide ();
201 transport_bar_drag_rect =
new ArdourCanvas::Rectangle (transport_marker_group, ArdourCanvas::Rect (0.0, 0.0, 100, timebar_height));
202 CANVAS_DEBUG_NAME (transport_bar_drag_rect,
"transport drag");
203 transport_bar_drag_rect->set_outline (
false);
204 transport_bar_drag_rect->hide ();
206 transport_punchin_line =
new ArdourCanvas::Line (hv_scroll_group);
207 transport_punchin_line->set_x0 (0);
208 transport_punchin_line->set_y0 (0);
209 transport_punchin_line->set_x1 (0);
210 transport_punchin_line->set_y1 (ArdourCanvas::COORD_MAX);
211 transport_punchin_line->hide ();
213 transport_punchout_line =
new ArdourCanvas::Line (hv_scroll_group);
214 transport_punchout_line->set_x0 (0);
215 transport_punchout_line->set_y0 (0);
216 transport_punchout_line->set_x1 (0);
217 transport_punchout_line->set_y1 (ArdourCanvas::COORD_MAX);
218 transport_punchout_line->hide();
231 logo_item->lower_to_bottom ();
234 _canvas_drop_zone =
new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, 0.0));
236 _canvas_drop_zone->set_fill (
false);
237 _canvas_drop_zone->set_outline (
false);
252 _track_canvas->set_name (
"EditorMainCanvas");
253 _track_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
256 _track_canvas->set_flags (CAN_FOCUS);
260 vector<TargetEntry> target_table;
263 target_table.push_back (TargetEntry (
"regions"));
265 target_table.push_back (TargetEntry (
"text/plain"));
266 target_table.push_back (TargetEntry (
"text/uri-list"));
267 target_table.push_back (TargetEntry (
"application/x-rootwin-drop"));
269 _track_canvas->drag_dest_set (target_table);
274 initialize_rulers ();
284 _canvas_viewport_allocation = alloc;
285 track_canvas_viewport_size_allocated ();
291 bool height_changed = _visible_canvas_height != _canvas_viewport_allocation.get_height();
293 _visible_canvas_width = _canvas_viewport_allocation.get_width ();
294 _visible_canvas_height = _canvas_viewport_allocation.get_height ();
296 _canvas_drop_zone->set_y1 (_canvas_drop_zone->y0() + (_visible_canvas_height - 20.0));
300 if (height_changed) {
302 for (LocationMarkerMap::iterator i = location_markers.begin(); i != location_markers.end(); ++i) {
303 i->second->canvas_height_set (_visible_canvas_height);
306 vertical_adjustment.set_page_size (_visible_canvas_height);
307 if ((vertical_adjustment.get_value() + _visible_canvas_height) >= vertical_adjustment.get_upper()) {
312 vertical_adjustment.set_value (_full_canvas_height - _visible_canvas_height);
315 set_visible_track_count (_visible_track_count);
318 update_fixed_rulers();
319 redisplay_tempo (
false);
320 _summary->set_overlays_dirty ();
326 GtkRequisition req = { 0, 0 };
329 edit_controls_vbox.size_request (req);
332 if (_group_tabs->is_mapped()) {
333 _group_tabs->size_request (req);
341 controls_layout.property_width() = w;
342 controls_layout.property_width_request() = w;
352 _canvas_drop_zone->set_position (ArdourCanvas::Duple (0, h));
358 h += _canvas_drop_zone->height ();
364 controls_layout.property_height() = h;
371 if (!_cursor_stack.empty()) {
372 set_canvas_cursor (get_canvas_cursor());
383 const SelectionData& data,
384 guint
info, guint time)
386 if (data.get_target() ==
"regions") {
387 drop_regions (context, x, y, data, info, time);
389 drop_paths (context, x, y, data, info, time);
396 drop_paths_part_two (paths, frame, ypos, copy);
410 vector<string> midi_paths;
411 vector<string> audio_paths;
413 for (vector<string>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
414 if (SMFSource::safe_midi_file_extension (*i)) {
415 midi_paths.push_back (*i);
417 audio_paths.push_back (*i);
422 std::pair<TimeAxisView*, int>
const tvp = trackview_by_y_position (ypos,
false);
423 if (tvp.first == 0) {
429 do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack,
SrcBest, frame);
432 do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack,
SrcBest, frame);
434 do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, frame);
437 }
else if ((tv = dynamic_cast<RouteTimeAxisView*> (tvp.first)) != 0) {
445 do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack,
SrcBest, frame);
448 do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack,
SrcBest, frame);
450 do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, frame);
459 const SelectionData& data,
460 guint
info, guint time)
462 vector<string> paths;
467 if (convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
472 ev.type = GDK_BUTTON_RELEASE;
476 frame = window_event_sample (&ev, 0, &cy);
480 bool copy = ((context->get_actions() & (Gdk::ACTION_COPY | Gdk::ACTION_LINK | Gdk::ACTION_MOVE)) == Gdk::ACTION_COPY);
486 Glib::signal_idle().connect (sigc::bind (sigc::mem_fun (*
this, &
Editor::idle_drop_paths), paths, frame, cy, copy));
488 drop_paths_part_two (paths, frame, cy, copy);
492 context->drag_finish (
true,
false, time);
518 ArdourCanvas::Rect scrolling_boundary;
519 Gtk::Allocation alloc;
522 alloc = controls_layout.get_allocation ();
524 alloc = _track_canvas_viewport->get_allocation ();
530 alloc.set_height (alloc.get_height() - hv_scroll_group->position().y);
531 alloc.set_y (alloc.get_y() + hv_scroll_group->position().y);
537 alloc.set_height (alloc.get_height() - 20);
538 alloc.set_y (alloc.get_y() + 10);
548 if (alloc.get_width() > 20) {
549 alloc.set_width (alloc.get_width() - 20);
550 alloc.set_x (alloc.get_x() + 10);
555 scrolling_boundary = ArdourCanvas::Rect (alloc.get_x(), alloc.get_y(), alloc.get_x() + alloc.get_width(), alloc.get_y() + alloc.get_height());
558 Gdk::ModifierType mask;
560 get_window()->get_pointer (x, y, mask);
562 if ((allow_horiz && ((x < scrolling_boundary.x0 && leftmost_frame > 0) || x >= scrolling_boundary.x1)) ||
563 (allow_vert && ((y < scrolling_boundary.y0 && vertical_adjustment.get_value() > 0)|| y >= scrolling_boundary.y1))) {
564 start_canvas_autoscroll (allow_horiz, allow_vert, scrolling_boundary);
571 return autoscroll_connection.connected ();
578 Gdk::ModifierType mask;
580 bool no_stop =
false;
582 get_window()->get_pointer (x, y, mask);
585 bool vertical_motion =
false;
587 if (autoscroll_horizontal_allowed) {
593 if (x > autoscroll_boundary.x1) {
596 dx = x - autoscroll_boundary.x1;
597 dx += 10 + (2 * (autoscroll_cnt/2));
599 dx = pixel_to_sample (dx);
602 new_frame = leftmost_frame + dx;
609 }
else if (x < autoscroll_boundary.x0) {
611 dx = autoscroll_boundary.x0 - x;
612 dx += 10 + (2 * (autoscroll_cnt/2));
614 dx = pixel_to_sample (dx);
616 if (leftmost_frame >= dx) {
617 new_frame = leftmost_frame - dx;
625 if (new_frame != leftmost_frame) {
627 vc.
add (VisualChange::TimeOrigin);
631 if (autoscroll_vertical_allowed) {
634 const int speed_factor = 10;
638 if (y < autoscroll_boundary.y0) {
642 if (autoscroll_cnt && (autoscroll_cnt % speed_factor == 0)) {
643 scroll_up_one_track ();
644 vertical_motion =
true;
647 }
else if (y > autoscroll_boundary.y1) {
649 if (autoscroll_cnt && (autoscroll_cnt % speed_factor == 0)) {
650 scroll_down_one_track ();
651 vertical_motion =
true;
658 if (vc.
pending || vertical_motion) {
672 ev.type = GDK_MOTION_NOTIFY;
673 ev.state = Gdk::BUTTON1_MASK;
685 translate_coordinates (*_track_canvas, x, y, cx, cy);
691 x = min (max ((ArdourCanvas::Coord) cx, autoscroll_boundary.x0), autoscroll_boundary.x1);
692 y = min (max ((ArdourCanvas::Coord) cy, autoscroll_boundary.y0), autoscroll_boundary.y1);
698 ArdourCanvas::Duple d = _track_canvas->window_to_canvas (ArdourCanvas::Duple (cx, cy));
702 motion_handler (0, (GdkEvent*) &ev,
true);
704 }
else if (no_stop) {
712 ev.type = GDK_MOTION_NOTIFY;
713 ev.state = Gdk::BUTTON1_MASK;
729 if (autoscroll_horizontal_allowed) {
730 x = min (max ((ArdourCanvas::Coord) x, 0.0), autoscroll_boundary.x1);
732 x = min (max ((ArdourCanvas::Coord) x, autoscroll_boundary.x0), autoscroll_boundary.x1);
734 y = min (max ((ArdourCanvas::Coord) y, autoscroll_boundary.y0), autoscroll_boundary.y1);
736 translate_coordinates (*_track_canvas_viewport, x, y, cx, cy);
738 ArdourCanvas::Duple d = _track_canvas->window_to_canvas (ArdourCanvas::Duple (cx, cy));
742 motion_handler (0, (GdkEvent*) &ev,
true);
745 stop_canvas_autoscroll ();
761 stop_canvas_autoscroll ();
764 autoscroll_horizontal_allowed = allow_horiz;
765 autoscroll_vertical_allowed = allow_vert;
766 autoscroll_boundary = boundary;
771 autoscroll_canvas ();
781 autoscroll_connection.disconnect ();
787 for (ssize_t i = _enter_stack.size() - 1; i >= 0; --i) {
788 if (_enter_stack[i].item_type == type) {
789 return &_enter_stack[i];
799 within_track_canvas =
false;
800 set_entered_track (0);
801 set_entered_regionview (0);
802 reset_canvas_action_sensitivity (
false);
809 within_track_canvas =
true;
810 reset_canvas_action_sensitivity (
true);
825 double const current_view_min_y = vertical_adjustment.get_value();
826 double const current_view_max_y = current_view_min_y + vertical_adjustment.get_page_size();
828 double const track_min_y = track.
y_position ();
832 (track_min_y >= current_view_min_y &&
833 track_max_y < current_view_max_y)) {
843 new_value = track_min_y;
845 if (track_min_y < current_view_min_y) {
847 new_value = track_min_y;
848 }
else if (track_max_y > current_view_max_y) {
852 new_value = track_min_y;
856 vertical_adjustment.set_value(new_value);
863 if (pending_visual_change.idle_handler_id < 0) {
864 _summary->set_overlays_dirty ();
871 horizontal_adjustment.set_value (p);
873 leftmost_frame = (
framepos_t) floor (p * samples_per_pixel);
875 update_fixed_rulers ();
876 redisplay_tempo (
true);
878 if (pending_visual_change.idle_handler_id < 0) {
879 _summary->set_overlays_dirty ();
882 update_video_timeline();
890 timecode_ruler->set_fill_color (base);
891 timecode_ruler->set_outline_color (text);
892 minsec_ruler->set_fill_color (base);
893 minsec_ruler->set_outline_color (text);
894 samples_ruler->set_fill_color (base);
895 samples_ruler->set_outline_color (text);
896 bbt_ruler->set_fill_color (base);
897 bbt_ruler->set_outline_color (text);
901 meter_bar->set_fill_color (
ARDOUR_UI::config()->color_mod (
"meter bar",
"marker bar"));
904 tempo_bar->set_fill_color (
ARDOUR_UI::config()->color_mod (
"tempo bar",
"marker bar"));
907 marker_bar->set_fill_color (
ARDOUR_UI::config()->color_mod (
"marker bar",
"marker bar"));
910 cd_marker_bar->set_fill_color (
ARDOUR_UI::config()->color_mod (
"cd marker bar",
"marker bar"));
913 range_marker_bar->set_fill_color (
ARDOUR_UI::config()->color_mod (
"range marker bar",
"marker bar"));
916 transport_marker_bar->set_fill_color (
ARDOUR_UI::config()->color_mod (
"transport marker bar",
"marker bar"));
928 transport_loop_range_rect->set_fill_color (
ARDOUR_UI::config()->color_mod (
"transport loop rect",
"loop rectangle"));
938 rubberband_rect->set_fill_color (
ARDOUR_UI::config()->color_mod (
"rubber band rect",
"selection rect"));
946 refresh_location_display ();
950 _track_canvas->queue_draw ();
963 return sample_to_pixel (leftmost_frame);
984 x = min (_visible_canvas_width - 200.0, x);
993 y = min (_visible_canvas_height - 50, y);
997 ArdourCanvas::GtkCanvasViewport*
1000 return _track_canvas_viewport;
1007 return _cursor_stack.back();
1013 Glib::RefPtr<Gdk::Window> win = _track_canvas->get_window();
1015 if (win && !_cursors->is_invalid (cursor)) {
1023 gdk_window_set_cursor (win->gobj(), cursor ? cursor->gobj() : 0);
1030 if (!_cursors->is_invalid (cursor)) {
1031 _cursor_stack.push_back (cursor);
1032 set_canvas_cursor (cursor);
1034 return _cursor_stack.size() - 1;
1041 if (_cursor_stack.size() <= 1) {
1046 _cursor_stack.pop_back();
1047 if (_cursor_stack.back()) {
1051 set_canvas_cursor (_cursor_stack.back());
1060 Gdk::Cursor* c = _cursors->grabber;
1062 switch (_edit_point) {
1064 c = _cursors->grabber_edit_point;
1069 c = _cursors->speaker;
1080 if (!entered_regionview) {
1088 if (ct & Trimmable::FrontTrimEarlier) {
1089 return _cursors->left_side_trim;
1091 return _cursors->left_side_trim_right_only;
1094 if (ct & Trimmable::EndTrimLater) {
1095 return _cursors->right_side_trim;
1097 return _cursors->right_side_trim_left_only;
1107 switch (mouse_mode) {
1109 mode_cursor = _cursors->selector;
1113 mode_cursor = _cursors->scissors;
1122 mode_cursor = _cursors->midi_pencil;
1126 mode_cursor = _cursors->time_fx;
1130 mode_cursor = _cursors->speaker;
1135 if (get_smart_mode()) {
1138 get_pointer_position (x, y);
1140 if (x >= 0 && y >= 0) {
1142 vector<ArdourCanvas::Item const *> items;
1148 hv_scroll_group->add_items_at_point (ArdourCanvas::Duple (x,y), items);
1152 if (!items.empty()) {
1153 const ArdourCanvas::Item* i = items.front();
1155 if (i && i->parent() && i->parent()->get_data (
X_(
"timeselection"))) {
1156 pair<TimeAxisView*, int> tvp = trackview_by_y_position (_last_motion_y);
1157 if (dynamic_cast<AutomationTimeAxisView*> (tvp.first)) {
1158 mode_cursor = _cursors->up_down;
1173 switch (_join_object_range_state) {
1174 case JOIN_OBJECT_RANGE_NONE:
1175 case JOIN_OBJECT_RANGE_OBJECT:
1176 cursor = which_grabber_cursor ();
1178 case JOIN_OBJECT_RANGE_RANGE:
1179 cursor = _cursors->selector;
1189 Gdk::Cursor* cursor = which_mode_cursor ();
1191 if ((mouse_mode == MouseObject || get_smart_mode ()) ||
1192 mouse_mode == MouseContent) {
1207 cursor = which_track_cursor ();
1210 switch (_edit_point) {
1212 cursor = _cursors->grabber_edit_point;
1215 cursor = _cursors->grabber;
1220 cursor = _cursors->selector;
1223 cursor = _cursors->fader;
1226 cursor = which_track_cursor ();
1229 cursor = _cursors->cross_hair;
1232 cursor = _cursors->left_side_trim;
1235 cursor = _cursors->right_side_trim;
1238 cursor = _cursors->fade_in;
1241 cursor = _cursors->fade_in;
1244 cursor = _cursors->fade_in;
1247 cursor = _cursors->fade_out;
1250 cursor = _cursors->fade_out;
1253 cursor = _cursors->fade_out;
1256 cursor = _cursors->cross_hair;
1259 if ( effective_mouse_mode() == MouseObject )
1260 cursor = which_trim_cursor (
true);
1263 if ( effective_mouse_mode() == MouseObject )
1264 cursor = which_trim_cursor (
false);
1267 cursor = _cursors->fade_in;
1270 cursor = _cursors->fade_out;
1273 cursor = _cursors->cross_hair;
1276 cursor = _cursors->grabber_note;
1281 }
else if (mouse_mode == MouseDraw) {
1293 cursor = _cursors->fader;
1296 cursor = _cursors->grabber_note;
1308 cursor = _cursors->timebar;
1323 cursor = which_grabber_cursor();
1336 if (_drags->active()) {
1340 Gdk::Cursor* cursor = which_canvas_cursor(type);
1342 if (!_cursors->is_invalid (cursor)) {
1345 _enter_stack.push_back(ctx);
1352 for (std::vector<EnterContext>::iterator i = _enter_stack.begin(); i != _enter_stack.end(); ++i) {
1353 i->cursor_ctx->change(which_canvas_cursor(i->item_type));
1360 if (!_trackview_group) {
1364 return _visible_canvas_height - _trackview_group->canvas_origin().y;
void track_canvas_drag_data_received(const Glib::RefPtr< Gdk::DragContext > &context, gint x, gint y, const Gtk::SelectionData &data, guint info, guint time)
ArdourCanvas::Color color(const std::string &, bool *failed=0) const
Gdk::Cursor * which_trim_cursor(bool left_side) const
void drop_paths(const Glib::RefPtr< Gdk::DragContext > &context, gint x, gint y, const Gtk::SelectionData &data, guint info, guint time)
ArdourCanvas::GtkCanvasViewport * get_track_canvas() const
static Gdk::Cursor * invalid_cursor()
uint32_t effective_height() const
bool canvas_scroll_event(GdkEventScroll *event, bool from_canvas)
bool track_canvas_motion_notify_event(GdkEventMotion *event)
bool canvas_cd_marker_bar_event(GdkEvent *event, ArdourCanvas::Item *)
static ARDOUR_UI * instance()
double horizontal_position() const
Gdk::Cursor * which_canvas_cursor(ItemType type) const
double clamp_verbose_cursor_y(double)
double clamp_verbose_cursor_x(double)
LIBPBD_API Transmitter error
bool canvas_range_marker_bar_event(GdkEvent *event, ArdourCanvas::Item *)
std::ostream & endmsg(std::ostream &ostr)
void update_all_enter_cursors()
bool canvas_drop_zone_event(GdkEvent *event)
double y_position() const
bool track_canvas_drag_motion(Glib::RefPtr< Gdk::DragContext > const &, int, int, guint)
bool track_canvas_button_release_event(GdkEventButton *event)
bool canvas_meter_bar_event(GdkEvent *event, ArdourCanvas::Item *)
Gdk::Cursor * which_mode_cursor() const
static Handle create(Editor &editor, Gdk::Cursor *cursor)
bool canvas_marker_bar_event(GdkEvent *event, ArdourCanvas::Item *)
bool canvas_videotl_bar_event(GdkEvent *event, ArdourCanvas::Item *)
bool track_canvas_map_handler(GdkEventAny *)
bool entered_track_canvas(GdkEventCrossing *)
Gdk::Cursor * which_grabber_cursor() const
VideoTimeLine * video_timeline
bool track_canvas_button_press_event(GdkEventButton *event)
size_t push_canvas_cursor(Gdk::Cursor *)
bool autoscroll_active() const
boost::shared_ptr< ARDOUR::Track > track() const
bool canvas_tempo_bar_event(GdkEvent *event, ArdourCanvas::Item *)
void stop_canvas_autoscroll()
bool track_canvas_key_press(GdkEventKey *)
void set_canvas_cursor(Gdk::Cursor *)
Gdk::Cursor * which_track_cursor() const
EnterContext * get_enter_context(ItemType type)
void set_horizontal_position(double)
double trackviews_height() const
LIBPBD_API Transmitter info
LIBARDOUR_API RuntimeProfile * Profile
void reset_controls_layout_width()
bool canvas_transport_marker_bar_event(GdkEvent *event, ArdourCanvas::Item *)
void maybe_autoscroll(bool, bool, bool)
bool canvas_playhead_cursor_event(GdkEvent *event, ArdourCanvas::Item *)
void ensure_time_axis_view_is_visible(TimeAxisView const &tav, bool at_top)
void tie_vertical_scrolling()
void drop_paths_part_two(const std::vector< std::string > &paths, framepos_t frame, double ypos, bool copy)
static UIConfiguration * config()
void choose_canvas_cursor_on_entry(ItemType)
sigc::signal< void > ColorsChanged
video-timline controller and display
void start_canvas_autoscroll(bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect &boundary)
void reset_controls_layout_height(int32_t height)
bool left_track_canvas(GdkEventCrossing *)
static const framepos_t max_framepos
void track_canvas_viewport_size_allocated()
bool idle_drop_paths(std::vector< std::string > paths, framepos_t frame, double ypos, bool copy)
Gdk::Cursor * get_canvas_cursor() const
void track_canvas_viewport_allocate(Gtk::Allocation alloc)
Glib::RefPtr< Gdk::Pixbuf > get_icon(const char *cname)
ARDOUR::Session * _session
bool track_canvas_key_release(GdkEventKey *)
LIBARDOUR_API PBD::PropertyDescriptor< bool > color