1 /* Copyright (C) 1997, 1998, 1999 Marius Vollmer 2 * Copyright (C) 1999 John Harper <john@dcs.warwick.ac.uk> 3 * 4 * $Id$ 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2, or (at your option) 9 * any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this software; see the file COPYING. If not, write to 18 * the Free Software Foundation,51 Franklin Street, Fifth Floor, Boston, 19 * MA 02110-1301 USA 20 */ 21 22 #ifndef REP_GTK_H 23 #define REP_GTK_H 24 25 #ifdef HAVE_CONFIG_H 26 #include <config.h> 27 #endif 28 29 #include <rep/rep.h> 30 #include <gtk/gtk.h> 31 32 typedef struct _sgtk_type_info { 33 char *name; 34 GType type; 35 repv (*conversion) (repv); 36 } sgtk_type_info; 37 38 typedef struct _sgtk_enum_literal { 39 char *name; 40 int value; 41 } sgtk_enum_literal; 42 43 typedef struct _sgtk_enum_info { 44 sgtk_type_info header; 45 int n_literals; 46 sgtk_enum_literal *literals; 47 } sgtk_enum_info; 48 49 /* This is like an _sgtk_enum_literal, but the values are strings. 50 This is used in Gnome. */ 51 typedef struct _sgtk_senum_literal { 52 char *name; 53 char *value; 54 } sgtk_senum_literal; 55 56 typedef struct _sgtk_senum_info { 57 sgtk_type_info header; 58 int n_literals; 59 sgtk_senum_literal *literals; 60 } sgtk_senum_info; 61 62 typedef struct _sgtk_boxed_info { 63 sgtk_type_info header; 64 void *(*copy) (void *); 65 void (*destroy) (void *); 66 size_t size; 67 } sgtk_boxed_info; 68 69 typedef struct _sgtk_object_info { 70 sgtk_type_info header; 71 GType (*init_func) (); 72 73 struct _sgtk_object_info *parent; 74 } sgtk_object_info; 75 76 void sgtk_register_type_infos (sgtk_type_info **infos); 77 sgtk_type_info *sgtk_get_type_info (GType type_seqno); 78 void sgtk_register_type_infos_gtk (GTypeInfo **infos); 79 sgtk_type_info* sgtk_maybe_find_type_info (GType type); 80 sgtk_type_info *sgtk_find_type_info (GType type); 81 82 int sgtk_valid_int (repv obj); 83 int sgtk_valid_uint (repv obj); 84 int sgtk_valid_long (repv obj); 85 int sgtk_valid_ulong (repv obj); 86 int sgtk_valid_char (repv obj); 87 repv sgtk_uint_to_rep (unsigned long x); 88 repv sgtk_int_to_rep (long x); 89 repv sgtk_long_to_rep (long x); 90 repv sgtk_ulong_to_rep (unsigned long x); 91 guint sgtk_rep_to_uint (repv obj); 92 gint sgtk_rep_to_int (repv obj); 93 gulong sgtk_rep_to_ulong (repv obj); 94 glong sgtk_rep_to_long (repv obj); 95 gchar sgtk_rep_to_char (repv obj); 96 repv sgtk_char_to_rep (gchar c); 97 char *sgtk_rep_to_string (repv obj); 98 repv sgtk_string_to_rep (char *x); 99 repv sgtk_static_string_to_rep (const char *x); 100 int sgtk_valid_string (repv obj); 101 repv sgtk_bool_to_rep (int x); 102 int sgtk_rep_to_bool (repv obj); 103 int sgtk_valid_function (repv obj); 104 int sgtk_valid_fd (repv obj); 105 int sgtk_rep_to_fd (repv obj); 106 repv sgtk_fd_to_rep (int fd); 107 108 repv sgtk_wrap_gobj (GObject *obj); 109 int sgtk_is_a_gobj (GType type, repv obj); 110 GObject *sgtk_get_gobj (repv obj); 111 112 /* compatibility */ 113 repv sgtk_wrap_gtkobj (GtkObject *obj); 114 int sgtk_is_a_gtkobj (GType type, repv obj); 115 GtkObject *sgtk_get_gtkobj (repv obj); 116 117 int sgtk_valid_enum (repv obj, sgtk_enum_info*); 118 repv sgtk_enum_to_rep (gint val, sgtk_enum_info*); 119 gint sgtk_rep_to_enum (repv obj, sgtk_enum_info*); 120 121 int sgtk_valid_flags (repv obj, sgtk_enum_info*); 122 repv sgtk_flags_to_rep (gint val, sgtk_enum_info*); 123 gint sgtk_rep_to_flags (repv obj, sgtk_enum_info*); 124 125 int sgtk_valid_senum (repv obj, sgtk_senum_info*); 126 repv sgtk_senum_to_rep (char *val, sgtk_senum_info*); 127 char *sgtk_rep_to_senum (repv obj, sgtk_senum_info*); 128 129 repv sgtk_boxed_to_rep (gpointer ptr, sgtk_boxed_info*, int copyp); 130 void *sgtk_rep_to_boxed (repv obj); 131 int sgtk_valid_boxed (repv obj, sgtk_boxed_info*); 132 133 int sgtk_valid_float (repv obj); 134 gfloat sgtk_rep_to_float (repv obj); 135 repv sgtk_float_to_rep (gfloat f); 136 137 int sgtk_valid_double (repv obj); 138 double sgtk_rep_to_double (repv obj); 139 repv sgtk_double_to_rep (double f); 140 141 int sgtk_valid_pointer (repv obj); 142 void *sgtk_rep_to_pointer (repv obj); 143 repv sgtk_pointer_to_rep (void *ptr); 144 145 GType gobject_get_type (void); 146 147 int sgtk_valid_point (repv obj); 148 GdkPoint sgtk_rep_to_point (repv obj); 149 repv sgtk_point_to_rep (GdkPoint p); 150 151 int sgtk_valid_rect (repv obj); 152 GdkRectangle sgtk_rep_to_rect (repv obj); 153 repv sgtk_rect_to_rep (GdkRectangle p); 154 155 int sgtk_valid_segment (repv obj); 156 GdkSegment sgtk_scm2segment (repv obj); 157 repv sgtk_segment2scm (GdkSegment seg); 158 159 GType sgtk_type_from_name (char *name); 160 int sgtk_valid_type (repv obj); 161 GType sgtk_rep_to_type (repv obj); 162 repv sgtk_type_to_rep (GType t); 163 164 int sgtk_valid_composite (repv obj, int (*predicate)(repv)); 165 int sgtk_valid_complen (repv obj, int (*predicate)(repv), int len); 166 167 repv sgtk_slist_to_rep (GSList *list, repv (*torep)(void*)); 168 GSList *sgtk_rep_to_slist (repv obj, void (*fromrep)(repv, void*)); 169 void sgtk_slist_finish (GSList *list, repv obj, repv (*torep)(void*)); 170 171 repv sgtk_list_to_rep (GList *list, repv (*torep)(void*)); 172 GList *sgtk_rep_to_list (repv obj, void (*fromrep)(repv, void*)); 173 void sgtk_list_finish (GList *list, repv obj, repv (*torep)(void*)); 174 175 typedef struct { 176 int count; 177 void *vec; 178 } sgtk_cvec; 179 180 sgtk_cvec sgtk_rep_to_cvec (repv obj, void (*fromrep)(repv, void*), size_t sz); 181 void sgtk_cvec_finish (sgtk_cvec *, repv obj, repv (*torep)(void*), size_t sz); 182 repv sgtk_cvec_to_rep (sgtk_cvec *cvec, repv (*toscm)(void *), size_t sz); 183 184 typedef struct sgtk_protshell sgtk_protshell; 185 186 void sgtk_set_protect (repv protector, sgtk_protshell *prot); 187 sgtk_protshell *sgtk_new_protect (repv obj); 188 sgtk_protshell *sgtk_protect (repv protector, repv obj); 189 void sgtk_unprotect (sgtk_protshell *); 190 repv sgtk_get_protect (sgtk_protshell *prot); 191 192 void sgtk_set_gclosure (repv protector, GClosure *closure); 193 repv sgtk_get_gclosure (GClosure *closure); 194 GClosure *sgtk_new_gclosure (repv obj); 195 GClosure *sgtk_gclosure (repv protector, repv obj); 196 197 void sgtk_gclosure_callback_marshal (GClosure *closure, 198 GValue *return_value, 199 guint n_param_values, 200 const GValue *param_values, 201 gpointer invocation_hint, 202 gpointer marshal_data); 203 void sgtk_gclosure_callback_destroy (gpointer data, GClosure *closure); 204 205 void sgtk_callback_marshal (GtkObject *obj, 206 gpointer data, 207 guint n_args, 208 GtkArg *args); 209 void sgtk_callback_destroy (gpointer data); 210 211 repv sgtk_callback_trampoline (repv new_trampoline); 212 void sgtk_callback_postfix (void); 213 214 int sgtk_valid_arg_type (GType, repv val); 215 repv sgtk_arg_to_rep (GtkArg *a, int free_mem); 216 void sgtk_rep_to_arg (GtkArg *a, repv obj, repv protector); 217 void sgtk_rep_to_ret (GtkArg *a, repv obj); 218 219 repv sgtk_gvalue_to_rep (const GValue *a); 220 int sgtk_valid_gvalue (const GValue *a, repv obj); 221 void sgtk_rep_to_gvalue (GValue *a, repv obj); 222 223 sgtk_object_info *sgtk_find_object_info_from_type (GType type); 224 sgtk_object_info *sgtk_find_object_info (const char *name); 225 void sgtk_free_args (GParameter *args, int n_args); 226 GParameter *sgtk_build_args (GObjectClass *objclass, int *n_argsp, 227 repv rep_args, char *subr); 228 229 repv sgtk_color_conversion (repv color); 230 repv sgtk_font_conversion (repv color); 231 232 void sgtk_throw_gerror (const char *func_name, GError *gerr); 233 234 void sgtk_set_standalone (int flag); 235 int sgtk_is_standalone (void); 236 repv sgtk_standalone_p (void); 237 238 void sgtk_init (void); 239 void sgtk_init_with_args (int *argcp, char ***argvp); 240 241 /* Additional useful Gdk routines. */ 242 243 /* The following two do their magic with type conversions that are 244 automatically generated by build-guile-gtk. */ 245 246 GdkColor *gdk_color_intern (GdkColor *); 247 GdkFont *gdk_font_intern (GdkFont *); 248 249 GdkEventType gdk_event_type (GdkEvent *event); 250 GdkWindow *gdk_event_window (GdkEvent *event); 251 gboolean gdk_event_send_event (GdkEvent *event); 252 GdkRectangle *gdk_event_area (GdkEvent *event); 253 GdkVisibilityState gdk_event_visibility_state (GdkEvent *event); 254 guint32 gdk_event_time (GdkEvent *event); 255 gdouble gdk_event_x (GdkEvent *event); 256 gdouble gdk_event_y (GdkEvent *event); 257 gdouble gdk_event_pressure (GdkEvent *event); 258 gdouble gdk_event_xtilt (GdkEvent *event); 259 gdouble gdk_event_ytilt (GdkEvent *event); 260 gint gdk_event_button (GdkEvent *event); 261 gboolean gdk_event_button_state (GdkEvent *event); 262 gboolean gdk_event_is_hint (GdkEvent *event); 263 GdkInputSource gdk_event_source (GdkEvent *event); 264 guint32 gdk_event_deviceid (GdkEvent *event); 265 gdouble gdk_event_x_root (GdkEvent *event); 266 gdouble gdk_event_y_root (GdkEvent *event); 267 gboolean gdk_event_key_state (GdkEvent *event); 268 guint gdk_event_keyval (GdkEvent *event); 269 gchar *gdk_event_string (GdkEvent *event); 270 GdkWindow *gdk_event_subwindow (GdkEvent *event); 271 GdkNotifyType gdk_event_notify_detail (GdkEvent *event); 272 gboolean gdk_event_in (GdkEvent *event); 273 gint16 gdk_event_configure_x (GdkEvent *event); 274 gint16 gdk_event_configure_y (GdkEvent *event); 275 gint16 gdk_event_configure_width (GdkEvent *event); 276 gint16 gdk_event_configure_height (GdkEvent *event); 277 278 guint32 gdk_get_leader_window_id (void); 279 280 guint32 gdk_window_xid (GdkWindow *win); 281 282 GdkGC *gtk_style_fg_gc (GtkStyle *style, GtkStateType state); 283 GdkGC *gtk_style_bg_gc (GtkStyle *style, GtkStateType state); 284 285 /* Gtk stuff that wouldn't be here in an ideal world. */ 286 287 gchar *gtk_label_get_interp (GtkLabel *label); 288 void gtk_menu_popup_interp (GtkMenu *menu, 289 GtkWidget *parent_menu_shell, 290 GtkWidget *parent_menu_item, 291 gint button, 292 guint32 activate_time, 293 repv position); 294 295 #if GTK_MAJOR_VERSION < 2 || (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 4) 296 GtkWidget* 297 gtk_radio_menu_item_new_with_label_from_widget (GtkRadioMenuItem *group, 298 const gchar *label); 299 GtkWidget* 300 gtk_radio_menu_item_new_with_mnemonic_from_widget (GtkRadioMenuItem *group, 301 const gchar *label); 302 GtkWidget* gtk_radio_menu_item_new_from_widget (GtkRadioMenuItem *group); 303 #endif 304 305 GtkWidget* gtk_pixmap_new_interp (char *file, GtkWidget *intended_parent); 306 307 GdkColor *gdk_color_parse_interp (char *spec); 308 GdkColor *gtk_style_get_white_interp (GtkStyle *style); 309 310 #ifndef HAVE_GTK_WIDGET_PEEK_COLORMAP 311 GdkColormap *gtk_widget_peek_colormap (void); 312 #endif 313 314 void gtk_list_append_item (GtkList *list, GtkListItem *item); 315 void gtk_list_prepend_item (GtkList *list, GtkListItem *item); 316 317 #ifndef HAVE_GTK_TYPE_GET_INFO 318 gboolean gtk_type_get_info (GtkType type, GtkTypeInfo *info); 319 #endif 320 321 GtkType gtk_class_new (GtkType parent_type, gchar *name); 322 guint 323 gtk_signal_new_generic (const gchar *name, 324 GtkSignalRunType signal_flags, 325 GtkType type, 326 GtkType return_type, 327 guint nparams, 328 GtkType *params); 329 void sgtk_signal_emit (GtkObject *obj, char *name, repv rep_args); 330 331 #ifndef HAVE_GTK_SIGNAL_SET_CLASS_FUNCTION_FULL 332 void gtk_signal_set_class_function_full (GtkType type, 333 const gchar *signal, 334 GtkSignalFunc func, 335 GtkCallbackMarshal marshal, 336 gpointer data, 337 GtkDestroyNotify destroy_func); 338 #endif 339 340 void gtk_color_selection_set_color_interp (GtkColorSelection *sel, GdkColor *color); 341 GdkColor *gtk_color_selection_get_color_interp (GtkColorSelection *sel); 342 char *gtk_color_button_get_color_interp (GtkColorButton *button); 343 extern void gtk_widget_draw_interp (GtkWidget *widget); 344 345 GtkTextIter *gtk_text_iter_new (void); 346 repv sgtk_gtk_widget_get_allocation (GtkWidget *w); 347 348 extern rep_xsubr *sgtk_subrs[]; 349 extern sgtk_type_info *sgtk_type_infos[]; 350 351 #endif /* !REP_GTK_H */ 352