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