X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_canvas.cc;h=86beec387e84876139f6b284cb8bb396a1300ac7;hb=f7f9d6fdc40248b190ec9c6e1a886261d55777ae;hp=ed49235a408b2a0e040dcc23b3552328c7842fad;hpb=afa29d319007ce20bd1546c343e9277c58c80c1a;p=ardour.git diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index ed49235a40..86beec387e 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -23,17 +22,16 @@ #include #include +#include #include "ardour_ui.h" #include "editor.h" #include "waveview.h" #include "simplerect.h" #include "simpleline.h" -#include "imageframe.h" #include "waveview_p.h" #include "simplerect_p.h" #include "simpleline_p.h" -#include "imageframe_p.h" #include "canvas_impl.h" #include "editing.h" #include "rgb_macros.h" @@ -41,6 +39,11 @@ #include "time_axis_view.h" #include "audio_time_axis.h" +#ifdef WITH_CMT +#include "imageframe.h" +#include "imageframe_p.h" +#endif + #include "i18n.h" using namespace std; @@ -62,7 +65,10 @@ extern "C" GType gnome_canvas_simpleline_get_type(void); GType gnome_canvas_simplerect_get_type(void); GType gnome_canvas_waveview_get_type(void); + +#ifdef WITH_CMT GType gnome_canvas_imageframe_get_type(void); +#endif } @@ -73,14 +79,20 @@ static void ardour_canvas_type_init() Glib::wrap_register(gnome_canvas_simpleline_get_type(), &Gnome::Canvas::SimpleLine_Class::wrap_new); Glib::wrap_register(gnome_canvas_simplerect_get_type(), &Gnome::Canvas::SimpleRect_Class::wrap_new); Glib::wrap_register(gnome_canvas_waveview_get_type(), &Gnome::Canvas::WaveView_Class::wrap_new); + +#ifdef WITH_CMT Glib::wrap_register(gnome_canvas_imageframe_get_type(), &Gnome::Canvas::ImageFrame_Class::wrap_new); +#endif // Register the gtkmm gtypes: (void) Gnome::Canvas::WaveView::get_type(); (void) Gnome::Canvas::SimpleLine::get_type(); (void) Gnome::Canvas::SimpleRect::get_type(); + +#ifdef WITH_CMT (void) Gnome::Canvas::ImageFrame::get_type(); +#endif } void @@ -94,7 +106,13 @@ Editor::initialize_canvas () track_canvas.set_center_scroll_region (false); track_canvas.set_dither (Gdk::RGB_DITHER_NONE); - track_canvas.signal_event().connect (bind (mem_fun (*this, &Editor::track_canvas_event), (ArdourCanvas::Item*) 0)); + /* need to handle 4 specific types of events as catch-alls */ + + track_canvas.signal_scroll_event().connect (mem_fun (*this, &Editor::track_canvas_scroll_event)); + track_canvas.signal_motion_notify_event().connect (mem_fun (*this, &Editor::track_canvas_motion_notify_event)); + track_canvas.signal_button_press_event().connect (mem_fun (*this, &Editor::track_canvas_button_press_event)); + track_canvas.signal_button_release_event().connect (mem_fun (*this, &Editor::track_canvas_button_release_event)); + track_canvas.set_name ("EditorMainCanvas"); track_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK|Gdk::SCROLL_MASK); track_canvas.signal_leave_notify_event().connect (mem_fun(*this, &Editor::left_track_canvas)); @@ -116,61 +134,71 @@ Editor::initialize_canvas () /* stuff for the verbose canvas cursor */ - Pango::FontDescription font = get_font_for_style (N_("VerboseCanvasCursor")); + Pango::FontDescription* font = get_font_for_style (N_("VerboseCanvasCursor")); verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas.root()); - verbose_canvas_cursor->property_font_desc() = font; + verbose_canvas_cursor->property_font_desc() = *font; verbose_canvas_cursor->property_anchor() = ANCHOR_NW; - verbose_canvas_cursor->property_fill_color_rgba() = color_map[cVerboseCanvasCursor]; + delete font; + verbose_cursor_visible = false; + if (Profile->get_sae()) { + Image img (::get_icon (X_("saelogo"))); + logo_item = new ArdourCanvas::Pixbuf (*track_canvas.root(), 0.0, 0.0, img.get_pixbuf()); + // logo_item->property_height_in_pixels() = true; + // logo_item->property_width_in_pixels() = true; + // logo_item->property_height_set() = true; + // logo_item->property_width_set() = true; + logo_item->show (); + } + /* a group to hold time (measure) lines */ time_line_group = new ArdourCanvas::Group (*track_canvas.root(), 0.0, 0.0); + tempo_lines = new TempoLines(track_canvas, time_line_group); cursor_group = new ArdourCanvas::Group (*track_canvas.root(), 0.0, 0.0); - time_canvas.set_name ("EditorTimeCanvas"); time_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK); time_canvas.set_flags (CAN_FOCUS); time_canvas.set_center_scroll_region (false); time_canvas.set_dither (Gdk::RGB_DITHER_NONE); + marker_time_line_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, 0.0); + marker_tempo_lines = new TempoLines(time_canvas, marker_time_line_group); + meter_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, 0.0); tempo_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height); marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 2.0); range_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 3.0); transport_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 4.0); - tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - tempo_bar->property_fill_color_rgba() = color_map[cTempoBar]; - tempo_bar->property_outline_pixels() = 0; - - meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - meter_bar->property_fill_color_rgba() = color_map[cMeterBar]; - meter_bar->property_outline_pixels() = 0; + tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); + tempo_bar->property_outline_what() = (0x1 | 0x8); + tempo_bar->property_outline_pixels() = 1; - marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - marker_bar->property_fill_color_rgba() = color_map[cMarkerBar]; - marker_bar->property_outline_pixels() = 0; + meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); + meter_bar->property_outline_what() = (0x1 | 0x8); + meter_bar->property_outline_pixels() = 1; - range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - range_marker_bar->property_fill_color_rgba() = color_map[cRangeMarkerBar]; - range_marker_bar->property_outline_pixels() = 0; + marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); + marker_bar->property_outline_what() = (0x1 | 0x8); + marker_bar->property_outline_pixels() = 1; - transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - transport_marker_bar->property_fill_color_rgba() = color_map[cTransportMarkerBar]; - transport_marker_bar->property_outline_pixels() = 0; + range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); + range_marker_bar->property_outline_what() = (0x1 | 0x8); + range_marker_bar->property_outline_pixels() = 1; - range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - range_bar_drag_rect->property_fill_color_rgba() = color_map[cRangeDragBarRectFill]; - range_bar_drag_rect->property_outline_color_rgba() = color_map[cRangeDragBarRect]; + transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); + transport_marker_bar->property_outline_what() = (0x1 | 0x8); + transport_marker_bar->property_outline_pixels() = 1; + + range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); range_bar_drag_rect->property_outline_pixels() = 0; range_bar_drag_rect->hide (); - transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height); - transport_bar_drag_rect ->property_fill_color_rgba() = color_map[cTransportDragRectFill]; - transport_bar_drag_rect->property_outline_color_rgba() = color_map[cTransportDragRect]; + transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); transport_bar_drag_rect->property_outline_pixels() = 0; transport_bar_drag_rect->hide (); @@ -179,24 +207,17 @@ Editor::initialize_canvas () marker_drag_line = new ArdourCanvas::Line (*track_canvas.root()); marker_drag_line->property_width_pixels() = 1; - marker_drag_line->property_fill_color_rgba() = color_map[cMarkerDragLine]; marker_drag_line->property_points() = marker_drag_line_points; marker_drag_line->hide(); range_marker_drag_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0); - range_marker_drag_rect->property_fill_color_rgba() = color_map[cRangeDragRectFill]; - range_marker_drag_rect->property_outline_color_rgba() = color_map[cRangeDragRect]; range_marker_drag_rect->hide (); transport_loop_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0); - transport_loop_range_rect->property_fill_color_rgba() = color_map[cTransportLoopRectFill]; - transport_loop_range_rect->property_outline_color_rgba() = color_map[cTransportLoopRect]; transport_loop_range_rect->property_outline_pixels() = 1; transport_loop_range_rect->hide(); transport_punch_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0); - transport_punch_range_rect->property_fill_color_rgba() = color_map[cTransportPunchRectFill]; - transport_punch_range_rect->property_outline_color_rgba() = color_map[cTransportPunchRect]; transport_punch_range_rect->property_outline_pixels() = 0; transport_punch_range_rect->hide(); @@ -207,7 +228,6 @@ Editor::initialize_canvas () transport_punchin_line->property_y1() = 0.0; transport_punchin_line->property_x2() = 0.0; transport_punchin_line->property_y2() = 0.0; - transport_punchin_line->property_color_rgba() = color_map[cPunchInLine]; transport_punchin_line->hide (); transport_punchout_line = new ArdourCanvas::SimpleLine (*time_line_group); @@ -215,13 +235,10 @@ Editor::initialize_canvas () transport_punchout_line->property_y1() = 0.0; transport_punchout_line->property_x2() = 0.0; transport_punchout_line->property_y2() = 0.0; - transport_punchout_line->property_color_rgba() = color_map[cPunchOutLine]; transport_punchout_line->hide(); // used to show zoom mode active zooming zoom_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0); - zoom_rect->property_fill_color_rgba() = color_map[cZoomRectFill]; - zoom_rect->property_outline_color_rgba() = color_map[cZoomRect]; zoom_rect->property_outline_pixels() = 1; zoom_rect->hide(); @@ -229,8 +246,6 @@ Editor::initialize_canvas () // used as rubberband rect rubberband_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0); - rubberband_rect->property_outline_color_rgba() = color_map[cRubberBandRect]; - rubberband_rect->property_fill_color_rgba() = (guint32) color_map[cRubberBandRectFill]; rubberband_rect->property_outline_pixels() = 1; rubberband_rect->hide(); @@ -240,36 +255,26 @@ Editor::initialize_canvas () range_marker_bar->signal_event().connect (bind (mem_fun (*this, &Editor::canvas_range_marker_bar_event), range_marker_bar)); transport_marker_bar->signal_event().connect (bind (mem_fun (*this, &Editor::canvas_transport_marker_bar_event), transport_marker_bar)); - /* separator lines */ - - tempo_line = new ArdourCanvas::SimpleLine (*tempo_group, 0, timebar_height, max_canvas_coordinate, timebar_height); - tempo_line->property_color_rgba() = RGBA_TO_UINT (0,0,0,255); - - meter_line = new ArdourCanvas::SimpleLine (*meter_group, 0, timebar_height, max_canvas_coordinate, timebar_height); - meter_line->property_color_rgba() = RGBA_TO_UINT (0,0,0,255); - - marker_line = new ArdourCanvas::SimpleLine (*marker_group, 0, timebar_height, max_canvas_coordinate, timebar_height); - marker_line->property_color_rgba() = RGBA_TO_UINT (0,0,0,255); - - range_marker_line = new ArdourCanvas::SimpleLine (*range_marker_group, 0, timebar_height, max_canvas_coordinate, timebar_height); - range_marker_line->property_color_rgba() = RGBA_TO_UINT (0,0,0,255); - - transport_marker_line = new ArdourCanvas::SimpleLine (*transport_marker_group, 0, timebar_height, max_canvas_coordinate, timebar_height); - transport_marker_line->property_color_rgba() = RGBA_TO_UINT (0,0,0,255); - ZoomChanged.connect (bind (mem_fun(*this, &Editor::update_loop_range_view), false)); ZoomChanged.connect (bind (mem_fun(*this, &Editor::update_punch_range_view), false)); double time_height = timebar_height * 5; double time_width = FLT_MAX/frames_per_unit; time_canvas.set_scroll_region(0.0, 0.0, time_width, time_height); - - edit_cursor = new Cursor (*this, "blue", &Editor::canvas_edit_cursor_event); - playhead_cursor = new Cursor (*this, "red", &Editor::canvas_playhead_cursor_event); + + edit_cursor = new Cursor (*this, &Editor::canvas_edit_cursor_event); + playhead_cursor = new Cursor (*this, &Editor::canvas_playhead_cursor_event); initial_ruler_update_required = true; track_canvas.signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate)); + if (logo_item) { + logo_item->lower_to_bottom (); + } + + ColorsChanged.connect (mem_fun (*this, &Editor::color_handler)); + color_handler(); + } void @@ -280,7 +285,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc) if (!initial_ruler_update_required) { if (!canvas_idle_queued) { /* call this first so that we do stuff before any pending redraw */ - Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_idle), false); + Glib::signal_idle().connect (mem_fun (*this, &Editor::track_canvas_size_allocated), false); canvas_idle_queued = true; } return; @@ -288,11 +293,11 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc) initial_ruler_update_required = false; - track_canvas_idle (); + track_canvas_size_allocated (); } bool -Editor::track_canvas_idle () +Editor::track_canvas_size_allocated () { if (canvas_idle_queued) { canvas_idle_queued = false; @@ -310,18 +315,12 @@ Editor::track_canvas_idle () for (i = track_views.begin(); i != track_views.end(); ++i) { if ((*i)->control_parent) { height += (*i)->effective_height; - height += track_spacing; } } - if (height) { - height -= track_spacing; - } - full_canvas_height = height; } - zoom_range_clock.set ((nframes_t) floor ((canvas_width * frames_per_unit))); edit_cursor->set_position (edit_cursor->current_frame); playhead_cursor->set_position (playhead_cursor->current_frame); @@ -333,7 +332,7 @@ Editor::track_canvas_idle () if (playhead_cursor) playhead_cursor->set_length (canvas_height); if (marker_drag_line) { - marker_drag_line_points.back().set_x(canvas_height); + marker_drag_line_points.back().set_y(canvas_height); marker_drag_line->property_points() = marker_drag_line_points; } @@ -363,7 +362,12 @@ Editor::track_canvas_idle () } update_fixed_rulers(); - tempo_map_changed (Change (0)); + redisplay_tempo (true); + + if (logo_item) { + // logo_item->property_height() = canvas_height; + // logo_item->property_width() = canvas_width; + } Resized (); /* EMIT_SIGNAL */ @@ -381,7 +385,6 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc) TimeAxisView *tv = (*i)[route_display_columns.tv]; if (tv != 0 && !tv->hidden()) { pos += tv->effective_height; - pos += track_spacing; } } @@ -406,7 +409,6 @@ Editor::controls_layout_size_request (Requisition* req) TimeAxisView *tv = (*i)[route_display_columns.tv]; if (tv != 0) { pos += tv->effective_height; - pos += track_spacing; } } @@ -468,12 +470,12 @@ Editor::drop_paths (const RefPtr& context, guint info, guint time) { TimeAxisView* tvp; - AudioTimeAxisView* tv; + RouteTimeAxisView* tv; double cy; vector paths; string spath; GdkEvent ev; - nframes_t frame; + nframes64_t frame; if (convert_drop_to_paths (paths, context, x, y, data, info, time)) { goto out; @@ -501,15 +503,18 @@ Editor::drop_paths (const RefPtr& context, /* drop onto canvas background: create new tracks */ - nframes_t pos = 0; - do_embed (paths, false, ImportAsTrack, 0, pos, false); + do_embed (paths, Editing::ImportDistinctFiles, ImportAsTrack, frame); - } else if ((tv = dynamic_cast(tvp)) != 0) { + } else if ((tv = dynamic_cast(tvp)) != 0) { /* check that its an audio track, not a bus */ + /* check that its an audio track, not a bus */ + if (tv->get_diskstream()) { - do_embed (paths, false, ImportToTrack, tv->audio_track(), frame, true); + /* select the track, then embed */ + selection->set (tv); + do_embed (paths, Editing::ImportDistinctFiles, ImportToTrack, frame); } } @@ -529,11 +534,8 @@ Editor::drop_regions (const RefPtr& context, for (uint32_t i = 0; i < sr->cnt; ++i) { boost::shared_ptr r = sr->data[i]; - boost::shared_ptr ar; - - if ((ar = boost::dynamic_pointer_cast(r)) != 0) { - insert_region_list_drag (ar, x, y); - } + + insert_region_list_drag (r, x, y); } context->drag_finish (true, false, time); @@ -638,7 +640,7 @@ Editor::autoscroll_canvas () } if (new_frame != leftmost_frame) { - reposition_x_origin (new_frame); + reset_x_origin (new_frame); } if (autoscroll_cnt == 50) { /* 0.5 seconds */ @@ -701,3 +703,90 @@ Editor::left_track_canvas (GdkEventCrossing *ev) } +void +Editor::canvas_horizontally_scrolled () +{ + /* this is the core function that controls horizontal scrolling of the canvas. it is called + whenever the horizontal_adjustment emits its "value_changed" signal. it typically executes in an + idle handler, which is important because tempo_map_changed() should issue redraws immediately + and not defer them to an idle handler. + */ + + leftmost_frame = (nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit); + nframes_t rightmost_frame = leftmost_frame + current_page_frames (); + + if (rightmost_frame > last_canvas_frame) { + last_canvas_frame = rightmost_frame; + reset_scrolling_region (); + } + + if (logo_item) { + logo_item->property_x() = horizontal_adjustment.get_value (); + } + + update_fixed_rulers (); + + redisplay_tempo (!_dragging_hscrollbar); +} + +void +Editor::color_handler() +{ + edit_cursor->canvas_item.property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_EditCursor.get(); + 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(); + + 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(); + + 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 +} +