13
0

Compare commits

..

10 Commits

14 changed files with 83 additions and 64 deletions

View File

@ -66,7 +66,7 @@ using namespace Gtk;
using namespace std;
TriggerPage::TriggerPage ()
: Tabbable (_("Cues"), X_("trigger"))
: Tabbable (_("Cues"), X_("trigger"), NULL, true, Tabbable::PaneLayout (Tabbable::PaneRight | Tabbable::PaneBottom))
, _cue_area_frame (0.5, 0, 1.0, 0)
, _cue_box (16, 16 * TriggerBox::default_triggers_per_box)
, _master_widget (16, 16)
@ -151,19 +151,12 @@ TriggerPage::TriggerPage ()
table->show_all ();
_parameter_box.pack_start (*table);
_parameter_box.set_no_show_all ();
_parameter_box.show ();
/* Top-level Layout */
content_app_bar.add (_application_bar);
content_innermost_hbox.add (_pane);
_pane.add (_strip_group_box);
/* we cannot `content_midlevel_vbox.remove(_content_att_bottom)` and add it to the _pane
* because visibility updates are not propagated upward, and the pane will not collapse
* when the _parameter_box is hidden
*/
_pane.add (_parameter_box);
content_innermost_hbox.add (_strip_group_box);
content_att_bottom.add (_parameter_box);
content_att_right.add (_sidebar_notebook);
/* Show all */
@ -224,9 +217,9 @@ TriggerPage::showhide_att_bottom (bool yn)
_show_bottom_pane = yn;
if (!_show_bottom_pane) {
_parameter_box.hide ();
Tabbable::showhide_att_bottom (false);
} else if (!Editor::instance ().get_selection ().triggers.empty ()) {
_parameter_box.show ();
Tabbable::showhide_att_bottom (true);
}
}
@ -445,7 +438,7 @@ TriggerPage::rec_enable_changed (Trigger const * trigger)
_midi_trig_box.hide ();
_midi_editor->viewport().hide ();
_parameter_box.hide ();
Tabbable::showhide_att_bottom (false);
TriggerBox& box = trigger->box();
TriggerReference ref (trigger->boxptr(), trigger->index());
@ -469,7 +462,7 @@ TriggerPage::rec_enable_changed (Trigger const * trigger)
}
if (_show_bottom_pane) {
_parameter_box.show ();
Tabbable::showhide_att_bottom (true);
}
}
@ -485,7 +478,7 @@ TriggerPage::selection_changed ()
_midi_trig_box.hide ();
_midi_editor->viewport().hide ();
_parameter_box.hide ();
Tabbable::showhide_att_bottom (false);
if (!selection.triggers.empty ()) {
TriggerSelection ts = selection.triggers;
@ -511,7 +504,7 @@ TriggerPage::selection_changed ()
}
if (_show_bottom_pane) {
_parameter_box.show ();
Tabbable::showhide_att_bottom (true);
}
}
}

View File

@ -113,7 +113,6 @@ private:
Gtkmm2ext::Bindings* bindings;
ArdourWidgets::VPane _pane;
Gtk::HBox _strip_group_box;
Gtk::ScrolledWindow _strip_scroller;
Gtk::HBox _strip_packer;

View File

@ -106,12 +106,24 @@ public:
#if defined(_MSC_VER) /* && (_MSC_VER < 1900)
* Regarding the note (below) it was initially
* thought that this got fixed in VS2015 - but
* in fact it's still faulty (JE - Feb 2021) */
* in fact it's still faulty (JE - Feb 2021).
* 2024-09-03 update: Faulty compile up to
* VS2022 17.4. From there it compiles but does
* not link with the exception of the arm64
* platform. This quirk is actually a bug that
* Microsoft seems to have failed to
* acknowledge as such for years judging from
* web search results about MSVC's std::map,
* and have not even fixed correctly when they
* tried.
*/
/* Use the older (heap based) mapping for early versions of MSVC.
* In fact it might be safer to use this for all MSVC builds - as
* our StackAllocator class depends on 'boost::aligned_storage'
* which is known to be troublesome with Visual C++ :-
* https://www.boost.org/doc/libs/1_65_0/libs/type_traits/doc/html/boost_typetraits/reference/aligned_storage.html
* In fact it might be safer to use this for all MSVC builds. It
* was thought that this was related to issues with
* boost::aligned_storage, but actually it seems to be that there
* are bugs in the std::map implementation of MSVC that are being
* triggered, messing with the copy constructor of
* PBD::StackAllocator.
*/
typedef std::map<uint32_t, uint32_t> TypeMapping;
typedef std::map<DataType, TypeMapping> Mappings;

