X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fnote_base.h;h=01c85b07f0f406880871ac78ff3bcb4b9bd6af84;hb=e161bc0596b6cb8facdefc56435553f76ee643c3;hp=04de75f48f73034c275202aed2ddab71de549c1c;hpb=ba4d1cd1c1d5e4b47e288cd83c81011e7399207b;p=ardour.git diff --git a/gtk2_ardour/note_base.h b/gtk2_ardour/note_base.h index 04de75f48f..01c85b07f0 100644 --- a/gtk2_ardour/note_base.h +++ b/gtk2_ardour/note_base.h @@ -21,8 +21,9 @@ #define __gtk_ardour_note_base_h__ #include + #include "canvas/types.h" -#include "ardour/midi_model.h" +#include "evoral/types.hpp" #include "rgb_macros.h" #include "ardour_ui.h" @@ -40,7 +41,7 @@ namespace ArdourCanvas { class Text; } -/** This manages all the event handling for any MIDI event on the canvas. +/** Base class for canvas notes (sustained note rectangles and hit diamonds). * * This is not actually a canvas item itself to avoid the dreaded diamond * inheritance pattern, since various types of canvas items (Note (rect), Hit @@ -50,11 +51,10 @@ namespace ArdourCanvas { * Note: Because of this, derived classes need to manually bounce events to * on_event, it won't happen automatically. */ - class NoteBase : public sigc::trackable { public: - typedef Evoral::Note NoteType; + typedef Evoral::Note NoteType; NoteBase (MidiRegionView& region, bool, const boost::shared_ptr note = boost::shared_ptr()); virtual ~NoteBase (); @@ -90,6 +90,8 @@ class NoteBase : public sigc::trackable virtual void set_outline_color(uint32_t c) = 0; virtual void set_fill_color(uint32_t c) = 0; + virtual void set_ignore_events(bool ignore) = 0; + virtual ArdourCanvas::Coord x0 () const = 0; virtual ArdourCanvas::Coord y0 () const = 0; virtual ArdourCanvas::Coord x1 () const = 0; @@ -102,36 +104,28 @@ class NoteBase : public sigc::trackable MidiRegionView& region_view() const { return _region; } inline static uint32_t meter_style_fill_color(uint8_t vel, bool selected) { - if (selected) { - if (vel < 64) { - return UINT_INTERPOLATE( - ARDOUR_UI::config()->get_SelectedMidiNoteColorBase(), - ARDOUR_UI::config()->get_SelectedMidiNoteColorMid(), - (vel / (double)63.0)); - } else { - return UINT_INTERPOLATE( - ARDOUR_UI::config()->get_SelectedMidiNoteColorMid(), - ARDOUR_UI::config()->get_SelectedMidiNoteColorTop(), - ((vel-64) / (double)63.0)); - } - } else { - if (vel < 64) { - return UINT_INTERPOLATE( - ARDOUR_UI::config()->get_MidiNoteColorBase(), - ARDOUR_UI::config()->get_MidiNoteColorMid(), - (vel / (double)63.0)); - } else { - return UINT_INTERPOLATE( - ARDOUR_UI::config()->get_MidiNoteColorMid(), - ARDOUR_UI::config()->get_MidiNoteColorTop(), - ((vel-64) / (double)63.0)); - } - } + if (selected) { + return ARDOUR_UI::config()->color_mod ("midi note selected", "midi note"); + } else if (vel < 64) { + return UINT_INTERPOLATE( + ARDOUR_UI::config()->color_mod ("midi note min", "midi note"), + ARDOUR_UI::config()->color_mod ("midi note mid", "midi note"), + (vel / (double)63.0)); + } else { + return UINT_INTERPOLATE( + ARDOUR_UI::config()->color_mod ("midi note mid", "midi note"), + ARDOUR_UI::config()->color_mod ("midi note max", "midi note"), + ((vel-64) / (double)63.0)); + } } /// calculate outline colors from fill colors of notes - inline static uint32_t calculate_outline(uint32_t color) { - return UINT_INTERPOLATE(color, 0x000000ff, 0.5); + inline static uint32_t calculate_outline(uint32_t color, bool selected=false) { + if (selected) { + return ARDOUR_UI::config()->color ("midi note selected outline"); + } else { + return UINT_INTERPOLATE(color, 0x000000ff, 0.5); + } } /// hue circle divided into 16 equal-looking parts, courtesy Thorsten Wilms