1 /*
2  * Copyright (C) 2009, 2010 Hermann Meyer, James Warden, Andreas Degert
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
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 /******************************************************************************
20 part of guitarix, use  knobs with Gtk
21 ******************************************************************************/
22 
23 #ifndef __GX_REGLER_H__
24 #define __GX_REGLER_H__
25 
26 #include <gtk/gtk.h>
27 #include "drawingutils.h"
28 
29 G_BEGIN_DECLS
30 
31 #define GX_TYPE_REGLER          (gx_regler_get_type())
32 #define GX_REGLER(obj)          (G_TYPE_CHECK_INSTANCE_CAST ((obj), GX_TYPE_REGLER, GxRegler))
33 #define GX_REGLER_CLASS(klass)  (G_TYPE_CHECK_CLASS_CAST ((klass),  GX_TYPE_REGLER, GxReglerClass))
34 #define GX_IS_REGLER(obj)       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GX_TYPE_REGLER))
35 #define GX_IS_REGLER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GX_TYPE_REGLER))
36 #define GX_REGLER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GX_TYPE_REGLER, GxReglerClass))
37 
38 typedef struct _GxRegler GxRegler;
39 typedef struct _GxReglerClass GxReglerClass;
40 typedef struct _GxReglerPrivate GxReglerPrivate;
41 
42 struct _GxRegler
43 {
44 	GtkRange parent;
45 	GxReglerPrivate *priv;
46 };
47 
48 struct _GxReglerClass {
49 	GtkRangeClass parent_class;
50 	gboolean (*value_entry)(GxRegler *regler, GdkRectangle *rect, GdkEventButton *event);
51 	gchar* (*format_value)(GxRegler *regler, gdouble value);
52 	gint (*input_value)(GxRegler *regler, gpointer spin, gpointer value);
53 };
54 
55 
56 GType gx_regler_get_type(void);
57 
58 void _gx_regler_calc_size_request(GxRegler *regler, gint *width, gint *height, gboolean with_border);
59 gdouble _gx_regler_get_step_pos(GxRegler *regler, gint step);
60 void _gx_regler_get_positions(GxRegler *regler, GdkRectangle *image_rect,
61                               GdkRectangle *value_rect, gboolean hfill);
62 void _gx_regler_display_value(GxRegler *regler, cairo_t *cr, GdkRectangle *value_rect);
63 void _gx_regler_simple_display_value(GxRegler *regler, cairo_t *cr, GdkRectangle *value_rect);
64 gboolean _gx_regler_check_display_popup(GxRegler *regler, GdkRectangle *image_rect,
65 					GdkRectangle *value_rect, GdkEventButton *event);
66 __attribute__((noinline))gboolean _approx_in_rectangle(gdouble x, gdouble y, GdkRectangle *rect);
67 
68 void gx_regler_set_show_value(GxRegler *regler, gboolean value);
69 gboolean gx_regler_get_show_value(GxRegler *regler);
70 void gx_regler_set_value_position(GxRegler *regler, GtkPositionType pos);
71 GtkPositionType gx_regler_get_value_position(GxRegler *regler);
72 void gx_regler_set_label_ref(GxRegler *regler, GtkLabel* label);
73 GtkLabel *gx_regler_get_label_ref(GxRegler *regler);
74 
75 G_END_DECLS
76 
77 #endif /* __GX_REGLER_H__ */
78