2 Copyright (C) 2002-2009 Paul Davis
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.
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.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __gtk_ardour_port_matrix_component_h__
21 #define __gtk_ardour_port_matrix_component_h__
23 #include <gtkmm/eventbox.h>
27 /** One component of the PortMatrix. This is a cairo-rendered
30 class PortMatrixComponent
33 PortMatrixComponent (PortMatrixBody *);
34 virtual ~PortMatrixComponent ();
37 GdkPixmap* get_pixmap (GdkDrawable *);
38 std::pair<uint32_t, uint32_t> dimensions ();
39 void require_render () {
40 _render_required = true;
43 /** @return width of columns in the grid */
44 static uint32_t column_width () {
48 /** @return height of rows in the grid */
49 static uint32_t row_height () {
55 /** @return width of borders drawn around labels */
56 static uint32_t label_border_width () {
60 /** @return padding between a name and the nearest line */
61 static uint32_t name_pad () {
65 /** @return width of thin lines in the grid */
66 static uint32_t thin_grid_line_width () {
70 /** @return width of thick lines in the grid */
71 static uint32_t thick_grid_line_width () {
75 /** @return space around the connection indicator */
76 static uint32_t connection_indicator_pad () {
80 /** @return angle of column labels, in radians */
81 static double angle () {
85 /* XXX I guess these colours should come from a theme, or something */
87 /* @return background colour */
88 static Gdk::Color background_colour () {
89 return Gdk::Color ("#000000");
92 /* @return text colour */
93 static Gdk::Color text_colour () {
94 return Gdk::Color ("#ffffff");
97 /* @return grid line colour */
98 static Gdk::Color grid_colour () {
99 return Gdk::Color ("#333333");
102 /* @return colour of association blobs */
103 static Gdk::Color association_colour () {
104 return Gdk::Color ("#00ff00");
108 static Gdk::Color get_a_bundle_colour (int x) {
110 return Gdk::Color ("#547027");
112 return Gdk::Color ("#3552a6");
116 void set_source_rgb (cairo_t *, Gdk::Color const &);
117 void set_source_rgba (cairo_t *, Gdk::Color const &, double);
119 /** Render the complete component to a cairo context. */
120 virtual void render (cairo_t *) = 0;
121 /** Compute any required dimensions. This must set up
122 * _width and _height.
124 virtual void compute_dimensions () = 0;
126 PortMatrixBody* _body; ///< the PortMatrixBody that we're in
127 uint32_t _width; ///< full width of the contents
128 uint32_t _height; ///< full height of the contents
131 GdkPixmap* _pixmap; ///< pixmap
132 bool _render_required; ///< true if the rendered pixmap is out of date
133 bool _dimension_computation_required; ///< true if the dimensions are out of date