+ class RoutingIcon : public Gtk::DrawingArea {
+ public:
+ RoutingIcon(bool inputrouting = true);
+ void set (
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&);
+ void set_fed_by (
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&);
+
+ void set_feeding (
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanCount&,
+ const ARDOUR::ChanMapping&,
+ const ARDOUR::ChanMapping&);
+
+ void set_terminal (bool b);
+
+ void copy_state (const RoutingIcon& other) {
+ _in = other._in;
+ _out = other._out;
+ _sources = other._sources;
+ _sinks = other._sinks;
+ _in_map = other._in_map;
+ _out_map = other._out_map;
+ _thru_map = other._thru_map;
+ _f_out = other._f_out;
+ _f_out_map = other._f_out_map;
+ _f_thru_map = other._f_thru_map;
+ _f_sources = other._f_sources;
+ _i_in = other._i_in;
+ _i_in_map = other._i_in_map;
+ _i_thru_map = other._i_thru_map;
+ _i_sinks = other._i_sinks;
+ _fed_by = other._fed_by;
+ _feeding = other._feeding;
+ }
+
+ void unset_fed_by () { _fed_by = false ; }
+ void unset_feeding () { _feeding = false ; }
+ bool in_identity () const;
+ bool out_identity () const;
+ bool can_coalesce () const;
+
+ static double pin_x_pos (uint32_t, double, uint32_t, uint32_t, bool);
+ static void draw_connection (cairo_t*, double, double, double, double, bool, bool dashed = false);
+ static void draw_gnd (cairo_t*, double, double, double, bool);
+ static void draw_sidechain (cairo_t*, double, double, double, bool);
+ static void draw_thru_src (cairo_t*, double, double, double, bool);
+ static void draw_thru_sink (cairo_t*, double, double, double, bool);
+
+ private:
+ bool on_expose_event (GdkEventExpose *);
+ void expose_input_map (cairo_t*, const double, const double);
+ void expose_coalesced_input_map (cairo_t*, const double, const double);
+ void expose_output_map (cairo_t*, const double, const double);
+
+ ARDOUR::ChanCount _in;
+ ARDOUR::ChanCount _out;
+ ARDOUR::ChanCount _sources;
+ ARDOUR::ChanCount _sinks;
+ ARDOUR::ChanMapping _in_map;
+ ARDOUR::ChanMapping _out_map;
+ ARDOUR::ChanMapping _thru_map;
+ ARDOUR::ChanCount _f_out;
+ ARDOUR::ChanMapping _f_out_map;
+ ARDOUR::ChanMapping _f_thru_map;
+ ARDOUR::ChanCount _f_sources;
+ ARDOUR::ChanCount _i_in;
+ ARDOUR::ChanMapping _i_in_map;
+ ARDOUR::ChanMapping _i_thru_map;
+ ARDOUR::ChanCount _i_sinks;
+ bool _fed_by;
+ bool _feeding;
+ bool _input;
+ bool _terminal;
+ };
+
+public:
+ PortIcon input_icon;
+ PortIcon output_icon;
+ RoutingIcon routing_icon; // sits on top of every processor (input routing)
+ RoutingIcon output_routing_icon; // only used by last processor in the chain
+
+protected:
+ PluginDisplay *_plugin_display ;
+};
+
+class PluginInsertProcessorEntry : public ProcessorEntry
+{
+public:
+ PluginInsertProcessorEntry (ProcessorBox *, boost::shared_ptr<ARDOUR::PluginInsert>, Width);
+
+ void hide_things ();
+
+private:
+ void iomap_changed ();