diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-09-10 21:27:39 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-09-10 21:27:39 +0000 |
commit | c86210a9d5bdb7b36ad58552a1f99f53d48781b3 (patch) | |
tree | 6ab06935a1e2bc4ef6a4448dd01b09f5b2628c66 /gtk2_ardour/editor_rulers.cc | |
parent | 68e943265edf04e63a8e8b8f62bab20f99d9c637 (diff) |
merge 2.0-ongoing into 3.0 @ 3581 - 3710
git-svn-id: svn://localhost/ardour2/branches/3.0@3712 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_rulers.cc')
-rw-r--r-- | gtk2_ardour/editor_rulers.cc | 106 |
1 files changed, 81 insertions, 25 deletions
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index dc62f669f8..47ea8d01a0 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -88,7 +88,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; } @@ -559,7 +559,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; @@ -568,9 +570,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(); } @@ -628,31 +631,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 tbpos = 0.0; + double tbgpos = 0.0; + double old_unit_pos; if (ruler_meter_action->get_active()) { lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START)); @@ -661,11 +665,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(); } @@ -675,11 +685,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(); } @@ -689,10 +705,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(); } @@ -702,11 +725,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(); } @@ -716,13 +745,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(); @@ -734,21 +769,42 @@ 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; + 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(); compute_fixed_ruler_scale(); update_fixed_rulers(); + redisplay_tempo (false); time_canvas_event_box.show_all(); - time_button_frame.show_all(); + ruler_label_event_box.show_all(); + time_button_event_box.show_all(); compute_current_bbt_points (leftmost_frame, leftmost_frame + (nframes64_t)(edit_packer.get_width() * frames_per_unit)); compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + (nframes64_t)(edit_packer.get_width() * frames_per_unit)); @@ -1704,7 +1760,7 @@ Editor::metric_get_frames (GtkCustomRulerMark **marks, gdouble lower, gdouble up nmarks = 5; *marks = (GtkCustomRulerMark *) g_malloc (sizeof(GtkCustomRulerMark) * nmarks); for (n = 0, pos = ilower; n < nmarks; pos += mark_interval, ++n) { - snprintf (buf, sizeof(buf), "%u", pos); + snprintf (buf, sizeof(buf), "%" PRIi64, pos); (*marks)[n].label = g_strdup (buf); (*marks)[n].position = pos; (*marks)[n].style = GtkCustomRulerMarkMajor; |