#include "canvas/canvas.h"
#include "canvas/debug.h"
+#include "canvas/scroll_group.h"
-#include "utils.h"
#include "editor_cursors.h"
#include "editor.h"
EditorCursor::EditorCursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanvas::Item*))
: _editor (ed)
- , _time_bars_canvas_item (new ArdourCanvas::Arrow (_editor._time_bars_canvas->root ()))
- , _track_canvas_item (new ArdourCanvas::Line (_editor._track_canvas->root ()))
- , _length (1.0)
+ , _track_canvas_item (new ArdourCanvas::Arrow (_editor.get_cursor_scroll_group()))
{
- 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_data ("cursor", this);
+ _track_canvas_item->set_show_head (0, true);
+ _track_canvas_item->set_head_height (0, 9);
+ _track_canvas_item->set_head_width (0, 16);
+ _track_canvas_item->set_head_outward (0, false);
+ _track_canvas_item->set_show_head (1, false); // head only
_track_canvas_item->set_data ("cursor", this);
- _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));
- _time_bars_canvas_item->set_y1 (ArdourCanvas::COORD_MAX);
_track_canvas_item->set_y1 (ArdourCanvas::COORD_MAX);
-
- _current_frame = 1; /* force redraw at 0 */
+
+ _track_canvas_item->set_x (0);
+
+ _current_sample = 1; /* force redraw at 0 */
+}
+
+EditorCursor::EditorCursor (Editor& ed)
+ : _editor (ed)
+ , _track_canvas_item (new ArdourCanvas::Arrow (_editor.get_hscroll_group()))
+{
+ CANVAS_DEBUG_NAME (_track_canvas_item, "track canvas cursor");
+
+ _track_canvas_item->set_show_head (0, false);
+ _track_canvas_item->set_show_head (1, false);
+ _track_canvas_item->set_y1 (ArdourCanvas::COORD_MAX);
+ _track_canvas_item->set_ignore_events (true);
+
+ _track_canvas_item->set_x (0);
+
+ _current_sample = 1; /* force redraw at 0 */
}
EditorCursor::~EditorCursor ()
{
-
+ delete _track_canvas_item;
}
void
-EditorCursor::set_position (framepos_t frame)
+EditorCursor::set_position (samplepos_t sample)
{
- PositionChanged (frame);
+ if (_current_sample != sample) { PositionChanged (sample); }
- double const new_pos = _editor.sample_to_pixel_unrounded (frame);
-
- if (new_pos != _time_bars_canvas_item->x ()) {
- _time_bars_canvas_item->set_x (new_pos);
- }
+ double const new_pos = _editor.sample_to_pixel_unrounded (sample);
- if (new_pos != _track_canvas_item->x0 ()) {
- _track_canvas_item->set_x (new_pos, new_pos);
+ if (rint(new_pos) != rint(_track_canvas_item->x ())) {
+ _track_canvas_item->set_x (new_pos-0.5); //accommodate the 1/2 pixel "line" offset in cairo
}
- _current_frame = frame;
+ _current_sample = sample;
}
void
EditorCursor::show ()
{
- _time_bars_canvas_item->show ();
_track_canvas_item->show ();
}
void
EditorCursor::hide ()
{
- _time_bars_canvas_item->hide ();
_track_canvas_item->hide ();
}
void
-EditorCursor::set_color (ArdourCanvas::Color color)
+EditorCursor::set_color (Gtkmm2ext::Color color)
+{
+ _track_canvas_item->set_color (color);
+}
+
+void
+EditorCursor::set_sensitive (bool yn)
{
- _time_bars_canvas_item->set_color (color);
- _track_canvas_item->set_outline_color (color);
+ _track_canvas_item->set_ignore_events (!yn);
}