various changes to controls_layout size management

git-svn-id: svn://localhost/trunk/ardour2@205 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2005-12-24 02:17:47 +00:00
parent fc62426136
commit 45addca9eb
7 changed files with 46 additions and 32 deletions

View file

@ -365,7 +365,6 @@ Editor::Editor (AudioEngine& eng)
range_marker_drag_rect = 0; range_marker_drag_rect = 0;
marker_drag_line = 0; marker_drag_line = 0;
mouse_mode = MouseZoom; /* force change in next call */
set_mouse_mode (MouseObject, true); set_mouse_mode (MouseObject, true);
frames_per_unit = 2048; /* too early to use set_frames_per_unit */ frames_per_unit = 2048; /* too early to use set_frames_per_unit */
@ -375,7 +374,7 @@ Editor::Editor (AudioEngine& eng)
initialize_rulers (); initialize_rulers ();
initialize_canvas (); initialize_canvas ();
edit_controls_vbox.set_spacing (track_spacing); edit_controls_vbox.set_spacing (0);
horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled)); horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled));
vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling)); vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling));
@ -389,8 +388,6 @@ Editor::Editor (AudioEngine& eng)
controls_layout.add (edit_controls_vbox); controls_layout.add (edit_controls_vbox);
controls_layout.set_name ("EditControlsBase"); controls_layout.set_name ("EditControlsBase");
controls_layout.add_events (Gdk::SCROLL_MASK); controls_layout.add_events (Gdk::SCROLL_MASK);
controls_layout.signal_size_request().connect (mem_fun(*this, &Editor::set_layout_width), false);
controls_layout.signal_expose_event().connect (mem_fun(*this, &Editor::control_layout_expose), false);
controls_layout.signal_scroll_event().connect (mem_fun(*this, &Editor::control_layout_scroll), false); controls_layout.signal_scroll_event().connect (mem_fun(*this, &Editor::control_layout_scroll), false);
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);
@ -820,7 +817,6 @@ Editor::tie_vertical_scrolling ()
{ {
double y1 = vertical_adjustment.get_value(); double y1 = vertical_adjustment.get_value();
controls_layout.get_vadjustment()->set_value (y1); controls_layout.get_vadjustment()->set_value (y1);
playhead_cursor->set_y_axis(y1); playhead_cursor->set_y_axis(y1);
edit_cursor->set_y_axis(y1); edit_cursor->set_y_axis(y1);
} }
@ -3910,23 +3906,6 @@ Editor::transport_punch_location()
} }
} }
void
Editor::set_layout_width(Gtk::Requisition *r)
{
edit_controls_vbox.check_resize();
int w = edit_controls_vbox.get_width();
cerr << "set_layout_width() called w = " << w << endl;
controls_layout.set_size_request (w, -1);
}
bool
Editor::control_layout_expose (GdkEventExpose* ex)
{
cerr << "control layout_expose() called" << endl;
return true;
}
bool bool
Editor::control_layout_scroll (GdkEventScroll* ev) Editor::control_layout_scroll (GdkEventScroll* ev)
{ {

View file

@ -642,8 +642,6 @@ class Editor : public PublicEditor
Gtk::Adjustment horizontal_adjustment; Gtk::Adjustment horizontal_adjustment;
Gtk::Layout controls_layout; Gtk::Layout controls_layout;
void set_layout_width(Gtk::Requisition *);
bool Editor::control_layout_expose (GdkEventExpose* ev);
bool Editor::control_layout_scroll (GdkEventScroll* ev); bool Editor::control_layout_scroll (GdkEventScroll* ev);
Gtk::HScrollbar edit_hscrollbar; Gtk::HScrollbar edit_hscrollbar;
@ -1149,6 +1147,7 @@ class Editor : public PublicEditor
bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*); bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
bool canvas_edit_cursor_event (GdkEvent* event, ArdourCanvas::Item*); bool canvas_edit_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
bool track_canvas_event (GdkEvent* event, ArdourCanvas::Item*); bool track_canvas_event (GdkEvent* event, ArdourCanvas::Item*);
bool track_canvas_scroll (GdkEventScroll* event);
bool track_canvas_button_press_event (GdkEventButton *); bool track_canvas_button_press_event (GdkEventButton *);
bool track_canvas_button_release_event (GdkEventButton *); bool track_canvas_button_release_event (GdkEventButton *);

View file

@ -90,7 +90,7 @@ Editor::initialize_canvas ()
track_canvas.signal_event().connect (bind (mem_fun (*this, &Editor::track_canvas_event), (ArdourCanvas::Item*) 0)); track_canvas.signal_event().connect (bind (mem_fun (*this, &Editor::track_canvas_event), (ArdourCanvas::Item*) 0));
track_canvas.set_name ("EditorMainCanvas"); track_canvas.set_name ("EditorMainCanvas");
track_canvas.add_events (Gdk::POINTER_MOTION_HINT_MASK); 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)); track_canvas.signal_leave_notify_event().connect (mem_fun(*this, &Editor::left_track_canvas));
/* set up drag-n-drop */ /* set up drag-n-drop */
@ -357,10 +357,11 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
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;
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];
pos += tv->effective_height; pos += tv->effective_height;
pos += track_spacing;
} }
RefPtr<Gdk::Screen> screen = get_screen(); RefPtr<Gdk::Screen> screen = get_screen();
@ -369,13 +370,19 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
screen = Gdk::Screen::get_default(); screen = Gdk::Screen::get_default();
} }
edit_controls_hbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400)));
edit_controls_vbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400)));
double last_canvas_unit = ceil ((double) max_frames / frames_per_unit); double last_canvas_unit = ceil ((double) max_frames / frames_per_unit);
track_canvas.set_scroll_region (0.0, 0.0, max (last_canvas_unit, canvas_width), pos); track_canvas.set_scroll_region (0.0, 0.0, max (last_canvas_unit, canvas_width), pos);
// XXX what is the correct height value for the time canvas ? this overstates it // XXX what is the correct height value for the time canvas ? this overstates it
time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height); time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
/* never let the width of the controls area shrink horizontally */
edit_controls_vbox.check_resize();
int w = max (edit_controls_vbox.get_width(), controls_layout.get_width());
controls_layout.set_size_request (w, min ((gint) pos, (screen->get_height() - 400)));
controls_layout.set_size (w, (gint) pos);
} }
bool bool

