1 /* 2 * Copyright (C) 2009-2011 Carl Hetherington <carl@carlh.net> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License along 15 * with this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 17 */ 18 19 #ifndef __port_matrix_column_labels_h__ 20 #define __port_matrix_column_labels_h__ 21 22 #include <boost/shared_ptr.hpp> 23 #include "port_matrix_labels.h" 24 25 namespace ARDOUR { 26 class Bundle; 27 class BundleChannel; 28 } 29 30 class PortMatrixNode; 31 32 /** The column labels part of the port matrix */ 33 class PortMatrixColumnLabels : public PortMatrixLabels 34 { 35 public: 36 PortMatrixColumnLabels (PortMatrix *, PortMatrixBody *); 37 38 void button_press (double, double, GdkEventButton *); 39 40 double component_to_parent_x (double x) const; 41 double parent_to_component_x (double x) const; 42 double component_to_parent_y (double y) const; 43 double parent_to_component_y (double y) const; 44 void mouseover_changed (std::list<PortMatrixNode> const &); 45 void motion (double, double); 46 overhang()47 uint32_t overhang () const { 48 return _overhang; 49 } 50 51 private: 52 void render_bundle_name (cairo_t *, Gdk::Color, Gdk::Color, double, double, boost::shared_ptr<ARDOUR::Bundle>); 53 void render_channel_name (cairo_t *, Gdk::Color, Gdk::Color, double, double, ARDOUR::BundleChannel const &); 54 double channel_x (ARDOUR::BundleChannel const &) const; 55 double channel_y (ARDOUR::BundleChannel const &) const; 56 void queue_draw_for (ARDOUR::BundleChannel const &); 57 ARDOUR::BundleChannel position_to_channel (double, double, boost::shared_ptr<const PortGroup>) const; 58 59 void render (cairo_t *); 60 void compute_dimensions (); 61 double basic_text_x_pos (int) const; 62 std::vector<std::pair<double, double> > port_name_shape (double, double) const; 63 64 double _longest_bundle_name; 65 double _longest_channel_name; 66 double _text_height; 67 double _descender_height; 68 uint32_t _overhang; 69 }; 70 71 #endif 72