1 | /* Copyright (C) 1997, 1998, 1999 Marius Vollmer |
---|
2 | * Copyright (C) 1999 John Harper <john@dcs.warwick.ac.uk> |
---|
3 | * |
---|
4 | * $Id: rep-gtk.h,v 1.1.1.1 2000-11-12 06:16:26 ghudson Exp $ |
---|
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, 675 Mass Ave, Cambridge, MA 02139, USA. |
---|
19 | */ |
---|
20 | |
---|
21 | #ifndef REP_GTK_H |
---|
22 | #define REP_GTK_H |
---|
23 | |
---|
24 | #ifdef HAVE_CONFIG_H |
---|
25 | #include <config.h> |
---|
26 | #endif |
---|
27 | |
---|
28 | #include <rep.h> |
---|
29 | #include <gtk/gtk.h> |
---|
30 | |
---|
31 | typedef struct _sgtk_type_info { |
---|
32 | char *name; |
---|
33 | GtkType type; |
---|
34 | repv (*conversion) (repv); |
---|
35 | } sgtk_type_info; |
---|
36 | |
---|
37 | typedef struct _sgtk_enum_literal { |
---|
38 | char *name; |
---|
39 | int value; |
---|
40 | } sgtk_enum_literal; |
---|
41 | |
---|
42 | typedef struct _sgtk_enum_info { |
---|
43 | sgtk_type_info header; |
---|
44 | int n_literals; |
---|
45 | sgtk_enum_literal *literals; |
---|
46 | } sgtk_enum_info; |
---|
47 | |
---|
48 | /* This is like an _sgtk_enum_literal, but the values are strings. |
---|
49 | This is used in Gnome. */ |
---|
50 | typedef struct _sgtk_senum_literal { |
---|
51 | char *name; |
---|
52 | char *value; |
---|
53 | } sgtk_senum_literal; |
---|
54 | |
---|
55 | typedef struct _sgtk_senum_info { |
---|
56 | sgtk_type_info header; |
---|
57 | int n_literals; |
---|
58 | sgtk_senum_literal *literals; |
---|
59 | } sgtk_senum_info; |
---|
60 | |
---|
61 | typedef struct _sgtk_boxed_info { |
---|
62 | sgtk_type_info header; |
---|
63 | void *(*copy) (void *); |
---|
64 | void (*destroy) (void *); |
---|
65 | size_t size; |
---|
66 | } sgtk_boxed_info; |
---|
67 | |
---|
68 | typedef struct _sgtk_object_info { |
---|
69 | sgtk_type_info header; |
---|
70 | GtkType (*init_func) (); |
---|
71 | |
---|
72 | struct _sgtk_object_info *parent; |
---|
73 | guint n_args; |
---|
74 | GtkArg *args; |
---|
75 | guint *args_flags; |
---|
76 | char **args_short_names; |
---|
77 | } sgtk_object_info; |
---|
78 | |
---|
79 | void sgtk_register_type_infos (sgtk_type_info **infos); |
---|
80 | sgtk_type_info *sgtk_get_type_info (guint type_seqno); |
---|
81 | void sgtk_register_type_infos_gtk (GtkTypeInfo **infos); |
---|
82 | sgtk_type_info* sgtk_maybe_find_type_info (GtkType type); |
---|
83 | sgtk_type_info *sgtk_find_type_info (GtkType type); |
---|
84 | |
---|
85 | int sgtk_valid_int (repv obj); |
---|
86 | int sgtk_valid_uint (repv obj); |
---|
87 | int sgtk_valid_long (repv obj); |
---|
88 | int sgtk_valid_ulong (repv obj); |
---|
89 | int sgtk_valid_char (repv obj); |
---|
90 | repv sgtk_uint_to_rep (u_long x); |
---|
91 | repv sgtk_int_to_rep (long x); |
---|
92 | repv sgtk_long_to_rep (long x); |
---|
93 | repv sgtk_ulong_to_rep (u_long x); |
---|
94 | guint sgtk_rep_to_uint (repv obj); |
---|
95 | gint sgtk_rep_to_int (repv obj); |
---|
96 | gulong sgtk_rep_to_ulong (repv obj); |
---|
97 | glong sgtk_rep_to_long (repv obj); |
---|
98 | gchar sgtk_rep_to_char (repv obj); |
---|
99 | repv sgtk_char_to_rep (gchar c); |
---|
100 | char *sgtk_rep_to_string (repv obj); |
---|
101 | repv sgtk_string_to_rep (char *x); |
---|
102 | repv sgtk_static_string_to_rep (const char *x); |
---|
103 | int sgtk_valid_string (repv obj); |
---|
104 | repv sgtk_bool_to_rep (int x); |
---|
105 | int sgtk_rep_to_bool (repv obj); |
---|
106 | int sgtk_valid_function (repv obj); |
---|
107 | int sgtk_valid_fd (repv obj); |
---|
108 | int sgtk_rep_to_fd (repv obj); |
---|
109 | repv sgtk_fd_to_rep (int fd); |
---|
110 | |
---|
111 | repv sgtk_wrap_gtkobj (GtkObject *obj); |
---|
112 | int sgtk_is_a_gtkobj (guint type, repv obj); |
---|
113 | GtkObject *sgtk_get_gtkobj (repv obj); |
---|
114 | |
---|
115 | int sgtk_valid_enum (repv obj, sgtk_enum_info*); |
---|
116 | repv sgtk_enum_to_rep (gint val, sgtk_enum_info*); |
---|
117 | gint sgtk_rep_to_enum (repv obj, sgtk_enum_info*); |
---|
118 | |
---|
119 | int sgtk_valid_flags (repv obj, sgtk_enum_info*); |
---|
120 | repv sgtk_flags_to_rep (gint val, sgtk_enum_info*); |
---|
121 | gint sgtk_rep_to_flags (repv obj, sgtk_enum_info*); |
---|
122 | |
---|
123 | int sgtk_valid_senum (repv obj, sgtk_senum_info*); |
---|
124 | repv sgtk_senum_to_rep (char *val, sgtk_senum_info*); |
---|
125 | char *sgtk_rep_to_senum (repv obj, sgtk_senum_info*); |
---|
126 | |
---|
127 | repv sgtk_boxed_to_rep (gpointer ptr, sgtk_boxed_info*, int copyp); |
---|
128 | void *sgtk_rep_to_boxed (repv obj); |
---|
129 | int sgtk_valid_boxed (repv obj, sgtk_boxed_info*); |
---|
130 | |
---|
131 | int sgtk_valid_float (repv obj); |
---|
132 | gfloat sgtk_rep_to_float (repv obj); |
---|
133 | repv sgtk_float_to_rep (gfloat f); |
---|
134 | |
---|
135 | int sgtk_valid_double (repv obj); |
---|
136 | double sgtk_rep_to_double (repv obj); |
---|
137 | repv sgtk_double_to_rep (double f); |
---|
138 | |
---|
139 | int sgtk_valid_pointer (repv obj); |
---|
140 | void *sgtk_rep_to_pointer (repv obj); |
---|
141 | repv sgtk_pointer_to_rep (void *ptr); |
---|
142 | |
---|
143 | int sgtk_valid_point (repv obj); |
---|
144 | GdkPoint sgtk_rep_to_point (repv obj); |
---|
145 | repv sgtk_point_to_rep (GdkPoint p); |
---|
146 | |
---|
147 | int sgtk_valid_rect (repv obj); |
---|
148 | GdkRectangle sgtk_rep_to_rect (repv obj); |
---|
149 | repv sgtk_rect_to_rep (GdkRectangle p); |
---|
150 | |
---|
151 | GtkType sgtk_type_from_name (char *name); |
---|
152 | int sgtk_valid_type (repv obj); |
---|
153 | GtkType sgtk_rep_to_type (repv obj); |
---|
154 | repv sgtk_type_to_rep (GtkType t); |
---|
155 | |
---|
156 | int sgtk_valid_composite (repv obj, int (*predicate)(repv)); |
---|
157 | int sgtk_valid_complen (repv obj, int (*predicate)(repv), int len); |
---|
158 | |
---|
159 | repv sgtk_slist_to_rep (GSList *list, repv (*torep)(void*)); |
---|
160 | GSList *sgtk_rep_to_slist (repv obj, void (*fromrep)(repv, void*)); |
---|
161 | void sgtk_slist_finish (GSList *list, repv obj, repv (*torep)(void*)); |
---|
162 | |
---|
163 | repv sgtk_list_to_rep (GList *list, repv (*torep)(void*)); |
---|
164 | GList *sgtk_rep_to_list (repv obj, void (*fromrep)(repv, void*)); |
---|
165 | void sgtk_list_finish (GList *list, repv obj, repv (*torep)(void*)); |
---|
166 | |
---|
167 | typedef struct { |
---|
168 | int count; |
---|
169 | void *vec; |
---|
170 | } sgtk_cvec; |
---|
171 | |
---|
172 | sgtk_cvec sgtk_rep_to_cvec (repv obj, void (*fromrep)(repv, void*), size_t sz); |
---|
173 | void sgtk_cvec_finish (sgtk_cvec *, repv obj, repv (*torep)(void*), size_t sz); |
---|
174 | repv sgtk_cvec_to_rep (sgtk_cvec *cvec, repv (*toscm)(void *), size_t sz); |
---|
175 | |
---|
176 | typedef struct sgtk_protshell sgtk_protshell; |
---|
177 | |
---|
178 | void sgtk_set_protect (repv protector, sgtk_protshell *prot); |
---|
179 | sgtk_protshell *sgtk_new_protect (repv obj); |
---|
180 | sgtk_protshell *sgtk_protect (repv protector, repv obj); |
---|
181 | void sgtk_unprotect (sgtk_protshell *); |
---|
182 | repv sgtk_get_protect (sgtk_protshell *prot); |
---|
183 | |
---|
184 | void sgtk_callback_marshal (GtkObject *, |
---|
185 | gpointer data, |
---|
186 | guint n_args, |
---|
187 | GtkArg *args); |
---|
188 | void sgtk_callback_destroy (gpointer data); |
---|
189 | repv sgtk_callback_trampoline (repv new_trampoline); |
---|
190 | void sgtk_callback_postfix (void); |
---|
191 | |
---|
192 | int sgtk_valid_arg (GtkArg *, repv val); |
---|
193 | repv sgtk_arg_to_rep (GtkArg *a, int free_mem); |
---|
194 | void sgtk_rep_to_arg (GtkArg *a, repv obj, repv protector); |
---|
195 | void sgtk_rep_to_ret (GtkArg *a, repv obj); |
---|
196 | |
---|
197 | sgtk_object_info *sgtk_find_object_info_from_type (GtkType type); |
---|
198 | sgtk_object_info *sgtk_find_object_info (char *name); |
---|
199 | GtkArg *sgtk_build_args (sgtk_object_info *info, int *n_argsp, |
---|
200 | repv rep_args, repv protector, char *subr); |
---|
201 | |
---|
202 | repv sgtk_color_conversion (repv color); |
---|
203 | repv sgtk_font_conversion (repv color); |
---|
204 | |
---|
205 | void sgtk_set_standalone (int flag); |
---|
206 | int sgtk_is_standalone (void); |
---|
207 | repv sgtk_standalone_p (void); |
---|
208 | |
---|
209 | void sgtk_init (void); |
---|
210 | void sgtk_init_with_args (int *argcp, char ***argvp); |
---|
211 | |
---|
212 | /* Additional useful Gdk routines. */ |
---|
213 | |
---|
214 | /* The following two do their magic with type conversions that are |
---|
215 | automatically generated by build-guile-gtk. */ |
---|
216 | |
---|
217 | GdkColor *gdk_color_intern (GdkColor *); |
---|
218 | GdkFont *gdk_font_intern (GdkFont *); |
---|
219 | |
---|
220 | GdkEventType gdk_event_type (GdkEvent *event); |
---|
221 | GdkWindow *gdk_event_window (GdkEvent *event); |
---|
222 | gboolean gdk_event_send_event (GdkEvent *event); |
---|
223 | GdkRectangle *gdk_event_area (GdkEvent *event); |
---|
224 | GdkVisibilityState gdk_event_visibility_state (GdkEvent *event); |
---|
225 | guint32 gdk_event_time (GdkEvent *event); |
---|
226 | gdouble gdk_event_x (GdkEvent *event); |
---|
227 | gdouble gdk_event_y (GdkEvent *event); |
---|
228 | gdouble gdk_event_pressure (GdkEvent *event); |
---|
229 | gdouble gdk_event_xtilt (GdkEvent *event); |
---|
230 | gdouble gdk_event_ytilt (GdkEvent *event); |
---|
231 | gint gdk_event_button (GdkEvent *event); |
---|
232 | gboolean gdk_event_button_state (GdkEvent *event); |
---|
233 | gboolean gdk_event_is_hint (GdkEvent *event); |
---|
234 | GdkInputSource gdk_event_source (GdkEvent *event); |
---|
235 | guint32 gdk_event_deviceid (GdkEvent *event); |
---|
236 | gdouble gdk_event_x_root (GdkEvent *event); |
---|
237 | gdouble gdk_event_y_root (GdkEvent *event); |
---|
238 | gboolean gdk_event_key_state (GdkEvent *event); |
---|
239 | guint gdk_event_keyval (GdkEvent *event); |
---|
240 | gchar *gdk_event_string (GdkEvent *event); |
---|
241 | GdkWindow *gdk_event_subwindow (GdkEvent *event); |
---|
242 | GdkNotifyType gdk_event_notify_detail (GdkEvent *event); |
---|
243 | gboolean gdk_event_in (GdkEvent *event); |
---|
244 | gint16 gdk_event_configure_x (GdkEvent *event); |
---|
245 | gint16 gdk_event_configure_y (GdkEvent *event); |
---|
246 | gint16 gdk_event_configure_width (GdkEvent *event); |
---|
247 | gint16 gdk_event_configure_height (GdkEvent *event); |
---|
248 | |
---|
249 | guint32 gdk_get_leader_window_id (void); |
---|
250 | |
---|
251 | guint32 gdk_window_xid (GdkWindow *win); |
---|
252 | |
---|
253 | GdkGC *gtk_style_fg_gc (GtkStyle *style, GtkStateType state); |
---|
254 | GdkGC *gtk_style_bg_gc (GtkStyle *style, GtkStateType state); |
---|
255 | |
---|
256 | /* Gtk stuff that wouldn't be here in an ideal world. */ |
---|
257 | |
---|
258 | #if GTK_MAJOR_VERSION == 1 && GTK_MINOR_VERSION == 0 |
---|
259 | typedef int GtkWidgetFlags; |
---|
260 | #endif |
---|
261 | |
---|
262 | gchar *gtk_label_get_interp (GtkLabel *label); |
---|
263 | void gtk_menu_popup_interp (GtkMenu *menu, |
---|
264 | GtkWidget *parent_menu_shell, |
---|
265 | GtkWidget *parent_menu_item, |
---|
266 | gint button, |
---|
267 | guint32 activate_time, |
---|
268 | repv position); |
---|
269 | |
---|
270 | GtkWidget* |
---|
271 | gtk_radio_menu_item_new_with_label_from_widget (GtkRadioMenuItem *group, |
---|
272 | gchar *label); |
---|
273 | GtkWidget* gtk_radio_menu_item_new_from_widget (GtkRadioMenuItem *group); |
---|
274 | GtkWidget* gtk_pixmap_new_interp (char *file, GtkWidget *intended_parent); |
---|
275 | |
---|
276 | #ifndef HAVE_GDK_COLOR_COPY |
---|
277 | GdkColor* gdk_color_copy (GdkColor *); |
---|
278 | void gdk_color_free (GdkColor *); |
---|
279 | #endif |
---|
280 | |
---|
281 | GdkColor *gdk_color_parse_interp (char *spec); |
---|
282 | GdkColor *gtk_style_get_white_interp (GtkStyle *style); |
---|
283 | |
---|
284 | #ifndef HAVE_GTK_WIDGET_PEEK_COLORMAP |
---|
285 | GdkColormap *gtk_widget_peek_colormap (void); |
---|
286 | #endif |
---|
287 | |
---|
288 | void gtk_list_append_item (GtkList *list, GtkListItem *item); |
---|
289 | |
---|
290 | #ifndef HAVE_GTK_TYPE_GET_INFO |
---|
291 | gboolean gtk_type_get_info (GtkType type, GtkTypeInfo *info); |
---|
292 | #endif |
---|
293 | |
---|
294 | GtkType gtk_class_new (GtkType parent_type, gchar *name); |
---|
295 | guint |
---|
296 | gtk_signal_new_generic (const gchar *name, |
---|
297 | GtkSignalRunType signal_flags, |
---|
298 | GtkType type, |
---|
299 | GtkType return_type, |
---|
300 | guint nparams, |
---|
301 | GtkType *params); |
---|
302 | void sgtk_signal_emit (GtkObject *obj, char *name, repv rep_args); |
---|
303 | |
---|
304 | #ifndef HAVE_GTK_SIGNAL_SET_CLASS_FUNCTION_FULL |
---|
305 | void gtk_signal_set_class_function_full (GtkType type, |
---|
306 | const gchar *signal, |
---|
307 | GtkSignalFunc func, |
---|
308 | GtkCallbackMarshal marshal, |
---|
309 | gpointer data, |
---|
310 | GtkDestroyNotify destroy_func); |
---|
311 | #endif |
---|
312 | |
---|
313 | void gtk_color_selection_set_color_interp (GtkColorSelection *sel, GdkColor *color); |
---|
314 | GdkColor *gtk_color_selection_get_color_interp (GtkColorSelection *sel); |
---|
315 | extern void gtk_widget_draw_interp (GtkWidget *widget); |
---|
316 | |
---|
317 | repv sgtk_gtk_widget_get_allocation (GtkWidget *w); |
---|
318 | |
---|
319 | extern rep_xsubr *sgtk_subrs[]; |
---|
320 | extern sgtk_type_info *sgtk_type_infos[]; |
---|
321 | |
---|
322 | #endif /* !REP_GTK_H */ |
---|