mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-25 07:57:43 +01:00
Unify the canvases by moving groups around rather than using set_scrolling_region () (eliminates the double-draw during zoom on linux), fix verbose_time_cursor clamping, make fonts smaller on location dialog buttons, hopefully improve performance when dragging multiple regions on the same track, reduce some redrawing of clocks (still not done for samples clock), allow NLS=1 on OSX, other canvas performance improvements on OSX, build SAE-us.bindings (even though they are incomplete for now).
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3707 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
860125cb53
commit
e11544b59a
25 changed files with 717 additions and 589 deletions
11
SConstruct
11
SConstruct
|
|
@ -838,12 +838,13 @@ def prep_libcheck(topenv, libinfo):
|
|||
#
|
||||
# rationale: GTK-Quartz uses jhbuild and installs to /opt/gtk by default.
|
||||
# All libraries needed should be built against this location
|
||||
# However.. now jhbuild installs to ~/gtk/inst by default.. changed to accomodate this
|
||||
if topenv['GTKOSX']:
|
||||
gtkroot = os.path.expanduser ("~");
|
||||
libinfo.Append(CPPPATH="$GTKROOT/include", LIBPATH="$GTKROOT/lib")
|
||||
libinfo.Append(CXXFLAGS="-I$GTKROOT/include", LINKFLAGS="-L$GTKROOT/lib")
|
||||
libinfo.Append(CPPPATH="/opt/local/include", LIBPATH="/opt/local/lib")
|
||||
libinfo.Append(CXXFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
|
||||
GTKROOT = os.path.expanduser ('~/gtk/inst')
|
||||
libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
|
||||
libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
|
||||
#libinfo.Append(CPPPATH="/opt/local/include", LIBPATH="/opt/local/lib")
|
||||
#libinfo.Append(CXXFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
|
||||
|
||||
prep_libcheck(env, env)
|
||||
|
||||
|
|
|
|||
|
|
@ -432,7 +432,7 @@ else:
|
|||
keybindings_dict['%LEVEL4%'] = env['WINDOWS_KEY']
|
||||
keybindings_dict['%WINDOW%'] = 'Alt'
|
||||
|
||||
for b in [ 'SAE-de', 'mnemonic-us', 'ergonomic-us' ]:
|
||||
for b in [ 'SAE-de', 'SAE-us', 'mnemonic-us', 'ergonomic-us' ]:
|
||||
target_file = b + '.bindings'
|
||||
src_file = target_file + '.in'
|
||||
Default (env.SubstInFile (target_file, src_file, SUBST_DICT = keybindings_dict))
|
||||
|
|
|
|||
|
|
@ -1156,7 +1156,7 @@ style "tearoff_arrow" = "medium_bold_entry"
|
|||
|
||||
style "location_row_button" = "default_button"
|
||||
{
|
||||
font_name = "%FONT_BIG%"
|
||||
font_name = "%FONT_NORMAL%"
|
||||
}
|
||||
|
||||
style "location_rows_clock" = "default_clock_display"
|
||||
|
|
|
|||
|
|
@ -1159,7 +1159,7 @@ style "tearoff_arrow" = "medium_bold_entry"
|
|||
|
||||
style "location_row_button" = "default_button"
|
||||
{
|
||||
font_name = "%FONT_SMALL%"
|
||||
font_name = "%FONT_NORMAL%"
|
||||
}
|
||||
|
||||
style "location_rows_clock" = "default_clock_display"
|
||||
|
|
|
|||
|
|
@ -1285,7 +1285,7 @@ ARDOUR_UI::do_transport_locate (nframes_t new_position)
|
|||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::transport_goto_start ()
|
||||
ARDOUR_UI::transport_goto_start ()
|
||||
{
|
||||
if (session) {
|
||||
session->goto_start();
|
||||
|
|
|
|||
|
|
@ -103,6 +103,9 @@ AudioClock::AudioClock (std::string clock_name, bool transient, std::string widg
|
|||
Gtkmm2ext::set_size_request_to_display_given_text(*smpte_upper_info_label, "23.98",0,0);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text(*smpte_lower_info_label, "NDF",0,0);
|
||||
|
||||
Gtkmm2ext::set_size_request_to_display_given_text(*bbt_upper_info_label, "88|88",0,0);
|
||||
Gtkmm2ext::set_size_request_to_display_given_text(*bbt_lower_info_label, "888.88",0,0);
|
||||
|
||||
frames_info_box.pack_start (*frames_upper_info_label, true, true);
|
||||
frames_info_box.pack_start (*frames_lower_info_label, true, true);
|
||||
smpte_info_box.pack_start (*smpte_upper_info_label, true, true);
|
||||
|
|
@ -429,7 +432,6 @@ AudioClock::set (nframes_t when, bool force, nframes_t offset, int which)
|
|||
}
|
||||
|
||||
if (which == 1 && pdelta && !last_pdelta) {
|
||||
cout << "set_widget_name() called" << endl;
|
||||
set_widget_name("TransportClockDisplayDelta");
|
||||
last_pdelta = true;
|
||||
} else if (which == 1 && !pdelta && last_pdelta) {
|
||||
|
|
@ -644,11 +646,17 @@ AudioClock::set_bbt (nframes_t when, bool force)
|
|||
}
|
||||
|
||||
sprintf (buf, "%03" PRIu32, bbt.bars);
|
||||
bars_label.set_text (buf);
|
||||
if (force || bars_label.get_text () != buf) {
|
||||
bars_label.set_text (buf);
|
||||
}
|
||||
sprintf (buf, "%02" PRIu32, bbt.beats);
|
||||
beats_label.set_text (buf);
|
||||
if (force || beats_label.get_text () != buf) {
|
||||
beats_label.set_text (buf);
|
||||
}
|
||||
sprintf (buf, "%04" PRIu32, bbt.ticks);
|
||||
ticks_label.set_text (buf);
|
||||
if (force || ticks_label.get_text () != buf) {
|
||||
ticks_label.set_text (buf);
|
||||
}
|
||||
|
||||
if (bbt_upper_info_label) {
|
||||
nframes64_t pos;
|
||||
|
|
|
|||
|
|
@ -199,8 +199,7 @@ Editor::Editor ()
|
|||
range_mark_label (_("Range Markers")),
|
||||
transport_mark_label (_("Loop/Punch Ranges")),
|
||||
cd_mark_label (_("CD Markers")),
|
||||
|
||||
edit_packer (3, 3, true),
|
||||
edit_packer (3, 4, true),
|
||||
|
||||
/* the values here don't matter: layout widgets
|
||||
reset them as needed.
|
||||
|
|
@ -374,16 +373,10 @@ Editor::Editor ()
|
|||
initialize_canvas ();
|
||||
|
||||
edit_controls_vbox.set_spacing (0);
|
||||
horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled), false);
|
||||
horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::scroll_canvas_horizontally), false);
|
||||
vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling), true);
|
||||
|
||||
track_canvas->set_hadjustment (horizontal_adjustment);
|
||||
track_canvas->set_vadjustment (vertical_adjustment);
|
||||
time_canvas->set_hadjustment (horizontal_adjustment);
|
||||
|
||||
track_canvas->signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler));
|
||||
time_canvas->signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler));
|
||||
|
||||
|
||||
controls_layout.add (edit_controls_vbox);
|
||||
controls_layout.set_name ("EditControlsBase");
|
||||
controls_layout.add_events (Gdk::SCROLL_MASK);
|
||||
|
|
@ -412,9 +405,8 @@ Editor::Editor ()
|
|||
time_canvas_vbox.pack_start (*smpte_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*frames_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*bbt_ruler, false, false);
|
||||
time_canvas_vbox.pack_start (*time_canvas, true, true);
|
||||
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
|
||||
|
||||
//time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars) + 2);
|
||||
time_canvas_vbox.set_size_request (-1, -1);
|
||||
bbt_label.set_name ("EditorTimeButton");
|
||||
bbt_label.set_size_request (-1, (int)timebar_height);
|
||||
bbt_label.set_alignment (1.0, 0.5);
|
||||
|
|
@ -431,6 +423,7 @@ Editor::Editor ()
|
|||
frame_label.set_size_request (-1, (int)timebar_height);
|
||||
frame_label.set_alignment (1.0, 0.5);
|
||||
frame_label.set_padding (5,0);
|
||||
|
||||
tempo_label.set_name ("EditorTimeButton");
|
||||
tempo_label.set_size_request (-1, (int)timebar_height);
|
||||
tempo_label.set_alignment (1.0, 0.5);
|
||||
|
|
@ -455,11 +448,19 @@ Editor::Editor ()
|
|||
transport_mark_label.set_size_request (-1, (int)timebar_height);
|
||||
transport_mark_label.set_alignment (1.0, 0.5);
|
||||
transport_mark_label.set_padding (5,0);
|
||||
|
||||
ruler_label_vbox.pack_start (minsec_label, false, false);
|
||||
ruler_label_vbox.pack_start (smpte_label, false, false);
|
||||
ruler_label_vbox.pack_start (frame_label, false, false);
|
||||
ruler_label_vbox.pack_start (bbt_label, false, false);
|
||||
|
||||
ruler_label_event_box.add (ruler_label_vbox);
|
||||
ruler_label_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
|
||||
ruler_label_event_box.set_name ("TimebarLabelBase");
|
||||
ruler_label_event_box.signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_label_button_release));
|
||||
ruler_label_frame.add(ruler_label_event_box);
|
||||
ruler_label_frame.property_shadow_type() = Gtk::SHADOW_OUT;
|
||||
|
||||
time_button_vbox.pack_start (minsec_label, false, false);
|
||||
time_button_vbox.pack_start (smpte_label, false, false);
|
||||
time_button_vbox.pack_start (frame_label, false, false);
|
||||
time_button_vbox.pack_start (bbt_label, false, false);
|
||||
time_button_vbox.pack_start (meter_label, false, false);
|
||||
time_button_vbox.pack_start (tempo_label, false, false);
|
||||
time_button_vbox.pack_start (mark_label, false, false);
|
||||
|
|
@ -488,16 +489,17 @@ Editor::Editor ()
|
|||
edit_packer.set_border_width (0);
|
||||
edit_packer.set_name ("EditorWindow");
|
||||
|
||||
edit_packer.attach (edit_vscrollbar, 0, 1, 1, 3, FILL, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (edit_vscrollbar, 0, 1, 0, 4, FILL, FILL|EXPAND, 0, 0);
|
||||
|
||||
edit_packer.attach (time_button_frame, 0, 2, 0, 1, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (ruler_label_frame, 1, 2, 0, 1, FILL, SHRINK, 0, 0);
|
||||
edit_packer.attach (time_button_frame, 1, 2, 1, 2, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (time_canvas_event_box, 2, 3, 0, 1, FILL|EXPAND, FILL, 0, 0);
|
||||
|
||||
edit_packer.attach (controls_layout, 1, 2, 1, 2, FILL, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (track_canvas_event_box, 2, 3, 1, 2, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (controls_layout, 1, 2, 2, 3, FILL, FILL|EXPAND, 0, 0);
|
||||
edit_packer.attach (track_canvas_event_box, 2, 3, 1, 3, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
||||
|
||||
edit_packer.attach (zoom_box, 1, 2, 2, 3, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (edit_hscrollbar, 2, 3, 2, 3, FILL|EXPAND, FILL, 0, 0);
|
||||
edit_packer.attach (zoom_box, 1, 2, 3, 4, FILL, FILL, 0, 0);
|
||||
edit_packer.attach (edit_hscrollbar, 2, 3, 3, 4, FILL|EXPAND, FILL, 0, 0);
|
||||
|
||||
bottom_hbox.set_border_width (2);
|
||||
bottom_hbox.set_spacing (3);
|
||||
|
|
@ -826,11 +828,6 @@ Editor::~Editor()
|
|||
delete track_canvas;
|
||||
track_canvas = 0;
|
||||
}
|
||||
|
||||
if (time_canvas) {
|
||||
delete time_canvas;
|
||||
time_canvas = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1062,6 +1059,7 @@ Editor::start_scrolling ()
|
|||
{
|
||||
scroll_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect
|
||||
(mem_fun(*this, &Editor::update_current_screen));
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1120,7 +1118,7 @@ Editor::handle_new_duration ()
|
|||
if (new_end > last_canvas_frame) {
|
||||
last_canvas_frame = new_end;
|
||||
horizontal_adjustment.set_upper (last_canvas_frame / frames_per_unit);
|
||||
reset_scrolling_region ();
|
||||
//reset_scrolling_region ();
|
||||
}
|
||||
|
||||
horizontal_adjustment.set_value (leftmost_frame/frames_per_unit);
|
||||
|
|
@ -3316,13 +3314,23 @@ Editor::hide_verbose_canvas_cursor ()
|
|||
double
|
||||
Editor::clamp_verbose_cursor_x (double x)
|
||||
{
|
||||
return min (horizontal_adjustment.get_value() + canvas_width - 75.0, x);
|
||||
if (x < 0) {
|
||||
x = 0;
|
||||
} else {
|
||||
x = min (canvas_width - 200.0, x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
double
|
||||
Editor::clamp_verbose_cursor_y (double y)
|
||||
{
|
||||
return min (vertical_adjustment.get_value() + canvas_height - 50.0, y);
|
||||
if (y < canvas_timebars_vsize) {
|
||||
y = canvas_timebars_vsize;
|
||||
} else {
|
||||
y = min (canvas_height - 50, y);
|
||||
}
|
||||
return y;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3331,7 +3339,7 @@ Editor::set_verbose_canvas_cursor (const string & txt, double x, double y)
|
|||
verbose_canvas_cursor->property_text() = txt.c_str();
|
||||
/* don't get too close to the edge */
|
||||
verbose_canvas_cursor->property_x() = clamp_verbose_cursor_x (x);
|
||||
verbose_canvas_cursor->property_y() = clamp_verbose_cursor_x (y);
|
||||
verbose_canvas_cursor->property_y() = clamp_verbose_cursor_y (y);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3764,7 +3772,8 @@ void
|
|||
Editor::end_location_changed (Location* location)
|
||||
{
|
||||
ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::end_location_changed), location));
|
||||
reset_scrolling_region ();
|
||||
//reset_scrolling_region ();
|
||||
horizontal_adjustment.set_upper ( location->start());
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -4160,6 +4169,7 @@ Editor::on_key_release_event (GdkEventKey* ev)
|
|||
void
|
||||
Editor::reset_x_origin (nframes64_t frame)
|
||||
{
|
||||
//cerr << "resetting x origin" << endl;
|
||||
queue_visual_change (frame);
|
||||
}
|
||||
|
||||
|
|
@ -4287,10 +4297,6 @@ Editor::set_frames_per_unit (double fpu)
|
|||
return;
|
||||
}
|
||||
|
||||
if (fpu == frames_per_unit) {
|
||||
return;
|
||||
}
|
||||
|
||||
frames_per_unit = fpu;
|
||||
post_zoom ();
|
||||
}
|
||||
|
|
@ -4321,9 +4327,11 @@ Editor::post_zoom ()
|
|||
ZoomChanged (); /* EMIT_SIGNAL */
|
||||
|
||||
reset_hscrollbar_stepping ();
|
||||
reset_scrolling_region ();
|
||||
//reset_scrolling_region ();
|
||||
|
||||
if (playhead_cursor) playhead_cursor->set_position (playhead_cursor->current_frame);
|
||||
if (playhead_cursor) {
|
||||
playhead_cursor->set_position (playhead_cursor->current_frame);
|
||||
}
|
||||
|
||||
instant_save ();
|
||||
}
|
||||
|
|
@ -4331,10 +4339,12 @@ Editor::post_zoom ()
|
|||
void
|
||||
Editor::queue_visual_change (nframes64_t where)
|
||||
{
|
||||
pending_visual_change.pending = VisualChange::Type (pending_visual_change.pending | VisualChange::TimeOrigin);
|
||||
pending_visual_change.time_origin = where;
|
||||
// pending_visual_change.pending = VisualChange::Type (pending_visual_change.pending | VisualChange::TimeOrigin);
|
||||
// pending_visual_change.time_origin = where;
|
||||
|
||||
if (pending_visual_change.idle_handler_id < 0) {
|
||||
pending_visual_change.pending = VisualChange::Type (pending_visual_change.pending | VisualChange::TimeOrigin);
|
||||
pending_visual_change.time_origin = where;
|
||||
pending_visual_change.idle_handler_id = g_idle_add (_idle_visual_changer, this);
|
||||
}
|
||||
}
|
||||
|
|
@ -4360,41 +4370,39 @@ int
|
|||
Editor::idle_visual_changer ()
|
||||
{
|
||||
VisualChange::Type p = pending_visual_change.pending;
|
||||
nframes64_t csf, cef;
|
||||
|
||||
if (session) {
|
||||
csf = session->current_start_frame();
|
||||
cef = session->current_end_frame() + (current_page_frames() / 24);// Add a little extra so we can see the end marker
|
||||
}
|
||||
|
||||
pending_visual_change.pending = (VisualChange::Type) 0;
|
||||
pending_visual_change.idle_handler_id = -1;
|
||||
|
||||
|
||||
if (p & VisualChange::ZoomLevel) {
|
||||
set_frames_per_unit (pending_visual_change.frames_per_unit);
|
||||
}
|
||||
|
||||
if (p & VisualChange::TimeOrigin) {
|
||||
|
||||
nframes64_t time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
|
||||
nframes64_t csf, cef;
|
||||
nframes64_t current_time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
|
||||
if (session) {
|
||||
csf = session->current_start_frame();
|
||||
cef = session->current_end_frame() + (current_page_frames() / 24);// Add a little extra so we can see the end marker
|
||||
}
|
||||
|
||||
/* if we seek beyond the current end of the canvas, move the end */
|
||||
|
||||
if (time_origin != pending_visual_change.time_origin) {
|
||||
|
||||
if (horizontal_adjustment.get_upper() < pending_visual_change.time_origin) {
|
||||
last_canvas_frame = (cef > (pending_visual_change.time_origin + current_page_frames())) ? cef : pending_visual_change.time_origin + current_page_frames();
|
||||
horizontal_adjustment.set_upper ((cef - csf) / frames_per_unit);
|
||||
reset_scrolling_region ();
|
||||
}
|
||||
|
||||
horizontal_adjustment.set_value (pending_visual_change.time_origin/frames_per_unit);
|
||||
if (current_time_origin != pending_visual_change.time_origin) {
|
||||
//if (horizontal_adjustment.get_upper() < pending_visual_change.time_origin) {
|
||||
last_canvas_frame = (cef > (pending_visual_change.time_origin + current_page_frames())) ? cef : pending_visual_change.time_origin + current_page_frames();
|
||||
horizontal_adjustment.set_upper ((cef - csf) / frames_per_unit);
|
||||
//}
|
||||
horizontal_adjustment.set_value (pending_visual_change.time_origin / frames_per_unit);
|
||||
} else {
|
||||
update_fixed_rulers();
|
||||
redisplay_tempo (true);
|
||||
}
|
||||
}
|
||||
|
||||
//cerr << "Editor::idle_visual_changer () called ha v:l:u:ps:fpu = " << horizontal_adjustment.get_value() << ":" << horizontal_adjustment.get_lower() << ":" << horizontal_adjustment.get_upper() << ":" << horizontal_adjustment.get_page_size() << ":" << frames_per_unit << endl;//DEBUG
|
||||
pending_visual_change.idle_handler_id = -1;
|
||||
return 0; /* this is always a one-shot call */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -575,7 +575,6 @@ class Editor : public PublicEditor
|
|||
Gdk::Cursor* which_grabber_cursor ();
|
||||
|
||||
ArdourCanvas::Canvas* track_canvas;
|
||||
ArdourCanvas::Canvas* time_canvas;
|
||||
|
||||
ArdourCanvas::Text* first_action_message;
|
||||
ArdourCanvas::Text* verbose_canvas_cursor;
|
||||
|
|
@ -595,7 +594,9 @@ class Editor : public PublicEditor
|
|||
Gtk::EventBox time_canvas_event_box;
|
||||
Gtk::EventBox track_canvas_event_box;
|
||||
Gtk::EventBox time_button_event_box;
|
||||
Gtk::EventBox ruler_label_event_box;
|
||||
Gtk::Frame time_button_frame;
|
||||
Gtk::Frame ruler_label_frame;
|
||||
|
||||
ArdourCanvas::Pixbuf* logo_item;
|
||||
ArdourCanvas::Group* minsec_group;
|
||||
|
|
@ -608,6 +609,34 @@ class Editor : public PublicEditor
|
|||
ArdourCanvas::Group* range_marker_group;
|
||||
ArdourCanvas::Group* transport_marker_group;
|
||||
ArdourCanvas::Group* cd_marker_group;
|
||||
|
||||
ArdourCanvas::Group* timebar_group;
|
||||
|
||||
/* These bars never need to be scrolled */
|
||||
ArdourCanvas::Group* meter_bar_group;
|
||||
ArdourCanvas::Group* tempo_bar_group;
|
||||
ArdourCanvas::Group* marker_bar_group;
|
||||
ArdourCanvas::Group* range_marker_bar_group;
|
||||
ArdourCanvas::Group* transport_marker_bar_group;
|
||||
ArdourCanvas::Group* cd_marker_bar_group;
|
||||
|
||||
/*
|
||||
The _master_group is the group containing all items
|
||||
that require horizontal scrolling..
|
||||
It is primarily used to separate canvas items
|
||||
that require horizontal scrolling from those that do not.
|
||||
*/
|
||||
ArdourCanvas::Group* _master_group;
|
||||
/*
|
||||
The _trackview_group is the group containing all trackviews.
|
||||
It is only scrolled vertically.
|
||||
*/
|
||||
ArdourCanvas::Group* _trackview_group;
|
||||
/*
|
||||
This canvas group is used for region motion.
|
||||
It sits on top of the _trackview_group
|
||||
*/
|
||||
ArdourCanvas::Group* _region_motion_group;
|
||||
|
||||
enum RulerType {
|
||||
ruler_metric_smpte = 0,
|
||||
|
|
@ -680,6 +709,7 @@ class Editor : public PublicEditor
|
|||
|
||||
static const double timebar_height;
|
||||
guint32 visible_timebars;
|
||||
gdouble canvas_timebars_vsize;
|
||||
Gtk::Menu *editor_ruler_menu;
|
||||
|
||||
ArdourCanvas::SimpleRect* tempo_bar;
|
||||
|
|
@ -788,15 +818,16 @@ class Editor : public PublicEditor
|
|||
double canvas_width;
|
||||
double canvas_height;
|
||||
double full_canvas_height;
|
||||
double grabbed_vadjustment;
|
||||
nframes64_t last_canvas_frame;
|
||||
|
||||
bool track_canvas_map_handler (GdkEventAny*);
|
||||
bool time_canvas_map_handler (GdkEventAny*);
|
||||
|
||||
gint edit_controls_button_release (GdkEventButton*);
|
||||
Gtk::Menu *edit_controls_left_menu;
|
||||
Gtk::Menu *edit_controls_right_menu;
|
||||
|
||||
Gtk::VBox ruler_label_vbox;
|
||||
Gtk::VBox track_canvas_vbox;
|
||||
Gtk::VBox time_canvas_vbox;
|
||||
Gtk::VBox edit_controls_vbox;
|
||||
|
|
@ -807,7 +838,11 @@ class Editor : public PublicEditor
|
|||
bool deferred_control_scroll (nframes64_t);
|
||||
sigc::connection control_scroll_connection;
|
||||
|
||||
gdouble get_trackview_group_vertical_offset () const { return vertical_adjustment.get_value () - canvas_timebars_vsize;}
|
||||
ArdourCanvas::Group* get_trackview_group () const { return _trackview_group; }
|
||||
void tie_vertical_scrolling ();
|
||||
void scroll_canvas_horizontally ();
|
||||
void scroll_canvas_vertically ();
|
||||
void canvas_horizontally_scrolled ();
|
||||
void canvas_scroll_to (nframes64_t);
|
||||
|
||||
|
|
@ -1380,15 +1415,12 @@ public:
|
|||
|
||||
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
|
||||
bool track_canvas_scroll (GdkEventScroll* event);
|
||||
bool time_canvas_scroll (GdkEventScroll* event);
|
||||
|
||||
bool track_canvas_scroll_event (GdkEventScroll* event);
|
||||
bool track_canvas_button_press_event (GdkEventButton* event);
|
||||
bool track_canvas_button_release_event (GdkEventButton* event);
|
||||
bool track_canvas_motion_notify_event (GdkEventMotion* event);
|
||||
|
||||
bool time_canvas_scroll_event (GdkEventScroll* event);
|
||||
|
||||
Gtk::Allocation canvas_allocation;
|
||||
bool canvas_idle_queued;
|
||||
void track_canvas_allocate (Gtk::Allocation alloc);
|
||||
|
|
@ -1405,7 +1437,6 @@ public:
|
|||
|
||||
void handle_new_duration ();
|
||||
void initialize_canvas ();
|
||||
void reset_scrolling_region (Gtk::Allocation* alloc = 0);
|
||||
|
||||
/* display control */
|
||||
|
||||
|
|
@ -1771,12 +1802,13 @@ public:
|
|||
uint32_t autoscroll_cnt;
|
||||
nframes64_t autoscroll_x_distance;
|
||||
double autoscroll_y_distance;
|
||||
|
||||
|
||||
static gint _autoscroll_canvas (void *);
|
||||
bool autoscroll_canvas ();
|
||||
void start_canvas_autoscroll (int x, int y);
|
||||
void stop_canvas_autoscroll ();
|
||||
void maybe_autoscroll (GdkEventMotion*);
|
||||
void maybe_autoscroll_horizontally (GdkEventMotion*);
|
||||
bool allow_vertical_scroll;
|
||||
|
||||
/* trimming */
|
||||
|
|
|
|||
|
|
@ -89,10 +89,8 @@ 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 ();
|
||||
|
|
@ -101,7 +99,7 @@ Editor::initialize_canvas ()
|
|||
/* 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_dither (Gdk::RGB_DITHER_NONE);
|
||||
|
||||
/* need to handle 4 specific types of events as catch-alls */
|
||||
|
||||
|
|
@ -110,9 +108,6 @@ Editor::initialize_canvas ()
|
|||
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));
|
||||
|
||||
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));
|
||||
|
|
@ -156,90 +151,99 @@ Editor::initialize_canvas ()
|
|||
// logo_item->property_width_set() = true;
|
||||
logo_item->show ();
|
||||
}
|
||||
|
||||
/* 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);
|
||||
|
||||
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_what() = (0x1 | 0x8);
|
||||
tempo_bar->property_outline_pixels() = 0;
|
||||
|
||||
meter_bar = new ArdourCanvas::SimpleRect (*meter_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
_master_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
|
||||
_trackview_group = new ArdourCanvas::Group (*_master_group);
|
||||
_region_motion_group = new ArdourCanvas::Group (*_master_group);
|
||||
|
||||
meter_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
meter_bar = new ArdourCanvas::SimpleRect (*meter_bar_group, 0.0, 0.0, 100, timebar_height);
|
||||
meter_bar->property_outline_what() = (0x1 | 0x8);
|
||||
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_what() = (0x1 | 0x8);
|
||||
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_what() = (0x1 | 0x8);
|
||||
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);
|
||||
tempo_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
tempo_bar = new ArdourCanvas::SimpleRect (*tempo_bar_group, 0.0, 0.0, 100, (timebar_height));
|
||||
tempo_bar->property_outline_what() = (0x1 | 0x8);
|
||||
tempo_bar->property_outline_pixels() = 0;
|
||||
|
||||
range_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
range_marker_bar = new ArdourCanvas::SimpleRect (*range_marker_bar_group, 0.0, 0.0, 100, (timebar_height));
|
||||
range_marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||
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_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
transport_marker_bar = new ArdourCanvas::SimpleRect (*transport_marker_bar_group, 0.0, 0.0, 100, (timebar_height));
|
||||
transport_marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||
transport_marker_bar->property_outline_pixels() = 0;
|
||||
|
||||
marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
marker_bar = new ArdourCanvas::SimpleRect (*marker_bar_group, 0.0, 0.0, 100, (timebar_height));
|
||||
marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||
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->hide ();
|
||||
cd_marker_bar_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
cd_marker_bar = new ArdourCanvas::SimpleRect (*cd_marker_bar_group, 0.0, 0.0, 100, (timebar_height));
|
||||
cd_marker_bar->property_outline_what() = (0x1 | 0x8);
|
||||
cd_marker_bar->property_outline_pixels() = 0;
|
||||
|
||||
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_outline_pixels() = 0;
|
||||
range_bar_drag_rect->hide ();
|
||||
|
||||
transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height-1.0);
|
||||
transport_bar_drag_rect->property_outline_pixels() = 0;
|
||||
transport_bar_drag_rect->hide ();
|
||||
/* a group to hold time (measure) lines */
|
||||
|
||||
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));
|
||||
time_line_group = new ArdourCanvas::Group (*_master_group, 0.0, 0.0);
|
||||
|
||||
marker_drag_line = new ArdourCanvas::Line (*track_canvas->root());
|
||||
range_marker_drag_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0);
|
||||
//range_marker_drag_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, 0.0);
|
||||
range_marker_drag_rect->hide ();
|
||||
|
||||
timebar_group = new ArdourCanvas::Group (*track_canvas->root());
|
||||
cursor_group = new ArdourCanvas::Group (*track_canvas->root(), 0.0, 0.0);
|
||||
|
||||
meter_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 5.0);
|
||||
tempo_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 4.0);
|
||||
range_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 3.0);
|
||||
transport_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height * 2.0);
|
||||
marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, timebar_height);
|
||||
cd_marker_group = new ArdourCanvas::Group (*timebar_group, 0.0, 0.0);
|
||||
|
||||
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 0.0));
|
||||
marker_drag_line_points.push_back(Gnome::Art::Point(0.0, 1.0));
|
||||
|
||||
marker_drag_line = new ArdourCanvas::Line (*timebar_group);
|
||||
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->hide ();
|
||||
|
||||
transport_loop_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0);
|
||||
cd_marker_bar_drag_rect = new ArdourCanvas::SimpleRect (*cd_marker_group, 0.0, 0.0, 100, timebar_height);
|
||||
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, 100, timebar_height);
|
||||
range_bar_drag_rect->property_outline_pixels() = 0;
|
||||
range_bar_drag_rect->hide ();
|
||||
|
||||
transport_bar_drag_rect = new ArdourCanvas::SimpleRect (*transport_marker_group, 0.0, 0.0, 100, timebar_height);
|
||||
transport_bar_drag_rect->property_outline_pixels() = 0;
|
||||
transport_bar_drag_rect->hide ();
|
||||
|
||||
transport_loop_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, 0.0);
|
||||
transport_loop_range_rect->property_outline_pixels() = 1;
|
||||
transport_loop_range_rect->hide();
|
||||
|
||||
transport_punch_range_rect = new ArdourCanvas::SimpleRect (*time_line_group, 0.0, 0.0, 0.0, 0.0);
|
||||
transport_punch_range_rect = new ArdourCanvas::SimpleRect (*_master_group, 0.0, 0.0, 0.0, 0.0);
|
||||
transport_punch_range_rect->property_outline_pixels() = 0;
|
||||
transport_punch_range_rect->hide();
|
||||
|
||||
transport_loop_range_rect->lower_to_bottom (); // loop on the bottom
|
||||
|
||||
transport_punchin_line = new ArdourCanvas::SimpleLine (*time_line_group);
|
||||
transport_punchin_line = new ArdourCanvas::SimpleLine (*_master_group);
|
||||
transport_punchin_line->property_x1() = 0.0;
|
||||
transport_punchin_line->property_y1() = 0.0;
|
||||
transport_punchin_line->property_x2() = 0.0;
|
||||
transport_punchin_line->property_y2() = 0.0;
|
||||
transport_punchin_line->hide ();
|
||||
|
||||
transport_punchout_line = new ArdourCanvas::SimpleLine (*time_line_group);
|
||||
transport_punchout_line = new ArdourCanvas::SimpleLine (*_master_group);
|
||||
transport_punchout_line->property_x1() = 0.0;
|
||||
transport_punchout_line->property_y1() = 0.0;
|
||||
transport_punchout_line->property_x2() = 0.0;
|
||||
|
|
@ -247,14 +251,15 @@ 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 (*_master_group, 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 (*_trackview_group, 0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
rubberband_rect->property_outline_pixels() = 1;
|
||||
rubberband_rect->hide();
|
||||
|
||||
|
|
@ -267,10 +272,6 @@ Editor::initialize_canvas ()
|
|||
|
||||
ZoomChanged.connect (bind (mem_fun(*this, &Editor::update_loop_range_view), false));
|
||||
ZoomChanged.connect (bind (mem_fun(*this, &Editor::update_punch_range_view), false));
|
||||
|
||||
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);
|
||||
|
||||
playhead_cursor = new Cursor (*this, &Editor::canvas_playhead_cursor_event);
|
||||
|
||||
|
|
@ -326,72 +327,47 @@ Editor::track_canvas_size_allocated ()
|
|||
}
|
||||
}
|
||||
|
||||
full_canvas_height = height;
|
||||
full_canvas_height = height + canvas_timebars_vsize;
|
||||
}
|
||||
|
||||
zoom_range_clock.set ((nframes64_t) floor ((canvas_width * frames_per_unit)));
|
||||
playhead_cursor->set_position (playhead_cursor->current_frame);
|
||||
|
||||
horizontal_adjustment.set_upper (session->current_end_frame()/frames_per_unit);
|
||||
horizontal_adjustment.set_page_size (current_page_frames()/frames_per_unit);
|
||||
|
||||
reset_hscrollbar_stepping ();
|
||||
reset_scrolling_region ();
|
||||
|
||||
if (playhead_cursor) playhead_cursor->set_length (canvas_height);
|
||||
if (playhead_cursor) {
|
||||
playhead_cursor->set_length (canvas_height);
|
||||
}
|
||||
|
||||
double y1 = vertical_adjustment.get_value ();
|
||||
vertical_adjustment.set_page_size (canvas_height);
|
||||
|
||||
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
||||
(*x)->set_line_vpos (y1, canvas_height);
|
||||
(*x)->set_line_vpos (0, canvas_height);
|
||||
}
|
||||
|
||||
range_marker_drag_rect->property_y1() = y1;
|
||||
range_marker_drag_rect->property_y2() = full_canvas_height;
|
||||
transport_loop_range_rect->property_y1() = y1;
|
||||
transport_loop_range_rect->property_y2() = full_canvas_height;
|
||||
transport_punch_range_rect->property_y1() = y1;
|
||||
transport_punch_range_rect->property_y2() = full_canvas_height;
|
||||
transport_punchin_line->property_y1() = y1;
|
||||
transport_punchin_line->property_y2() = full_canvas_height;
|
||||
transport_punchout_line->property_y1() = y1;
|
||||
transport_punchout_line->property_y2() = full_canvas_height;
|
||||
|
||||
update_fixed_rulers();
|
||||
redisplay_tempo (true);
|
||||
|
||||
Resized (); /* EMIT_SIGNAL */
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::reset_scrolling_region (Gtk::Allocation* alloc)
|
||||
{
|
||||
TreeModel::Children rows = route_display_model->children();
|
||||
TreeModel::Children::iterator i;
|
||||
double pos;
|
||||
|
||||
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
if (tv != 0 && !tv->hidden()) {
|
||||
pos += tv->effective_height;
|
||||
}
|
||||
}
|
||||
|
||||
double last_canvas_unit = max ((last_canvas_frame / frames_per_unit), canvas_width);
|
||||
//cerr << "Editor::reset_scrolling_region () lcf:fpu:cw:lcu " << last_canvas_frame << ":" << frames_per_unit << ":" << canvas_width << ":" << last_canvas_unit << endl;//DEBUG
|
||||
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);
|
||||
|
||||
marker_drag_line_points.back().set_y(canvas_height);
|
||||
range_marker_drag_rect->property_y2() = canvas_height;
|
||||
transport_loop_range_rect->property_y2() = canvas_height;
|
||||
transport_punch_range_rect->property_y2() = canvas_height;
|
||||
transport_punchin_line->property_y2() = canvas_height;
|
||||
transport_punchout_line->property_y2() = canvas_height;
|
||||
|
||||
update_punch_range_view (true);
|
||||
tempo_bar->property_x2() = canvas_width;
|
||||
meter_bar->property_x2() = canvas_width;
|
||||
marker_bar->property_x2() = canvas_width;
|
||||
cd_marker_bar->property_x2() = canvas_width;
|
||||
range_marker_bar->property_x2() = canvas_width;
|
||||
transport_marker_bar->property_x2() = canvas_width;
|
||||
|
||||
controls_layout.queue_resize();
|
||||
update_fixed_rulers();
|
||||
redisplay_tempo (true);
|
||||
|
||||
Resized (); /* EMIT_SIGNAL */
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -429,7 +405,19 @@ Editor::controls_layout_size_request (Requisition* req)
|
|||
controls_layout.set_size (edit_controls_vbox.get_width(), (gint) pos);
|
||||
controls_layout.set_size_request(edit_controls_vbox.get_width(), -1);
|
||||
zoom_box.set_size_request(edit_controls_vbox.get_width(), -1);
|
||||
time_button_frame.set_size_request(edit_controls_vbox.get_width() + edit_vscrollbar.get_width(), -1);
|
||||
//time_button_frame.set_size_request(edit_controls_vbox.get_width() + edit_vscrollbar.get_width(), -1);
|
||||
time_button_frame.set_size_request(edit_controls_vbox.get_width(), -1);
|
||||
|
||||
if ((vertical_adjustment.get_value() + canvas_height) >= vertical_adjustment.get_upper()) {
|
||||
/*
|
||||
We're increasing the size of the canvas while the bottom is visible.
|
||||
We scroll down to keep in step with the controls layout.
|
||||
*/
|
||||
vertical_adjustment.set_upper (pos + canvas_timebars_vsize);
|
||||
vertical_adjustment.set_value (pos + canvas_timebars_vsize - canvas_height);
|
||||
} else {
|
||||
vertical_adjustment.set_upper (pos + canvas_timebars_vsize);
|
||||
}
|
||||
|
||||
//cerr << "sizes = " << req->width << " " << edit_controls_vbox.get_width() << " " << controls_layout.get_width() << " " << zoom_box.get_width() << " " << time_button_frame.get_width() << endl;//DEBUG
|
||||
}
|
||||
|
|
@ -441,13 +429,6 @@ Editor::track_canvas_map_handler (GdkEventAny* ev)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::time_canvas_map_handler (GdkEventAny* ev)
|
||||
{
|
||||
time_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::track_canvas_drag_data_received (const RefPtr<Gdk::DragContext>& context,
|
||||
int x, int y,
|
||||
|
|
@ -488,8 +469,8 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
|
|||
double wy;
|
||||
|
||||
track_canvas->window_to_world (x, y, wx, wy);
|
||||
wx += horizontal_adjustment.get_value();
|
||||
wy += vertical_adjustment.get_value();
|
||||
//wx += horizontal_adjustment.get_value();
|
||||
//wy += vertical_adjustment.get_value();
|
||||
|
||||
ev.type = GDK_BUTTON_RELEASE;
|
||||
ev.button.x = wx;
|
||||
|
|
@ -560,16 +541,25 @@ Editor::maybe_autoscroll (GdkEventMotion* event)
|
|||
nframes64_t frame = drag_info.current_pointer_frame;
|
||||
bool startit = false;
|
||||
double vertical_pos = vertical_adjustment.get_value();
|
||||
double upper = vertical_adjustment.get_upper();
|
||||
|
||||
/*
|
||||
adjust the event.y to take account of the bounds
|
||||
of the _trackview_group
|
||||
*/
|
||||
|
||||
double vsx1, vsx2, vsy1, vsy2;
|
||||
_trackview_group->get_bounds (vsx1, vsy1, vsx2, vsy2);
|
||||
|
||||
autoscroll_y = 0;
|
||||
autoscroll_x = 0;
|
||||
|
||||
if (event->y < vertical_pos) {
|
||||
if ((event->y - vsy1) < vertical_pos) {
|
||||
autoscroll_y = -1;
|
||||
startit = true;
|
||||
}
|
||||
|
||||
if (event->y > vertical_pos + canvas_height) {
|
||||
if ((event->y - vsy1) > (vertical_pos + canvas_height - canvas_timebars_vsize) && vertical_pos <= upper) {
|
||||
autoscroll_y = 1;
|
||||
startit = true;
|
||||
}
|
||||
|
|
@ -582,7 +572,6 @@ Editor::maybe_autoscroll (GdkEventMotion* event)
|
|||
}
|
||||
|
||||
} else if (frame < leftmost_frame) {
|
||||
|
||||
if (leftmost_frame > 0) {
|
||||
autoscroll_x = -1;
|
||||
startit = true;
|
||||
|
|
@ -606,6 +595,43 @@ Editor::maybe_autoscroll (GdkEventMotion* event)
|
|||
last_autoscroll_y = autoscroll_y;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::maybe_autoscroll_horizontally (GdkEventMotion* event)
|
||||
{
|
||||
nframes64_t rightmost_frame = leftmost_frame + current_page_frames();
|
||||
nframes64_t frame = drag_info.current_pointer_frame;
|
||||
bool startit = false;
|
||||
|
||||
autoscroll_y = 0;
|
||||
autoscroll_x = 0;
|
||||
|
||||
if (frame > rightmost_frame) {
|
||||
|
||||
if (rightmost_frame < max_frames) {
|
||||
autoscroll_x = 1;
|
||||
startit = true;
|
||||
}
|
||||
|
||||
} else if (frame < leftmost_frame) {
|
||||
if (leftmost_frame > 0) {
|
||||
autoscroll_x = -1;
|
||||
startit = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ((autoscroll_x != last_autoscroll_x) || (autoscroll_y != last_autoscroll_y) || (autoscroll_x == 0 && autoscroll_y == 0)) {
|
||||
stop_canvas_autoscroll ();
|
||||
}
|
||||
|
||||
if (startit && autoscroll_timeout_tag < 0) {
|
||||
start_canvas_autoscroll (autoscroll_x, autoscroll_y);
|
||||
}
|
||||
|
||||
last_autoscroll_x = autoscroll_x;
|
||||
last_autoscroll_y = autoscroll_y;
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::_autoscroll_canvas (void *arg)
|
||||
{
|
||||
|
|
@ -618,97 +644,10 @@ Editor::autoscroll_canvas ()
|
|||
nframes64_t new_frame;
|
||||
nframes64_t limit = max_frames - current_page_frames();
|
||||
GdkEventMotion ev;
|
||||
nframes64_t target_frame;
|
||||
bool in_track_canvas;
|
||||
double new_pixel;
|
||||
double target_pixel;
|
||||
|
||||
if (autoscroll_x < 0) {
|
||||
if (leftmost_frame < autoscroll_x_distance) {
|
||||
new_frame = 0;
|
||||
} else {
|
||||
new_frame = leftmost_frame - autoscroll_x_distance;
|
||||
}
|
||||
target_frame = drag_info.current_pointer_frame - autoscroll_x_distance;
|
||||
} else if (autoscroll_x > 0) {
|
||||
if (leftmost_frame > limit - autoscroll_x_distance) {
|
||||
new_frame = limit;
|
||||
} else {
|
||||
new_frame = leftmost_frame + autoscroll_x_distance;
|
||||
}
|
||||
target_frame = drag_info.current_pointer_frame + autoscroll_x_distance;
|
||||
} else {
|
||||
target_frame = drag_info.current_pointer_frame;
|
||||
new_frame = leftmost_frame;
|
||||
}
|
||||
|
||||
double vertical_pos = vertical_adjustment.get_value();
|
||||
|
||||
if (autoscroll_y < 0) {
|
||||
|
||||
if (vertical_pos < autoscroll_y_distance) {
|
||||
new_pixel = 0;
|
||||
} else {
|
||||
new_pixel = vertical_pos - autoscroll_y_distance;
|
||||
}
|
||||
|
||||
target_pixel = drag_info.current_pointer_y - autoscroll_y_distance;
|
||||
target_pixel = max (target_pixel, 0.0);
|
||||
|
||||
} else if (autoscroll_y > 0) {
|
||||
|
||||
double top_of_bottom_of_canvas = full_canvas_height - canvas_height;
|
||||
|
||||
if (vertical_pos > full_canvas_height - autoscroll_y_distance) {
|
||||
new_pixel = full_canvas_height;
|
||||
} else {
|
||||
new_pixel = vertical_pos + autoscroll_y_distance;
|
||||
}
|
||||
|
||||
new_pixel = min (top_of_bottom_of_canvas, new_pixel);
|
||||
|
||||
target_pixel = drag_info.current_pointer_y + autoscroll_y_distance;
|
||||
|
||||
/* don't move to the full canvas height because the item will be invisible
|
||||
(its top edge will line up with the bottom of the visible canvas.
|
||||
*/
|
||||
|
||||
target_pixel = min (target_pixel, full_canvas_height - 10);
|
||||
|
||||
} else {
|
||||
target_pixel = drag_info.current_pointer_y;
|
||||
new_pixel = vertical_pos;
|
||||
}
|
||||
|
||||
/* now fake a motion event to get the object that is being dragged to move too */
|
||||
|
||||
ev.type = GDK_MOTION_NOTIFY;
|
||||
ev.state &= Gdk::BUTTON1_MASK;
|
||||
ev.x = frame_to_unit (target_frame);
|
||||
ev.y = target_pixel;
|
||||
motion_handler (drag_info.item, (GdkEvent*) &ev, drag_info.item_type, true);
|
||||
|
||||
if ((new_frame == 0 || new_frame == limit) && (new_pixel == 0 || new_pixel == DBL_MAX)) {
|
||||
/* we are done */
|
||||
return false;
|
||||
}
|
||||
|
||||
autoscroll_cnt++;
|
||||
|
||||
if (autoscroll_cnt == 1) {
|
||||
|
||||
/* connect the timeout so that we get called repeatedly */
|
||||
|
||||
autoscroll_timeout_tag = g_idle_add ( _autoscroll_canvas, this);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
if (new_frame != leftmost_frame) {
|
||||
reset_x_origin (new_frame);
|
||||
}
|
||||
|
||||
vertical_adjustment.set_value (new_pixel);
|
||||
|
||||
if (autoscroll_x_distance != 0) {
|
||||
|
||||
if (autoscroll_cnt == 50) { /* 0.5 seconds */
|
||||
|
|
@ -750,6 +689,97 @@ Editor::autoscroll_canvas ()
|
|||
}
|
||||
}
|
||||
|
||||
if (autoscroll_x < 0) {
|
||||
if (leftmost_frame < autoscroll_x_distance) {
|
||||
new_frame = 0;
|
||||
} else {
|
||||
new_frame = leftmost_frame - autoscroll_x_distance;
|
||||
}
|
||||
} else if (autoscroll_x > 0) {
|
||||
if (leftmost_frame > limit - autoscroll_x_distance) {
|
||||
new_frame = limit;
|
||||
} else {
|
||||
new_frame = leftmost_frame + autoscroll_x_distance;
|
||||
}
|
||||
} else {
|
||||
new_frame = leftmost_frame;
|
||||
}
|
||||
|
||||
double vertical_pos = vertical_adjustment.get_value();
|
||||
|
||||
if (autoscroll_y < 0) {
|
||||
|
||||
if (vertical_pos < autoscroll_y_distance) {
|
||||
new_pixel = 0;
|
||||
} else {
|
||||
new_pixel = vertical_pos - autoscroll_y_distance;
|
||||
}
|
||||
|
||||
target_pixel = drag_info.current_pointer_y - autoscroll_y_distance;
|
||||
target_pixel = max (target_pixel, 0.0);
|
||||
|
||||
} else if (autoscroll_y > 0) {
|
||||
|
||||
double top_of_bottom_of_canvas = full_canvas_height - canvas_height;
|
||||
|
||||
if (vertical_pos > full_canvas_height - autoscroll_y_distance) {
|
||||
new_pixel = full_canvas_height;
|
||||
} else {
|
||||
new_pixel = vertical_pos + autoscroll_y_distance;
|
||||
}
|
||||
|
||||
new_pixel = min (top_of_bottom_of_canvas, new_pixel);
|
||||
|
||||
target_pixel = drag_info.current_pointer_y + autoscroll_y_distance;
|
||||
|
||||
/* don't move to the full canvas height because the item will be invisible
|
||||
(its top edge will line up with the bottom of the visible canvas.
|
||||
*/
|
||||
|
||||
target_pixel = min (target_pixel, full_canvas_height - 10);
|
||||
|
||||
} else {
|
||||
target_pixel = drag_info.current_pointer_y;
|
||||
new_pixel = vertical_pos;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ((new_frame == 0 || new_frame == limit) && (new_pixel == 0 || new_pixel == DBL_MAX)) {
|
||||
/* we are done */
|
||||
return false;
|
||||
}
|
||||
|
||||
if (new_frame != leftmost_frame) {
|
||||
reset_x_origin (new_frame);
|
||||
}
|
||||
|
||||
vertical_adjustment.set_value (new_pixel);
|
||||
|
||||
/* fake an event. */
|
||||
|
||||
Glib::RefPtr<Gdk::Window> canvas_window = const_cast<Editor*>(this)->track_canvas->get_window();
|
||||
gint x, y;
|
||||
Gdk::ModifierType mask;
|
||||
canvas_window->get_pointer (x, y, mask);
|
||||
ev.type = GDK_MOTION_NOTIFY;
|
||||
ev.state |= Gdk::BUTTON1_MASK;
|
||||
ev.x = x;
|
||||
ev.y = y;
|
||||
|
||||
motion_handler (drag_info.item, (GdkEvent*) &ev, drag_info.item_type, true);
|
||||
|
||||
autoscroll_cnt++;
|
||||
|
||||
if (autoscroll_cnt == 1) {
|
||||
|
||||
/* connect the timeout so that we get called repeatedly */
|
||||
|
||||
autoscroll_timeout_tag = g_idle_add ( _autoscroll_canvas, this);
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -777,6 +807,7 @@ Editor::start_canvas_autoscroll (int dx, int dy)
|
|||
void
|
||||
Editor::stop_canvas_autoscroll ()
|
||||
{
|
||||
|
||||
if (autoscroll_timeout_tag >= 0) {
|
||||
g_source_remove (autoscroll_timeout_tag);
|
||||
autoscroll_timeout_tag = -1;
|
||||
|
|
@ -804,34 +835,48 @@ Editor::entered_track_canvas (GdkEventCrossing *ev)
|
|||
void
|
||||
Editor::tie_vertical_scrolling ()
|
||||
{
|
||||
double y1 = vertical_adjustment.get_value();
|
||||
|
||||
playhead_cursor->set_y_axis (y1);
|
||||
|
||||
range_marker_drag_rect->property_y1() = y1;
|
||||
range_marker_drag_rect->property_y2() = full_canvas_height;
|
||||
transport_loop_range_rect->property_y1() = y1;
|
||||
transport_loop_range_rect->property_y2() = full_canvas_height;
|
||||
transport_punch_range_rect->property_y1() = y1;
|
||||
transport_punch_range_rect->property_y2() = full_canvas_height;
|
||||
transport_punchin_line->property_y1() = y1;
|
||||
transport_punchin_line->property_y2() = full_canvas_height;
|
||||
transport_punchout_line->property_y1() = y1;
|
||||
transport_punchout_line->property_y2() = full_canvas_height;
|
||||
|
||||
if (!selection->markers.empty()) {
|
||||
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
||||
(*x)->set_line_vpos (y1, canvas_height);
|
||||
}
|
||||
}
|
||||
|
||||
if (logo_item) {
|
||||
logo_item->property_y() = y1;
|
||||
}
|
||||
scroll_canvas_vertically ();
|
||||
|
||||
/* this will do an immediate redraw */
|
||||
|
||||
controls_layout.get_vadjustment()->set_value (y1);
|
||||
controls_layout.get_vadjustment()->set_value (vertical_adjustment.get_value());
|
||||
}
|
||||
|
||||
void
|
||||
Editor::scroll_canvas_horizontally ()
|
||||
{
|
||||
nframes64_t time_origin = (nframes64_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
|
||||
|
||||
if (time_origin != leftmost_frame) {
|
||||
canvas_scroll_to (time_origin);
|
||||
}
|
||||
|
||||
/* horizontal scrolling only */
|
||||
double x1, x2, y1, y2, x_delta;
|
||||
|
||||
_master_group->get_bounds(x1, y1, x2, y2);
|
||||
x_delta = x1 + horizontal_adjustment.get_value();
|
||||
|
||||
_master_group->move (-x_delta, 0);
|
||||
timebar_group->move (-x_delta, 0);
|
||||
cursor_group->move (-x_delta, 0);
|
||||
}
|
||||
|
||||
void
|
||||
Editor::scroll_canvas_vertically ()
|
||||
{
|
||||
/* vertical scrolling only */
|
||||
double x1, x2, y1, y2, y_delta;
|
||||
|
||||
_trackview_group->get_bounds(x1, y1, x2, y2);
|
||||
y_delta = y1 + vertical_adjustment.get_value() - canvas_timebars_vsize;
|
||||
|
||||
_trackview_group->move (0, -y_delta);
|
||||
_region_motion_group->move (0, -y_delta);
|
||||
|
||||
/* required to keep the controls_layout in sync with the canvas group */
|
||||
track_canvas->update_now ();
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -848,16 +893,11 @@ void
|
|||
Editor::canvas_scroll_to (nframes64_t time_origin)
|
||||
{
|
||||
leftmost_frame = time_origin;
|
||||
|
||||
nframes64_t rightmost_frame = leftmost_frame + current_page_frames ();
|
||||
|
||||
if (rightmost_frame > last_canvas_frame) {
|
||||
last_canvas_frame = rightmost_frame;
|
||||
reset_scrolling_region ();
|
||||
}
|
||||
|
||||
if (logo_item) {
|
||||
logo_item->property_x() = horizontal_adjustment.get_value ();
|
||||
//reset_scrolling_region ();
|
||||
}
|
||||
|
||||
update_fixed_rulers ();
|
||||
|
|
|
|||
|
|
@ -69,9 +69,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
*/
|
||||
track_canvas->get_pointer (x, y);
|
||||
track_canvas->window_to_world (x, y, wx, wy);
|
||||
wx += horizontal_adjustment.get_value();
|
||||
wy += vertical_adjustment.get_value();
|
||||
|
||||
|
||||
GdkEvent event;
|
||||
event.type = GDK_BUTTON_RELEASE;
|
||||
event.button.x = wx;
|
||||
|
|
@ -86,7 +84,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
|
||||
if (!current_stepping_trackview) {
|
||||
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
|
||||
if (!(current_stepping_trackview = trackview_by_y_position (ev->y))) {
|
||||
if (!(current_stepping_trackview = trackview_by_y_position (ev->y + vertical_adjustment.get_value() - canvas_timebars_vsize))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -104,9 +102,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
//if (ev->state == GDK_CONTROL_MASK) {
|
||||
track_canvas->get_pointer (x, y);
|
||||
track_canvas->window_to_world (x, y, wx, wy);
|
||||
wx += horizontal_adjustment.get_value();
|
||||
wy += vertical_adjustment.get_value();
|
||||
|
||||
|
||||
GdkEvent event;
|
||||
event.type = GDK_BUTTON_RELEASE;
|
||||
event.button.x = wx;
|
||||
|
|
@ -121,7 +117,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
|
|||
} else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
|
||||
if (!current_stepping_trackview) {
|
||||
step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
|
||||
if (!(current_stepping_trackview = trackview_by_y_position (ev->y))) {
|
||||
if (!(current_stepping_trackview = trackview_by_y_position (ev->y + vertical_adjustment.get_value() - canvas_timebars_vsize))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -168,55 +164,6 @@ Editor::track_canvas_scroll_event (GdkEventScroll *event)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::time_canvas_scroll (GdkEventScroll* ev)
|
||||
{
|
||||
nframes64_t xdelta;
|
||||
int direction = ev->direction;
|
||||
|
||||
switch (direction) {
|
||||
case GDK_SCROLL_UP:
|
||||
temporal_zoom_step (true);
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_DOWN:
|
||||
temporal_zoom_step (false);
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_LEFT:
|
||||
xdelta = (current_page_frames() / 2);
|
||||
if (leftmost_frame > xdelta) {
|
||||
reset_x_origin (leftmost_frame - xdelta);
|
||||
} else {
|
||||
reset_x_origin (0);
|
||||
}
|
||||
break;
|
||||
|
||||
case GDK_SCROLL_RIGHT:
|
||||
xdelta = (current_page_frames() / 2);
|
||||
if (max_frames - xdelta > leftmost_frame) {
|
||||
reset_x_origin (leftmost_frame + xdelta);
|
||||
} else {
|
||||
reset_x_origin (max_frames - current_page_frames());
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
/* what? */
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::time_canvas_scroll_event (GdkEventScroll *event)
|
||||
{
|
||||
time_canvas->grab_focus();
|
||||
time_canvas_scroll (event);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::track_canvas_button_press_event (GdkEventButton *event)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -38,11 +38,11 @@ Editor::Cursor::Cursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanv
|
|||
|
||||
/* "randomly" initialize coords */
|
||||
|
||||
points.push_back(Gnome::Art::Point(-9383839.0, 0.0));
|
||||
points.push_back(Gnome::Art::Point(1.0, 0.0));
|
||||
points.push_back(Gnome::Art::Point(1.0, 1.0));
|
||||
|
||||
canvas_item.property_points() = points;
|
||||
canvas_item.property_width_pixels() = 1;
|
||||
canvas_item.property_width_pixels() = 1.0;
|
||||
canvas_item.property_first_arrowhead() = TRUE;
|
||||
canvas_item.property_last_arrowhead() = TRUE;
|
||||
canvas_item.property_arrow_shape_a() = 11.0;
|
||||
|
|
@ -51,7 +51,6 @@ Editor::Cursor::Cursor (Editor& ed, bool (Editor::*callbck)(GdkEvent*,ArdourCanv
|
|||
|
||||
canvas_item.set_data ("cursor", this);
|
||||
canvas_item.signal_event().connect (bind (mem_fun (ed, callbck), &canvas_item));
|
||||
|
||||
current_frame = 1; /* force redraw at 0 */
|
||||
}
|
||||
|
||||
|
|
@ -67,23 +66,15 @@ Editor::Cursor::set_position (nframes64_t frame)
|
|||
|
||||
if (editor.session == 0) {
|
||||
canvas_item.hide();
|
||||
} else {
|
||||
canvas_item.show();
|
||||
}
|
||||
|
||||
current_frame = frame;
|
||||
|
||||
if (new_pos != points.front().get_x()) {
|
||||
|
||||
points.front().set_x (new_pos);
|
||||
points.back().set_x (new_pos);
|
||||
|
||||
canvas_item.property_points() = points;
|
||||
|
||||
ArdourCanvas::Points p = canvas_item.property_points();
|
||||
}
|
||||
|
||||
canvas_item.raise_to_top();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -92,6 +83,9 @@ Editor::Cursor::set_length (double units)
|
|||
length = units;
|
||||
points.back().set_y (points.front().get_y() + length);
|
||||
canvas_item.property_points() = points;
|
||||
if (editor.session != 0) {
|
||||
canvas_item.show();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -1245,7 +1245,7 @@ Editor::marker_selection_changed ()
|
|||
}
|
||||
|
||||
for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
|
||||
(*x)->add_line (cursor_group, vertical_adjustment.get_value(), canvas_height);
|
||||
(*x)->add_line (cursor_group, 0, canvas_height);
|
||||
(*x)->show_line ();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ Editor::update_current_screen ()
|
|||
|
||||
if (_follow_playhead && session->requested_return_frame() < 0) {
|
||||
|
||||
playhead_cursor->canvas_item.show();
|
||||
//playhead_cursor->canvas_item.show();
|
||||
|
||||
if (frame != last_update_frame) {
|
||||
|
||||
|
|
@ -241,7 +241,10 @@ Editor::update_current_screen ()
|
|||
|
||||
almost_done:
|
||||
last_update_frame = frame;
|
||||
|
||||
#ifdef GTKOSX
|
||||
/*XXX in a perfect world we would not have to do this. */
|
||||
track_canvas->update_now();
|
||||
#endif
|
||||
if (current_mixer_strip) {
|
||||
current_mixer_strip->fast_update ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
/*
|
||||
Copyright (C) 2000-2001 Paul Davis
|
||||
|
||||
|
|
@ -85,23 +86,15 @@ Editor::mouse_frame (nframes64_t& where, bool& in_track_canvas) const
|
|||
pointer_window = canvas_window->get_pointer (x, y, mask);
|
||||
|
||||
if (pointer_window == track_canvas->get_bin_window()) {
|
||||
|
||||
track_canvas->window_to_world (x, y, wx, wy);
|
||||
wx = x;
|
||||
wy = y;
|
||||
in_track_canvas = true;
|
||||
|
||||
} else {
|
||||
in_track_canvas = false;
|
||||
|
||||
if (pointer_window == time_canvas->get_bin_window()) {
|
||||
time_canvas->window_to_world (x, y, wx, wy);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
wx += horizontal_adjustment.get_value();
|
||||
wy += vertical_adjustment.get_value();
|
||||
|
||||
GdkEvent event;
|
||||
event.type = GDK_BUTTON_RELEASE;
|
||||
event.button.x = wx;
|
||||
|
|
@ -131,10 +124,16 @@ Editor::event_frame (GdkEvent* event, double* pcx, double* pcy) const
|
|||
case GDK_BUTTON_PRESS:
|
||||
case GDK_2BUTTON_PRESS:
|
||||
case GDK_3BUTTON_PRESS:
|
||||
track_canvas->w2c(event->button.x, event->button.y, *pcx, *pcy);
|
||||
|
||||
*pcx = event->button.x;
|
||||
*pcy = event->button.y;
|
||||
_trackview_group->w2i(*pcx, *pcy);
|
||||
break;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
track_canvas->w2c(event->motion.x, event->motion.y, *pcx, *pcy);
|
||||
|
||||
*pcx = event->motion.x;
|
||||
*pcy = event->motion.y;
|
||||
_trackview_group->w2i(*pcx, *pcy);
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
|
|
@ -214,9 +213,10 @@ Editor::which_grabber_cursor ()
|
|||
return grabber_edit_point_cursor;
|
||||
break;
|
||||
default:
|
||||
return grabber_cursor;
|
||||
//return grabber_cursor;
|
||||
break;
|
||||
}
|
||||
return grabber_cursor;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -478,7 +478,6 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
|
|||
pointer_window = canvas_window->get_pointer (x, y, mask);
|
||||
|
||||
if (pointer_window == track_canvas->get_bin_window()) {
|
||||
|
||||
track_canvas->window_to_world (x, y, wx, wy);
|
||||
allow_vertical_scroll = true;
|
||||
} else {
|
||||
|
|
@ -1360,7 +1359,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case MeterBarItem:
|
||||
case TempoBarItem:
|
||||
if (is_drawable()) {
|
||||
time_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
track_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -1374,7 +1373,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case MeterMarkerItem:
|
||||
case TempoMarkerItem:
|
||||
if (is_drawable()) {
|
||||
time_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
track_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
break;
|
||||
case FadeInHandleItem:
|
||||
|
|
@ -1495,7 +1494,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case TempoBarItem:
|
||||
case MarkerBarItem:
|
||||
if (is_drawable()) {
|
||||
time_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
track_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -1512,7 +1511,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
|
|||
case TempoMarkerItem:
|
||||
|
||||
if (is_drawable()) {
|
||||
time_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
track_canvas->get_window()->set_cursor (*timebar_cursor);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -1647,7 +1646,7 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
|||
where DISPLAY = :0.0, and given the cost of what the motion
|
||||
event might do, its a good tradeoff.
|
||||
*/
|
||||
|
||||
|
||||
track_canvas->get_pointer (x, y);
|
||||
}
|
||||
|
||||
|
|
@ -1705,6 +1704,9 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
|||
switch (item_type) {
|
||||
case PlayheadCursorItem:
|
||||
case MarkerItem:
|
||||
case RangeMarkerBarItem:
|
||||
case TransportMarkerBarItem:
|
||||
case CdMarkerBarItem:
|
||||
case GainControlPointItem:
|
||||
case RedirectAutomationControlPointItem:
|
||||
case GainAutomationControlPointItem:
|
||||
|
|
@ -1730,13 +1732,13 @@ Editor::motion_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item
|
|||
if (drag_info.item && (event->motion.state & Gdk::BUTTON1_MASK ||
|
||||
(event->motion.state & Gdk::BUTTON2_MASK))) {
|
||||
if (!from_autoscroll) {
|
||||
maybe_autoscroll (&event->motion);
|
||||
maybe_autoscroll_horizontally (&event->motion);
|
||||
}
|
||||
(this->*(drag_info.motion_callback)) (item, event);
|
||||
goto handled;
|
||||
}
|
||||
goto not_handled;
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -2278,7 +2280,7 @@ Editor::start_marker_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
// marker_drag_line->raise_to_top();
|
||||
} else {
|
||||
range_marker_drag_rect->show();
|
||||
range_marker_drag_rect->raise_to_top();
|
||||
//range_marker_drag_rect->raise_to_top();
|
||||
}
|
||||
|
||||
if (is_start) {
|
||||
|
|
@ -2978,6 +2980,17 @@ Editor::line_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
void
|
||||
Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||
{
|
||||
/*
|
||||
the group containing moved regions may have been
|
||||
offset during autoscroll. reset its y offset
|
||||
(we should really handle this in the same way
|
||||
we do with the x axis, but a simple way of achieving that
|
||||
eludes me right now).
|
||||
*/
|
||||
|
||||
_region_motion_group->property_y() = 0;
|
||||
grabbed_vadjustment = vertical_adjustment.get_value ();
|
||||
|
||||
if (selection->regions.empty() || clicked_regionview == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -3019,6 +3032,8 @@ Editor::start_region_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
void
|
||||
Editor::start_region_copy_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||
{
|
||||
_region_motion_group->property_y() = 0;
|
||||
|
||||
if (selection->regions.empty() || clicked_regionview == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -3105,7 +3120,7 @@ Editor::possibly_copy_regions_during_grab (GdkEvent* event)
|
|||
/* XXX handle MIDI here */
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
const boost::shared_ptr<const Region> original = arv->region();
|
||||
boost::shared_ptr<Region> region_copy = RegionFactory::create (original);
|
||||
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (region_copy);
|
||||
|
|
@ -3336,6 +3351,8 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
|
||||
rv2->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv2->get_canvas_group()->i2w (ix1, iy1);
|
||||
iy1 += vertical_adjustment.get_value() - canvas_timebars_vsize;
|
||||
|
||||
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
|
||||
RouteTimeAxisView* atv2 = dynamic_cast<RouteTimeAxisView*>(tvp2);
|
||||
|
||||
|
|
@ -3421,10 +3438,9 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
/* compute the amount of pointer motion in frames, and where
|
||||
the region would be if we moved it by that much.
|
||||
*/
|
||||
|
||||
if ( drag_info.move_threshold_passed ) {
|
||||
|
||||
if (drag_info.current_pointer_frame > drag_info.pointer_frame_offset) {
|
||||
if (drag_info.current_pointer_frame >= drag_info.pointer_frame_offset) {
|
||||
|
||||
nframes64_t sync_frame;
|
||||
nframes64_t sync_offset;
|
||||
|
|
@ -3459,7 +3475,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
if (pending_region_position > max_frames - rv->region()->length()) {
|
||||
pending_region_position = drag_info.last_frame_position;
|
||||
}
|
||||
|
||||
|
||||
// printf ("3: pending_region_position= %lu %lu\n", pending_region_position, drag_info.last_frame_position );
|
||||
|
||||
bool x_move_allowed;
|
||||
|
|
@ -3475,7 +3491,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
x_move_allowed = !drag_info.x_constrained;
|
||||
}
|
||||
|
||||
if ( pending_region_position != drag_info.last_frame_position && x_move_allowed ) {
|
||||
if (( pending_region_position != drag_info.last_frame_position) && x_move_allowed ) {
|
||||
|
||||
/* now compute the canvas unit distance we need to move the regionview
|
||||
to make it appear at the new location.
|
||||
|
|
@ -3485,10 +3501,29 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
x_delta = ((double) (pending_region_position - drag_info.last_frame_position) / frames_per_unit);
|
||||
} else {
|
||||
x_delta = -((double) (drag_info.last_frame_position - pending_region_position) / frames_per_unit);
|
||||
}
|
||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
|
||||
|
||||
RegionView* rv2 = (*i);
|
||||
|
||||
// If any regionview is at zero, we need to know so we can stop further leftward motion.
|
||||
|
||||
double ix1, ix2, iy1, iy2;
|
||||
rv2->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv2->get_canvas_group()->i2w (ix1, iy1);
|
||||
|
||||
if (-x_delta > ix1 + horizontal_adjustment.get_value()) {
|
||||
// do_move = false;
|
||||
cerr << "illegal move" << endl;
|
||||
x_delta = 0;
|
||||
pending_region_position = drag_info.last_frame_position;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
drag_info.last_frame_position = pending_region_position;
|
||||
|
||||
|
||||
} else {
|
||||
x_delta = 0;
|
||||
}
|
||||
|
|
@ -3508,41 +3543,16 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
trackviews. nothing to do.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (x_delta < 0) {
|
||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
|
||||
|
||||
RegionView* rv2 = (*i);
|
||||
|
||||
// If any regionview is at zero, we need to know so we can stop further leftward motion.
|
||||
|
||||
double ix1, ix2, iy1, iy2;
|
||||
rv2->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv2->get_canvas_group()->i2w (ix1, iy1);
|
||||
|
||||
if (ix1 <= 1) {
|
||||
x_delta = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
MOTION
|
||||
************************************************************/
|
||||
|
||||
bool do_move;
|
||||
|
||||
bool do_move = true;
|
||||
if (drag_info.first_move) {
|
||||
if (drag_info.move_threshold_passed) {
|
||||
do_move = true;
|
||||
} else {
|
||||
if (!drag_info.move_threshold_passed) {
|
||||
do_move = false;
|
||||
}
|
||||
} else {
|
||||
do_move = true;
|
||||
}
|
||||
|
||||
if (do_move) {
|
||||
|
|
@ -3567,6 +3577,30 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
|
||||
rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv->get_canvas_group()->i2w (ix1, iy1);
|
||||
|
||||
if (drag_info.first_move) {
|
||||
|
||||
// hide any dependent views
|
||||
|
||||
rv->get_time_axis_view().hide_dependent_views (*rv);
|
||||
|
||||
/*
|
||||
reparent to a non scrolling group so that we can keep the
|
||||
region selection above all time axis views.
|
||||
reparenting means we have to move the rv as the two
|
||||
parent groups have different coordinates.
|
||||
*/
|
||||
|
||||
rv->get_canvas_group()->reparent(*_region_motion_group);
|
||||
|
||||
rv->get_canvas_group()->move ( 0, iy1 - 1);
|
||||
rv->fake_set_opaque (true);
|
||||
}
|
||||
/* for evaluation of the track position of iy1, we have to adjust
|
||||
to allow for the vertical scrolling adjustment and the height of the timebars.
|
||||
*/
|
||||
iy1 += vertical_adjustment.get_value() - canvas_timebars_vsize;
|
||||
|
||||
TimeAxisView* tvp2 = trackview_by_y_position (iy1);
|
||||
AudioTimeAxisView* canvas_atv = dynamic_cast<AudioTimeAxisView*>(tvp2);
|
||||
AudioTimeAxisView* temp_atv;
|
||||
|
|
@ -3629,43 +3663,12 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* prevent the regionview from being moved to before
|
||||
the zero position on the canvas.
|
||||
*/
|
||||
/* clamp */
|
||||
|
||||
if (x_delta < 0) {
|
||||
if (-x_delta > ix1) {
|
||||
x_delta = -ix1;
|
||||
}
|
||||
} else if ((x_delta > 0) && (rv->region()->last_frame() > max_frames - x_delta)) {
|
||||
x_delta = max_frames - rv->region()->last_frame();
|
||||
}
|
||||
|
||||
|
||||
if (drag_info.first_move) {
|
||||
|
||||
/* hide any dependent views */
|
||||
|
||||
rv->get_time_axis_view().hide_dependent_views (*rv);
|
||||
|
||||
/* this is subtle. raising the regionview itself won't help,
|
||||
because raise_to_top() just puts the item on the top of
|
||||
its parent's stack. so, we need to put the trackview canvas_display group
|
||||
on the top, since its parent is the whole canvas.
|
||||
*/
|
||||
|
||||
rv->get_canvas_group()->raise_to_top();
|
||||
rv->get_time_axis_view().canvas_display->raise_to_top();
|
||||
cursor_group->raise_to_top();
|
||||
rv->fake_set_opaque (true);
|
||||
}
|
||||
|
||||
if (drag_info.brushing) {
|
||||
mouse_brush_insert_region (rv, pending_region_position);
|
||||
} else {
|
||||
rv->move (x_delta, y_delta);
|
||||
|
||||
rv->move (x_delta, y_delta);
|
||||
|
||||
}
|
||||
|
||||
} /* foreach region */
|
||||
|
|
@ -3693,7 +3696,9 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
vector<RegionView*> new_selection;
|
||||
typedef set<boost::shared_ptr<Playlist> > PlaylistSet;
|
||||
PlaylistSet modified_playlists;
|
||||
pair<PlaylistSet::iterator,bool> insert_result;
|
||||
PlaylistSet frozen_playlists;
|
||||
list <sigc::connection> modified_playlist_connections;
|
||||
pair<PlaylistSet::iterator,bool> insert_result, frozen_insert_result;
|
||||
|
||||
/* first_move is set to false if the regionview has been moved in the
|
||||
motion handler.
|
||||
|
|
@ -3706,11 +3711,12 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
|
||||
nocommit = false;
|
||||
|
||||
/* The regionview has been moved at some stage during the grab so we need
|
||||
/* XXX is this true??? i can''t tell the difference.
|
||||
The regionview has been moved at some stage during the grab so we need
|
||||
to account for any mouse movement between this event and the last one.
|
||||
*/
|
||||
|
||||
region_drag_motion_callback (item, event);
|
||||
//region_drag_motion_callback (item, event);
|
||||
|
||||
if (Config->get_edit_mode() == Splice && !pre_drag_region_selection.empty()) {
|
||||
selection->set (pre_drag_region_selection);
|
||||
|
|
@ -3758,14 +3764,17 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
|
||||
|
||||
RegionView* rv = (*i);
|
||||
double ix1, ix2, iy1, iy2;
|
||||
double ix1, ix2, iy1, iy2, y_pos;
|
||||
rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2);
|
||||
rv->get_canvas_group()->i2w (ix1, iy1);
|
||||
|
||||
y_pos = iy1;
|
||||
iy1 += vertical_adjustment.get_value() - canvas_timebars_vsize;
|
||||
|
||||
TimeAxisView* dest_tv = trackview_by_y_position (iy1);
|
||||
AudioTimeAxisView* dest_atv = dynamic_cast<AudioTimeAxisView*>(dest_tv);
|
||||
double speed;
|
||||
bool changed_tracks;
|
||||
bool changed_position;
|
||||
bool changed_tracks, changed_position;
|
||||
nframes64_t where;
|
||||
|
||||
if (rv->region()->locked()) {
|
||||
|
|
@ -3785,23 +3794,25 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
changed_tracks = (dest_tv != &rv->get_time_axis_view());
|
||||
|
||||
if (changed_position && !drag_info.x_constrained) {
|
||||
_master_group->w2i(ix1, iy1);
|
||||
where = (nframes64_t) (unit_to_frame (ix1) * speed);
|
||||
} else {
|
||||
where = rv->region()->position();
|
||||
}
|
||||
|
||||
/* undo the previous hide_dependent_views so that xfades don't
|
||||
disappear on copying regions
|
||||
*/
|
||||
|
||||
rv->get_time_axis_view().reveal_dependent_views (*rv);
|
||||
|
||||
boost::shared_ptr<Region> new_region;
|
||||
|
||||
if (drag_info.copy) {
|
||||
/* we already made a copy */
|
||||
new_region = rv->region();
|
||||
} else {
|
||||
|
||||
/* undo the previous hide_dependent_views so that xfades don't
|
||||
disappear on copying regions
|
||||
*/
|
||||
|
||||
//rv->get_time_axis_view().reveal_dependent_views (*rv);
|
||||
|
||||
} else if (changed_tracks) {
|
||||
new_region = RegionFactory::create (rv->region());
|
||||
}
|
||||
|
||||
|
|
@ -3815,7 +3826,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
|
||||
insert_result = modified_playlists.insert (to_playlist);
|
||||
if (insert_result.second) {
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
|
||||
session->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0));
|
||||
}
|
||||
|
||||
to_playlist->add_region (new_region, where);
|
||||
|
|
@ -3824,19 +3835,36 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
|
||||
if (!latest_regionviews.empty()) {
|
||||
// XXX why just the first one ? we only expect one
|
||||
dest_atv->reveal_dependent_views (*latest_regionviews.front());
|
||||
//dest_atv->reveal_dependent_views (*latest_regionviews.front());
|
||||
new_selection.push_back (latest_regionviews.front());
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/*
|
||||
motion on the same track. plonk the previously reparented region
|
||||
back to its original canvas group (its streamview).
|
||||
No need to do anything for copies as they are fake regions which will be deleted.
|
||||
*/
|
||||
/* account for any vertical autoscrolling that might have happened during the move */
|
||||
double vadjustment_delta = vertical_adjustment.get_value () - grabbed_vadjustment;
|
||||
y_pos += vadjustment_delta;
|
||||
|
||||
RouteTimeAxisView* dest_rtv = dynamic_cast<RouteTimeAxisView*> (dest_atv);
|
||||
rv->get_canvas_group()->reparent (*dest_rtv->view()->canvas_item());
|
||||
rv->get_canvas_group()->move ( 0, -y_pos + 1);
|
||||
|
||||
/* just change the model */
|
||||
|
||||
boost::shared_ptr<Playlist> playlist = dest_atv->playlist();
|
||||
|
||||
insert_result = modified_playlists.insert (playlist);
|
||||
if (insert_result.second) {
|
||||
session->add_command (new MementoCommand<Playlist>(*playlist, &playlist->get_state(), 0));
|
||||
session->add_command (new MementoCommand<Playlist>(*playlist, &playlist->get_state(), 0));
|
||||
}
|
||||
/* freeze to avoid lots of relayering in the case of a multi-region drag */
|
||||
frozen_insert_result = frozen_playlists.insert(playlist);
|
||||
if (frozen_insert_result.second) {
|
||||
playlist->freeze();
|
||||
}
|
||||
|
||||
rv->region()->set_position (where, (void*) this);
|
||||
|
|
@ -3867,7 +3895,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
|
||||
insert_result = modified_playlists.insert (from_playlist);
|
||||
if (insert_result.second) {
|
||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
|
||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
|
||||
}
|
||||
|
||||
from_playlist->remove_region ((rv->region()));
|
||||
|
|
@ -3903,7 +3931,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
copies.push_back (rv);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (new_selection.empty()) {
|
||||
if (drag_info.copy) {
|
||||
|
|
@ -3919,6 +3946,10 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
*/
|
||||
selection->set (new_selection);
|
||||
}
|
||||
|
||||
for (set<boost::shared_ptr<Playlist> >::iterator p = frozen_playlists.begin(); p != frozen_playlists.end(); ++p) {
|
||||
(*p)->thaw();
|
||||
}
|
||||
|
||||
out:
|
||||
if (!nocommit) {
|
||||
|
|
@ -3931,6 +3962,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
|||
for (vector<RegionView*>::iterator x = copies.begin(); x != copies.end(); ++x) {
|
||||
delete *x;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -4021,7 +4053,7 @@ Editor::show_verbose_time_cursor (nframes64_t frame, double offset, double xpos,
|
|||
set_verbose_canvas_cursor (buf, xpos + offset, ypos + offset);
|
||||
}
|
||||
else {
|
||||
set_verbose_canvas_cursor (buf, drag_info.current_pointer_x + offset, drag_info.current_pointer_y + offset);
|
||||
set_verbose_canvas_cursor (buf, drag_info.current_pointer_x + offset - horizontal_adjustment.get_value(), drag_info.current_pointer_y + offset - vertical_adjustment.get_value() + canvas_timebars_vsize);
|
||||
}
|
||||
show_verbose_canvas_cursor ();
|
||||
}
|
||||
|
|
@ -4934,7 +4966,7 @@ Editor::drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
|
||||
update_marker_drag_item (temp_location);
|
||||
range_marker_drag_rect->show();
|
||||
range_marker_drag_rect->raise_to_top();
|
||||
//range_marker_drag_rect->raise_to_top();
|
||||
|
||||
}
|
||||
break;
|
||||
|
|
@ -5215,8 +5247,7 @@ Editor::end_rubberband_select (ArdourCanvas::Item* item, GdkEvent* event)
|
|||
if (drag_info.current_pointer_y < drag_info.grab_y) {
|
||||
y1 = drag_info.current_pointer_y;
|
||||
y2 = drag_info.grab_y;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
y2 = drag_info.current_pointer_y;
|
||||
y1 = drag_info.grab_y;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1534,7 +1534,7 @@ Editor::scroll_tracks_down_line ()
|
|||
{
|
||||
|
||||
Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment();
|
||||
double vert_value = adj->get_value() + 20;
|
||||
double vert_value = adj->get_value() + 60;
|
||||
|
||||
if (vert_value>adj->get_upper() - canvas_height) {
|
||||
vert_value = adj->get_upper() - canvas_height;
|
||||
|
|
@ -1546,7 +1546,7 @@ void
|
|||
Editor::scroll_tracks_up_line ()
|
||||
{
|
||||
Gtk::Adjustment* adj = edit_vscrollbar.get_adjustment();
|
||||
adj->set_value (adj->get_value() - 20);
|
||||
adj->set_value (adj->get_value() - 60);
|
||||
}
|
||||
|
||||
/* ZOOM */
|
||||
|
|
@ -1860,8 +1860,9 @@ Editor::temporal_zoom_by_frame (nframes64_t start, nframes64_t end, const string
|
|||
void
|
||||
Editor::temporal_zoom_to_frame (bool coarser, nframes64_t frame)
|
||||
{
|
||||
if (!session) return;
|
||||
|
||||
if (!session) {
|
||||
return;
|
||||
}
|
||||
double range_before = frame - leftmost_frame;
|
||||
double new_fpu;
|
||||
|
||||
|
|
@ -1875,12 +1876,15 @@ Editor::temporal_zoom_to_frame (bool coarser, nframes64_t frame)
|
|||
range_before /= 1.61803399;
|
||||
}
|
||||
|
||||
if (new_fpu == frames_per_unit) return;
|
||||
if (new_fpu == frames_per_unit) {
|
||||
return;
|
||||
}
|
||||
|
||||
nframes64_t new_leftmost = frame - (nframes64_t)range_before;
|
||||
|
||||
if (new_leftmost > frame) new_leftmost = 0;
|
||||
|
||||
if (new_leftmost > frame) {
|
||||
new_leftmost = 0;
|
||||
}
|
||||
// begin_reversible_command (_("zoom to frame"));
|
||||
// session->add_undo (bind (mem_fun(*this, &Editor::reposition_and_zoom), leftmost_frame, frames_per_unit));
|
||||
// session->add_redo (bind (mem_fun(*this, &Editor::reposition_and_zoom), new_leftmost, new_fpu));
|
||||
|
|
@ -2198,8 +2202,8 @@ Editor::insert_region_list_drag (boost::shared_ptr<AudioRegion> region, int x, i
|
|||
boost::shared_ptr<Playlist> playlist;
|
||||
|
||||
track_canvas->window_to_world (x, y, wx, wy);
|
||||
wx += horizontal_adjustment.get_value();
|
||||
wy += vertical_adjustment.get_value();
|
||||
//wx += horizontal_adjustment.get_value();
|
||||
//wy += vertical_adjustment.get_value();
|
||||
|
||||
GdkEvent event;
|
||||
event.type = GDK_BUTTON_RELEASE;
|
||||
|
|
@ -5953,7 +5957,6 @@ Editor::fit_tracks ()
|
|||
first_y_pos = std::min ((*t)->y_position, first_y_pos);
|
||||
}
|
||||
|
||||
|
||||
vertical_adjustment.set_value (first_y_pos);
|
||||
|
||||
redo_visual_stack.push_back (current_visual_state());
|
||||
|
|
|
|||
|
|
@ -317,7 +317,7 @@ Editor::redisplay_route_list ()
|
|||
|
||||
cursor_group->raise_to_top ();
|
||||
|
||||
reset_scrolling_region ();
|
||||
//reset_scrolling_region ();
|
||||
|
||||
if (Config->get_sync_all_route_ordering() && !ignore_route_list_reorder) {
|
||||
ignore_route_order_sync = true;
|
||||
|
|
@ -353,7 +353,7 @@ Editor::hide_all_tracks (bool with_select)
|
|||
otherwise.
|
||||
*/
|
||||
|
||||
reset_scrolling_region ();
|
||||
//reset_scrolling_region ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ Editor::initialize_rulers ()
|
|||
minsec_ruler->set_size_request (-1, (int)timebar_height);
|
||||
gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]);
|
||||
|
||||
visible_timebars = 7; /* 4 here, 3 in time_canvas */
|
||||
visible_timebars = 1; /*this will be changed below */
|
||||
ruler_pressed_button = 0;
|
||||
}
|
||||
|
||||
|
|
@ -556,7 +556,9 @@ Editor::update_ruler_visibility ()
|
|||
{
|
||||
using namespace Box_Helpers;
|
||||
BoxList & lab_children = time_button_vbox.children();
|
||||
BoxList & ruler_lab_children = ruler_label_vbox.children();
|
||||
BoxList & ruler_children = time_canvas_vbox.children();
|
||||
int visible_rulers = 0;
|
||||
|
||||
if (no_ruler_shown_update) {
|
||||
return;
|
||||
|
|
@ -565,9 +567,10 @@ Editor::update_ruler_visibility ()
|
|||
visible_timebars = 0;
|
||||
|
||||
lab_children.clear();
|
||||
ruler_lab_children.clear();
|
||||
|
||||
// leave the last one (the time_canvas) intact
|
||||
while (ruler_children.size() > 1) {
|
||||
while (ruler_children.size() > 0) {
|
||||
ruler_children.pop_front();
|
||||
}
|
||||
|
||||
|
|
@ -625,31 +628,32 @@ Editor::update_ruler_visibility ()
|
|||
ruler_children.insert (canvaspos, Element(*_ruler_separator, PACK_SHRINK, PACK_START));
|
||||
|
||||
if (ruler_minsec_action->get_active()) {
|
||||
lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START));
|
||||
ruler_lab_children.push_back (Element(minsec_label, PACK_SHRINK, PACK_START));
|
||||
ruler_children.insert (canvaspos, Element(*minsec_ruler, PACK_SHRINK, PACK_START));
|
||||
visible_timebars++;
|
||||
visible_rulers++;
|
||||
}
|
||||
|
||||
if (ruler_timecode_action->get_active()) {
|
||||
lab_children.push_back (Element(smpte_label, PACK_SHRINK, PACK_START));
|
||||
ruler_lab_children.push_back (Element(smpte_label, PACK_SHRINK, PACK_START));
|
||||
ruler_children.insert (canvaspos, Element(*smpte_ruler, PACK_SHRINK, PACK_START));
|
||||
visible_timebars++;
|
||||
visible_rulers++;
|
||||
}
|
||||
|
||||
if (ruler_samples_action->get_active()) {
|
||||
lab_children.push_back (Element(frame_label, PACK_SHRINK, PACK_START));
|
||||
ruler_lab_children.push_back (Element(frame_label, PACK_SHRINK, PACK_START));
|
||||
ruler_children.insert (canvaspos, Element(*frames_ruler, PACK_SHRINK, PACK_START));
|
||||
visible_timebars++;
|
||||
visible_rulers++;
|
||||
}
|
||||
|
||||
if (ruler_bbt_action->get_active()) {
|
||||
lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START));
|
||||
ruler_lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START));
|
||||
ruler_children.insert (canvaspos, Element(*bbt_ruler, PACK_SHRINK, PACK_START));
|
||||
visible_timebars++;
|
||||
visible_rulers++;
|
||||
}
|
||||
|
||||
double tbpos = 1.0;
|
||||
double old_unit_pos ;
|
||||
double tbgpos = 1.0;
|
||||
double old_unit_pos;
|
||||
|
||||
if (ruler_meter_action->get_active()) {
|
||||
lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START));
|
||||
|
|
@ -658,11 +662,17 @@ Editor::update_ruler_visibility ()
|
|||
if (tbpos != old_unit_pos) {
|
||||
meter_group->move ( 0.0, tbpos - old_unit_pos);
|
||||
}
|
||||
old_unit_pos = meter_bar_group->property_y();
|
||||
if (tbgpos != old_unit_pos) {
|
||||
meter_bar_group->move ( 0.0, tbgpos - old_unit_pos);
|
||||
}
|
||||
meter_bar_group->show();
|
||||
meter_group->show();
|
||||
tbpos += timebar_height;
|
||||
tbgpos += timebar_height;
|
||||
visible_timebars++;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
meter_bar_group->hide();
|
||||
meter_group->hide();
|
||||
}
|
||||
|
||||
|
|
@ -672,11 +682,17 @@ Editor::update_ruler_visibility ()
|
|||
if (tbpos != old_unit_pos) {
|
||||
tempo_group->move(0.0, tbpos - old_unit_pos);
|
||||
}
|
||||
old_unit_pos = tempo_bar_group->property_y();
|
||||
if (tbgpos != old_unit_pos) {
|
||||
tempo_bar_group->move ( 0.0, tbgpos - old_unit_pos);
|
||||
}
|
||||
tempo_bar_group->show();
|
||||
tempo_group->show();
|
||||
tbpos += timebar_height;
|
||||
tbgpos += timebar_height;
|
||||
visible_timebars++;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
tempo_bar_group->hide();
|
||||
tempo_group->hide();
|
||||
}
|
||||
|
||||
|
|
@ -686,10 +702,17 @@ Editor::update_ruler_visibility ()
|
|||
if (tbpos != old_unit_pos) {
|
||||
range_marker_group->move (0.0, tbpos - old_unit_pos);
|
||||
}
|
||||
old_unit_pos = range_marker_bar_group->property_y();
|
||||
if (tbgpos != old_unit_pos) {
|
||||
range_marker_bar_group->move (0.0, tbgpos - old_unit_pos);
|
||||
}
|
||||
range_marker_bar_group->show();
|
||||
range_marker_group->show();
|
||||
tbpos += timebar_height;
|
||||
tbgpos += timebar_height;
|
||||
visible_timebars++;
|
||||
} else {
|
||||
range_marker_bar_group->hide();
|
||||
range_marker_group->hide();
|
||||
}
|
||||
|
||||
|
|
@ -699,11 +722,17 @@ Editor::update_ruler_visibility ()
|
|||
if (tbpos != old_unit_pos) {
|
||||
transport_marker_group->move ( 0.0, tbpos - old_unit_pos);
|
||||
}
|
||||
old_unit_pos = transport_marker_bar_group->property_y();
|
||||
if (tbgpos != old_unit_pos) {
|
||||
transport_marker_bar_group->move ( 0.0, tbgpos - old_unit_pos);
|
||||
}
|
||||
transport_marker_bar_group->show();
|
||||
transport_marker_group->show();
|
||||
tbpos += timebar_height;
|
||||
tbgpos += timebar_height;
|
||||
visible_timebars++;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
transport_marker_bar_group->hide();
|
||||
transport_marker_group->hide();
|
||||
}
|
||||
|
||||
|
|
@ -713,13 +742,19 @@ Editor::update_ruler_visibility ()
|
|||
if (tbpos != old_unit_pos) {
|
||||
cd_marker_group->move (0.0, tbpos - old_unit_pos);
|
||||
}
|
||||
old_unit_pos = cd_marker_bar_group->property_y();
|
||||
if (tbgpos != old_unit_pos) {
|
||||
cd_marker_bar_group->move (0.0, tbgpos - old_unit_pos);
|
||||
}
|
||||
cd_marker_bar_group->show();
|
||||
cd_marker_group->show();
|
||||
tbpos += timebar_height;
|
||||
tbgpos += timebar_height;
|
||||
visible_timebars++;
|
||||
// make sure all cd markers show up in their respective places
|
||||
update_cd_marker_display();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cd_marker_bar_group->hide();
|
||||
cd_marker_group->hide();
|
||||
// make sure all cd markers show up in their respective places
|
||||
update_cd_marker_display();
|
||||
|
|
@ -731,22 +766,41 @@ Editor::update_ruler_visibility ()
|
|||
if (tbpos != old_unit_pos) {
|
||||
marker_group->move ( 0.0, tbpos - old_unit_pos);
|
||||
}
|
||||
old_unit_pos = marker_bar_group->property_y();
|
||||
if (tbgpos != old_unit_pos) {
|
||||
marker_bar_group->move ( 0.0, tbgpos - old_unit_pos);
|
||||
}
|
||||
marker_bar_group->show();
|
||||
marker_group->show();
|
||||
tbpos += timebar_height;
|
||||
tbgpos += timebar_height;
|
||||
visible_timebars++;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
marker_bar_group->hide();
|
||||
marker_group->hide();
|
||||
}
|
||||
|
||||
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars));
|
||||
gdouble old_canvas_timebars_vsize = canvas_timebars_vsize;
|
||||
canvas_timebars_vsize = (timebar_height * visible_timebars) + 2.0;
|
||||
gdouble vertical_pos_delta = canvas_timebars_vsize - old_canvas_timebars_vsize;
|
||||
|
||||
if (vertical_pos_delta < 0 && (vertical_adjustment.get_value() + canvas_height) >= vertical_adjustment.get_upper()) {
|
||||
/*if we're at the bottom of the canvas, don't move the _trackview_grooup*/
|
||||
vertical_adjustment.set_upper(vertical_adjustment.get_upper() + vertical_pos_delta);
|
||||
} else {
|
||||
vertical_adjustment.set_upper(vertical_adjustment.get_upper() + vertical_pos_delta);
|
||||
_trackview_group->move (0, vertical_pos_delta);
|
||||
}
|
||||
ruler_label_vbox.set_size_request (-1, (int)(timebar_height * visible_rulers));
|
||||
|
||||
time_canvas_vbox.set_size_request (-1,-1);
|
||||
time_canvas_event_box.queue_resize();
|
||||
|
||||
update_fixed_rulers();
|
||||
//update_tempo_based_rulers();
|
||||
redisplay_tempo (false);
|
||||
|
||||
time_canvas_event_box.show_all();
|
||||
ruler_label_frame.show_all();
|
||||
time_button_frame.show_all();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ void
|
|||
Editor::hide_measures ()
|
||||
{
|
||||
for (TimeLineList::iterator i = used_measure_lines.begin(); i != used_measure_lines.end(); ++i) {
|
||||
(*i)->hide();
|
||||
(*i)->hide();
|
||||
free_measure_lines.push_back (*i);
|
||||
}
|
||||
used_measure_lines.clear ();
|
||||
|
|
@ -212,7 +212,7 @@ Editor::draw_measures ()
|
|||
TempoMap::BBTPointList::iterator i;
|
||||
ArdourCanvas::SimpleLine *line;
|
||||
gdouble xpos;
|
||||
double x1, x2, y1, y2, beat_density;
|
||||
double beat_density;
|
||||
|
||||
uint32_t beats = 0;
|
||||
uint32_t bars = 0;
|
||||
|
|
@ -222,9 +222,6 @@ Editor::draw_measures ()
|
|||
return;
|
||||
}
|
||||
|
||||
track_canvas->get_scroll_region (x1, y1, x2, y2);
|
||||
y2 = TimeAxisView::hLargest*5000; // five thousand largest tracks should be enough.. :)
|
||||
|
||||
/* get the first bar spacing */
|
||||
|
||||
i = current_bbt_points->end();
|
||||
|
|
@ -264,7 +261,7 @@ Editor::draw_measures ()
|
|||
line = get_time_line ();
|
||||
line->property_x1() = xpos;
|
||||
line->property_x2() = xpos;
|
||||
line->property_y2() = y2;
|
||||
line->property_y2() = canvas_height;
|
||||
line->property_color_rgba() = color;
|
||||
//line->raise_to_top();
|
||||
line->show();
|
||||
|
|
@ -274,7 +271,7 @@ Editor::draw_measures ()
|
|||
|
||||
/* the cursors are always on top of everything */
|
||||
|
||||
cursor_group->raise_to_top();
|
||||
//cursor_group->raise_to_top();
|
||||
time_line_group->lower_to_bottom();
|
||||
if (logo_item) {
|
||||
logo_item->lower_to_bottom ();
|
||||
|
|
|
|||
|
|
@ -223,7 +223,10 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
|
|||
static const int container_border_width;
|
||||
static const int vertical_spacing;
|
||||
static const int horizontal_spacing;
|
||||
|
||||
|
||||
virtual gdouble get_trackview_group_vertical_offset () const = 0;
|
||||
virtual ArdourCanvas::Group* get_trackview_group () const = 0;
|
||||
|
||||
static PublicEditor* _instance;
|
||||
|
||||
friend class PluginUIWindow;
|
||||
|
|
|
|||
|
|
@ -221,7 +221,8 @@ RegionView::region_changed (Change what_changed)
|
|||
region_sync_changed ();
|
||||
}
|
||||
if (what_changed & Region::LayerChanged) {
|
||||
region_layered ();
|
||||
// this is handled by the playlist i believe
|
||||
//region_layered ();
|
||||
}
|
||||
if (what_changed & Region::LockChanged) {
|
||||
region_locked ();
|
||||
|
|
@ -270,7 +271,7 @@ RegionView::region_layered ()
|
|||
{
|
||||
RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*>(&get_time_axis_view());
|
||||
assert(rtv);
|
||||
rtv->view()->region_layered (this);
|
||||
//rtv->view()->region_layered (this);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -48,7 +48,6 @@ using namespace Editing;
|
|||
StreamView::StreamView (RouteTimeAxisView& tv)
|
||||
: _trackview (tv)
|
||||
, canvas_group(new ArdourCanvas::Group(*_trackview.canvas_display))
|
||||
, canvas_rect(new ArdourCanvas::SimpleRect (*canvas_group))
|
||||
, _samples_per_unit(_trackview.editor.get_current_zoom())
|
||||
, rec_updating(false)
|
||||
, rec_active(false)
|
||||
|
|
@ -61,8 +60,9 @@ StreamView::StreamView (RouteTimeAxisView& tv)
|
|||
canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group);
|
||||
canvas_rect->property_x1() = 0.0;
|
||||
canvas_rect->property_y1() = 0.0;
|
||||
canvas_rect->property_x2() = _trackview.editor.frame_to_pixel (max_frames);
|
||||
canvas_rect->property_x2() = _trackview.editor.frame_to_pixel (max_frames - 1);
|
||||
canvas_rect->property_y2() = (double) tv.current_height();
|
||||
|
||||
canvas_rect->property_outline_what() = (guint32) (0x1|0x2|0x8); // outline ends and bottom
|
||||
// (Fill/Outline colours set in derived classes)
|
||||
|
||||
|
|
@ -285,12 +285,10 @@ StreamView::region_layered (RegionView* rv)
|
|||
|
||||
/* don't ever leave it at the bottom, since then it doesn't
|
||||
get events - the parent group does instead ...
|
||||
we need to raise it above the streamview's
|
||||
canvas_rect, hence the layer+1 here
|
||||
*/
|
||||
|
||||
/* this used to be + 1, but regions to the left ended up below
|
||||
..something.. and couldn't receive events. why? good question.
|
||||
*/
|
||||
rv->get_canvas_group()->raise (rv->region()->layer() + 2);
|
||||
rv->get_canvas_group()->raise (rv->region()->layer() + 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ public:
|
|||
virtual int set_samples_per_unit (gdouble spp);
|
||||
gdouble get_samples_per_unit () { return _samples_per_unit; }
|
||||
|
||||
ArdourCanvas::Item* canvas_item() { return canvas_group; }
|
||||
ArdourCanvas::Group* canvas_item() { return canvas_group; }
|
||||
|
||||
enum ColorTarget {
|
||||
RegionColor,
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
|
|||
need_size_info = false;
|
||||
}
|
||||
|
||||
canvas_display = new Group (*canvas.root(), 0.0, 0.0);
|
||||
canvas_display = new Group (*ed.get_trackview_group (), 0.0, 0.0);
|
||||
|
||||
selection_group = new Group (*canvas_display);
|
||||
selection_group->hide();
|
||||
|
|
@ -229,6 +229,7 @@ TimeAxisView::show_at (double y, int& nth, VBox *parent)
|
|||
*/
|
||||
|
||||
canvas_display->get_bounds (ix1, iy1, ix2, iy2);
|
||||
iy1 += editor.get_trackview_group_vertical_offset ();
|
||||
Group* pg = canvas_display->property_parent();
|
||||
pg->i2w (ix1, iy1);
|
||||
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ TimeAxisViewItem::init (const string& it_name, double spu, Gdk::Color& base_colo
|
|||
vestigial_frame = new ArdourCanvas::SimpleRect (*group);
|
||||
vestigial_frame->property_x1() = (double) 0.0;
|
||||
vestigial_frame->property_y1() = (double) 1.0;
|
||||
vestigial_frame->property_x2() = 2.0;
|
||||
vestigial_frame->property_x2() = (double) 2.0;
|
||||
vestigial_frame->property_y2() = (double) trackview.current_height();
|
||||
vestigial_frame->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_VestigialFrame.get();
|
||||
vestigial_frame->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_VestigialFrame.get();
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2005-06-08.21
|
||||
scriptversion=2006-05-10.23
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
|
||||
# Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
|
|
@ -33,6 +33,8 @@ if test $# -eq 0; then
|
|||
fi
|
||||
|
||||
run=:
|
||||
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
|
|
@ -44,7 +46,7 @@ fi
|
|||
|
||||
msg="missing on your system"
|
||||
|
||||
case "$1" in
|
||||
case $1 in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
|
|
@ -77,6 +79,7 @@ Supported PROGRAM values:
|
|||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
autom4te touch the output file, or create a stub one
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
|
|
@ -106,7 +109,7 @@ esac
|
|||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program).
|
||||
case "$1" in
|
||||
case $1 in
|
||||
lex|yacc)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
|
@ -135,7 +138,7 @@ esac
|
|||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
case $1 in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
|
|
@ -164,7 +167,7 @@ WARNING: \`$1' is $msg. You should only need it if
|
|||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
case $f in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
|
|
@ -192,8 +195,8 @@ WARNING: \`$1' is needed, but is $msg.
|
|||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
||||
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
|
|
@ -214,25 +217,25 @@ WARNING: \`$1' $msg. You should only need it if
|
|||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
case $LASTARG in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
if test ! -f y.tab.h; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
if test ! -f y.tab.c; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
|
@ -244,18 +247,18 @@ WARNING: \`$1' is $msg. You should only need it if
|
|||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
case $LASTARG in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
if test ! -f lex.yy.c; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
|
@ -267,11 +270,9 @@ WARNING: \`$1' is $msg. You should only need it if
|
|||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
||||
fi
|
||||
if [ -f "$file" ]; then
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
|
|
@ -289,11 +290,17 @@ WARNING: \`$1' is $msg. You should only need it if
|
|||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
|
||||
file=`sed -n '
|
||||
/^@setfilename/{
|
||||
s/.* \([^ ]*\) *$/\1/
|
||||
p
|
||||
q
|
||||
}' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
|
|
@ -317,13 +324,13 @@ WARNING: \`$1' is $msg. You should only need it if
|
|||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
case $firstarg in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
case $firstarg in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue