#include <string.h>
#include <gtk/gtk.h>
#include "ergtklog.h"
#include "erGtkToggleButton.h"
Go to the source code of this file.
Defines | |
#define | DEFAULT_STYLE_INDEX 0 |
#define | STYLE_PREFIX "erGtkToggleButton" |
#define | STYLE_PREFIX_LEN strlen(STYLE_PREFIX) |
Functions | |
static void | ergtk_toggle_button_notify (GObject *object, GParamSpec *pspec) |
static gboolean | ergtk_toggle_button_expose_event (GtkWidget *widget, GdkEventExpose *event) |
static void | ergtk_toggle_button_toggled (GtkToggleButton *toggleButton) |
static void | ergtk_toggle_button_class_init (erGtkToggleButtonClass *klass) |
static void | ergtk_toggle_button_init (erGtkToggleButton *input_entry) |
static void | fix_label_colour (erGtkToggleButton *toggleButton) |
GtkWidget * | ergtk_toggle_button_new () |
GtkWidget * | ergtk_toggle_button_new_with_label (const gchar *label) |
GType | ergtk_toggle_button_get_type (void) |
Variables | |
static GtkToggleButtonClass * | g_parent_class = NULL |
struct { | |
guint width | |
guint height | |
const gchar * style | |
} | g_style_tbl [] |
Changes colour of the button's child object as a fucntion of the button state.
Copyright (C) 2007 iRex Technologies B.V. All rights reserved.
Definition in file erGtkToggleButton.c.
#define DEFAULT_STYLE_INDEX 0 |
Definition at line 58 of file erGtkToggleButton.c.
#define STYLE_PREFIX "erGtkToggleButton" |
Definition at line 59 of file erGtkToggleButton.c.
#define STYLE_PREFIX_LEN strlen(STYLE_PREFIX) |
Definition at line 60 of file erGtkToggleButton.c.
static void ergtk_toggle_button_class_init | ( | erGtkToggleButtonClass * | klass | ) | [static] |
Definition at line 122 of file erGtkToggleButton.c.
00123 { 00124 LOGPRINTF("entry"); 00125 00126 GObjectClass* object_class = (GObjectClass* )klass; 00127 GtkWidgetClass* widget_class = (GtkWidgetClass* )klass; 00128 GtkToggleButtonClass* toggleButton_class = (GtkToggleButtonClass*)klass; 00129 00130 // remember parent class struct, needed for chaining up to parent class 00131 g_parent_class = g_type_class_peek_parent(klass); 00132 00133 // overload some virtual methods 00134 object_class->notify = ergtk_toggle_button_notify; 00135 // 00136 widget_class->expose_event = ergtk_toggle_button_expose_event; 00137 // 00138 toggleButton_class->toggled = ergtk_toggle_button_toggled; 00139 }
static gboolean ergtk_toggle_button_expose_event | ( | GtkWidget * | widget, | |
GdkEventExpose * | event | |||
) | [static] |
Definition at line 195 of file erGtkToggleButton.c.
00196 { 00197 g_return_val_if_fail(ERGTK_IS_TOGGLE_BUTTON(widget), FALSE); 00198 00199 // chain to parent class 00200 GtkWidgetClass* parent_widget_class = GTK_WIDGET_CLASS(g_parent_class); 00201 if (parent_widget_class->expose_event) 00202 { 00203 parent_widget_class->expose_event(widget, event); 00204 } 00205 00206 fix_label_colour(ERGTK_TOGGLE_BUTTON(widget)); 00207 00208 return FALSE; // continue event handling 00209 }
GType ergtk_toggle_button_get_type | ( | void | ) |
get type of erGtkToggleButton widget
Definition at line 97 of file erGtkToggleButton.c.
00098 { 00099 static GType class_type = 0; 00100 00101 if (class_type == 0) 00102 { 00103 static const GTypeInfo class_info = 00104 { 00105 sizeof(erGtkToggleButtonClass), 00106 NULL, /* base_init */ 00107 NULL, /* base_finalize */ 00108 (GClassInitFunc) ergtk_toggle_button_class_init, 00109 NULL, /* class_finalize */ 00110 NULL, /* class_data */ 00111 sizeof(erGtkToggleButton), 00112 0, /* n_preallocs */ 00113 (GInstanceInitFunc) ergtk_toggle_button_init, 00114 }; 00115 class_type = g_type_register_static(GTK_TYPE_TOGGLE_BUTTON, "erGtkToggleButton", &class_info, 0); 00116 } 00117 00118 return class_type; 00119 }
static void ergtk_toggle_button_init | ( | erGtkToggleButton * | input_entry | ) | [static] |
Definition at line 142 of file erGtkToggleButton.c.
00143 { 00144 LOGPRINTF("entry"); 00145 g_return_if_fail(ERGTK_IS_TOGGLE_BUTTON(item)); 00146 00147 GtkWidget* widget = (GtkWidget*)item; 00148 00149 // set default size 00150 gtk_widget_set_size_request( widget, 00151 g_style_tbl[DEFAULT_STYLE_INDEX].width, 00152 g_style_tbl[DEFAULT_STYLE_INDEX].height ); 00153 }
GtkWidget* ergtk_toggle_button_new | ( | ) |
create a new erGtkToggleButton widget
- |
Definition at line 77 of file erGtkToggleButton.c.
00078 { 00079 erGtkToggleButton* item = (erGtkToggleButton*) g_object_new(ERGTK_TOGGLE_BUTTON_TYPE, NULL); 00080 00081 GtkWidget* widget = (GtkWidget*)item; 00082 GTK_WIDGET_UNSET_FLAGS(widget, GTK_CAN_FOCUS); 00083 00084 return widget; 00085 }
GtkWidget* ergtk_toggle_button_new_with_label | ( | const gchar * | label | ) |
Definition at line 87 of file erGtkToggleButton.c.
00088 { 00089 erGtkToggleButton* item = (erGtkToggleButton*) g_object_new(ERGTK_TOGGLE_BUTTON_TYPE, "label", label, NULL); 00090 00091 GtkWidget* widget = (GtkWidget*)item; 00092 GTK_WIDGET_UNSET_FLAGS(widget, GTK_CAN_FOCUS); 00093 00094 return widget; 00095 }
static void ergtk_toggle_button_notify | ( | GObject * | object, | |
GParamSpec * | pspec | |||
) | [static] |
Definition at line 160 of file erGtkToggleButton.c.
00161 { 00162 g_return_if_fail(ERGTK_IS_TOGGLE_BUTTON(object)); 00163 00164 int i; 00165 gint width; 00166 const gchar* name = pspec->name; 00167 GtkWidget* widget = (GtkWidget*)object; 00168 const gchar* widget_name; 00169 00170 // chain to parent class 00171 GObjectClass* parent_object_class = G_OBJECT_CLASS(g_parent_class); 00172 if (parent_object_class->notify) 00173 { 00174 parent_object_class->notify(object, pspec); 00175 } 00176 00177 if (strcmp(name, "width-request") == 0) 00178 { 00179 // set name and rc-style as a function of width 00180 g_object_get(object, name, &width, NULL); 00181 widget_name = gtk_widget_get_name(widget); 00182 if ( strcmp(widget_name, "erGtkToggleButton") == 0 00183 || strncmp(widget_name, STYLE_PREFIX, STYLE_PREFIX_LEN) == 0 ) 00184 { 00185 i = 0; 00186 while (width > g_style_tbl[i].width && g_style_tbl[i+1].width != 0) 00187 { 00188 i++; 00189 } 00190 gtk_widget_set_name(widget, g_style_tbl[i].style); 00191 } 00192 } 00193 }
static void ergtk_toggle_button_toggled | ( | GtkToggleButton * | toggleButton | ) | [static] |
Definition at line 211 of file erGtkToggleButton.c.
00212 { 00213 g_return_if_fail(ERGTK_IS_TOGGLE_BUTTON(toggleButton)); 00214 00215 // chain to parent class 00216 if (g_parent_class->toggled) 00217 { 00218 g_parent_class->toggled(toggleButton); 00219 } 00220 00221 fix_label_colour(ERGTK_TOGGLE_BUTTON(toggleButton)); 00222 }
static void fix_label_colour | ( | erGtkToggleButton * | toggleButton | ) | [static] |
Definition at line 224 of file erGtkToggleButton.c.
00225 { 00226 00227 // update text colour for button label 00228 // when the (invisible) cursor is on the button, the text label remains in state PRELIGHT 00229 // we now change the PRELIGHT colour the one that goes with the button state 00230 gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(erToggleButton)); 00231 GtkWidget* label = gtk_bin_get_child(GTK_BIN(erToggleButton)); 00232 GtkStyle* style = gtk_widget_get_style(label); 00233 GtkStateType betterstate; 00234 if (active) 00235 { 00236 betterstate = GTK_STATE_ACTIVE; 00237 } 00238 else 00239 { 00240 betterstate = GTK_STATE_NORMAL; 00241 } 00242 00243 // set colour for prelight style 00244 // Note: only call gtk_widget_modify_fg() when needed, to avoid an avalanche of expose events 00245 if (memcmp( &(style->fg[GTK_STATE_PRELIGHT]), &(style->fg[betterstate]), sizeof(style->fg[0])) != 0) 00246 { 00247 gtk_widget_modify_fg(label, GTK_STATE_PRELIGHT, &(style->fg[betterstate])); 00248 } 00249 }
GtkToggleButtonClass* g_parent_class = NULL [static] |
Definition at line 40 of file erGtkToggleButton.c.
struct { ... } g_style_tbl[] [static] |
guint height |
Definition at line 47 of file erGtkToggleButton.c.
const gchar* style |
Definition at line 48 of file erGtkToggleButton.c.
guint width |
Definition at line 46 of file erGtkToggleButton.c.