X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_canvas.cc;h=d923489d7cb12f7388126174ffc5dec5fa12a14a;hb=5fef65538040fbac1b9edd1847a269aa925a49c9;hp=bf97bb73fc96c485e72e0d6b52b9c7291cabed9a;hpb=885f1c71ec62dbfa2250d8821e698dfe01be93d7;p=ardour.git diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index bf97bb73fc..d923489d7c 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -69,6 +69,8 @@ Editor::initialize_canvas () _track_canvas_viewport = new ArdourCanvas::GtkCanvasViewport (horizontal_adjustment, vertical_adjustment); _track_canvas = _track_canvas_viewport->canvas (); + _track_canvas->set_background_color (ARDOUR_UI::config()->color ("arrange base")); + /* scroll group for items that should not automatically scroll * (e.g verbose cursor). It shares the canvas coordinate space. */ @@ -125,11 +127,6 @@ Editor::initialize_canvas () _trackview_group = new ArdourCanvas::Container (hv_scroll_group); CANVAS_DEBUG_NAME (_trackview_group, "Canvas TrackViews"); - // used to show zoom mode active zooming - zoom_rect = new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, 0.0)); - zoom_rect->hide(); - zoom_rect->Event.connect (sigc::bind (sigc::mem_fun (*this, &Editor::canvas_zoom_rect_event), (ArdourCanvas::Item*) 0)); - // used as rubberband rect rubberband_rect = new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, 0.0)); rubberband_rect->hide(); @@ -325,7 +322,7 @@ Editor::track_canvas_viewport_size_allocated () void Editor::reset_controls_layout_width () { - GtkRequisition req; + GtkRequisition req = { 0, 0 }; gint w; edit_controls_vbox.size_request (req); @@ -874,8 +871,8 @@ Editor::set_horizontal_position (double p) void Editor::color_handler() { - ArdourCanvas::Color base = ARDOUR_UI::config()->get_canvasvar_RulerBase(); - ArdourCanvas::Color text = ARDOUR_UI::config()->get_canvasvar_RulerText(); + ArdourCanvas::Color base = ARDOUR_UI::config()->color ("ruler base"); + ArdourCanvas::Color text = ARDOUR_UI::config()->color ("ruler text"); timecode_ruler->set_fill_color (base); timecode_ruler->set_outline_color (text); minsec_ruler->set_fill_color (base); @@ -885,57 +882,58 @@ Editor::color_handler() bbt_ruler->set_fill_color (base); bbt_ruler->set_outline_color (text); - playhead_cursor->set_color (ARDOUR_UI::config()->get_canvasvar_PlayHead()); + playhead_cursor->set_color (ARDOUR_UI::config()->color ("play head")); - meter_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_MeterBar()); - meter_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator()); + meter_bar->set_fill_color (ARDOUR_UI::config()->color ("meter bar")); + meter_bar->set_outline_color (ARDOUR_UI::config()->color ("marker bar separator")); - tempo_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_TempoBar()); - tempo_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator()); + tempo_bar->set_fill_color (ARDOUR_UI::config()->color ("tempo bar")); + tempo_bar->set_outline_color (ARDOUR_UI::config()->color ("marker bar separator")); - marker_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_MarkerBar()); - marker_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator()); + marker_bar->set_fill_color (ARDOUR_UI::config()->color ("marker bar")); + marker_bar->set_outline_color (ARDOUR_UI::config()->color ("marker bar separator")); - cd_marker_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_CDMarkerBar()); - cd_marker_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator()); + cd_marker_bar->set_fill_color (ARDOUR_UI::config()->color ("cd marker bar")); + cd_marker_bar->set_outline_color (ARDOUR_UI::config()->color ("marker bar separator")); - range_marker_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_RangeMarkerBar()); - range_marker_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator()); + range_marker_bar->set_fill_color (ARDOUR_UI::config()->color ("range marker bar")); + range_marker_bar->set_outline_color (ARDOUR_UI::config()->color ("marker bar separator")); - transport_marker_bar->set_fill_color (ARDOUR_UI::config()->get_canvasvar_TransportMarkerBar()); - transport_marker_bar->set_outline_color (ARDOUR_UI::config()->get_canvasvar_MarkerBarSeparator()); + transport_marker_bar->set_fill_color (ARDOUR_UI::config()->color ("transport marker bar")); + transport_marker_bar->set_outline_color (ARDOUR_UI::config()->color ("marker bar separator")); - cd_marker_bar_drag_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_RangeDragBarRect()); - cd_marker_bar_drag_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_RangeDragBarRect()); + cd_marker_bar_drag_rect->set_fill_color (ARDOUR_UI::config()->color ("range drag bar rect")); + cd_marker_bar_drag_rect->set_outline_color (ARDOUR_UI::config()->color ("range drag bar rect")); - range_bar_drag_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_RangeDragBarRect()); - range_bar_drag_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_RangeDragBarRect()); + range_bar_drag_rect->set_fill_color (ARDOUR_UI::config()->color ("range drag bar rect")); + range_bar_drag_rect->set_outline_color (ARDOUR_UI::config()->color ("range drag bar rect")); - transport_bar_drag_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_TransportDragRect()); - transport_bar_drag_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_TransportDragRect()); + transport_bar_drag_rect->set_fill_color (ARDOUR_UI::config()->color ("transport drag rect")); + transport_bar_drag_rect->set_outline_color (ARDOUR_UI::config()->color ("transport drag rect")); - transport_loop_range_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_TransportLoopRect()); - transport_loop_range_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_TransportLoopRect()); + transport_loop_range_rect->set_fill_color (ARDOUR_UI::config()->color_mod ("transport loop rect", "loop rectangle")); + transport_loop_range_rect->set_outline_color (ARDOUR_UI::config()->color ("transport loop rect")); - transport_punch_range_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_TransportPunchRect()); - transport_punch_range_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_TransportPunchRect()); + transport_punch_range_rect->set_fill_color (ARDOUR_UI::config()->color ("transport punch rect")); + transport_punch_range_rect->set_outline_color (ARDOUR_UI::config()->color ("transport punch rect")); - transport_punchin_line->set_outline_color (ARDOUR_UI::config()->get_canvasvar_PunchLine()); - transport_punchout_line->set_outline_color (ARDOUR_UI::config()->get_canvasvar_PunchLine()); + transport_punchin_line->set_outline_color (ARDOUR_UI::config()->color ("punch line")); + transport_punchout_line->set_outline_color (ARDOUR_UI::config()->color ("punch line")); - zoom_rect->set_fill_color (ARDOUR_UI::config()->get_canvasvar_ZoomRect()); - zoom_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_ZoomRect()); + rubberband_rect->set_outline_color (ARDOUR_UI::config()->color ("rubber band rect")); + rubberband_rect->set_fill_color (ARDOUR_UI::config()->color_mod ("rubber band rect", "selection rect")); - rubberband_rect->set_outline_color (ARDOUR_UI::config()->get_canvasvar_RubberBandRect()); - rubberband_rect->set_fill_color ((guint32) ARDOUR_UI::config()->get_canvasvar_RubberBandRect()); - - location_marker_color = ARDOUR_UI::config()->get_canvasvar_LocationMarker(); - location_range_color = ARDOUR_UI::config()->get_canvasvar_LocationRange(); - location_cd_marker_color = ARDOUR_UI::config()->get_canvasvar_LocationCDMarker(); - location_loop_color = ARDOUR_UI::config()->get_canvasvar_LocationLoop(); - location_punch_color = ARDOUR_UI::config()->get_canvasvar_LocationPunch(); + location_marker_color = ARDOUR_UI::config()->color ("location marker"); + location_range_color = ARDOUR_UI::config()->color ("location range"); + location_cd_marker_color = ARDOUR_UI::config()->color ("location cd marker"); + location_loop_color = ARDOUR_UI::config()->color ("location loop"); + location_punch_color = ARDOUR_UI::config()->color ("location punch"); refresh_location_display (); + + /* redraw the whole thing */ + _track_canvas->queue_draw (); + /* redisplay_tempo (true); @@ -953,21 +951,12 @@ Editor::horizontal_position () const bool Editor::track_canvas_key_press (GdkEventKey*) { - /* XXX: event does not report the modifier key pressed down, AFAICS, so use the Keyboard object instead */ - if (mouse_mode == Editing::MouseZoom && Keyboard::the_keyboard().key_is_down (GDK_Control_L)) { - set_canvas_cursor (_cursors->zoom_out, true); - } - return false; } bool Editor::track_canvas_key_release (GdkEventKey*) { - if (mouse_mode == Editing::MouseZoom && !Keyboard::the_keyboard().key_is_down (GDK_Control_L)) { - set_canvas_cursor (_cursors->zoom_in, true); - } - return false; } @@ -1034,41 +1023,16 @@ Editor::which_grabber_cursor () const { Gdk::Cursor* c = _cursors->grabber; - if (_internal_editing) { - switch (mouse_mode) { - case MouseDraw: - c = _cursors->midi_pencil; - break; - - case MouseObject: - c = _cursors->grabber_note; - break; - - case MouseTimeFX: - c = _cursors->midi_resize; - break; - - case MouseRange: - c = _cursors->grabber_note; - break; - - default: - break; - } - - } else { - - switch (_edit_point) { - case EditAtMouse: - c = _cursors->grabber_edit_point; - break; - default: - boost::shared_ptr m = _movable.lock(); - if (m && m->locked()) { - c = _cursors->speaker; - } - break; + switch (_edit_point) { + case EditAtMouse: + c = _cursors->grabber_edit_point; + break; + default: + boost::shared_ptr m = _movable.lock(); + if (m && m->locked()) { + c = _cursors->speaker; } + break; } return c; @@ -1107,9 +1071,6 @@ Editor::which_mode_cursor () const switch (mouse_mode) { case MouseRange: mode_cursor = _cursors->selector; - if (_internal_editing) { - mode_cursor = which_grabber_cursor(); - } break; case MouseCut: @@ -1117,6 +1078,7 @@ Editor::which_mode_cursor () const break; case MouseObject: + case MouseContent: /* don't use mode cursor, pick a grabber cursor based on the item */ break; @@ -1124,18 +1086,6 @@ Editor::which_mode_cursor () const mode_cursor = _cursors->midi_pencil; break; - case MouseGain: - mode_cursor = _cursors->cross_hair; - break; - - case MouseZoom: - if (Keyboard::the_keyboard().key_is_down (GDK_Control_L)) { - mode_cursor = _cursors->zoom_out; - } else { - mode_cursor = _cursors->zoom_in; - } - break; - case MouseTimeFX: mode_cursor = _cursors->time_fx; // just use playhead break; @@ -1146,7 +1096,7 @@ Editor::which_mode_cursor () const } /* up-down cursor as a cue that automation can be dragged up and down when in join object/range mode */ - if (!_internal_editing && get_smart_mode() ) { + if (get_smart_mode()) { double x, y; get_pointer_position (x, y); @@ -1184,18 +1134,14 @@ Editor::which_track_cursor () const { Gdk::Cursor* cursor = 0; - assert (mouse_mode == MouseObject || get_smart_mode()); - - if (!_internal_editing) { - switch (_join_object_range_state) { - case JOIN_OBJECT_RANGE_NONE: - case JOIN_OBJECT_RANGE_OBJECT: - cursor = which_grabber_cursor (); - break; - case JOIN_OBJECT_RANGE_RANGE: - cursor = _cursors->selector; - break; - } + switch (_join_object_range_state) { + case JOIN_OBJECT_RANGE_NONE: + case JOIN_OBJECT_RANGE_OBJECT: + cursor = which_grabber_cursor (); + break; + case JOIN_OBJECT_RANGE_RANGE: + cursor = _cursors->selector; + break; } return cursor; @@ -1210,6 +1156,10 @@ Editor::reset_canvas_cursor () Gdk::Cursor* cursor = which_mode_cursor (); + if (!cursor) { + cursor = which_grabber_cursor (); + } + if (cursor) { set_canvas_cursor (cursor); return true; @@ -1259,7 +1209,7 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ cursor = _cursors->fader; break; case GainLineItem: - cursor = _cursors->fader; + cursor = which_track_cursor (); break; case AutomationLineItem: cursor = _cursors->cross_hair; @@ -1314,6 +1264,24 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ default: break; } + + } else if (mouse_mode == MouseDraw) { + + /* ControlPointItem is not really specific to region gain mode + but it is the same cursor so don't worry about this for now. + The result is that we'll see the fader cursor if we enter + non-region-gain-line control points while in MouseDraw + mode, even though we can't edit them in this mode. + */ + + switch (type) { + case GainLineItem: + case ControlPointItem: + cursor = _cursors->fader; + break; + default: + break; + } } switch (type) { @@ -1345,7 +1313,7 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ } if (cursor) { - set_canvas_cursor (cursor, false); + set_canvas_cursor (cursor, true); } }