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();
_hidden = false;
height = 0;
effective_height = 0;
- height_scaling_factor = 1.0;
parent = rent;
_has_state = false;
last_name_entry_key_press_event = 0;
name_packing = NamePackingBits (0);
resize_drag_start = -1;
- resize_idle_id = -1;
/*
Create the standard LHS Controls
controls_table.set_no_show_all ();
resizer.set_size_request (10, 10);
+ resizer.set_name ("ResizeHandle");
resizer.signal_expose_event().connect (mem_fun (*this, &TimeAxisView::resizer_expose));
resizer.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::resizer_button_press));
resizer.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::resizer_button_release));
*/
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);
if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
step_height (true);
return true;
+ } else if (Keyboard::no_modifiers_active (ev->state)) {
+ editor.scroll_tracks_up_line();
+ return true;
}
break;
if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
step_height (false);
return true;
+ } else if (Keyboard::no_modifiers_active (ev->state)) {
+ editor.scroll_tracks_down_line();
+ return true;
}
break;
Hiding ();
}
-void
-TimeAxisView::set_height_scaling_factor (double hsf)
-{
- height_scaling_factor = hsf;
- set_height (height);
-}
-
void
TimeAxisView::step_height (bool bigger)
{
+ static const uint32_t step = 20;
+
if (bigger) {
- set_height (height + 4);
+ set_height (height + step);
} else {
- if (height > 4) {
- set_height (std::max (height - 4, hSmall));
+ if (height > step) {
+ set_height (std::max (height - step, hSmall));
} else if (height != hSmall) {
set_height (hSmall);
}
TimeAxisView::set_height(uint32_t h)
{
height = h;
+
controls_frame.set_size_request (-1, current_height() + ((order == 0) ? 1 : 0));
- //cerr << "TimeAxisView::set_height_pixels() called h = " << h << endl;//DEBUG
+
if (canvas_item_visible (selection_group)) {
/* resize the selection rect */
show_selection (editor.get_selection().time);
}
-
+
+ reshow_feature_lines ();
}
bool
Selection& s (editor.get_selection());
if (!s.selected (this)) {
- cerr << "set selected track\n";
editor.set_selected_track (*this, Selection::Set);
}
}
(*i)->set_selected (false);
}
}
+
+ resizer.queue_draw ();
}
void
return parent->get_parent_with_state ();
}
-void
+
+XMLNode&
+TimeAxisView::get_state ()
+{
+ XMLNode* node = new XMLNode ("TAV-" + name());
+ char buf[32];
+
+ snprintf (buf, sizeof(buf), "%u", height);
+ node->add_property ("height", buf);
+ node->add_property ("marked_for_display", (_marked_for_display ? "1" : "0"));
+ return *node;
+}
+
+int
TimeAxisView::set_state (const XMLNode& node)
{
const XMLProperty *prop;
+ if ((prop = node.property ("marked_for_display")) != 0) {
+ _marked_for_display = (prop->value() == "1");
+ }
+
if ((prop = node.property ("track_height")) != 0) {
if (prop->value() == "largest") {
} else if ((prop = node.property ("height")) != 0) {
- uint32_t h = atoi (prop->value());
- set_height (h);
-
+ set_height (atoi (prop->value()));
+
} else {
+
set_height (hNormal);
}
+
+ return 0;
}
void
while (feature_lines.size()< analysis_features.size()) {
ArdourCanvas::SimpleLine* l = new ArdourCanvas::SimpleLine (*canvas_display);
l->property_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();
- l->property_y1() = 0;
- l->property_y2() = current_height();
feature_lines.push_back (l);
}
for (i = analysis_features.begin(), l = feature_lines.begin(); i != analysis_features.end() && l != feature_lines.end(); ++i, ++l) {
(*l)->property_x1() = editor.frame_to_pixel (*i);
(*l)->property_x2() = editor.frame_to_pixel (*i);
+ (*l)->property_y1() = 0;
+ (*l)->property_y2() = current_height();
(*l)->show ();
}
}
{
resize_drag_start = event->y_root;
resize_idle_target = current_height();
+ editor.start_resize_line_ops ();
return true;
}
TimeAxisView::resizer_button_release (GdkEventButton* ev)
{
resize_drag_start = -1;
+ editor.end_resize_line_ops ();
return true;
}
-static gboolean
-_idle_resizer (gpointer arg)
-{
- return ((TimeAxisView*)arg)->idle_resize ();
-}
-
-bool
-TimeAxisView::idle_resize ()
+void
+TimeAxisView::idle_resize (uint32_t h)
{
- set_height (resize_idle_target);
- resize_idle_id = -1;
- return false;
+ set_height (h);
}
bool
int32_t delta = (int32_t) floor (resize_drag_start - ev->y_root);
resize_idle_target = std::max (resize_idle_target - delta, (int) hSmall);
-
- if (resize_idle_id < 0) {
- resize_idle_id = g_idle_add (_idle_resizer, this);
- }
-
+ editor.add_to_idle_resize (this, resize_idle_target);
+
resize_drag_start = ev->y_root;
return true;
}
-
bool
TimeAxisView::resizer_expose (GdkEventExpose* event)
{
- resizer.get_window()->draw_rectangle (resizer.get_style()->get_fg_gc(STATE_ACTIVE),
- true,
- event->area.x,
- event->area.y,
- event->area.width,
- event->area.height);
+ int w, h, x, y, d;
+ Glib::RefPtr<Gdk::Window> win (resizer.get_window());
+ Glib::RefPtr<Gdk::GC> dark (resizer.get_style()->get_fg_gc (STATE_NORMAL));
+ Glib::RefPtr<Gdk::GC> light (resizer.get_style()->get_bg_gc (STATE_NORMAL));
+
+ win->draw_rectangle (controls_ebox.get_style()->get_bg_gc(STATE_NORMAL),
+ true,
+ event->area.x,
+ event->area.y,
+ event->area.width,
+ event->area.height);
+
+ win->get_geometry (x, y, w, h, d);
+
+ /* handle/line #1 */
+
+ win->draw_line (dark, 0, 0, w - 2, 0);
+ win->draw_point (dark, 0, 1);
+ win->draw_line (light, 1, 1, w - 1, 1);
+ win->draw_point (light, w - 1, 0);
+
+ /* handle/line #2 */
+
+ win->draw_line (dark, 0, 4, w - 2, 4);
+ win->draw_point (dark, 0, 5);
+ win->draw_line (light, 1, 5, w - 1, 5);
+ win->draw_point (light, w - 1, 4);
+
+ /* handle/line #3 */
+
+ win->draw_line (dark, 0, 8, w - 2, 8);
+ win->draw_point (dark, 0, 9);
+ win->draw_line (light, 1, 9, w - 1, 9);
+ win->draw_point (light, w - 1, 8);
+
return true;
}