use new TrackingText for verbose cursor
This commit is contained in:
parent
3accf1d2af
commit
4e689d9496
|
@ -406,58 +406,22 @@ Drag::abort ()
|
|||
void
|
||||
Drag::show_verbose_cursor_time (framepos_t frame)
|
||||
{
|
||||
/* We use DragManager::current_pointer_y() here
|
||||
because we need to position the verbose canvas
|
||||
cursor within the overall canvas, regardless
|
||||
of this particular drag's _trackview_only
|
||||
setting.
|
||||
*/
|
||||
|
||||
_editor->verbose_cursor()->set_time (
|
||||
frame,
|
||||
_drags->current_pointer_x() + 10,
|
||||
_drags->current_pointer_y() + 10
|
||||
);
|
||||
|
||||
_editor->verbose_cursor()->set_time (frame);
|
||||
_editor->verbose_cursor()->show ();
|
||||
}
|
||||
|
||||
void
|
||||
Drag::show_verbose_cursor_duration (framepos_t start, framepos_t end, double xoffset)
|
||||
Drag::show_verbose_cursor_duration (framepos_t start, framepos_t end, double /*xoffset*/)
|
||||
{
|
||||
_editor->verbose_cursor()->show (xoffset);
|
||||
|
||||
/* We use DragManager::current_pointer_y() here
|
||||
because we need to position the verbose canvas
|
||||
cursor within the overall canvas, regardless
|
||||
of this particular drag's _trackview_only
|
||||
setting.
|
||||
*/
|
||||
|
||||
_editor->verbose_cursor()->set_duration (
|
||||
start, end,
|
||||
_drags->current_pointer_x() + 10,
|
||||
_drags->current_pointer_y() + 10
|
||||
);
|
||||
_editor->verbose_cursor()->set_duration (start, end);
|
||||
_editor->verbose_cursor()->show ();
|
||||
}
|
||||
|
||||
void
|
||||
Drag::show_verbose_cursor_text (string const & text)
|
||||
{
|
||||
_editor->verbose_cursor()->set (text);
|
||||
_editor->verbose_cursor()->show ();
|
||||
|
||||
/* We use DragManager::current_pointer_y() here
|
||||
because we need to position the verbose canvas
|
||||
cursor within the overall canvas, regardless
|
||||
of this particular drag's _trackview_only
|
||||
setting.
|
||||
*/
|
||||
|
||||
_editor->verbose_cursor()->set (
|
||||
text,
|
||||
_drags->current_pointer_x() + 10,
|
||||
_drags->current_pointer_y() + 10
|
||||
);
|
||||
}
|
||||
|
||||
boost::shared_ptr<Region>
|
||||
|
@ -1533,6 +1497,8 @@ RegionSpliceDrag::motion (GdkEvent* event, bool)
|
|||
*/
|
||||
_editor->verbose_cursor()->hide ();
|
||||
return;
|
||||
} else {
|
||||
_editor->verbose_cursor()->show ();
|
||||
}
|
||||
|
||||
int dir;
|
||||
|
@ -1798,8 +1764,7 @@ VideoTimeLineDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
|
|||
Timecode::Time timecode;
|
||||
_editor->session()->sample_to_timecode(abs(_startdrag_video_offset), timecode, true /* use_offset */, false /* use_subframes */ );
|
||||
snprintf (buf, sizeof (buf), "Video Start:\n%c%02" PRId32 ":%02" PRId32 ":%02" PRId32 ":%02" PRId32, (_startdrag_video_offset<0?'-':' '), timecode.hours, timecode.minutes, timecode.seconds, timecode.frames);
|
||||
_editor->verbose_cursor()->set(buf, event->button.x + 10, event->button.y + 10);
|
||||
_editor->verbose_cursor()->show ();
|
||||
show_verbose_cursor_text (buf);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1848,8 +1813,7 @@ VideoTimeLineDrag::motion (GdkEvent* event, bool first_move)
|
|||
, _("Diff:"),
|
||||
(dt<0?'-':' '), timediff.hours, timediff.minutes, timediff.seconds, timediff.frames
|
||||
);
|
||||
_editor->verbose_cursor()->set(buf, event->button.x + 10, event->button.y + 10);
|
||||
_editor->verbose_cursor()->show ();
|
||||
show_verbose_cursor_text (buf);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3288,10 +3252,7 @@ ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
|
|||
|
||||
_point->line().start_drag_single (_point, _fixed_grab_x, fraction);
|
||||
|
||||
_editor->verbose_cursor()->set (_point->line().get_verbose_cursor_string (fraction),
|
||||
event->button.x + 10, event->button.y + 10);
|
||||
|
||||
_editor->verbose_cursor()->show ();
|
||||
show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
|
||||
|
||||
_pushing = Keyboard::modifier_state_contains (event->button.state, Keyboard::PrimaryModifier);
|
||||
|
||||
|
@ -3351,7 +3312,7 @@ ControlPointDrag::motion (GdkEvent* event, bool)
|
|||
|
||||
_point->line().drag_motion (_editor->sample_to_pixel_unrounded (cx_frames), fraction, false, _pushing, _final_index);
|
||||
|
||||
_editor->verbose_cursor()->set_text (_point->line().get_verbose_cursor_string (fraction));
|
||||
show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3437,10 +3398,7 @@ LineDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
|
|||
|
||||
_line->start_drag_line (before, after, fraction);
|
||||
|
||||
_editor->verbose_cursor()->set (_line->get_verbose_cursor_string (fraction),
|
||||
event->button.x + 10, event->button.y + 10);
|
||||
|
||||
_editor->verbose_cursor()->show ();
|
||||
show_verbose_cursor_text (_line->get_verbose_cursor_string (fraction));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -3465,7 +3423,7 @@ LineDrag::motion (GdkEvent* event, bool)
|
|||
/* we are ignoring x position for this drag, so we can just pass in anything */
|
||||
_line->drag_motion (0, fraction, true, false, ignored);
|
||||
|
||||
_editor->verbose_cursor()->set_text (_line->get_verbose_cursor_string (fraction));
|
||||
show_verbose_cursor_text (_line->get_verbose_cursor_string (fraction));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1738,16 +1738,9 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
|
||||
cp->show ();
|
||||
|
||||
double at_x, at_y;
|
||||
at_x = cp->get_x();
|
||||
at_y = cp->get_y ();
|
||||
cp->i2w (at_x, at_y);
|
||||
at_x += 10.0;
|
||||
at_y += 10.0;
|
||||
|
||||
fraction = 1.0 - (cp->get_y() / cp->line().height());
|
||||
|
||||
_verbose_cursor->set (cp->line().get_verbose_cursor_string (fraction), at_x, at_y);
|
||||
_verbose_cursor->set (cp->line().get_verbose_cursor_string (fraction));
|
||||
_verbose_cursor->show ();
|
||||
}
|
||||
break;
|
||||
|
@ -1859,7 +1852,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
|
|||
|
||||
switch (item_type) {
|
||||
case ControlPointItem:
|
||||
_verbose_cursor->hide ();
|
||||
_verbose_cursor->hide ();
|
||||
break;
|
||||
|
||||
case GainLineItem:
|
||||
|
@ -2019,25 +2012,19 @@ Editor::motion_handler (ArdourCanvas::Item* /*item*/, GdkEvent* event, bool from
|
|||
current_stepping_trackview = 0;
|
||||
step_timeout.disconnect ();
|
||||
}
|
||||
|
||||
|
||||
if (_session && _session->actively_recording()) {
|
||||
/* Sorry. no dragging stuff around while we record */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
update_join_object_range_location (event->motion.y);
|
||||
|
||||
bool handled = false;
|
||||
|
||||
if (_drags->active ()) {
|
||||
handled = _drags->motion_handler (event, from_autoscroll);
|
||||
return _drags->motion_handler (event, from_autoscroll);
|
||||
}
|
||||
|
||||
if (!handled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
track_canvas_motion (event);
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "evoral/midi_util.h"
|
||||
|
||||
#include "canvas/debug.h"
|
||||
#include "canvas/text.h"
|
||||
|
||||
#include "automation_region_view.h"
|
||||
#include "automation_time_axis.h"
|
||||
|
@ -3809,28 +3810,9 @@ MidiRegionView::show_verbose_cursor (boost::shared_ptr<NoteType> n) const
|
|||
void
|
||||
MidiRegionView::show_verbose_cursor (string const & text, double xoffset, double yoffset) const
|
||||
{
|
||||
double wx, wy;
|
||||
|
||||
trackview.editor().verbose_cursor()->set_text (text);
|
||||
trackview.editor().get_pointer_position (wx, wy);
|
||||
|
||||
wx += xoffset;
|
||||
wy += yoffset;
|
||||
|
||||
/* Flip the cursor above the mouse pointer if it would overlap the bottom of the canvas */
|
||||
|
||||
boost::optional<ArdourCanvas::Rect> bbo = trackview.editor().verbose_cursor()->item().bounding_box();
|
||||
|
||||
assert (bbo);
|
||||
|
||||
ArdourCanvas::Rect bb = bbo.get();
|
||||
|
||||
if ((wy + bb.y1 - bb.y0) > trackview.editor().visible_canvas_height()) {
|
||||
wy -= (bb.y1 - bb.y0) + 2 * yoffset;
|
||||
}
|
||||
|
||||
trackview.editor().verbose_cursor()->set_position (wx, wy);
|
||||
trackview.editor().verbose_cursor()->set (text);
|
||||
trackview.editor().verbose_cursor()->show ();
|
||||
trackview.editor().verbose_cursor()->set_offset (ArdourCanvas::Duple (xoffset, yoffset));
|
||||
}
|
||||
|
||||
/** @param p A session framepos.
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include "canvas/debug.h"
|
||||
#include "canvas/scroll_group.h"
|
||||
#include "canvas/tracking_text.h"
|
||||
|
||||
#include "ardour_ui.h"
|
||||
#include "audio_clock.h"
|
||||
|
@ -39,13 +40,9 @@ using namespace ARDOUR;
|
|||
|
||||
VerboseCursor::VerboseCursor (Editor* editor)
|
||||
: _editor (editor)
|
||||
, _visible (false)
|
||||
, _xoffset (0)
|
||||
, _yoffset (0)
|
||||
{
|
||||
_canvas_item = new ArdourCanvas::Text (_editor->get_noscroll_group());
|
||||
_canvas_item = new ArdourCanvas::TrackingText (_editor->get_noscroll_group());
|
||||
CANVAS_DEBUG_NAME (_canvas_item, "verbose canvas cursor");
|
||||
_canvas_item->set_ignore_events (true);
|
||||
_canvas_item->set_font_description (Pango::FontDescription (ARDOUR_UI::config()->get_canvasvar_LargerBoldFont()));
|
||||
}
|
||||
|
||||
|
@ -55,63 +52,38 @@ VerboseCursor::canvas_item () const
|
|||
return _canvas_item;
|
||||
}
|
||||
|
||||
/** Set the contents and position of the cursor. Coordinates are in window space
|
||||
/** Set the contents of the cursor.
|
||||
*/
|
||||
void
|
||||
VerboseCursor::set (string const & text, double x, double y)
|
||||
{
|
||||
set_text (text);
|
||||
set_position (x, y);
|
||||
}
|
||||
|
||||
void
|
||||
VerboseCursor::set_text (string const & text)
|
||||
VerboseCursor::set (string const & text)
|
||||
{
|
||||
_canvas_item->set (text);
|
||||
}
|
||||
|
||||
/** @param xoffset x offset to be applied on top of any set_position() call
|
||||
* before the next show ().
|
||||
* @param yoffset y offset as above.
|
||||
*/
|
||||
void
|
||||
VerboseCursor::show (double xoffset, double yoffset)
|
||||
VerboseCursor::show ()
|
||||
{
|
||||
_xoffset = xoffset;
|
||||
_yoffset = yoffset;
|
||||
|
||||
if (_visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
_canvas_item->raise_to_top ();
|
||||
_canvas_item->show ();
|
||||
_visible = true;
|
||||
_canvas_item->show_and_track (true, true);
|
||||
_canvas_item->parent()->raise_to_top ();
|
||||
}
|
||||
|
||||
void
|
||||
VerboseCursor::hide ()
|
||||
{
|
||||
_canvas_item->hide ();
|
||||
_visible = false;
|
||||
}
|
||||
|
||||
double
|
||||
VerboseCursor::clamp_x (double x)
|
||||
{
|
||||
_editor->clamp_verbose_cursor_x (x);
|
||||
return x;
|
||||
}
|
||||
|
||||
double
|
||||
VerboseCursor::clamp_y (double y)
|
||||
{
|
||||
_editor->clamp_verbose_cursor_y (y);
|
||||
return y;
|
||||
_canvas_item->parent()->lower_to_bottom ();
|
||||
/* reset back to a sensible default for the next time we display the VC */
|
||||
_canvas_item->set_offset (ArdourCanvas::Duple (10, 10));
|
||||
}
|
||||
|
||||
void
|
||||
VerboseCursor::set_time (framepos_t frame, double x, double y)
|
||||
VerboseCursor::set_offset (ArdourCanvas::Duple const & d)
|
||||
{
|
||||
_canvas_item->set_offset (d);
|
||||
}
|
||||
|
||||
void
|
||||
VerboseCursor::set_time (framepos_t frame)
|
||||
{
|
||||
char buf[128];
|
||||
Timecode::Time timecode;
|
||||
|
@ -159,11 +131,11 @@ VerboseCursor::set_time (framepos_t frame, double x, double y)
|
|||
break;
|
||||
}
|
||||
|
||||
set (buf, x, y);
|
||||
_canvas_item->set (buf);
|
||||
}
|
||||
|
||||
void
|
||||
VerboseCursor::set_duration (framepos_t start, framepos_t end, double x, double y)
|
||||
VerboseCursor::set_duration (framepos_t start, framepos_t end)
|
||||
{
|
||||
char buf[128];
|
||||
Timecode::Time timecode;
|
||||
|
@ -245,7 +217,7 @@ VerboseCursor::set_duration (framepos_t start, framepos_t end, double x, double
|
|||
break;
|
||||
}
|
||||
|
||||
set (buf, x, y);
|
||||
_canvas_item->set (buf);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -254,21 +226,8 @@ VerboseCursor::set_color (uint32_t color)
|
|||
_canvas_item->set_color (color);
|
||||
}
|
||||
|
||||
/** Set the position of the verbose cursor. Any x/y offsets
|
||||
* passed to the last call to show() will be applied to the
|
||||
* coordinates passed in here.
|
||||
*
|
||||
* Coordinates are in window space.
|
||||
*/
|
||||
void
|
||||
VerboseCursor::set_position (double x, double y)
|
||||
{
|
||||
_canvas_item->set_x_position (clamp_x (x + _xoffset));
|
||||
_canvas_item->set_y_position (clamp_y (y + _yoffset));
|
||||
}
|
||||
|
||||
bool
|
||||
VerboseCursor::visible () const
|
||||
{
|
||||
return _visible;
|
||||
return _canvas_item->visible();
|
||||
}
|
||||
|
|
|
@ -18,11 +18,14 @@
|
|||
*/
|
||||
|
||||
#include "ardour/types.h"
|
||||
#include "canvas/text.h"
|
||||
#include "canvas/canvas.h"
|
||||
|
||||
class Editor;
|
||||
|
||||
namespace ArdourCanvas {
|
||||
class TrackingText;
|
||||
}
|
||||
|
||||
class VerboseCursor
|
||||
{
|
||||
public:
|
||||
|
@ -33,24 +36,15 @@ public:
|
|||
|
||||
void set_color (uint32_t);
|
||||
|
||||
void set (std::string const &, double, double);
|
||||
void set_text (std::string const &);
|
||||
void set_position (double, double);
|
||||
void set_time (framepos_t, double, double);
|
||||
void set_duration (framepos_t, framepos_t, double, double);
|
||||
void set (std::string const &);
|
||||
void set_time (framepos_t);
|
||||
void set_duration (framepos_t, framepos_t);
|
||||
void set_offset (ArdourCanvas::Duple const&);
|
||||
|
||||
void show (double xoffset = 0, double yoffset = 0);
|
||||
void show ();
|
||||
void hide ();
|
||||
|
||||
ArdourCanvas::Item& item() { return *_canvas_item; }
|
||||
|
||||
private:
|
||||
double clamp_x (double);
|
||||
double clamp_y (double);
|
||||
|
||||
Editor* _editor;
|
||||
ArdourCanvas::Text* _canvas_item;
|
||||
bool _visible;
|
||||
double _xoffset;
|
||||
double _yoffset;
|
||||
Editor* _editor;
|
||||
ArdourCanvas::TrackingText* _canvas_item;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue