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 }