fix feedback loop while track resizing
git-svn-id: svn://localhost/ardour2/branches/3.0@3803 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
8b0e9befb9
commit
8d3d196440
@ -402,7 +402,7 @@ Editor::Editor ()
|
|||||||
|
|
||||||
controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
||||||
controls_layout.signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release));
|
controls_layout.signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release));
|
||||||
controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request));
|
controls_layout_size_request_connection = controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request));
|
||||||
|
|
||||||
edit_vscrollbar.set_adjustment (vertical_adjustment);
|
edit_vscrollbar.set_adjustment (vertical_adjustment);
|
||||||
edit_hscrollbar.set_adjustment (horizontal_adjustment);
|
edit_hscrollbar.set_adjustment (horizontal_adjustment);
|
||||||
|
@ -858,6 +858,7 @@ class Editor : public PublicEditor
|
|||||||
Gtk::Layout controls_layout;
|
Gtk::Layout controls_layout;
|
||||||
bool control_layout_scroll (GdkEventScroll* ev);
|
bool control_layout_scroll (GdkEventScroll* ev);
|
||||||
void controls_layout_size_request (Gtk::Requisition*);
|
void controls_layout_size_request (Gtk::Requisition*);
|
||||||
|
sigc::connection controls_layout_size_request_connection;
|
||||||
|
|
||||||
Gtk::HScrollbar edit_hscrollbar;
|
Gtk::HScrollbar edit_hscrollbar;
|
||||||
bool _dragging_hscrollbar;
|
bool _dragging_hscrollbar;
|
||||||
|
@ -364,6 +364,7 @@ Editor::controls_layout_size_request (Requisition* req)
|
|||||||
TreeModel::Children rows = route_display_model->children();
|
TreeModel::Children rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
double pos;
|
double pos;
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||||
@ -377,31 +378,39 @@ Editor::controls_layout_size_request (Requisition* req)
|
|||||||
if (!screen) {
|
if (!screen) {
|
||||||
screen = Gdk::Screen::get_default();
|
screen = Gdk::Screen::get_default();
|
||||||
}
|
}
|
||||||
|
gint height = min ( (gint) pos, (screen->get_height() - 400));
|
||||||
gint width = max (edit_controls_vbox.get_width(), controls_layout.get_width());
|
gint width = max (edit_controls_vbox.get_width(), controls_layout.get_width());
|
||||||
|
|
||||||
/* don't get too big. the fudge factors here are just guesses */
|
/* don't get too big. the fudge factors here are just guesses */
|
||||||
|
|
||||||
width = min (width, screen->get_width() - 300);
|
width = min (width, screen->get_width() - 300);
|
||||||
|
|
||||||
|
if ((req->width != width) || (req->height != height)) {
|
||||||
|
changed = true;
|
||||||
|
controls_layout_size_request_connection.disconnect ();
|
||||||
|
}
|
||||||
|
|
||||||
if (req->width != width) {
|
if (req->width != width) {
|
||||||
|
gint vbox_width = edit_controls_vbox.get_width();
|
||||||
req->width = width;
|
req->width = width;
|
||||||
time_button_event_box.set_size_request(edit_controls_vbox.get_width(), -1);
|
|
||||||
zoom_box.set_size_request(edit_controls_vbox.get_width(), -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
gint height = min ( (gint) pos, (screen->get_height() - 400));
|
|
||||||
if (req->height != height) {
|
|
||||||
req->height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (width != edit_controls_vbox.get_width()) {
|
|
||||||
|
|
||||||
/* this one is important: it determines how big the layout thinks it really is, as
|
/* this one is important: it determines how big the layout thinks it really is, as
|
||||||
opposed to what it displays on the screen
|
opposed to what it displays on the screen
|
||||||
*/
|
*/
|
||||||
controls_layout.set_size (edit_controls_vbox.get_width(), pos );
|
controls_layout.property_width () = vbox_width;
|
||||||
controls_layout.set_size_request(edit_controls_vbox.get_width(), -1);
|
controls_layout.property_width_request () = vbox_width;
|
||||||
|
|
||||||
|
time_button_event_box.property_width_request () = vbox_width;
|
||||||
|
zoom_box.property_width_request () = vbox_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req->height != height) {
|
||||||
|
req->height = height;
|
||||||
|
controls_layout.property_height () = (guint) floor (pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) {
|
||||||
|
controls_layout_size_request_connection = controls_layout.signal_size_request().connect (mem_fun (*this, &Editor::controls_layout_size_request));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user