X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fnote_base.h;h=54c53ff6d272cbf220349dad55f2de0322ac0481;hb=e7c85706e5553181636e7052f2fe10469b57fd85;hp=01c85b07f0f406880871ac78ff3bcb4b9bd6af84;hpb=ced4378d0914bcfb926267772c45d1d23f3bed38;p=ardour.git diff --git a/gtk2_ardour/note_base.h b/gtk2_ardour/note_base.h index 01c85b07f0..54c53ff6d2 100644 --- a/gtk2_ardour/note_base.h +++ b/gtk2_ardour/note_base.h @@ -23,10 +23,8 @@ #include #include "canvas/types.h" -#include "evoral/types.hpp" #include "rgb_macros.h" -#include "ardour_ui.h" #include "ui_config.h" class Editor; @@ -34,6 +32,7 @@ class MidiRegionView; namespace Evoral { template class Note; + class Beats; } namespace ArdourCanvas { @@ -46,7 +45,7 @@ namespace ArdourCanvas { * This is not actually a canvas item itself to avoid the dreaded diamond * inheritance pattern, since various types of canvas items (Note (rect), Hit * (diamond), etc) need to share this functionality but can't share an - * ancestor. + * ancestor. * * Note: Because of this, derived classes need to manually bounce events to * on_event, it won't happen automatically. @@ -60,9 +59,7 @@ class NoteBase : public sigc::trackable virtual ~NoteBase (); void set_item (ArdourCanvas::Item *); - ArdourCanvas::Item* item() const { return _item; } - - static PBD::Signal1 NoteBaseDeleted; + ArdourCanvas::Item* item() const { return _item; } virtual void show() = 0; virtual void hide() = 0; @@ -97,24 +94,22 @@ class NoteBase : public sigc::trackable virtual ArdourCanvas::Coord x1 () const = 0; virtual ArdourCanvas::Coord y1 () const = 0; - float mouse_x_fraction() const { return _mouse_x_fraction; } - float mouse_y_fraction() const { return _mouse_y_fraction; } + float mouse_x_fraction() const { return _mouse_x_fraction; } + float mouse_y_fraction() const { return _mouse_y_fraction; } const boost::shared_ptr note() const { return _note; } MidiRegionView& region_view() const { return _region; } + static void set_colors (); + inline static uint32_t meter_style_fill_color(uint8_t vel, bool selected) { if (selected) { - return ARDOUR_UI::config()->color_mod ("midi note selected", "midi note"); + return _selected_mod_col; } 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"), + return UINT_INTERPOLATE(_min_col, _mid_col, (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"), + return UINT_INTERPOLATE(_mid_col, _max_col, ((vel-64) / (double)63.0)); } } @@ -122,7 +117,7 @@ class NoteBase : public sigc::trackable /// calculate outline colors from fill colors of notes inline static uint32_t calculate_outline(uint32_t color, bool selected=false) { if (selected) { - return ARDOUR_UI::config()->color ("midi note selected outline"); + return _selected_outline_col; } else { return UINT_INTERPOLATE(color, 0x000000ff, 0.5); } @@ -131,8 +126,8 @@ class NoteBase : public sigc::trackable /// hue circle divided into 16 equal-looking parts, courtesy Thorsten Wilms static const uint32_t midi_channel_colors[16]; - bool mouse_near_ends () const; - virtual bool big_enough_to_trim () const; + bool mouse_near_ends () const; + virtual bool big_enough_to_trim () const; protected: enum State { None, Pressed, Dragging }; @@ -146,13 +141,21 @@ protected: bool _own_note; bool _selected; bool _valid; - float _mouse_x_fraction; - float _mouse_y_fraction; - - void set_mouse_fractions (GdkEvent*); + float _mouse_x_fraction; + float _mouse_y_fraction; + + void set_mouse_fractions (GdkEvent*); private: bool event_handler (GdkEvent *); + + static uint32_t _selected_mod_col; + static uint32_t _selected_outline_col; + static uint32_t _selected_col; + static uint32_t _min_col; + static uint32_t _mid_col; + static uint32_t _max_col; + static bool _color_init; }; #endif /* __gtk_ardour_note_h__ */