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