View File

@ -26,6 +26,7 @@
#include "evoral/Event.h"
using namespace std;
using namespace std::placeholders;
namespace Evoral {

View File

@ -19,7 +19,6 @@
#ifndef PBD_STACK_ALLOCATOR_H
#define PBD_STACK_ALLOCATOR_H
#include <boost/type_traits/aligned_storage.hpp>
#include <limits>
#include "pbd/libpbd_visibility.h"
@ -61,22 +60,22 @@ public:
};
StackAllocator ()
: _ptr ((pointer)&_buf)
: _ptr (_buf.data())
{ }
StackAllocator (const StackAllocator&)
: _ptr ((pointer)&_buf)
: StackAllocator ()
{ }
template <typename U, size_t other_capacity>
StackAllocator (const StackAllocator<U, other_capacity>&)
: _ptr ((pointer)&_buf)
: StackAllocator ()
{ }
/* inspired by http://howardhinnant.github.io/stack_alloc.h */
pointer allocate (size_type n, void* hint = 0)
{
if ((pointer)&_buf + stack_capacity >= _ptr + n) {
if (_buf.data() + stack_capacity >= _ptr + n) {
DEBUG_STACK_ALLOC ("Allocate %ld item(s) of size %zu on the stack\n", n, sizeof (T));
pointer rv = _ptr;
_ptr += n;
@ -108,12 +107,12 @@ public:
bool operator== (StackAllocator const& a) const
{
return &_buf == &a._buf;
return _buf.data() == a._buf.data();
}
bool operator!= (StackAllocator const& a) const
{
return &_buf != &a._buf;
return _buf.data() != a._buf.data();
}
template <class U>
@ -147,12 +146,10 @@ private:
bool pointer_in_buffer (pointer const p)
{
return ((pointer const)&_buf <= p && p < (pointer const)&_buf + stack_capacity);
return (_buf.data() <= p && p < _buf.data() + stack_capacity);
}
typedef typename boost::aligned_storage<sizeof (T) * stack_capacity, 16>::type align_t;
align_t _buf;
alignas(16) std::array<value_type, stack_capacity> _buf;
pointer _ptr;
};

View File

@ -42,9 +42,8 @@ void
Receiver::listen_to (Transmitter &transmitter)
{
/* odd syntax here because boost's placeholders (_1, _2) are in an
anonymous namespace which causes ambiguity with sigc++ (and will also
do so with std::placeholder in the C++11 future
/* odd syntax here because std's placeholders (_1, _2) are in an
anonymous namespace which causes ambiguity with sigc++
*/
transmitter.sender().connect_same_thread (connections, std::bind (&Receiver::receive, this, std::placeholders::_1, std::placeholders::_2));

View File

@ -1144,6 +1144,7 @@ MackieControlProtocol::latch_press (MACKIE_NAMESPACE::Button&)
MACKIE_NAMESPACE::LedState
MackieControlProtocol::latch_release (MACKIE_NAMESPACE::Button&)
{
set_automation_state (ARDOUR::Latch);
return none;
}
MACKIE_NAMESPACE::LedState

View File

@ -17,8 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "boost/lambda/lambda.hpp"
#include "pbd/control_math.h"
#include "ardour/track.h"

View File

@ -17,8 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "boost/lambda/lambda.hpp"
#include "pbd/control_math.h"
#include "ardour/amp.h"

View File

@ -19,8 +19,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "boost/lambda/lambda.hpp"
#include "pbd/control_math.h"
#include <glibmm.h>

View File

@ -19,8 +19,6 @@
*/
#include <vector>
#include "boost/lambda/lambda.hpp"
#include "pbd/control_math.h"
#include "ardour/session.h"

View File

@ -81,7 +81,7 @@ Tabbable::default_layout ()
left_attachment_button.set_sensitive (0 != (_panelayout & (PaneLeft | AttLeft)));
right_attachment_button.set_sensitive (0 != (_panelayout & PaneRight));
bottom_attachment_button.set_sensitive (0 != (_panelayout & AttBottom));
bottom_attachment_button.set_sensitive (0 != (_panelayout & (PaneBottom | AttBottom)));
content_attachment_hbox.set_border_width(3);
content_attachment_hbox.set_spacing(3);
@ -106,18 +106,25 @@ Tabbable::default_layout ()
#endif
Widget* midlevel = 0 == (_panelayout & PaneBottom) ? (Widget*)&content_midlevel_vbox : (Widget*)&content_midlevel_vpane;
if (_panelayout & PaneLeft) {
_content_vbox.pack_start (content_left_pane, true, true);
content_left_pane.add (content_att_left);
content_left_pane.add (content_midlevel_vbox);
content_left_pane.add (*midlevel);
} else {
_content_vbox.pack_start (content_hbox, true, true);
content_hbox.pack_start (content_att_left, false, false);
content_hbox.pack_start (content_midlevel_vbox, true, true);
content_hbox.pack_start (*midlevel, true, true);
}
content_midlevel_vbox.pack_start (content_right_pane, true, true);
content_midlevel_vbox.pack_start (content_att_bottom, false, false);
if (_panelayout & PaneBottom) {
content_midlevel_vpane.add (content_right_pane);
content_midlevel_vpane.add (content_att_bottom);
} else {
content_midlevel_vbox.pack_start (content_right_pane, true, true);
content_midlevel_vbox.pack_start (content_att_bottom, false, false);
}
content_right_pane.add (content_inner_vbox);
@ -141,6 +148,12 @@ Tabbable::default_layout ()
content_left_pane.set_check_divider_position (true);
content_left_pane.set_divider (0, 0.15);
if (_panelayout & PaneBottom) {
content_midlevel_vpane.set_child_minsize (content_right_pane, 300);
}
content_midlevel_vpane.set_check_divider_position (true);
content_midlevel_vpane.set_divider (0, 0.85);
_content_vbox.show_all();
}
@ -433,8 +446,15 @@ Tabbable::get_state() const
node.set_property (X_("tabbed"), tabbed());
node.set_property (string_compose("%1%2", _menu_name, X_("-rightpane-pos")).c_str(), content_right_pane.get_divider ());
node.set_property (string_compose("%1%2", _menu_name, X_("-leftpane-pos")).c_str(), content_left_pane.get_divider ());
if (_panelayout & PaneRight) {
node.set_property (string_compose("%1%2", _menu_name, X_("-rightpane-pos")).c_str(), content_right_pane.get_divider ());
}
if (_panelayout & PaneLeft) {
node.set_property (string_compose("%1%2", _menu_name, X_("-leftpane-pos")).c_str(), content_left_pane.get_divider ());
}
if (_panelayout & PaneBottom) {
node.set_property (string_compose("%1%2", _menu_name, X_("-bottompane-pos")).c_str(), content_midlevel_vpane.get_divider ());
}
return node;
}
@ -466,6 +486,10 @@ Tabbable::set_state (const XMLNode& node, int version)
fract = std::max (.05f, std::min (.95f, fract));
content_left_pane.set_divider (0, fract);
}
if ( window_node->get_property (string_compose("%1%2", _menu_name, X_("-bottompane-pos")).c_str(), fract) ) {
fract = std::max (.05f, std::min (.95f, fract));
content_midlevel_vpane.set_divider (0, fract);
}
}

