2 Copyright (C) 2008 Paul Davis
3 Author: Audan Holland ??
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __ardour_piano_roll_header_h__
21 #define __ardour_piano_roll_header_h__
23 #include "ardour/types.h"
25 #include <gtkmm/drawingarea.h>
31 class MidiTimeAxisView;
35 class PianoRollHeader : public Gtk::DrawingArea {
37 PianoRollHeader(MidiStreamView&);
39 bool on_expose_event (GdkEventExpose*);
40 bool on_motion_notify_event (GdkEventMotion*);
41 bool on_button_press_event (GdkEventButton*);
42 bool on_button_release_event (GdkEventButton*);
43 bool on_scroll_event (GdkEventScroll*);
44 bool on_enter_notify_event (GdkEventCrossing*);
45 bool on_leave_notify_event (GdkEventCrossing*);
47 void on_size_request(Gtk::Requisition*);
48 void on_size_allocate(Gtk::Allocation& a);
50 void note_range_changed();
51 void set_note_highlight (uint8_t note);
55 Color(double _r, double _g, double _b);
56 inline void set(const Color& c);
63 sigc::signal<void,uint8_t> SetNoteSelection;
64 sigc::signal<void,uint8_t> AddNoteSelection;
65 sigc::signal<void,uint8_t> ToggleNoteSelection;
66 sigc::signal<void,uint8_t> ExtendNoteSelection;
70 static Color white_highlight;
71 static Color white_shade_light;
72 static Color white_shade_dark;
74 static Color black_highlight;
75 static Color black_shade_light;
76 static Color black_shade_dark;
78 PianoRollHeader(const PianoRollHeader&);
82 BLACK_MIDDLE_SEPARATOR,
91 void invalidate_note_range(int lowest, int highest);
93 void get_path(ItemType, int note, double x[], double y[]);
95 void send_note_on(uint8_t note);
96 void send_note_off(uint8_t note);
98 void reset_clicked_note(uint8_t, bool invalidate = true);
100 MidiStreamView& _view;
104 Cairo::RefPtr<Cairo::Context> cc;
105 bool _active_notes[128];
106 uint8_t _highlighted_note;
107 uint8_t _clicked_note;
112 double _black_note_width;
114 PublicEditor& editor() const;
117 #endif /* __ardour_piano_roll_header_h__ */