From 295b2da733f3080c2a96219bb169829ef4a2c0ce Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 26 Feb 2008 16:34:45 +0000 Subject: non-AA canvas support (not used by default); new SAE menus; fix locate-play-locate ; add toggle-punch ; use primary clock for verbose cursor mode at all the right times; minimize clock redrawing part one git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3123 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_canvas.cc | 106 +++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 49 deletions(-) (limited to 'gtk2_ardour/editor_canvas.cc') diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 7d9a81afae..2d034f5308 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -87,28 +87,36 @@ static void ardour_canvas_type_init() void Editor::initialize_canvas () { + if (getenv ("ARDOUR_NON_AA_CANVAS")) { + track_canvas = new ArdourCanvas::Canvas (); + time_canvas = new ArdourCanvas::Canvas (); + } else { + track_canvas = new ArdourCanvas::CanvasAA (); + time_canvas = new ArdourCanvas::CanvasAA (); + } + ArdourCanvas::init (); ardour_canvas_type_init (); /* don't try to center the canvas */ - track_canvas.set_center_scroll_region (false); - track_canvas.set_dither (Gdk::RGB_DITHER_NONE); + track_canvas->set_center_scroll_region (false); + track_canvas->set_dither (Gdk::RGB_DITHER_NONE); /* 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->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)); /* just scroll stuff for the timecanvas */ - time_canvas.signal_scroll_event().connect (mem_fun (*this, &Editor::time_canvas_scroll_event)); + time_canvas->signal_scroll_event().connect (mem_fun (*this, &Editor::time_canvas_scroll_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)); - track_canvas.set_flags (CAN_FOCUS); + 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)); + track_canvas->set_flags (CAN_FOCUS); /* set up drag-n-drop */ @@ -121,14 +129,14 @@ Editor::initialize_canvas () target_table.push_back (TargetEntry ("text/uri-list")); target_table.push_back (TargetEntry ("application/x-rootwin-drop")); - track_canvas.drag_dest_set (target_table); - track_canvas.signal_drag_data_received().connect (mem_fun(*this, &Editor::track_canvas_drag_data_received)); + track_canvas->drag_dest_set (target_table); + track_canvas->signal_drag_data_received().connect (mem_fun(*this, &Editor::track_canvas_drag_data_received)); /* stuff for the verbose canvas cursor */ Pango::FontDescription* font = get_font_for_style (N_("VerboseCanvasCursor")); - verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas.root()); + verbose_canvas_cursor = new ArdourCanvas::Text (*track_canvas->root()); verbose_canvas_cursor->property_font_desc() = *font; verbose_canvas_cursor->property_anchor() = ANCHOR_NW; @@ -140,7 +148,7 @@ Editor::initialize_canvas () 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 = 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; @@ -150,42 +158,42 @@ Editor::initialize_canvas () /* a group to hold time (measure) lines */ - time_line_group = new ArdourCanvas::Group (*track_canvas.root(), 0.0, 0.0); - 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); + time_line_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0); + 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); - meter_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, 0.0); - tempo_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height); - 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); - cd_marker_group = new ArdourCanvas::Group (*time_canvas.root(), 0.0, timebar_height * 5.0); + meter_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, 0.0); + tempo_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height); + 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); + cd_marker_group = new ArdourCanvas::Group (*time_canvas->root(), 0.0, timebar_height * 5.0); tempo_bar = new ArdourCanvas::SimpleRect (*tempo_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - tempo_bar->property_outline_pixels() = 0; + // tempo_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_pixels() = 0; + // meter_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_pixels() = 0; + // marker_bar->property_outline_pixels() = 0; cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - cd_marker_bar->property_outline_pixels() = 0; + // cd_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_pixels() = 0; + // range_marker_bar->property_outline_pixels() = 0; 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_pixels() = 0; + // transport_marker_bar->property_outline_pixels() = 0; cd_marker_bar_drag_rect = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); - cd_marker_bar_drag_rect->property_outline_pixels() = 0; + // cd_marker_bar_drag_rect->property_outline_pixels() = 0; cd_marker_bar_drag_rect->hide (); range_bar_drag_rect = new ArdourCanvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0); @@ -199,12 +207,12 @@ Editor::initialize_canvas () marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0)); marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0)); - marker_drag_line = new ArdourCanvas::Line (*track_canvas.root()); + marker_drag_line = new ArdourCanvas::Line (*track_canvas->root()); marker_drag_line->property_width_pixels() = 1; 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 = new ArdourCanvas::SimpleRect (*track_canvas->root(), 0.0, 0.0, 0.0, 0.0); range_marker_drag_rect->hide (); transport_loop_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0); @@ -232,14 +240,14 @@ Editor::initialize_canvas () 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 = new ArdourCanvas::SimpleRect (*track_canvas->root(), 0.0, 0.0, 0.0, 0.0); zoom_rect->property_outline_pixels() = 1; zoom_rect->hide(); zoom_rect->signal_event().connect (bind (mem_fun (*this, &Editor::canvas_zoom_rect_event), (ArdourCanvas::Item*) 0)); // used as rubberband rect - rubberband_rect = new ArdourCanvas::SimpleRect (*track_canvas.root(), 0.0, 0.0, 0.0, 0.0); + rubberband_rect = new ArdourCanvas::SimpleRect (*track_canvas->root(), 0.0, 0.0, 0.0, 0.0); rubberband_rect->property_outline_pixels() = 1; rubberband_rect->hide(); @@ -255,12 +263,12 @@ 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); + time_canvas->set_scroll_region(0.0, 0.0, time_width, time_height); 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)); + track_canvas->signal_size_allocate().connect (mem_fun(*this, &Editor::track_canvas_allocate)); if (logo_item) { logo_item->lower_to_bottom (); @@ -363,10 +371,10 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc) double last_canvas_unit = max ((last_canvas_frame / frames_per_unit), canvas_width); - track_canvas.set_scroll_region (0.0, 0.0, last_canvas_unit, pos); + track_canvas->set_scroll_region (0.0, 0.0, last_canvas_unit, pos); // XXX what is the correct height value for the time canvas ? this overstates it - time_canvas.set_scroll_region ( 0.0, 0.0, last_canvas_unit, canvas_height); + time_canvas->set_scroll_region ( 0.0, 0.0, last_canvas_unit, canvas_height); range_marker_drag_rect->property_y2() = canvas_height; transport_loop_range_rect->property_y2() = canvas_height; @@ -422,14 +430,14 @@ Editor::controls_layout_size_request (Requisition* req) bool Editor::track_canvas_map_handler (GdkEventAny* ev) { - track_canvas.get_window()->set_cursor (*current_canvas_cursor); + track_canvas->get_window()->set_cursor (*current_canvas_cursor); return false; } bool Editor::time_canvas_map_handler (GdkEventAny* ev) { - time_canvas.get_window()->set_cursor (*timebar_cursor); + time_canvas->get_window()->set_cursor (*timebar_cursor); return false; } @@ -472,7 +480,7 @@ Editor::drop_paths (const RefPtr& context, double wx; double wy; - track_canvas.window_to_world (x, y, wx, wy); + track_canvas->window_to_world (x, y, wx, wy); wx += horizontal_adjustment.get_value(); wy += vertical_adjustment.get_value(); @@ -823,8 +831,8 @@ void Editor::flush_canvas () { if (is_mapped()) { - track_canvas.update_now (); - // gdk_window_process_updates (GTK_LAYOUT(track_canvas.gobj())->bin_window, true); + track_canvas->update_now (); + // gdk_window_process_updates (GTK_LAYOUT(track_canvas->gobj())->bin_window, true); } } -- cgit v1.2.3