chiark / gitweb /
Obsoleted code removed
[clg] / gtk / gtkglue.c
1 /* Common Lisp bindings for GTK+ v2.0
2  * Copyright (C) 1999-2000 Espen S. Johnsen <espejohn@online.no>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library 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 GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 /* $Id: gtkglue.c,v 1.3 2000-10-05 17:32:34 espen Exp $ */
20
21
22 #include <gtk/gtk.h>
23
24 #ifdef CMUCL
25 #include "lisp.h"
26
27 extern lispobj funcall1(lispobj function, lispobj arg0);
28 extern lispobj funcall3(lispobj function, lispobj arg0,
29                         lispobj arg1, lispobj arg2);
30
31 lispobj callback_trampoline;
32 lispobj destroy_user_data;
33 #endif
34
35
36 void callback_marshal (GtkObject *object,
37                        gpointer data,
38                        guint n_args,
39                        GtkArg *args)
40 {
41 #ifdef CMUCL
42   funcall3 (callback_trampoline, alloc_number ((unsigned long)data),
43             alloc_number (n_args), alloc_sap (args));
44
45   /*  lispobj lisp_args[4];
46
47   lisp_args[0] = alloc_sap (object);
48   lisp_args[1] = alloc_number ((unsigned long)data);
49   lisp_args[2] = alloc_number (n_args);
50   lisp_args[3] = alloc_sap (args);
51
52   call_into_lisp (callback_trampoline, lisp_args, 4);*/
53 #elif defined(CLISP)
54   callback_trampoline ((unsigned long)data, n_args, (unsigned int) args);
55 #endif
56 }
57
58
59 void destroy_marshal (gpointer data)
60
61 #ifdef CMUCL
62   funcall1 (destroy_user_data, alloc_number ((unsigned long)data));
63 #elif defined(CLISP)
64   destroy_user_data ((unsigned long)data);
65 #endif
66 }
67
68 #ifndef CMUCL
69 void*
70 callback_marshal_address ()
71 {
72   return (void*)callback_marshal;
73 }
74
75 void*
76 destroy_marshal_address ()
77 {
78   return (void*)destroy_marshal;
79 }
80 #endif
81
82
83 /*
84  *
85  * Gtk helper functions
86  *
87  */
88
89 void
90 gtk_query_version (guint *major, guint *minor, guint *micro)
91 {
92   *major = gtk_major_version;
93   *minor = gtk_minor_version;
94   *micro = gtk_micro_version;
95 }
96
97
98 /* Is this necessary? */
99
100 GtkType
101 gtk_object_type (GtkObject *obj)
102 {
103   return GTK_OBJECT_TYPE (obj);
104 }
105
106
107
108 /* Widget */
109
110 GdkWindow*
111 gtk_widget_get_window (GtkWidget *widget)
112 {
113   return widget->window;
114 }
115
116 GtkStateType
117 gtk_widget_get_state (GtkWidget *widget)
118 {
119   return widget->state;
120 }
121
122 gboolean
123 gtk_widget_mapped_p (GtkWidget *widget)
124 {
125   return GTK_WIDGET_MAPPED (widget);
126 }
127
128 void
129 gtk_widget_allocation (GtkWidget *widget, int *width, int *height)
130 {
131   *width = widget->allocation.width;
132   *height = widget->allocation.height;
133 }
134
135
136 /* Container */
137
138 GtkWidget*
139 gtk_container_get_focus_child (GtkContainer *container)
140 {
141   return container->focus_child;
142 }
143
144
145
146 /* Menu item */
147
148 GtkWidget*
149 gtk_menu_item_get_submenu (GtkMenuItem* menu_item)
150 {
151   return menu_item->submenu;
152 }
153
154 GtkSubmenuPlacement
155 gtk_menu_item_get_placement (GtkMenuItem* menu_item)
156 {
157   return menu_item->submenu_placement;
158 }
159
160 gint
161 gtk_menu_item_get_show_toggle (GtkMenuItem* menu_item)
162 {
163   return menu_item->show_toggle_indicator;
164 }
165
166 gint
167 gtk_menu_item_get_show_submenu (GtkMenuItem* menu_item)
168 {
169   return menu_item->show_submenu_indicator;
170 }
171
172
173
174 /* Check menu item */
175
176 gboolean
177 gtk_check_menu_item_get_active (GtkCheckMenuItem* check_menu_item)
178 {
179   return check_menu_item->active;
180 }
181
182 gboolean
183 gtk_check_menu_item_get_show_toggle (GtkCheckMenuItem* check_menu_item)
184 {
185   return check_menu_item->always_show_toggle;
186 }
187
188
189 /* Tree item */
190
191 GtkWidget*
192 gtk_tree_item_get_subtree (GtkTreeItem* tree_item)
193 {
194   return GTK_TREE_ITEM_SUBTREE (tree_item);
195 }
196
197
198 /* Window */
199
200 void
201 gtk_window_wmclass (GtkWindow* window, gchar* name, gchar* class)
202 {
203   name = window->wmclass_name;
204   class = window->wmclass_class;
205 }
206
207
208 /* File selection */
209
210 GtkWidget*
211 gtk_file_selection_get_action_area (GtkFileSelection *filesel)
212 {
213   return filesel->action_area;
214 }
215
216 GtkWidget*
217 gtk_file_selection_get_ok_button (GtkFileSelection *filesel)
218 {
219   return filesel->ok_button;
220 }
221
222 GtkWidget*
223 gtk_file_selection_get_cancel_button (GtkFileSelection *filesel)
224 {
225   return filesel->cancel_button;
226 }
227
228
229 /* Color selection */
230
231 gtk_color_selection_set_color_by_values (GtkColorSelection *colorsel,
232                                          gdouble red,
233                                          gdouble green,
234                                          gdouble blue,
235                                          gdouble opacity)
236 {
237   gdouble color[4];
238
239   color[0] = red;
240   color[1] = green;
241   color[2] = blue;
242   color[3] = opacity;
243
244   gtk_color_selection_set_color (colorsel, color);
245 }
246
247 void
248 gtk_color_selection_get_color_as_values (GtkColorSelection *colorsel,
249                                          gdouble *red,
250                                          gdouble *green,
251                                          gdouble *blue,
252                                          gdouble *opacity)
253 {
254   gdouble color[4];
255
256   gtk_color_selection_get_color (colorsel, color);
257
258   *red = color[0];
259   *green = color[1];
260   *blue = color[2];
261   *opacity = color[3];
262 }
263
264
265 /* Combo */
266
267 GtkWidget*
268 gtk_combo_get_entry (GtkCombo *combo)
269 {
270   return combo->entry;
271 }
272
273 gboolean
274 gtk_combo_get_use_arrows (GtkCombo *combo)
275 {
276   return combo->use_arrows;
277 }
278
279 gboolean
280 gtk_combo_get_use_arrows_always (GtkCombo *combo)
281 {
282   return combo->use_arrows_always;
283 }
284
285 gboolean
286 gtk_combo_get_case_sensitive (GtkCombo *combo)
287 {
288   return combo->case_sensitive;
289 }
290
291
292 /* CList */
293
294 #ifdef CLIST
295 GList*
296 gtk_clist_selection (GtkCList *clist)
297 {
298   return clist->selection;
299 }
300
301 gint
302 gtk_clist_get_titles_visible (GtkCList *clist)
303 {
304   return (clist->title_window && GTK_WIDGET_VISIBLE (clist->title_window));
305 }
306
307 gint
308 gtk_clist_get_n_rows (GtkCList *clist)
309 {
310   return clist->rows;
311 }
312
313 gint
314 gtk_clist_get_focus_row (GtkCList *clist)
315 {
316   return clist->focus_row;
317 }
318
319 gint
320 gtk_clist_get_sort_column (GtkCList *clist)
321 {
322   return clist->sort_column;
323 }
324
325 GtkJustification
326 gtk_clist_column_justification (GtkCList *clist,
327                                  gint column)
328 {
329   return clist->column[column].justification;
330 }
331
332 gboolean
333 gtk_clist_column_visible_p (GtkCList *clist,
334                            gint column)
335 {
336   return clist->column[column].visible;
337 }
338
339 gboolean
340 gtk_clist_column_resizeable_p (GtkCList *clist,
341                              gint column)
342 {
343   return clist->column[column].resizeable;
344 }
345
346 gboolean
347 gtk_clist_column_auto_resize_p (GtkCList *clist,
348                                 gint column)
349 {
350   return clist->column[column].auto_resize;
351 }
352
353 gint
354 gtk_clist_column_width (GtkCList *clist,
355                         gint column)
356 {
357   return clist->column[column].width;
358 }
359
360 gboolean
361 gtk_clist_auto_sort_p (GtkCList *clist)
362 {
363   return GTK_CLIST_AUTO_SORT (clist);
364 }
365 #endif
366
367 /* CTree */
368
369 #ifdef CTREE
370 gboolean
371 gtk_ctree_node_leaf_p (GtkCTreeNode* node)
372 {
373   return GTK_CTREE_ROW (node)->is_leaf;
374 }
375
376 GtkCTreeNode*
377 gtk_ctree_node_child (GtkCTreeNode* node)
378 {
379   return GTK_CTREE_ROW (node)->children;
380 }
381
382 GtkCTreeNode*
383 gtk_ctree_node_parent (GtkCTreeNode* node)
384 {
385   return GTK_CTREE_ROW (node)->parent;
386 }
387
388 GtkCTreeNode*
389 gtk_ctree_node_sibling (GtkCTreeNode* node)
390 {
391   return GTK_CTREE_ROW (node)->sibling;
392 }
393
394 gint
395 gtk_ctree_node_level (GtkCTreeNode* node)
396 {
397   return GTK_CTREE_ROW (node)->level;
398 }
399 #endif
400
401 /* Paned */
402
403 GtkWidget*
404 gtk_paned_child1 (GtkPaned *paned, guint *resize, guint *shrink)
405 {
406   *resize = paned->child1_resize;
407   *shrink = paned->child1_shrink;
408   
409   return paned->child1;
410 }
411
412
413 GtkWidget*
414 gtk_paned_child2 (GtkPaned *paned, guint *resize, guint *shrink)
415 {
416   *resize = paned->child2_resize;
417   *shrink = paned->child2_shrink;
418   
419   return paned->child2;
420 }
421
422 gint
423 gtk_paned_get_position (GtkPaned *paned)
424 {
425   if (paned->position_set == TRUE) 
426     return paned->child1_size;
427   else
428     return -1;
429 }
430
431
432 /* Layout */
433
434 gint
435 gtk_layout_get_size (GtkLayout *layout, gint *width, gint *height)
436                  
437 {
438   *width =  layout->width;
439   *height = layout->height;
440 }
441
442 GdkWindow*
443 gtk_layout_get_bin_window (GtkLayout *layout)
444 {
445   return layout->bin_window;
446 }
447
448
449 /* List */
450
451 GList*
452 gtk_list_selection (GtkList *list)
453 {
454   return list->selection;
455 }
456
457
458 /* Menu */
459
460 gboolean
461 gtk_menu_get_tearoff_state (GtkMenu *menu)
462 {
463   return menu->torn_off;
464 }
465
466 gchar*
467 gtk_menu_get_title (GtkMenu *menu)
468 {
469   return g_strdup (gtk_object_get_data (GTK_OBJECT (menu), "gtk-menu-title"));
470 }
471
472
473 /* Table */
474
475 guint
476 gtk_table_row_spacing (GtkTable *table,
477                        guint row)
478 {
479   return table->rows[row].spacing;
480 }
481
482 guint
483 gtk_table_column_spacing (GtkTable *table,
484                           guint col)
485 {
486   return table->cols[col].spacing;
487 }
488
489
490 /* Toolbar */
491
492 gint
493 gtk_toolbar_num_children (GtkToolbar *toolbar)
494 {
495   return toolbar->num_children;
496 }
497
498 gint
499 gtk_toolbar_get_tooltips (GtkToolbar *toolbar)
500 {
501   return toolbar->tooltips->enabled;
502 }
503
504
505 /* Tree */
506
507 GtkSelectionMode
508 gtk_tree_get_selection_mode (GtkTree *tree)
509 {
510   return tree->selection_mode;
511 }
512
513 GtkSelectionMode
514 gtk_tree_get_view_mode (GtkTree *tree)
515 {
516   return tree->view_mode;
517 }
518
519 GtkSelectionMode
520 gtk_tree_get_view_lines (GtkTree *tree)
521 {
522   return tree->view_mode;
523 }
524
525 GtkTree*
526 gtk_tree_get_root_tree (GtkTree *tree)
527 {
528   return GTK_TREE_ROOT_TREE (tree);
529 }
530
531 GList*
532 gtk_tree_selection (GtkTree *tree)
533 {
534   return GTK_TREE_SELECTION (tree);
535 }
536
537
538 /* Drawing area */
539
540 void
541 gtk_drawing_area_get_size (GtkDrawingArea *darea, gint *width, gint *height)
542 {
543   GtkWidget *widget;
544
545   widget = GTK_WIDGET (darea);
546   *width = widget->allocation.width;
547   *height = widget->allocation.height;
548 }
549
550
551 /* Progress */
552
553 gchar*
554 gtk_progress_get_format_string (GtkProgress *progress)
555 {
556   return progress->format;
557 }
558
559 GtkAdjustment*
560 gtk_progress_get_adjustment (GtkProgress *progress)
561 {
562   return progress->adjustment;
563 }
564
565
566 /* Scrolled window */
567      
568 GtkWidget*
569 gtk_scrolled_window_get_hscrollbar (GtkScrolledWindow *window)
570 {
571   return window->hscrollbar;
572 }
573
574 GtkWidget*
575 gtk_scrolled_window_get_vscrollbar (GtkScrolledWindow *window)
576 {
577   return window->vscrollbar;
578 }
579
580
581
582 /* Tooltips */
583
584 guint
585 gtk_tooltips_get_delay (GtkTooltips *tooltips)
586 {
587   return tooltips->delay;
588 }
589
590 gboolean
591 gtk_tooltips_get_enabled (GtkTooltips *tooltips)
592 {
593   return tooltips->enabled;
594 }
595
596
597 /* GtkStyle accessor functions */
598
599 typedef enum {
600   GTK_COLOR_FG,
601   GTK_COLOR_BG,
602   GTK_COLOR_LIGHT,
603   GTK_COLOR_DARK,
604   GTK_COLOR_MID,
605   GTK_COLOR_TEXT,
606   GTK_COLOR_BASE,
607   GTK_COLOR_WHITE,
608   GTK_COLOR_BLACK
609 } GtkColorType;
610
611 GdkColor*
612 gtk_style_get_color (GtkStyle *style, GtkColorType color_type,
613                      GtkStateType state)
614 {
615   switch (color_type)
616     {
617     case GTK_COLOR_WHITE:
618       return &style->white;
619     case GTK_COLOR_BLACK:
620       return &style->black;
621     case GTK_COLOR_FG:
622       return &style->fg[state];
623     case GTK_COLOR_BG:
624       return &style->bg[state];
625     case GTK_COLOR_LIGHT:
626       return &style->light[state];
627     case GTK_COLOR_DARK:
628       return &style->dark[state];
629     case GTK_COLOR_MID:
630       return &style->mid[state];
631     case GTK_COLOR_TEXT:
632       return &style->text[state];
633     case GTK_COLOR_BASE:
634       return &style->base[state];
635     }
636 }
637
638
639 GdkColor*
640 gtk_style_set_color (GtkStyle *style, GtkColorType color_type,
641                      GtkStateType state, GdkColor *color)
642 {
643   switch (color_type)
644     {
645     case GTK_COLOR_WHITE:
646       style->white = *color; break;
647     case GTK_COLOR_BLACK:
648       style->black = *color; break;
649     case GTK_COLOR_FG:
650       style->fg[state] = *color; break;
651     case GTK_COLOR_BG:
652       style->bg[state]  = *color; break;
653     case GTK_COLOR_LIGHT:
654       style->light[state]  = *color; break;
655     case GTK_COLOR_DARK:
656       style->dark[state]  = *color; break;
657     case GTK_COLOR_MID:
658       style->mid[state]  = *color; break;
659     case GTK_COLOR_TEXT:
660       style->text[state]  = *color; break;
661     case GTK_COLOR_BASE:
662       style->base[state]  = *color; break;
663     }
664
665   return gtk_style_get_color (style, color_type, state);
666 }
667
668
669 GdkFont*
670 gtk_style_get_font (GtkStyle *style)
671 {
672   return style->font;
673 }
674
675
676 GdkFont*
677 gtk_style_set_font (GtkStyle *style, GdkFont *font)
678 {
679   return style->font = font;
680 }
681
682
683 GdkGC*
684 gtk_style_get_gc (GtkStyle *style, GtkColorType color_type, GtkStateType state)
685 {
686   switch (color_type)
687     {
688     case GTK_COLOR_WHITE:
689       return style->white_gc;
690     case GTK_COLOR_BLACK:
691       return style->black_gc;
692     case GTK_COLOR_FG:
693       return style->fg_gc[state];
694     case GTK_COLOR_BG:
695       return style->bg_gc[state];
696     case GTK_COLOR_LIGHT:
697       return style->light_gc[state];
698     case GTK_COLOR_DARK:
699       return style->dark_gc[state];
700     case GTK_COLOR_MID:
701       return style->mid_gc[state];
702     case GTK_COLOR_TEXT:
703       return style->text_gc[state];
704     case GTK_COLOR_BASE:
705       return style->base_gc[state];
706     }
707 }