summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r--gtk2_ardour/editor.cc160
1 files changed, 75 insertions, 85 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index ab8940874c..6c276f3b0c 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -209,8 +209,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.
@@ -219,9 +218,6 @@ Editor::Editor ()
vertical_adjustment (0.0, 0.0, 10.0, 400.0),
horizontal_adjustment (0.0, 0.0, 20.0, 1200.0),
- tempo_lines(0),
- marker_tempo_lines(0),
-
/* tool bar related */
edit_point_clock (X_("editpoint"), false, X_("EditPointClock"), true),
@@ -375,7 +371,6 @@ Editor::Editor ()
range_marker_drag_rect = 0;
marker_drag_line = 0;
tempo_map_change_idle_handler_id = -1;
- canvas_hroizontally_scrolled_handler_id = -1;
set_midi_edit_mode (MidiEditPencil, true);
set_mouse_mode (MouseObject, true);
@@ -390,16 +385,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);
@@ -436,9 +425,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) + 5);
-
+ //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);
@@ -455,6 +443,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);
@@ -479,26 +468,26 @@ 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);
- 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);
+ 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));
+
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);
time_button_event_box.add (time_button_vbox);
time_button_event_box.set_name ("TimebarLabelBase");
- time_button_frame.set_shadow_type (Gtk::SHADOW_NONE);
-
time_button_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
time_button_event_box.signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_label_button_release));
- time_button_frame.add (time_button_event_box);
- time_button_frame.set_name ("TimebarLabelBase");
- time_button_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
-
/* these enable us to have a dedicated window (for cursor setting, etc.)
for the canvas areas.
*/
@@ -514,16 +503,16 @@ Editor::Editor ()
edit_packer.set_border_width (0);
edit_packer.set_name ("EditorWindow");
- edit_packer.attach (edit_vscrollbar, 3, 4, 1, 2, FILL, FILL|EXPAND, 0, 0);
-
- edit_packer.attach (time_button_frame, 0, 2, 0, 1, FILL, SHRINK, 0, 0);
- edit_packer.attach (time_canvas_event_box, 2, 4, 0, 1, FILL|EXPAND, FILL, 0, 0);
+ edit_packer.attach (edit_vscrollbar, 0, 1, 0, 4, FILL, FILL|EXPAND, 0, 0);
+ edit_packer.attach (ruler_label_event_box, 1, 2, 0, 1, FILL, SHRINK, 0, 0);
+ edit_packer.attach (time_button_event_box, 1, 2, 1, 2, FILL, SHRINK, 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);
@@ -854,20 +843,10 @@ Editor::~Editor()
track_canvas = 0;
}
- if (time_canvas) {
- delete time_canvas;
- time_canvas = 0;
- }
-
if (track_canvas) {
delete track_canvas;
track_canvas = 0;
}
-
- if (time_canvas) {
- delete time_canvas;
- time_canvas = 0;
- }
}
void
@@ -1103,6 +1082,7 @@ Editor::start_scrolling ()
{
scroll_connection = ARDOUR_UI::instance()->SuperRapidScreenUpdate.connect
(mem_fun(*this, &Editor::update_current_screen));
+
}
void
@@ -1161,7 +1141,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);
@@ -3562,13 +3542,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
@@ -3577,7 +3567,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
@@ -4014,7 +4004,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
@@ -4405,6 +4396,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);
}
@@ -4532,10 +4524,6 @@ Editor::set_frames_per_unit (double fpu)
return;
}
- if (fpu == frames_per_unit) {
- return;
- }
-
frames_per_unit = fpu;
post_zoom ();
}
@@ -4566,9 +4554,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 ();
}
@@ -4576,10 +4566,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);
}
}
@@ -4606,13 +4598,6 @@ 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;
if (p & VisualChange::ZoomLevel) {
@@ -4624,26 +4609,29 @@ Editor::idle_visual_changer ()
update_tempo_based_rulers ();
}
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 */
}
@@ -5020,7 +5008,7 @@ Editor::queue_draw_resize_line (int at)
/* redraw where it used to be */
- Gdk::Rectangle r (xroot, old_resize_line_y - 1, controls_width + (int) canvas_width, 3);
+ Gdk::Rectangle r (0, old_resize_line_y - 1, controls_width + (int) canvas_width, 3);
win->invalidate_rect (r, true);
cerr << "invalidate " << xroot << "," << old_resize_line_y - 1 << ' '
<< controls_width + canvas_width << " x 3\n";
@@ -5028,7 +5016,7 @@ Editor::queue_draw_resize_line (int at)
/* draw where it is */
- Gdk::Rectangle r (xroot, at - 1, controls_width + (int) canvas_width, 3);
+ Gdk::Rectangle r (0, at - 1, controls_width + (int) canvas_width, 3);
win->invalidate_rect (r, true);
}
#endif
@@ -5063,7 +5051,7 @@ Editor::on_expose_event (GdkEventExpose* ev)
GdkRectangle lr;
GdkRectangle intersection;
- lr.x = xroot;
+ lr.x = 0;
lr.y = resize_line_y;
lr.width = controls_width + (int) canvas_width;
lr.height = 3;
@@ -5084,15 +5072,17 @@ Editor::on_expose_event (GdkEventExpose* ev)
Gdk::JOIN_MITER);
gdk_draw_line (win, gc->gobj(),
- xroot,
- yroot + resize_line_y,
- xroot + (int) canvas_width + controls_width,
- yroot + resize_line_y);
+ 0,
+ resize_line_y,
+ (int) canvas_width + controls_width,
+ resize_line_y);
+#if 0
cerr << "drew line @ " << xroot << ", " << yroot + resize_line_y
<< " to " << xroot + (int) canvas_width + controls_width
<< ", " << yroot + resize_line_y
<< endl;
- old_resize_line_y = yroot + resize_line_y;
+#endif
+ old_resize_line_y = resize_line_y;
cerr << "NEXT EXPOSE SHOULD BE AT " << old_resize_line_y << endl;
} else {
cerr << "no intersect with "