Mercurial > dwindows
comparison gtk/dw.c @ 147:b479002e013f
Upped the DW revision to 1.0, and merged with the latest code in the FX
repository.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 23 Oct 2002 14:34:29 +0000 |
parents | 659c1a2bccad |
children | 830f591c87f1 |
comparison
equal
deleted
inserted
replaced
146:add6b46310c2 | 147:b479002e013f |
---|---|
1231 } | 1231 } |
1232 #else | 1232 #else |
1233 PangoFontDescription *font = pango_font_description_from_string(fontname); | 1233 PangoFontDescription *font = pango_font_description_from_string(fontname); |
1234 | 1234 |
1235 if(font) | 1235 if(font) |
1236 { | |
1236 gtk_widget_modify_font(handle, font); | 1237 gtk_widget_modify_font(handle, font); |
1237 | 1238 pango_font_description_free(font); |
1238 pango_font_description_free(font); | 1239 } |
1239 #endif | 1240 #endif |
1240 return retval; | 1241 return retval; |
1241 } | 1242 } |
1242 | 1243 |
1243 /* | 1244 /* |
1248 */ | 1249 */ |
1249 int dw_window_set_font(HWND handle, char *fontname) | 1250 int dw_window_set_font(HWND handle, char *fontname) |
1250 { | 1251 { |
1251 #if GTK_MAJOR_VERSION > 1 | 1252 #if GTK_MAJOR_VERSION > 1 |
1252 PangoFontDescription *pfont; | 1253 PangoFontDescription *pfont; |
1254 #else | |
1255 GdkFont *gdkfont; | |
1253 #endif | 1256 #endif |
1254 GtkWidget *handle2 = handle; | 1257 GtkWidget *handle2 = handle; |
1255 char *font; | 1258 char *font; |
1256 int _locked_by_me = FALSE; | 1259 int _locked_by_me = FALSE; |
1257 gpointer data; | 1260 gpointer data; |
1258 GdkFont *gdkfont; | |
1259 | 1261 |
1260 DW_MUTEX_LOCK; | 1262 DW_MUTEX_LOCK; |
1261 if(GTK_IS_SCROLLED_WINDOW(handle)) | 1263 if(GTK_IS_SCROLLED_WINDOW(handle)) |
1262 { | 1264 { |
1263 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | 1265 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
1264 if(tmp) | 1266 if(tmp) |
1265 handle2 = tmp; | 1267 handle2 = tmp; |
1266 } | 1268 } |
1267 font = strdup(fontname); | 1269 font = strdup(fontname); |
1268 | 1270 |
1271 #if GTK_MAJOR_VERSION < 2 | |
1269 /* Free old font if it exists */ | 1272 /* Free old font if it exists */ |
1270 gdkfont = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle2), "gdkfont"); | 1273 gdkfont = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle2), "gdkfont"); |
1271 if(gdkfont) | 1274 if(gdkfont) |
1272 gdk_font_unref(gdkfont); | 1275 gdk_font_unref(gdkfont); |
1273 gdkfont = gdk_font_load(fontname); | 1276 gdkfont = gdk_font_load(fontname); |
1277 if(!gdkfont) | |
1278 gdkfont = gdk_font_load("fixed"); | |
1274 gtk_object_set_data(GTK_OBJECT(handle2), "gdkfont", (gpointer)gdkfont); | 1279 gtk_object_set_data(GTK_OBJECT(handle2), "gdkfont", (gpointer)gdkfont); |
1280 #endif | |
1275 | 1281 |
1276 /* Free old font name if one is allocated */ | 1282 /* Free old font name if one is allocated */ |
1277 data = gtk_object_get_data(GTK_OBJECT(handle2), "fontname"); | 1283 data = gtk_object_get_data(GTK_OBJECT(handle2), "fontname"); |
1278 if(data) | 1284 if(data) |
1279 free(data); | 1285 free(data); |
1280 | 1286 |
1281 if(font) | 1287 gtk_object_set_data(GTK_OBJECT(handle2), "fontname", (gpointer)font); |
1282 gtk_object_set_data(GTK_OBJECT(handle2), "fontname", (gpointer)font); | |
1283 #if GTK_MAJOR_VERSION > 1 | 1288 #if GTK_MAJOR_VERSION > 1 |
1284 pfont = pango_font_description_from_string(fontname); | 1289 pfont = pango_font_description_from_string(fontname); |
1285 | 1290 |
1286 if(pfont) | 1291 if(pfont) |
1292 { | |
1287 gtk_widget_modify_font(handle2, pfont); | 1293 gtk_widget_modify_font(handle2, pfont); |
1288 | 1294 pango_font_description_free(pfont); |
1289 pango_font_description_free(pfont); | 1295 } |
1290 #endif | 1296 #endif |
1291 DW_MUTEX_UNLOCK; | 1297 DW_MUTEX_UNLOCK; |
1292 return TRUE; | 1298 return TRUE; |
1293 } | 1299 } |
1294 | 1300 |
1320 gtk_object_set_data(GTK_OBJECT(handle), "backgdk", (gpointer)backgdk); | 1326 gtk_object_set_data(GTK_OBJECT(handle), "backgdk", (gpointer)backgdk); |
1321 } | 1327 } |
1322 | 1328 |
1323 int _set_color(HWND handle, unsigned long fore, unsigned long back) | 1329 int _set_color(HWND handle, unsigned long fore, unsigned long back) |
1324 { | 1330 { |
1331 #if GTK_MAJOR_VERSION < 2 | |
1325 GtkStyle *style; | 1332 GtkStyle *style; |
1333 #endif | |
1326 | 1334 |
1327 if(fore & DW_RGB_COLOR || back & DW_RGB_COLOR) | 1335 if(fore & DW_RGB_COLOR || back & DW_RGB_COLOR) |
1328 { | 1336 { |
1329 /* Remember that each color component in X11 use 16 bit no matter | 1337 /* Remember that each color component in X11 use 16 bit no matter |
1330 * what the destination display supports. (and thus GDK) | 1338 * what the destination display supports. (and thus GDK) |
1333 GdkColor backcolor = { 0, DW_RED_VALUE(back) << 8, DW_GREEN_VALUE(back) << 8, DW_BLUE_VALUE(back) << 8 }; | 1341 GdkColor backcolor = { 0, DW_RED_VALUE(back) << 8, DW_GREEN_VALUE(back) << 8, DW_BLUE_VALUE(back) << 8 }; |
1334 | 1342 |
1335 gdk_color_alloc(_dw_cmap, &forecolor); | 1343 gdk_color_alloc(_dw_cmap, &forecolor); |
1336 gdk_color_alloc(_dw_cmap, &backcolor); | 1344 gdk_color_alloc(_dw_cmap, &backcolor); |
1337 | 1345 |
1346 #if GTK_MAJOR_VERSION > 1 | |
1347 gtk_widget_modify_text(handle, 0, &forecolor); | |
1348 gtk_widget_modify_text(handle, 1, &forecolor); | |
1349 gtk_widget_modify_fg(handle, 0, &forecolor); | |
1350 gtk_widget_modify_fg(handle, 1, &forecolor); | |
1351 gtk_widget_modify_base(handle, 0, &backcolor); | |
1352 gtk_widget_modify_base(handle, 1, &backcolor); | |
1353 gtk_widget_modify_bg(handle, 0, &backcolor); | |
1354 gtk_widget_modify_bg(handle, 1, &backcolor); | |
1355 #else | |
1338 style = gtk_style_copy(gtk_widget_get_style(handle)); | 1356 style = gtk_style_copy(gtk_widget_get_style(handle)); |
1339 style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor; | 1357 if(style) |
1340 style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor; | 1358 { |
1341 gtk_widget_set_style(handle, style); | 1359 style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = forecolor; |
1360 style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = backcolor; | |
1361 gtk_widget_set_style(handle, style); | |
1362 gtk_style_unref(style); | |
1363 } | |
1364 #endif | |
1342 | 1365 |
1343 _save_gdk_colors(handle, forecolor, backcolor); | 1366 _save_gdk_colors(handle, forecolor, backcolor); |
1344 | 1367 |
1345 if(GTK_IS_CLIST(handle)) | 1368 if(GTK_IS_CLIST(handle)) |
1346 { | 1369 { |
1353 } | 1376 } |
1354 } | 1377 } |
1355 } | 1378 } |
1356 else | 1379 else |
1357 { | 1380 { |
1381 #if GTK_MAJOR_VERSION > 1 | |
1382 gtk_widget_modify_text(handle, 0, &_colors[fore]); | |
1383 gtk_widget_modify_text(handle, 1, &_colors[fore]); | |
1384 gtk_widget_modify_fg(handle, 0, &_colors[fore]); | |
1385 gtk_widget_modify_fg(handle, 1, &_colors[fore]); | |
1386 gtk_widget_modify_base(handle, 0, &_colors[back]); | |
1387 gtk_widget_modify_base(handle, 1, &_colors[back]); | |
1388 gtk_widget_modify_bg(handle, 0, &_colors[back]); | |
1389 gtk_widget_modify_bg(handle, 1, &_colors[back]); | |
1390 #else | |
1358 style = gtk_style_copy(gtk_widget_get_style(handle)); | 1391 style = gtk_style_copy(gtk_widget_get_style(handle)); |
1359 style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = _colors[fore]; | 1392 if(style) |
1360 style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = _colors[back]; | 1393 { |
1361 gtk_widget_set_style(handle, style); | 1394 style->text[0] = style->text[1] = style->fg[0] = style->fg[1] = _colors[fore]; |
1395 style->base[0] = style->base[1] = style->bg[0] = style->bg[1] = _colors[back]; | |
1396 gtk_widget_set_style(handle, style); | |
1397 } | |
1398 #endif | |
1362 | 1399 |
1363 _save_gdk_colors(handle, _colors[fore], _colors[back]); | 1400 _save_gdk_colors(handle, _colors[fore], _colors[back]); |
1364 | 1401 |
1365 if(GTK_IS_CLIST(handle)) | 1402 if(GTK_IS_CLIST(handle)) |
1366 { | 1403 { |
1388 GtkWidget *handle2 = handle; | 1425 GtkWidget *handle2 = handle; |
1389 int _locked_by_me = FALSE; | 1426 int _locked_by_me = FALSE; |
1390 | 1427 |
1391 DW_MUTEX_LOCK; | 1428 DW_MUTEX_LOCK; |
1392 | 1429 |
1393 if(GTK_IS_SCROLLED_WINDOW(handle)) | 1430 if(GTK_IS_SCROLLED_WINDOW(handle) || GTK_IS_BOX(handle)) |
1394 { | 1431 { |
1395 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | 1432 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
1396 if(tmp) | |
1397 handle2 = tmp; | |
1398 } | |
1399 else if(GTK_IS_BOX(handle)) | |
1400 { | |
1401 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | |
1402 if(tmp) | 1433 if(tmp) |
1403 handle2 = tmp; | 1434 handle2 = tmp; |
1404 } | 1435 } |
1405 else if(GTK_IS_TABLE(handle)) | 1436 else if(GTK_IS_TABLE(handle)) |
1406 { | 1437 { |
2107 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | 2138 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); |
2108 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(tmpbox), GTK_SHADOW_ETCHED_IN); | 2139 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(tmpbox), GTK_SHADOW_ETCHED_IN); |
2109 tmp = gtk_text_view_new(); | 2140 tmp = gtk_text_view_new(); |
2110 gtk_container_add (GTK_CONTAINER(tmpbox), tmp); | 2141 gtk_container_add (GTK_CONTAINER(tmpbox), tmp); |
2111 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_NONE); | 2142 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_NONE); |
2112 gtk_object_set_user_data(GTK_OBJECT(tmpbox), (gpointer)tmp); | |
2113 scroller = NULL; | 2143 scroller = NULL; |
2114 #else | 2144 #else |
2115 tmpbox = gtk_hbox_new(FALSE, 0); | 2145 tmpbox = gtk_hbox_new(FALSE, 0); |
2116 tmp = gtk_text_new(NULL, NULL); | 2146 tmp = gtk_text_new(NULL, NULL); |
2117 gtk_text_set_word_wrap(GTK_TEXT(tmp), FALSE); | 2147 gtk_text_set_word_wrap(GTK_TEXT(tmp), FALSE); |
2121 gtk_box_pack_start(GTK_BOX(tmpbox), tmp, TRUE, TRUE, 0); | 2151 gtk_box_pack_start(GTK_BOX(tmpbox), tmp, TRUE, TRUE, 0); |
2122 gtk_box_pack_start(GTK_BOX(tmpbox), scroller, FALSE, TRUE, 0); | 2152 gtk_box_pack_start(GTK_BOX(tmpbox), scroller, FALSE, TRUE, 0); |
2123 gtk_widget_show(scroller); | 2153 gtk_widget_show(scroller); |
2124 #endif | 2154 #endif |
2125 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | 2155 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); |
2126 gtk_object_set_data(GTK_OBJECT(tmpbox), "mle", (gpointer)tmp); | 2156 gtk_object_set_user_data(GTK_OBJECT(tmpbox), (gpointer)tmp); |
2127 gtk_widget_show(tmp); | 2157 gtk_widget_show(tmp); |
2128 gtk_widget_show(tmpbox); | 2158 gtk_widget_show(tmpbox); |
2129 DW_MUTEX_UNLOCK; | 2159 DW_MUTEX_UNLOCK; |
2130 return tmpbox; | 2160 return tmpbox; |
2131 } | 2161 } |
2555 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2585 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2556 #else | 2586 #else |
2557 if(GTK_IS_BOX(handle)) | 2587 if(GTK_IS_BOX(handle)) |
2558 #endif | 2588 #endif |
2559 { | 2589 { |
2560 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2590 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2561 | 2591 |
2562 #if GTK_MAJOR_VERSION > 1 | 2592 #if GTK_MAJOR_VERSION > 1 |
2563 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2593 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2564 { | 2594 { |
2565 char *impbuf = malloc(strlen(buffer)+1); | 2595 char *impbuf = malloc(strlen(buffer)+1); |
2570 | 2600 |
2571 tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); | 2601 tbuffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tmp)); |
2572 gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, startpoint); | 2602 gtk_text_buffer_get_iter_at_offset(tbuffer, &iter, startpoint); |
2573 gtk_text_buffer_place_cursor(tbuffer, &iter); | 2603 gtk_text_buffer_place_cursor(tbuffer, &iter); |
2574 gtk_text_buffer_insert_at_cursor(tbuffer, impbuf, -1); | 2604 gtk_text_buffer_insert_at_cursor(tbuffer, impbuf, -1); |
2575 tmppoint = startpoint + strlen(impbuf); | 2605 tmppoint = (startpoint > -1 ? startpoint : 0) + strlen(impbuf); |
2576 free(impbuf); | 2606 free(impbuf); |
2577 } | 2607 } |
2578 #else | 2608 #else |
2579 GdkFont *font = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle), "gdkfont"); | 2609 GdkFont *font = (GdkFont *)gtk_object_get_data(GTK_OBJECT(handle), "gdkfont"); |
2580 | 2610 |
2615 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2645 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2616 #else | 2646 #else |
2617 if(GTK_IS_BOX(handle)) | 2647 if(GTK_IS_BOX(handle)) |
2618 #endif | 2648 #endif |
2619 { | 2649 { |
2620 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2650 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2621 | 2651 |
2622 #if GTK_MAJOR_VERSION > 1 | 2652 #if GTK_MAJOR_VERSION > 1 |
2623 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2653 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2624 { | 2654 { |
2625 GtkTextBuffer *tbuffer; | 2655 GtkTextBuffer *tbuffer; |
2665 | 2695 |
2666 DW_MUTEX_LOCK; | 2696 DW_MUTEX_LOCK; |
2667 #if GTK_MAJOR_VERSION > 1 | 2697 #if GTK_MAJOR_VERSION > 1 |
2668 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2698 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2669 { | 2699 { |
2670 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2700 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2671 | 2701 |
2672 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2702 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2673 { | 2703 { |
2674 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); | 2704 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); |
2675 | 2705 |
2680 } | 2710 } |
2681 } | 2711 } |
2682 #else | 2712 #else |
2683 if(GTK_IS_BOX(handle)) | 2713 if(GTK_IS_BOX(handle)) |
2684 { | 2714 { |
2685 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2715 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2686 | 2716 |
2687 if(tmp && GTK_IS_TEXT(tmp)) | 2717 if(tmp && GTK_IS_TEXT(tmp)) |
2688 { | 2718 { |
2689 if(bytes) | 2719 if(bytes) |
2690 *bytes = gtk_text_get_length(GTK_TEXT(tmp)) + 1; | 2720 *bytes = gtk_text_get_length(GTK_TEXT(tmp)) + 1; |
2729 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2759 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2730 #else | 2760 #else |
2731 if(GTK_IS_BOX(handle)) | 2761 if(GTK_IS_BOX(handle)) |
2732 #endif | 2762 #endif |
2733 { | 2763 { |
2734 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2764 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2735 | 2765 |
2736 #if GTK_MAJOR_VERSION > 1 | 2766 #if GTK_MAJOR_VERSION > 1 |
2737 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2767 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2738 { | 2768 { |
2739 GtkTextBuffer *tbuffer; | 2769 GtkTextBuffer *tbuffer; |
2766 | 2796 |
2767 DW_MUTEX_LOCK; | 2797 DW_MUTEX_LOCK; |
2768 #if GTK_MAJOR_VERSION > 1 | 2798 #if GTK_MAJOR_VERSION > 1 |
2769 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2799 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2770 { | 2800 { |
2771 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2801 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2772 | 2802 |
2773 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2803 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2774 { | 2804 { |
2775 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); | 2805 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(tmp)); |
2776 | 2806 |
2779 } | 2809 } |
2780 } | 2810 } |
2781 #else | 2811 #else |
2782 if(GTK_IS_BOX(handle)) | 2812 if(GTK_IS_BOX(handle)) |
2783 { | 2813 { |
2784 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2814 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2785 | 2815 |
2786 if(tmp && GTK_IS_TEXT(tmp)) | 2816 if(tmp && GTK_IS_TEXT(tmp)) |
2787 { | 2817 { |
2788 length = gtk_text_get_length(GTK_TEXT(tmp)); | 2818 length = gtk_text_get_length(GTK_TEXT(tmp)); |
2789 gtk_text_set_point(GTK_TEXT(tmp), 0); | 2819 gtk_text_set_point(GTK_TEXT(tmp), 0); |
2807 DW_MUTEX_LOCK; | 2837 DW_MUTEX_LOCK; |
2808 #if GTK_MAJOR_VERSION > 1 | 2838 #if GTK_MAJOR_VERSION > 1 |
2809 #else | 2839 #else |
2810 if(GTK_IS_BOX(handle)) | 2840 if(GTK_IS_BOX(handle)) |
2811 { | 2841 { |
2812 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2842 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2813 | 2843 |
2814 if(tmp && GTK_IS_TEXT(tmp)) | 2844 if(tmp && GTK_IS_TEXT(tmp)) |
2815 { | 2845 { |
2816 unsigned long lines; | 2846 unsigned long lines; |
2817 float pos, ratio; | 2847 float pos, ratio; |
2844 | 2874 |
2845 DW_MUTEX_LOCK; | 2875 DW_MUTEX_LOCK; |
2846 #if GTK_MAJOR_VERSION > 1 | 2876 #if GTK_MAJOR_VERSION > 1 |
2847 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2877 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2848 { | 2878 { |
2849 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2879 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2850 | 2880 |
2851 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2881 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2852 gtk_text_view_set_editable(GTK_TEXT_VIEW(tmp), state); | 2882 gtk_text_view_set_editable(GTK_TEXT_VIEW(tmp), state); |
2853 } | 2883 } |
2854 #else | 2884 #else |
2855 if(GTK_IS_BOX(handle)) | 2885 if(GTK_IS_BOX(handle)) |
2856 { | 2886 { |
2857 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2887 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2858 | 2888 |
2859 if(tmp && GTK_IS_TEXT(tmp)) | 2889 if(tmp && GTK_IS_TEXT(tmp)) |
2860 gtk_text_set_editable(GTK_TEXT(tmp), state); | 2890 gtk_text_set_editable(GTK_TEXT(tmp), state); |
2861 } | 2891 } |
2862 #endif | 2892 #endif |
2875 | 2905 |
2876 DW_MUTEX_LOCK; | 2906 DW_MUTEX_LOCK; |
2877 #if GTK_MAJOR_VERSION > 1 | 2907 #if GTK_MAJOR_VERSION > 1 |
2878 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2908 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2879 { | 2909 { |
2880 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2910 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2881 | 2911 |
2882 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2912 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2883 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD); | 2913 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tmp), GTK_WRAP_WORD); |
2884 } | 2914 } |
2885 #else | 2915 #else |
2886 if(GTK_IS_BOX(handle)) | 2916 if(GTK_IS_BOX(handle)) |
2887 { | 2917 { |
2888 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2918 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2889 | 2919 |
2890 if(tmp && GTK_IS_TEXT(tmp)) | 2920 if(tmp && GTK_IS_TEXT(tmp)) |
2891 { | 2921 { |
2892 gtk_text_set_word_wrap(GTK_TEXT(tmp), state); | 2922 gtk_text_set_word_wrap(GTK_TEXT(tmp), state); |
2893 gtk_text_set_line_wrap(GTK_TEXT(tmp), state); | 2923 gtk_text_set_line_wrap(GTK_TEXT(tmp), state); |
2912 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2942 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2913 #else | 2943 #else |
2914 if(GTK_IS_BOX(handle)) | 2944 if(GTK_IS_BOX(handle)) |
2915 #endif | 2945 #endif |
2916 { | 2946 { |
2917 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 2947 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2918 | 2948 |
2919 #if GTK_MAJOR_VERSION > 1 | 2949 #if GTK_MAJOR_VERSION > 1 |
2920 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 2950 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2921 { | 2951 { |
2922 GtkTextBuffer *tbuffer; | 2952 GtkTextBuffer *tbuffer; |
2966 if(GTK_IS_SCROLLED_WINDOW(handle)) | 2996 if(GTK_IS_SCROLLED_WINDOW(handle)) |
2967 #else | 2997 #else |
2968 if(GTK_IS_BOX(handle)) | 2998 if(GTK_IS_BOX(handle)) |
2969 #endif | 2999 #endif |
2970 { | 3000 { |
2971 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 3001 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
2972 | 3002 |
2973 #if GTK_MAJOR_VERSION > 1 | 3003 #if GTK_MAJOR_VERSION > 1 |
2974 if(tmp && GTK_IS_TEXT_VIEW(tmp)) | 3004 if(tmp && GTK_IS_TEXT_VIEW(tmp)) |
2975 { | 3005 { |
2976 GtkTextBuffer *tbuffer; | 3006 GtkTextBuffer *tbuffer; |
3037 int _locked_by_me = FALSE; | 3067 int _locked_by_me = FALSE; |
3038 | 3068 |
3039 DW_MUTEX_LOCK; | 3069 DW_MUTEX_LOCK; |
3040 if(GTK_IS_BOX(handle)) | 3070 if(GTK_IS_BOX(handle)) |
3041 { | 3071 { |
3042 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 3072 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
3043 | 3073 |
3044 if(tmp && GTK_IS_TEXT(tmp)) | 3074 if(tmp && GTK_IS_TEXT(tmp)) |
3045 { | 3075 { |
3046 gtk_text_freeze(GTK_TEXT(tmp)); | 3076 gtk_text_freeze(GTK_TEXT(tmp)); |
3047 } | 3077 } |
3061 int _locked_by_me = FALSE; | 3091 int _locked_by_me = FALSE; |
3062 | 3092 |
3063 DW_MUTEX_LOCK; | 3093 DW_MUTEX_LOCK; |
3064 if(GTK_IS_BOX(handle)) | 3094 if(GTK_IS_BOX(handle)) |
3065 { | 3095 { |
3066 GtkWidget *tmp = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "mle"); | 3096 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); |
3067 | 3097 |
3068 if(tmp && GTK_IS_TEXT(tmp)) | 3098 if(tmp && GTK_IS_TEXT(tmp)) |
3069 { | 3099 { |
3070 gtk_text_thaw(GTK_TEXT(tmp)); | 3100 gtk_text_thaw(GTK_TEXT(tmp)); |
3071 } | 3101 } |
4636 */ | 4666 */ |
4637 void dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text) | 4667 void dw_draw_text(HWND handle, HPIXMAP pixmap, int x, int y, char *text) |
4638 { | 4668 { |
4639 int _locked_by_me = FALSE; | 4669 int _locked_by_me = FALSE; |
4640 GdkGC *gc = NULL; | 4670 GdkGC *gc = NULL; |
4671 #if GTK_MAJOR_VERSION > 1 | |
4672 PangoFontDescription *font; | |
4673 #else | |
4641 GdkFont *font; | 4674 GdkFont *font; |
4675 #endif | |
4642 char *fontname = "fixed"; | 4676 char *fontname = "fixed"; |
4643 | 4677 |
4644 if(!text) | 4678 if(!text) |
4645 return; | 4679 return; |
4646 | 4680 |
4655 fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "fontname"); | 4689 fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "fontname"); |
4656 gc = _set_colors(pixmap->pixmap); | 4690 gc = _set_colors(pixmap->pixmap); |
4657 } | 4691 } |
4658 if(gc) | 4692 if(gc) |
4659 { | 4693 { |
4694 #if GTK_MAJOR_VERSION > 1 | |
4695 font = pango_font_description_from_string(fontname); | |
4696 if(font) | |
4697 { | |
4698 PangoContext *context = gdk_pango_context_get(); | |
4699 | |
4700 if(context) | |
4701 { | |
4702 PangoLayout *layout = pango_layout_new(context); | |
4703 | |
4704 if(layout) | |
4705 { | |
4706 pango_layout_set_font_description(layout, font); | |
4707 pango_layout_set_text(layout, text, strlen(text)); | |
4708 | |
4709 gdk_draw_layout(handle ? handle->window : pixmap->pixmap, gc, x, y + 2, layout); | |
4710 | |
4711 g_object_unref(layout); | |
4712 } | |
4713 g_object_unref(context); | |
4714 } | |
4715 pango_font_description_free(font); | |
4716 } | |
4717 #else | |
4660 font = gdk_font_load(fontname); | 4718 font = gdk_font_load(fontname); |
4661 if(font) | 4719 if(font) |
4662 { | 4720 { |
4663 gint ascent; | 4721 gint ascent; |
4664 | 4722 |
4665 gdk_text_extents(font, text, strlen(text), NULL, NULL, NULL, &ascent, NULL); | 4723 gdk_text_extents(font, text, strlen(text), NULL, NULL, NULL, &ascent, NULL); |
4666 gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent + 2, text, strlen(text)); | 4724 gdk_draw_text(handle ? handle->window : pixmap->pixmap, font, gc, x, y + ascent + 2, text, strlen(text)); |
4667 gdk_gc_unref(gc); | 4725 gdk_gc_unref(gc); |
4668 gdk_font_unref(font); | 4726 gdk_font_unref(font); |
4669 } | 4727 } |
4728 #endif | |
4670 } | 4729 } |
4671 DW_MUTEX_UNLOCK; | 4730 DW_MUTEX_UNLOCK; |
4672 } | 4731 } |
4673 | 4732 |
4674 /* Query the width and height of a text string. | 4733 /* Query the width and height of a text string. |
4680 * height Pointer to a variable to be filled in with the height. | 4739 * height Pointer to a variable to be filled in with the height. |
4681 */ | 4740 */ |
4682 void dw_font_text_extents(HWND handle, HPIXMAP pixmap, char *text, int *width, int *height) | 4741 void dw_font_text_extents(HWND handle, HPIXMAP pixmap, char *text, int *width, int *height) |
4683 { | 4742 { |
4684 int _locked_by_me = FALSE; | 4743 int _locked_by_me = FALSE; |
4744 #if GTK_MAJOR_VERSION > 1 | |
4745 PangoFontDescription *font; | |
4746 #else | |
4685 GdkFont *font; | 4747 GdkFont *font; |
4748 #endif | |
4686 char *fontname = NULL; | 4749 char *fontname = NULL; |
4687 | 4750 |
4688 if(!text) | 4751 if(!text) |
4689 return; | 4752 return; |
4690 | 4753 |
4691 DW_MUTEX_LOCK; | 4754 DW_MUTEX_LOCK; |
4692 if(handle) | 4755 if(handle) |
4693 fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "fontname"); | 4756 fontname = (char *)gtk_object_get_data(GTK_OBJECT(handle), "fontname"); |
4694 else if(pixmap) | 4757 else if(pixmap) |
4695 fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "fontname"); | 4758 fontname = (char *)gtk_object_get_data(GTK_OBJECT(pixmap->handle), "fontname"); |
4759 | |
4760 #if GTK_MAJOR_VERSION > 1 | |
4761 font = pango_font_description_from_string(fontname ? fontname : "monospace 10"); | |
4762 if(font) | |
4763 { | |
4764 PangoContext *context = gdk_pango_context_get(); | |
4765 | |
4766 if(context) | |
4767 { | |
4768 PangoLayout *layout = pango_layout_new(context); | |
4769 | |
4770 if(layout) | |
4771 { | |
4772 PangoRectangle rect; | |
4773 | |
4774 pango_layout_set_font_description(layout, font); | |
4775 pango_layout_set_text(layout, text, strlen(text)); | |
4776 pango_layout_get_pixel_extents(layout, &rect, NULL); | |
4777 | |
4778 if(width) | |
4779 *width = rect.width; | |
4780 if(height) | |
4781 *height = rect.height; | |
4782 | |
4783 g_object_unref(layout); | |
4784 } | |
4785 g_object_unref(context); | |
4786 } | |
4787 pango_font_description_free(font); | |
4788 } | |
4789 #else | |
4696 | 4790 |
4697 font = gdk_font_load(fontname ? fontname : "fixed"); | 4791 font = gdk_font_load(fontname ? fontname : "fixed"); |
4698 if(font) | 4792 if(font) |
4699 { | 4793 { |
4700 if(width) | 4794 if(width) |
4701 *width = gdk_string_width(font, text); | 4795 *width = gdk_string_width(font, text); |
4702 if(height) | 4796 if(height) |
4703 *height = gdk_string_height(font, text); | 4797 *height = gdk_string_height(font, text); |
4704 gdk_font_unref(font); | 4798 gdk_font_unref(font); |
4705 } | 4799 } |
4800 #endif | |
4706 DW_MUTEX_UNLOCK; | 4801 DW_MUTEX_UNLOCK; |
4707 } | 4802 } |
4708 | 4803 |
4709 /* | 4804 /* |
4710 * Creates a pixmap with given parameters. | 4805 * Creates a pixmap with given parameters. |
5280 if(handle && GTK_IS_WINDOW(handle)) | 5375 if(handle && GTK_IS_WINDOW(handle)) |
5281 { | 5376 { |
5282 _size_allocate(GTK_WINDOW(handle)); | 5377 _size_allocate(GTK_WINDOW(handle)); |
5283 | 5378 |
5284 gtk_widget_set_uposition(handle, x, y); | 5379 gtk_widget_set_uposition(handle, x, y); |
5380 if(handle->window) | |
5381 gdk_window_resize(handle->window, width - _dw_border_width, height - _dw_border_height); | |
5285 gtk_window_set_default_size(GTK_WINDOW(handle), width - _dw_border_width, height - _dw_border_height); | 5382 gtk_window_set_default_size(GTK_WINDOW(handle), width - _dw_border_width, height - _dw_border_height); |
5286 } | 5383 } |
5287 else if(handle && handle->window) | 5384 else if(handle && handle->window) |
5288 { | 5385 { |
5289 gdk_window_resize(handle->window, width, height); | 5386 gdk_window_resize(handle->window, width, height); |
5931 } | 6028 } |
5932 } | 6029 } |
5933 DW_MUTEX_UNLOCK; | 6030 DW_MUTEX_UNLOCK; |
5934 } | 6031 } |
5935 | 6032 |
6033 #if GTK_MAJOR_VERSION < 2 | |
6034 /* Check if a GList item is in another GList */ | |
6035 int _dw_in_list(GList *item, GList *list) | |
6036 { | |
6037 while(list) | |
6038 { | |
6039 if(list->data == item->data) | |
6040 return TRUE; | |
6041 | |
6042 list = list->next; | |
6043 } | |
6044 return FALSE; | |
6045 } | |
6046 #endif | |
6047 | |
5936 /* | 6048 /* |
5937 * Returns the index to the current selected item or -1 when done. | 6049 * Returns the index to the current selected item or -1 when done. |
5938 * Parameters: | 6050 * Parameters: |
5939 * handle: Handle to the listbox to be queried. | 6051 * handle: Handle to the listbox to be queried. |
5940 * where: Either the previous return or -1 to restart. | 6052 * where: Either the previous return or -1 to restart. |
5952 if(tmp) | 6064 if(tmp) |
5953 handle2 = tmp; | 6065 handle2 = tmp; |
5954 } | 6066 } |
5955 if(GTK_IS_LIST(handle2)) | 6067 if(GTK_IS_LIST(handle2)) |
5956 { | 6068 { |
6069 #if GTK_MAJOR_VERSION > 1 | |
5957 int counter = 0; | 6070 int counter = 0; |
5958 GList *list = GTK_LIST(handle2)->selection; | 6071 GList *list = GTK_LIST(handle2)->children; |
6072 | |
5959 while(list) | 6073 while(list) |
5960 { | 6074 { |
5961 if(counter > where) | 6075 GtkItem *item = (GtkItem *)list->data; |
6076 | |
6077 if(item && | |
6078 item->bin.container.widget.state == GTK_STATE_SELECTED | |
6079 && counter > where) | |
5962 { | 6080 { |
5963 retval = counter; | 6081 retval = counter; |
5964 break; | 6082 break; |
5965 } | 6083 } |
5966 | 6084 |
6085 | |
5967 list = list->next; | 6086 list = list->next; |
5968 counter++; | 6087 counter++; |
5969 } | 6088 } |
5970 } | 6089 #else |
5971 DW_MUTEX_UNLOCK; | |
5972 return retval; | |
5973 } | |
5974 | |
5975 /* | |
5976 * Returns the index to the item in the list currently selected. | |
5977 * Parameters: | |
5978 * handle: Handle to the listbox to be queried. | |
5979 */ | |
5980 unsigned int dw_listbox_selected(HWND handle) | |
5981 { | |
5982 GtkWidget *handle2 = handle; | |
5983 int retval = DW_LIT_NONE; | |
5984 int _locked_by_me = FALSE; | |
5985 | |
5986 DW_MUTEX_LOCK; | |
5987 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
5988 { | |
5989 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
5990 if(tmp) | |
5991 handle2 = tmp; | |
5992 } | |
5993 else if(GTK_IS_COMBO(handle)) | |
5994 { | |
5995 retval = (unsigned int)gtk_object_get_data(GTK_OBJECT(handle), "item"); | |
5996 DW_MUTEX_UNLOCK; | |
5997 return retval; | |
5998 } | |
5999 if(GTK_IS_LIST(handle2)) | |
6000 { | |
6001 int counter = 0; | 6090 int counter = 0; |
6002 GList *list = GTK_LIST(handle2)->children; | 6091 GList *list = GTK_LIST(handle2)->children; |
6092 | |
6003 while(list) | 6093 while(list) |
6004 { | 6094 { |
6005 if(list->data == GTK_LIST(handle2)->selection->data) | 6095 if(counter > where && _dw_in_list(list, GTK_LIST(handle2)->selection)) |
6006 { | 6096 { |
6007 retval = counter; | 6097 retval = counter; |
6008 break; | 6098 break; |
6009 } | 6099 } |
6010 | 6100 |
6011 list = list->next; | 6101 list = list->next; |
6012 counter++; | 6102 counter++; |
6103 } | |
6104 #endif | |
6105 } | |
6106 DW_MUTEX_UNLOCK; | |
6107 return retval; | |
6108 } | |
6109 | |
6110 /* | |
6111 * Returns the index to the item in the list currently selected. | |
6112 * Parameters: | |
6113 * handle: Handle to the listbox to be queried. | |
6114 */ | |
6115 unsigned int dw_listbox_selected(HWND handle) | |
6116 { | |
6117 GtkWidget *handle2 = handle; | |
6118 int retval = DW_LIT_NONE; | |
6119 int _locked_by_me = FALSE; | |
6120 | |
6121 DW_MUTEX_LOCK; | |
6122 if(GTK_IS_SCROLLED_WINDOW(handle)) | |
6123 { | |
6124 GtkWidget *tmp = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle)); | |
6125 if(tmp) | |
6126 handle2 = tmp; | |
6127 } | |
6128 else if(GTK_IS_COMBO(handle)) | |
6129 { | |
6130 retval = (unsigned int)gtk_object_get_data(GTK_OBJECT(handle), "item"); | |
6131 DW_MUTEX_UNLOCK; | |
6132 return retval; | |
6133 } | |
6134 if(GTK_IS_LIST(handle2)) | |
6135 { | |
6136 int counter = 0; | |
6137 GList *list = GTK_LIST(handle2)->children; | |
6138 #if GTK_MAJOR_VERSION > 1 | |
6139 GList *selection = GTK_LIST(handle2)->undo_unselection; | |
6140 #else | |
6141 GList *selection = GTK_LIST(handle2)->selection; | |
6142 #endif | |
6143 if(selection) | |
6144 { | |
6145 while(list) | |
6146 { | |
6147 if(list->data == selection->data) | |
6148 { | |
6149 retval = counter; | |
6150 break; | |
6151 } | |
6152 | |
6153 list = list->next; | |
6154 counter++; | |
6155 } | |
6013 } | 6156 } |
6014 } | 6157 } |
6015 DW_MUTEX_UNLOCK; | 6158 DW_MUTEX_UNLOCK; |
6016 return retval; | 6159 return retval; |
6017 } | 6160 } |