summaryrefslogtreecommitdiff
path: root/gtk2_ardour/piano_roll_header.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-01-13 17:45:17 +0000
committerDavid Robillard <d@drobilla.net>2008-01-13 17:45:17 +0000
commit2db91c126edc8fcaeda711d35369970576715719 (patch)
tree5a3a16c77acb7909334c6eb97fd0578c96f276ec /gtk2_ardour/piano_roll_header.h
parentf8e3d652e946a169db0c15e3d1a0d9ed15464e0c (diff)
Apply MIDI keyboard and "scroomer" patch.
git-svn-id: svn://localhost/ardour2/trunk@2908 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/piano_roll_header.h')
-rw-r--r--gtk2_ardour/piano_roll_header.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/gtk2_ardour/piano_roll_header.h b/gtk2_ardour/piano_roll_header.h
new file mode 100644
index 0000000000..141e7663f5
--- /dev/null
+++ b/gtk2_ardour/piano_roll_header.h
@@ -0,0 +1,104 @@
+/*
+ Copyright (C) 2008 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef __ardour_piano_roll_header_h__
+#define __ardour_piano_roll_header_h__
+
+#include <ardour/types.h>
+
+#include <gtkmm/drawingarea.h>
+
+namespace ARDOUR {
+ class MidiTrack;
+}
+
+class MidiTimeAxisView;
+class MidiStreamView;
+
+class PianoRollHeader : public Gtk::DrawingArea {
+public:
+ PianoRollHeader(MidiStreamView&);
+
+ bool on_expose_event (GdkEventExpose*);
+ bool on_motion_notify_event (GdkEventMotion*);
+ bool on_button_press_event (GdkEventButton*);
+ bool on_button_release_event (GdkEventButton*);
+ bool on_scroll_event (GdkEventScroll*);
+ bool on_enter_notify_event (GdkEventCrossing*);
+ bool on_leave_notify_event (GdkEventCrossing*);
+
+ void on_size_request(Gtk::Requisition*);
+ void on_size_allocate(Gtk::Allocation& a);
+
+ void note_range_changed();
+
+ struct Color {
+ Color();
+ Color(double _r, double _g, double _b);
+ inline void set(const Color& c);
+
+ double r;
+ double g;
+ double b;
+ };
+
+private:
+ static Color white;
+ static Color white_highlight;
+ static Color white_shade_light;
+ static Color white_shade_dark;
+ static Color black;
+ static Color black_highlight;
+ static Color black_shade_light;
+ static Color black_shade_dark;
+
+ PianoRollHeader(const PianoRollHeader&);
+
+ enum ItemType {
+ BLACK_SEPARATOR,
+ BLACK_MIDDLE_SEPARATOR,
+ BLACK,
+ WHITE_SEPARATOR,
+ WHITE_RECT,
+ WHITE_CF,
+ WHITE_EB,
+ WHITE_DGA
+ };
+
+ void invalidate_note_range(int lowest, int highest);
+
+ void get_path(ItemType, int note, double x[], double y[]);
+
+ void send_note_on(uint8_t note);
+ void send_note_off(uint8_t note);
+
+ MidiStreamView& _view;
+
+ ARDOUR::Byte _event[3];
+
+ Cairo::RefPtr<Cairo::Context> cc;
+ bool _active_notes[128];
+ uint8_t _highlighted_note;
+ uint8_t _clicked_note;
+ double _grab_y;
+
+ double _note_height;
+ double _black_note_width;
+};
+
+#endif /* __ardour_piano_roll_header_h__ */