MIDI metering.
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 8324e044b345e3c17e0fd2e5c58d004acaea78a3..c3a5cb6e9b0a1d773159b390f0bdbc21b2eb3fe7 100644 (file)
 #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"
 #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;
@@ -61,7 +64,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
 
 }
 
@@ -72,14 +78,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
@@ -93,7 +105,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));
@@ -143,24 +161,34 @@ Editor::initialize_canvas ()
        
        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_pixels() = 0;
+       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_pixels() = 0;
+       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_pixels() = 0;
+       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_pixels() = 0;
+       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_pixels() = 0;
-       
+       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];
@@ -239,23 +267,6 @@ 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));
        
@@ -368,7 +379,7 @@ Editor::track_canvas_size_allocated ()
        }
                
        update_fixed_rulers();
-       tempo_map_changed (Change (0), true);
+       redisplay_tempo (true);
        
        Resized (); /* EMIT_SIGNAL */
 
@@ -720,6 +731,6 @@ Editor::canvas_horizontally_scrolled ()
        
        update_fixed_rulers ();
 
-       tempo_map_changed (Change (0), !_dragging_hscrollbar);
+       redisplay_tempo (!_dragging_hscrollbar);
 }