+void
+Editor::tie_vertical_scrolling ()
+{
+ scroll_canvas_vertically ();
+
+ /* this will do an immediate redraw */
+
+ controls_layout.get_vadjustment()->set_value (vertical_adjustment.get_value());
+}
+
+void
+Editor::scroll_canvas_horizontally ()
+{
+ nframes64_t time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
+
+ if (time_origin != leftmost_frame) {
+ canvas_scroll_to (time_origin);
+ }
+
+ /* horizontal scrolling only */
+ double x1, x2, y1, y2, x_delta;
+
+ _master_group->get_bounds(x1, y1, x2, y2);
+ x_delta = x1 + horizontal_adjustment.get_value();
+
+ _master_group->move (-x_delta, 0);
+ timebar_group->move (-x_delta, 0);
+ time_line_group->move (-x_delta, 0);
+ cursor_group->move (-x_delta, 0);
+
+ update_fixed_rulers ();
+ redisplay_tempo (true);
+
+#ifndef GTKOSX
+ if (!autoscroll_active) {
+ /* force rulers and canvas to move in lock step */
+ while (gtk_events_pending ()) {
+ gtk_main_iteration ();
+ }
+ }
+#endif
+
+}
+
+void
+Editor::scroll_canvas_vertically ()
+{
+ /* vertical scrolling only */
+
+ double y_delta;
+
+ y_delta = last_trackview_group_vertical_offset - get_trackview_group_vertical_offset ();
+ _trackview_group->move (0, y_delta);
+ _background_group->move (0, y_delta);
+
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+ (*i)->clip_to_viewport ();
+ }
+ last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
+ /* required to keep the controls_layout in lock step with the canvas group */
+ track_canvas->update_now ();
+}
+
+void
+Editor::canvas_horizontally_scrolled ()
+{
+ nframes64_t time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
+
+ if (time_origin != leftmost_frame) {
+ canvas_scroll_to (time_origin);
+ }
+ redisplay_tempo (true);
+}
+
+void
+Editor::canvas_scroll_to (nframes64_t time_origin)
+{
+ leftmost_frame = time_origin;
+}
+
+void
+Editor::color_handler()
+{
+ playhead_cursor->canvas_item.property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_PlayHead.get();
+ verbose_canvas_cursor->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VerboseCanvasCursor.get();
+
+ meter_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MeterBar.get();
+ meter_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
+
+ tempo_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TempoBar.get();
+ tempo_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
+
+ marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBar.get();
+ marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
+
+ cd_marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_CDMarkerBar.get();
+ cd_marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
+
+ range_marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeMarkerBar.get();
+ range_marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
+
+ transport_marker_bar->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportMarkerBar.get();
+ transport_marker_bar->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerBarSeparator.get();
+
+ cd_marker_bar_drag_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
+ cd_marker_bar_drag_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
+
+ range_bar_drag_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
+ range_bar_drag_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragBarRect.get();
+
+ transport_bar_drag_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportDragRect.get();
+ transport_bar_drag_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportDragRect.get();
+
+ marker_drag_line->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerDragLine.get();
+
+ range_marker_drag_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragRect.get();
+ range_marker_drag_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RangeDragRect.get();
+
+ transport_loop_range_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportLoopRect.get();
+ transport_loop_range_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportLoopRect.get();
+
+ transport_punch_range_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportPunchRect.get();
+ transport_punch_range_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_TransportPunchRect.get();
+
+ transport_punchin_line->property_color_rgba() = ARDOUR_UI::config()->canvasvar_PunchLine.get();
+ transport_punchout_line->property_color_rgba() = ARDOUR_UI::config()->canvasvar_PunchLine.get();
+
+ zoom_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_ZoomRect.get();
+ zoom_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_ZoomRect.get();
+
+ rubberband_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_RubberBandRect.get();
+ rubberband_rect->property_fill_color_rgba() = (guint32) ARDOUR_UI::config()->canvasvar_RubberBandRect.get();
+
+ location_marker_color = ARDOUR_UI::config()->canvasvar_LocationMarker.get();
+ location_range_color = ARDOUR_UI::config()->canvasvar_LocationRange.get();
+ location_cd_marker_color = ARDOUR_UI::config()->canvasvar_LocationCDMarker.get();
+ location_loop_color = ARDOUR_UI::config()->canvasvar_LocationLoop.get();
+ location_punch_color = ARDOUR_UI::config()->canvasvar_LocationPunch.get();
+
+ refresh_location_display ();
+/*
+ redisplay_tempo (true);
+
+ if (session)
+ session->tempo_map().apply_with_metrics (*this, &Editor::draw_metric_marks); // redraw metric markers
+*/
+}
+
+void
+Editor::flush_canvas ()
+{
+ if (is_mapped()) {
+ track_canvas->update_now ();
+ // gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true);
+ }
+}