X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fcanvas-note-event.h;h=9546141d8bc32fa1bfabd03fdc66c695cbe15716;hb=c3d8d38f7f96667b415e2808e202fbb9227207c9;hp=748c50efd4d875874824aa24a59806b6fcf4cdd6;hpb=e2147fbc5bf0546fcafa32fe1d87f6e6d1b652c4;p=ardour.git diff --git a/gtk2_ardour/canvas-note-event.h b/gtk2_ardour/canvas-note-event.h index 748c50efd4..9546141d8b 100644 --- a/gtk2_ardour/canvas-note-event.h +++ b/gtk2_ardour/canvas-note-event.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Paul Davis + Copyright (C) 2007 Paul Davis Author: Dave Robillard This program is free software; you can redistribute it and/or modify @@ -24,6 +24,8 @@ #include #include +#include "ardour/midi_model.h" + #include "rgb_macros.h" #include "ardour_ui.h" #include "ui_config.h" @@ -32,7 +34,7 @@ class Editor; class MidiRegionView; -namespace Evoral { class Note; } +namespace Evoral { template class Note; } namespace Gnome { namespace Canvas { @@ -49,81 +51,89 @@ 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 NoteType; + CanvasNoteEvent( - MidiRegionView& region, - Item* item, - const boost::shared_ptr note = boost::shared_ptr()); + MidiRegionView& region, + Item* item, + const boost::shared_ptr note = boost::shared_ptr()); virtual ~CanvasNoteEvent(); - bool on_event(GdkEvent* ev); + virtual void show() = 0; + virtual void hide() = 0; + virtual bool on_event(GdkEvent* ev); + + bool valid() const { return _valid; } + void invalidate (); + void validate (); bool selected() const { return _selected; } void selected(bool yn); - void move_event(double dx, double dy); - + virtual void move_event(double dx, double dy) = 0; + uint32_t base_color(); - + 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(); void hide_channel_selector(); virtual void set_outline_color(uint32_t c) = 0; virtual void set_fill_color(uint32_t c) = 0; - + virtual double x1() = 0; virtual double y1() = 0; virtual double x2() = 0; virtual double y2() = 0; - const boost::shared_ptr note() const { return _note; } - - inline static uint32_t meter_style_fill_color(uint8_t vel) - { + const boost::shared_ptr note() const { return _note; } + MidiRegionView& region_view() const { return _region; } + + inline static uint32_t meter_style_fill_color(uint8_t vel) { if (vel < 64) { return UINT_INTERPOLATE( - ARDOUR_UI::config()->canvasvar_MeterColorBase.get(), - ARDOUR_UI::config()->canvasvar_MeterColorMid.get(), + ARDOUR_UI::config()->canvasvar_MidiNoteMeterColorBase.get(), + ARDOUR_UI::config()->canvasvar_MidiNoteMeterColorMid.get(), (vel / (double)63.0)); } else { return UINT_INTERPOLATE( - ARDOUR_UI::config()->canvasvar_MeterColorMid.get(), - ARDOUR_UI::config()->canvasvar_MeterColorTop.get(), + ARDOUR_UI::config()->canvasvar_MidiNoteMeterColorMid.get(), + ARDOUR_UI::config()->canvasvar_MidiNoteMeterColorTop.get(), ((vel-64) / (double)63.0)); } } - + /// 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 _note; - bool _own_note; - bool _selected; + MidiRegionView& _region; + Item* const _item; + InteractiveText* _text; + Widget* _channel_selector_widget; + State _state; + const boost::shared_ptr _note; + bool _own_note; + bool _selected; + bool _valid; }; } // namespace Gnome