X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_canvas.cc;h=40f6b05026822fa92621b6840dd2d941ca3b4111;hb=b01bdb7e70f021da764e81a4b55722e746e4885d;hp=0c11092af66c269c0616a48aa26c5798e4635040;hpb=cd9fdb935f08966cc8c7170a39870e8adcae69d8;p=ardour.git diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 0c11092af6..40f6b05026 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -22,6 +22,7 @@ #include #include +#include #include "ardour_ui.h" #include "editor.h" @@ -133,71 +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); + range_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 2.0); + transport_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 3.0); + 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-1.0); - tempo_bar->property_fill_color_rgba() = color_map[cTempoBar]; tempo_bar->property_outline_what() = (0x1 | 0x8); tempo_bar->property_outline_pixels() = 1; - tempo_bar->property_outline_color_rgba() = color_map[cTempoSeparator]; meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - meter_bar->property_fill_color_rgba() = color_map[cMeterBar]; meter_bar->property_outline_what() = (0x1 | 0x8); meter_bar->property_outline_pixels() = 1; - meter_bar->property_outline_color_rgba() = color_map[cMeterSeparator]; marker_bar = new ArdourCanvas::SimpleRect (*marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - marker_bar->property_fill_color_rgba() = color_map[cMarkerBar]; marker_bar->property_outline_what() = (0x1 | 0x8); marker_bar->property_outline_pixels() = 1; - marker_bar->property_outline_color_rgba() = color_map[cMarkerSeparator]; range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - range_marker_bar->property_fill_color_rgba() = color_map[cRangeMarkerBar]; range_marker_bar->property_outline_what() = (0x1 | 0x8); range_marker_bar->property_outline_pixels() = 1; - range_marker_bar->property_outline_color_rgba() = color_map[cRangeMarkerSeparator]; transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - transport_marker_bar->property_fill_color_rgba() = color_map[cTransportMarkerBar]; transport_marker_bar->property_outline_what() = (0x1 | 0x8); transport_marker_bar->property_outline_pixels() = 1; - transport_marker_bar->property_outline_color_rgba() = color_map[cTransportMarkerSeparator]; 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_fill_color_rgba() = color_map[cRangeDragBarRectFill]; - range_bar_drag_rect->property_outline_color_rgba() = color_map[cRangeDragBarRect]; 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-1.0); - 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->property_outline_pixels() = 0; transport_bar_drag_rect->hide (); @@ -206,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(); @@ -234,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); @@ -242,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(); @@ -256,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(); @@ -273,25 +261,19 @@ Editor::initialize_canvas () 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); - - if (!color_map[cEditCursor]) { - warning << _("edit cursor color not defined, check your ardour.colors file!") << endmsg; - color_map[cEditCursor] = RGBA_TO_UINT (30,30,30,255); - } - - if (!color_map[cPlayHead]) { - warning << _("playhead color not defined, check your ardour.colors file!") << endmsg; - color_map[cPlayHead] = RGBA_TO_UINT (0,0,0,255); - } - edit_cursor = new Cursor (*this, &Editor::canvas_edit_cursor_event); - edit_cursor->canvas_item.property_fill_color_rgba() = color_map[cEditCursor]; playhead_cursor = new Cursor (*this, &Editor::canvas_playhead_cursor_event); - playhead_cursor->canvas_item.property_fill_color_rgba() = color_map[cPlayHead]; 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 @@ -339,19 +321,14 @@ Editor::track_canvas_size_allocated () } 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); reset_hscrollbar_stepping (); reset_scrolling_region (); - if (edit_cursor) edit_cursor->set_length (canvas_height); if (playhead_cursor) playhead_cursor->set_length (canvas_height); - if (marker_drag_line) { - marker_drag_line_points.back().set_y(canvas_height); - marker_drag_line->property_points() = marker_drag_line_points; - } + // EDIT CURSOR XXX set line height for selected markers here if (range_marker_drag_rect) { range_marker_drag_rect->property_y1() = 0.0; @@ -377,9 +354,14 @@ Editor::track_canvas_size_allocated () transport_punchout_line->property_y1() = 0.0; transport_punchout_line->property_y2() = canvas_height; } - + compute_fixed_ruler_scale (); update_fixed_rulers(); redisplay_tempo (true); + + if (logo_item) { + // logo_item->property_height() = canvas_height; + // logo_item->property_width() = canvas_width; + } Resized (); /* EMIT_SIGNAL */ @@ -487,7 +469,7 @@ Editor::drop_paths (const RefPtr& context, 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; @@ -515,15 +497,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) { /* 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().get(), frame, true); + /* select the track, then embed */ + selection->set (tv); + do_embed (paths, Editing::ImportDistinctFiles, ImportToTrack, frame); } } @@ -715,6 +700,8 @@ Editor::left_track_canvas (GdkEventCrossing *ev) void Editor::canvas_horizontally_scrolled () { + cerr << "chs\n"; + /* 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 @@ -729,8 +716,72 @@ Editor::canvas_horizontally_scrolled () 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() +{ + 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 +} +