Merge branch 'ardour'
This commit is contained in:
commit
9c50e77ddb
@ -607,11 +607,8 @@ Editor::Editor ()
|
|||||||
vertical_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &Editor::tie_vertical_scrolling), true);
|
vertical_adjustment.signal_value_changed().connect (sigc::mem_fun(*this, &Editor::tie_vertical_scrolling), true);
|
||||||
_track_canvas->signal_map_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_map_handler));
|
_track_canvas->signal_map_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_map_handler));
|
||||||
|
|
||||||
HBox* h = manage (new HBox);
|
|
||||||
_group_tabs = new EditorGroupTabs (this);
|
_group_tabs = new EditorGroupTabs (this);
|
||||||
h->pack_start (*_group_tabs, PACK_SHRINK);
|
controls_layout.add (edit_controls_vbox);
|
||||||
h->pack_start (edit_controls_vbox);
|
|
||||||
controls_layout.add (*h);
|
|
||||||
|
|
||||||
HSeparator* separator = manage (new HSeparator());
|
HSeparator* separator = manage (new HSeparator());
|
||||||
separator->set_name("TrackSeparator");
|
separator->set_name("TrackSeparator");
|
||||||
@ -625,6 +622,8 @@ Editor::Editor ()
|
|||||||
controls_layout.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_event));
|
controls_layout.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_event));
|
||||||
controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
|
controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
|
||||||
|
|
||||||
|
_group_tabs->signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
|
||||||
|
|
||||||
_cursors = new MouseCursors;
|
_cursors = new MouseCursors;
|
||||||
_cursors->set_cursor_set (UIConfiguration::instance().get_icon_set());
|
_cursors->set_cursor_set (UIConfiguration::instance().get_icon_set());
|
||||||
|
|
||||||
@ -708,11 +707,12 @@ Editor::Editor ()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* labels for the time bars */
|
/* labels for the time bars */
|
||||||
edit_packer.attach (time_bars_event_box, 1, 2, 0, 1, FILL, SHRINK, 0, 0);
|
edit_packer.attach (time_bars_event_box, 1, 3, 0, 1, FILL, SHRINK, 0, 0);
|
||||||
/* track controls */
|
/* track controls */
|
||||||
edit_packer.attach (controls_layout, 1, 2, 1, 2, FILL, FILL|EXPAND, 0, 0);
|
edit_packer.attach (*_group_tabs, 1, 2, 1, 2, FILL, FILL|EXPAND, 0, 0);
|
||||||
|
edit_packer.attach (controls_layout, 2, 3, 1, 2, FILL, FILL|EXPAND, 0, 0);
|
||||||
/* canvas */
|
/* canvas */
|
||||||
edit_packer.attach (*_track_canvas_viewport, 2, 3, 0, 2, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
edit_packer.attach (*_track_canvas_viewport, 3, 4, 0, 2, FILL|EXPAND, FILL|EXPAND, 0, 0);
|
||||||
|
|
||||||
bottom_hbox.set_border_width (2);
|
bottom_hbox.set_border_width (2);
|
||||||
bottom_hbox.set_spacing (3);
|
bottom_hbox.set_spacing (3);
|
||||||
|
@ -350,11 +350,6 @@ Editor::reset_controls_layout_width ()
|
|||||||
req = edit_controls_vbox.size_request ();
|
req = edit_controls_vbox.size_request ();
|
||||||
w = req.width;
|
w = req.width;
|
||||||
|
|
||||||
if (_group_tabs->get_visible()) {
|
|
||||||
req = _group_tabs->size_request ();
|
|
||||||
w += req.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the controls layout has no horizontal scrolling, its visible
|
/* the controls layout has no horizontal scrolling, its visible
|
||||||
width is always equal to the total width of its contents.
|
width is always equal to the total width of its contents.
|
||||||
*/
|
*/
|
||||||
@ -384,6 +379,7 @@ Editor::reset_controls_layout_height (int32_t h)
|
|||||||
|
|
||||||
controls_layout.property_height() = h;
|
controls_layout.property_height() = h;
|
||||||
|
|
||||||
|
_group_tabs->set_extent (h);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -1021,6 +1017,7 @@ Editor::tie_vertical_scrolling ()
|
|||||||
_summary->set_overlays_dirty ();
|
_summary->set_overlays_dirty ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_group_tabs->set_offset (vertical_adjustment.get_value ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -87,6 +87,13 @@ EditorGroupTabs::compute_tabs () const
|
|||||||
void
|
void
|
||||||
EditorGroupTabs::draw_tab (cairo_t* cr, Tab const & tab)
|
EditorGroupTabs::draw_tab (cairo_t* cr, Tab const & tab)
|
||||||
{
|
{
|
||||||
|
const double from = tab.from - offset ();
|
||||||
|
const double to = tab.to - offset ();
|
||||||
|
|
||||||
|
if (from > visible_extent () || to < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
double const arc_radius = get_width();
|
double const arc_radius = get_width();
|
||||||
double r, g, b, a;
|
double r, g, b, a;
|
||||||
|
|
||||||
@ -99,14 +106,14 @@ EditorGroupTabs::draw_tab (cairo_t* cr, Tab const & tab)
|
|||||||
a = 1.0;
|
a = 1.0;
|
||||||
|
|
||||||
cairo_set_source_rgba (cr, r, g, b, a);
|
cairo_set_source_rgba (cr, r, g, b, a);
|
||||||
cairo_move_to (cr, 0, tab.from + arc_radius);
|
cairo_move_to (cr, 0, from + arc_radius);
|
||||||
cairo_arc (cr, get_width(), tab.from + arc_radius, arc_radius, M_PI, 3 * M_PI / 2);
|
cairo_arc (cr, get_width(), from + arc_radius, arc_radius, M_PI, 3 * M_PI / 2);
|
||||||
cairo_line_to (cr, get_width(), tab.to);
|
cairo_line_to (cr, get_width(), to);
|
||||||
cairo_arc (cr, get_width(), tab.to - arc_radius, arc_radius, M_PI / 2, M_PI);
|
cairo_arc (cr, get_width(), to - arc_radius, arc_radius, M_PI / 2, M_PI);
|
||||||
cairo_line_to (cr, 0, tab.from + arc_radius);
|
cairo_line_to (cr, 0, from + arc_radius);
|
||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
|
|
||||||
if (tab.group && (tab.to - tab.from) > arc_radius) {
|
if (tab.group && (to - from) > arc_radius) {
|
||||||
int text_width, text_height;
|
int text_width, text_height;
|
||||||
|
|
||||||
Glib::RefPtr<Pango::Layout> layout;
|
Glib::RefPtr<Pango::Layout> layout;
|
||||||
@ -114,10 +121,10 @@ EditorGroupTabs::draw_tab (cairo_t* cr, Tab const & tab)
|
|||||||
layout->set_ellipsize (Pango::ELLIPSIZE_MIDDLE);
|
layout->set_ellipsize (Pango::ELLIPSIZE_MIDDLE);
|
||||||
|
|
||||||
layout->set_text (tab.group->name ());
|
layout->set_text (tab.group->name ());
|
||||||
layout->set_width ((tab.to - tab.from - arc_radius) * PANGO_SCALE);
|
layout->set_width ((to - from - arc_radius) * PANGO_SCALE);
|
||||||
layout->get_pixel_size (text_width, text_height);
|
layout->get_pixel_size (text_width, text_height);
|
||||||
|
|
||||||
cairo_move_to (cr, (get_width() - text_height) * .5, (text_width + tab.to + tab.from) * .5);
|
cairo_move_to (cr, (get_width() - text_height) * .5, (text_width + to + from) * .5);
|
||||||
|
|
||||||
Gtkmm2ext::Color c = Gtkmm2ext::contrasting_text_color (Gtkmm2ext::rgba_to_color (r, g, b, a));
|
Gtkmm2ext::Color c = Gtkmm2ext::contrasting_text_color (Gtkmm2ext::rgba_to_color (r, g, b, a));
|
||||||
Gtkmm2ext::color_to_rgba (c, r, g, b, a);
|
Gtkmm2ext::color_to_rgba (c, r, g, b, a);
|
||||||
@ -133,7 +140,7 @@ EditorGroupTabs::draw_tab (cairo_t* cr, Tab const & tab)
|
|||||||
double
|
double
|
||||||
EditorGroupTabs::primary_coordinate (double, double y) const
|
EditorGroupTabs::primary_coordinate (double, double y) const
|
||||||
{
|
{
|
||||||
return y;
|
return y + offset ();
|
||||||
}
|
}
|
||||||
|
|
||||||
RouteList
|
RouteList
|
||||||
|
@ -35,11 +35,12 @@ private:
|
|||||||
void draw_tab (cairo_t *, Tab const &);
|
void draw_tab (cairo_t *, Tab const &);
|
||||||
double primary_coordinate (double, double) const;
|
double primary_coordinate (double, double) const;
|
||||||
ARDOUR::RouteList routes_for_tab (Tab const *) const;
|
ARDOUR::RouteList routes_for_tab (Tab const *) const;
|
||||||
double extent () const {
|
|
||||||
return get_height();
|
|
||||||
}
|
|
||||||
void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *);
|
void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *);
|
||||||
ARDOUR::RouteList selected_routes () const;
|
ARDOUR::RouteList selected_routes () const;
|
||||||
|
|
||||||
|
double visible_extent () const {
|
||||||
|
return get_height();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __gtk_ardour_editor_group_tabs_h__
|
#endif // __gtk_ardour_editor_group_tabs_h__
|
||||||
|
@ -52,6 +52,8 @@ GroupTabs::GroupTabs ()
|
|||||||
: _menu (0)
|
: _menu (0)
|
||||||
, _dragging (0)
|
, _dragging (0)
|
||||||
, _dragging_new_tab (0)
|
, _dragging_new_tab (0)
|
||||||
|
, _extent (-1)
|
||||||
|
, _offset (0)
|
||||||
, _hovering (false)
|
, _hovering (false)
|
||||||
{
|
{
|
||||||
add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
|
||||||
@ -92,7 +94,7 @@ GroupTabs::on_enter_notify_event (GdkEventCrossing* ev)
|
|||||||
queue_draw ();
|
queue_draw ();
|
||||||
}
|
}
|
||||||
|
|
||||||
get_window()->set_cursor (Gdk::Cursor( primary_coordinate(1,0) ? Gdk::SB_H_DOUBLE_ARROW : Gdk::SB_V_DOUBLE_ARROW));
|
get_window()->set_cursor (Gdk::Cursor (offset () != primary_coordinate (1, 0) ? Gdk::SB_H_DOUBLE_ARROW : Gdk::SB_V_DOUBLE_ARROW));
|
||||||
|
|
||||||
return CairoWidget::on_enter_notify_event (ev);
|
return CairoWidget::on_enter_notify_event (ev);
|
||||||
}
|
}
|
||||||
@ -111,6 +113,28 @@ GroupTabs::on_leave_notify_event (GdkEventCrossing* ev)
|
|||||||
return CairoWidget::on_leave_notify_event (ev);
|
return CairoWidget::on_leave_notify_event (ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GroupTabs::set_extent (double extent)
|
||||||
|
{
|
||||||
|
if (_extent == extent) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_extent = extent;
|
||||||
|
set_dirty ();
|
||||||
|
queue_draw ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
GroupTabs::set_offset (double offset)
|
||||||
|
{
|
||||||
|
if (_offset == offset) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_offset = offset;
|
||||||
|
set_dirty ();
|
||||||
|
queue_draw ();
|
||||||
|
}
|
||||||
|
|
||||||
/** Handle a size request.
|
/** Handle a size request.
|
||||||
* @param req GTK requisition
|
* @param req GTK requisition
|
||||||
*/
|
*/
|
||||||
|
@ -65,6 +65,9 @@ public:
|
|||||||
|
|
||||||
void run_new_group_dialog (ARDOUR::RouteList const *, bool with_master);
|
void run_new_group_dialog (ARDOUR::RouteList const *, bool with_master);
|
||||||
|
|
||||||
|
void set_extent (double);
|
||||||
|
void set_offset (double);
|
||||||
|
|
||||||
static void set_group_color (ARDOUR::RouteGroup *, uint32_t);
|
static void set_group_color (ARDOUR::RouteGroup *, uint32_t);
|
||||||
static std::string group_gui_id (ARDOUR::RouteGroup *);
|
static std::string group_gui_id (ARDOUR::RouteGroup *);
|
||||||
static uint32_t group_color (ARDOUR::RouteGroup *);
|
static uint32_t group_color (ARDOUR::RouteGroup *);
|
||||||
@ -80,6 +83,15 @@ protected:
|
|||||||
ARDOUR::RouteGroup* group; ///< route group
|
ARDOUR::RouteGroup* group; ///< route group
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** @return Size of the widget along the primary axis */
|
||||||
|
virtual double visible_extent () const = 0;
|
||||||
|
|
||||||
|
/** @return Size of all contained strips along the primary axis */
|
||||||
|
double extent () const { return _extent < 0 ? visible_extent () : _extent; }
|
||||||
|
|
||||||
|
/** @return Scroll offset of \ref visible_extent along the primary axis */
|
||||||
|
double offset () const { return _offset; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void emit_gui_changed_for_members (std::shared_ptr<ARDOUR::RouteList>);
|
static void emit_gui_changed_for_members (std::shared_ptr<ARDOUR::RouteList>);
|
||||||
|
|
||||||
@ -102,10 +114,6 @@ private:
|
|||||||
virtual double primary_coordinate (double x, double y) const = 0;
|
virtual double primary_coordinate (double x, double y) const = 0;
|
||||||
|
|
||||||
virtual ARDOUR::RouteList routes_for_tab (Tab const * t) const = 0;
|
virtual ARDOUR::RouteList routes_for_tab (Tab const * t) const = 0;
|
||||||
|
|
||||||
/** @return Size of the widget along the primary axis */
|
|
||||||
virtual double extent () const = 0;
|
|
||||||
|
|
||||||
virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {}
|
virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {}
|
||||||
virtual ARDOUR::RouteList selected_routes () const = 0;
|
virtual ARDOUR::RouteList selected_routes () const = 0;
|
||||||
|
|
||||||
@ -165,6 +173,8 @@ private:
|
|||||||
double _drag_min; ///< minimum position for drag
|
double _drag_min; ///< minimum position for drag
|
||||||
double _drag_max; ///< maximum position for drag
|
double _drag_max; ///< maximum position for drag
|
||||||
double _drag_first; ///< first mouse pointer position during drag
|
double _drag_first; ///< first mouse pointer position during drag
|
||||||
|
double _extent;
|
||||||
|
double _offset;
|
||||||
|
|
||||||
bool _hovering;
|
bool _hovering;
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@ private:
|
|||||||
void draw_tab (cairo_t *, Tab const &);
|
void draw_tab (cairo_t *, Tab const &);
|
||||||
double primary_coordinate (double, double) const;
|
double primary_coordinate (double, double) const;
|
||||||
ARDOUR::RouteList routes_for_tab (Tab const *) const;
|
ARDOUR::RouteList routes_for_tab (Tab const *) const;
|
||||||
double extent () const {
|
|
||||||
|
double visible_extent () const {
|
||||||
return get_width();
|
return get_width();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ RecorderGroupTabs::primary_coordinate (double, double y) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
RecorderGroupTabs::extent () const
|
RecorderGroupTabs::visible_extent () const
|
||||||
{
|
{
|
||||||
return get_height ();
|
return get_height ();
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ private:
|
|||||||
ARDOUR::RouteList routes_for_tab (Tab const*) const;
|
ARDOUR::RouteList routes_for_tab (Tab const*) const;
|
||||||
ARDOUR::RouteList selected_routes () const;
|
ARDOUR::RouteList selected_routes () const;
|
||||||
double primary_coordinate (double, double) const;
|
double primary_coordinate (double, double) const;
|
||||||
double extent () const;
|
double visible_extent () const;
|
||||||
|
|
||||||
RecorderUI* _recorder;
|
RecorderUI* _recorder;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user