Compare commits
10 Commits
90d45ac428
...
dd23aadd62
Author | SHA1 | Date | |
---|---|---|---|
dd23aadd62 | |||
|
fa57d5ed86 | ||
|
27c6276ff8 | ||
09eeca09a9 | |||
|
32ff87f7f6 | ||
5aaec05429 | |||
3625c28d54 | |||
27ccb1c9d3 | |||
1c5117444f | |||
983466fc38 |
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -113,7 +113,6 @@ private:
|
||||
|
||||
Gtkmm2ext::Bindings* bindings;
|
||||
|
||||
ArdourWidgets::VPane _pane;
|
||||
Gtk::HBox _strip_group_box;
|
||||
Gtk::ScrolledWindow _strip_scroller;
|
||||
Gtk::HBox _strip_packer;
|
||||
|
@ -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;
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "evoral/Event.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace std::placeholders;
|
||||
|
||||
namespace Evoral {
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
|
||||
|
@ -19,8 +19,6 @@
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
#include "boost/lambda/lambda.hpp"
|
||||
|
||||
#include "pbd/control_math.h"
|
||||
|
||||
#include "ardour/session.h"
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user