#include <libgnomecanvasmm/text.h>
#include <libgnomecanvasmm/widget.h>
+#include "ardour/midi_model.h"
+
#include "rgb_macros.h"
#include "ardour_ui.h"
#include "ui_config.h"
class Editor;
class MidiRegionView;
-namespace Evoral { class Note; }
+namespace Evoral { template<typename T> class Note; }
namespace Gnome {
namespace Canvas {
*
* A newer, better canvas should remove the need for all the ugly here.
*/
-class CanvasNoteEvent : public sigc::trackable, public InteractiveItem {
+class CanvasNoteEvent : virtual public sigc::trackable, public InteractiveItem {
public:
+ typedef Evoral::Note<ARDOUR::MidiModel::TimeType> NoteType;
+
CanvasNoteEvent(
- MidiRegionView& region,
- Item* item,
- const boost::shared_ptr<Evoral::Note> note = boost::shared_ptr<Evoral::Note>());
+ MidiRegionView& region,
+ Item* item,
+ const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>());
virtual ~CanvasNoteEvent();
+ virtual void show() = 0;
+ virtual void hide() = 0;
virtual bool on_event(GdkEvent* ev);
bool selected() const { return _selected; }
void show_velocity();
void hide_velocity();
- /**
- * This slot is called, when a new channel is selected for the single event
- * */
+ /** Channel changed for this specific event */
void on_channel_change(uint8_t channel);
+
+ /** Channel selection changed */
void on_channel_selection_change(uint16_t selection);
void show_channel_selector();
virtual double x2() = 0;
virtual double y2() = 0;
- const boost::shared_ptr<Evoral::Note> note() const { return _note; }
+ const boost::shared_ptr<NoteType> note() const { return _note; }
- inline static uint32_t meter_style_fill_color(uint8_t vel)
- {
+ inline static uint32_t meter_style_fill_color(uint8_t vel) {
if (vel < 64) {
return UINT_INTERPOLATE(
ARDOUR_UI::config()->canvasvar_MidiNoteMeterColorBase.get(),
}
/// calculate outline colors from fill colors of notes
- inline static uint32_t calculate_outline(uint32_t color)
- {
+ inline static uint32_t calculate_outline(uint32_t color) {
return UINT_INTERPOLATE(color, 0x000000ff, 0.5);
}
- /// dividing the hue circle in 16 parts, hand adjusted for equal look, courtesy Thorsten Wilms
+ /// hue circle divided into 16 equal-looking parts, courtesy Thorsten Wilms
static const uint32_t midi_channel_colors[16];
protected:
enum State { None, Pressed, Dragging };
- MidiRegionView& _region;
- Item* const _item;
- InteractiveText* _text;
- Widget* _channel_selector_widget;
- State _state;
- const boost::shared_ptr<Evoral::Note> _note;
- bool _own_note;
- bool _selected;
+ MidiRegionView& _region;
+ Item* const _item;
+ InteractiveText* _text;
+ Widget* _channel_selector_widget;
+ State _state;
+ const boost::shared_ptr<NoteType> _note;
+ bool _own_note;
+ bool _selected;
};
} // namespace Gnome