View file

@ -44,11 +44,36 @@ using namespace sigc;
using namespace ARDOUR; using namespace ARDOUR;
using namespace Gtk; using namespace Gtk;
bool
Editor::track_canvas_scroll (GdkEventScroll* ev)
{
switch (ev->direction) {
case GDK_SCROLL_UP:
scroll_tracks_up_line ();
return true;
break;
case GDK_SCROLL_DOWN:
scroll_tracks_down_line ();
return true;
default:
/* no left/right handling yet */
break;
}
return false;
}
bool bool
Editor::track_canvas_event (GdkEvent *event, ArdourCanvas::Item* item) Editor::track_canvas_event (GdkEvent *event, ArdourCanvas::Item* item)
{ {
gint x, y; gint x, y;
/* this is the handler for events that are not handled by
items.
*/
switch (event->type) { switch (event->type) {
case GDK_MOTION_NOTIFY: case GDK_MOTION_NOTIFY:
/* keep those motion events coming */ /* keep those motion events coming */
@ -64,6 +89,10 @@ Editor::track_canvas_event (GdkEvent *event, ArdourCanvas::Item* item)
} }
break; break;
case GDK_SCROLL:
track_canvas_scroll (&event->scroll);
break;
default: default:
break; break;
} }

View file

@ -238,7 +238,7 @@ Editor::route_list_reordered ()
*/ */
if ((at = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) { if ((at = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
at->route().set_order_key (N_("editor"), position); at->route().set_order_key (N_("editor"), order);
} }
} }
if (tv->marked_for_display()) { if (tv->marked_for_display()) {

View file

@ -304,7 +304,7 @@ main (int argc, char *argv[])
pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);
catch_signals (); // catch_signals ();
text_receiver.listen_to (error); text_receiver.listen_to (error);
text_receiver.listen_to (info); text_receiver.listen_to (info);

View file

@ -139,7 +139,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
controls_frame.add (controls_hbox); controls_frame.add (controls_hbox);
controls_frame.set_name ("TimeAxisViewControlsBaseUnselected"); controls_frame.set_name ("TimeAxisViewControlsBaseUnselected");
controls_frame.set_shadow_type (Gtk::SHADOW_IN); controls_frame.set_shadow_type (Gtk::SHADOW_OUT);
} }
TimeAxisView::~TimeAxisView() TimeAxisView::~TimeAxisView()
@ -357,7 +357,7 @@ void
TimeAxisView::set_height (TrackHeight h) TimeAxisView::set_height (TrackHeight h)
{ {
height = (guint32) h; height = (guint32) h;
controls_frame.set_size_request (-1, height); controls_frame.set_size_request (-1, height+2);
if (canvas_item_visible (selection_group)) { if (canvas_item_visible (selection_group)) {
/* resize the selection rect */ /* resize the selection rect */