fix merge conflicts from master
[ardour.git] / gtk2_ardour / editor_cursors.cc
index 4a123f1e7951a43f0e8d825cfe3670b7e6664dec..557120c1db783b54fcd799816ab6d2fe8549c56b 100644 (file)
@@ -21,6 +21,7 @@
 #include <cmath>
 
 #include "canvas/canvas.h"
+#include "canvas/debug.h"
 
 #include "utils.h"
 #include "editor_cursors.h"
@@ -36,18 +37,19 @@ EditorCursor::EditorCursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,Ardour
        , _track_canvas_item (_editor._track_canvas->root ())
        , _length (1.0)
 {
-       _time_bars_canvas_item.set_outline_width (1);
-       _track_canvas_item.set_outline_width (1);
-
-       for (int i = 0; i < 2; ++i) {
-               _time_bars_canvas_item.set_show_head (i, true);
-               _time_bars_canvas_item.set_head_height (i, 18);
-               _time_bars_canvas_item.set_head_width (i, 15);
-               _time_bars_canvas_item.set_head_outward (i, false);
-       }
+       CANVAS_DEBUG_NAME ((&_time_bars_canvas_item), "timebars editor cursor");
+       CANVAS_DEBUG_NAME ((&_track_canvas_item), "track canvas editor cursor");
+
+       _time_bars_canvas_item.set_show_head (0, true);
+       _time_bars_canvas_item.set_head_height (0, 9);
+       _time_bars_canvas_item.set_head_width (0, 16);
+       _time_bars_canvas_item.set_head_outward (0, false);
+       _time_bars_canvas_item.set_show_head (1, false); // head only
+       _time_bars_canvas_item.set_outline_width (0.5);
 
        _time_bars_canvas_item.set_data ("cursor", this);
        _track_canvas_item.set_data ("cursor", this);
+       _track_canvas_item.set_outline_width (0.5);
 
        _time_bars_canvas_item.Event.connect (sigc::bind (sigc::mem_fun (ed, callbck), &_time_bars_canvas_item));
        _track_canvas_item.Event.connect (sigc::bind (sigc::mem_fun (ed, callbck), &_track_canvas_item));
@@ -68,15 +70,18 @@ EditorCursor::set_position (framepos_t frame)
 {
        PositionChanged (frame);
 
-       double const new_pos = _editor.frame_to_unit (frame);
+       /* See Cairo FAQ question on single pixel lines to understand
+          why we add 0.5
+       */
+
+       double const new_pos = _editor.sample_to_pixel (frame) + 0.5;
 
        if (new_pos != _time_bars_canvas_item.x ()) {
                _time_bars_canvas_item.set_x (new_pos);
        }
 
        if (new_pos != _track_canvas_item.x0 ()) {
-               _track_canvas_item.set_x0 (new_pos);
-               _track_canvas_item.set_x1 (new_pos);
+               _track_canvas_item.set_x (new_pos, new_pos);
        }
        
        _current_frame = frame;