View File

@ -49,16 +49,15 @@ class LIBWIDGETS_API Tabbable : public Gtkmm2ext::WindowProxy
{
public:
enum PaneLayout {
NoPanes = 0x0, ///< disable all attachment buttons, do not pack any panes or attachments
PaneLeft = 0x1, ///< left side attachment is a resizable pane
PaneRight = 0x2, ///< pack a resizable Pane on the right-side
AttBottom = 0x4, ///< bottom is a fixed size EBox attachment
PaneLeftBtm = 0x5,
PaneRightBtm = 0x6,
AttLeft = 0x8, ///< if PaneLeft is not set, pack a fixed size Ebox on the left (Editor-Mixer)
NoPanes = 0x00, ///< disable all attachment buttons, do not pack any panes or attachments
PaneLeft = 0x01, ///< left side attachment is a resizable pane
PaneRight = 0x02, ///< pack a resizable Pane on the right-side
PaneBottom = 0x04, ///< bottom Ebox is a resizable Pane
AttLeft = 0x08, ///< if PaneLeft is not set, pack a fixed size Ebox on the left (Editor-Mixer)
AttBottom = 0x10, ///< bottom is a fixed size EBox attachment
};
Tabbable (const std::string& user_visible_name, std::string const & untranslated_name, Gtk::Widget* top = NULL, bool tabbed_by_default = true, PaneLayout pl = PaneRightBtm);
Tabbable (const std::string& user_visible_name, std::string const & untranslated_name, Gtk::Widget* top = NULL, bool tabbed_by_default = true, PaneLayout pl = PaneRight);
~Tabbable ();
void add_to_notebook (Gtk::Notebook& notebook);
@ -130,7 +129,7 @@ protected:
* | |
* | +--content_hbox--OR--content_left_pane--------------------------------------------------------+ |
* | | | |
* | | +--att_left--+ +--content_midlevel_vbox-------------------------------------------------+ | |
* | | +--att_left--+ +--content_midlevel_vbox--OR-content_midlevel_vpane----------------------+ | |
* | | $ (EBOX) | | +--content_right_pane------------------------------------------------+ | | |
* | | | | | | +--content_inner_vbox-----------------+ +--content_right_vbox--+ | | | |
* | | | O | | | | | | | | | | |
@ -147,7 +146,8 @@ protected:
* | | | | N | | | +---------------------------------+ | | +------------------+ | | | | |
* | | | (STRIP) | E | | +-------------------------------------+ +----------------------+ | | | |
* | | | |<->| +--------------------------------------------------------------------+ | | |
* | | | | | | | |
* | | | | | 🡅 OPTIONAL 🡅 | | |
* | | | | | 🡇 PANE 🡇 | | |
* | | | | | +-content_att_bottom-------------------------------------------------+ | | |
* | | | | | $ (EBOX) | | | |
* | | | | | | OPTIONAL BOTTOM (PROPERTIES) | | | |
@ -171,6 +171,7 @@ protected:
HPane content_left_pane;
Gtk::HBox content_hbox;
EventBoxExt content_att_left; /* a placeholder for the mixer strip, if you want one */
VPane content_midlevel_vpane;
Gtk::VBox content_midlevel_vbox;
HPane content_right_pane;
Gtk::VBox content_inner_vbox;

View File

@ -23,7 +23,7 @@ class Rx1
public:
Rx1 (Tx& sender)
{
sender.sig1.connect_same_thread (_connection, boost::bind (&Rx1::cb, this, _1));
sender.sig1.connect_same_thread (_connection, std::bind (&Rx1::cb, this, _1));
}
private:
@ -87,7 +87,7 @@ class Rx2 : public PBD::ScopedConnectionList
public:
Rx2 (Tx& sender)
{
sender.sig1.connect (*this, &_ir, boost::bind (&Rx2::cb, this, _1), &event_loop);
sender.sig1.connect (*this, &_ir, std::bind (&Rx2::cb, this, _1), &event_loop);
}
private: