diff lwlib/xlwmenu.c @ 136:b980b6286996 r20-2b2

Import from CVS: tag r20-2b2
author cvs
date Mon, 13 Aug 2007 09:31:12 +0200
parents 8619ce7e4c50
children 6b37e6ddd302
line wrap: on
line diff
--- a/lwlib/xlwmenu.c	Mon Aug 13 09:30:13 2007 +0200
+++ b/lwlib/xlwmenu.c	Mon Aug 13 09:31:12 2007 +0200
@@ -69,6 +69,10 @@
 #else
   {XtNfont,  XtCFont, XtRFontStruct, sizeof(XFontStruct *),
      offset(menu.font), XtRString, "XtDefaultFont"},
+# ifdef USE_XFONTSET
+  {XtNfontSet,  XtCFontSet, XtRFontSet, sizeof(XFontSet),
+     offset(menu.font_set), XtRString, "XtDefaultFontSet"},
+# endif
 #endif
   {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
      offset(menu.foreground), XtRString, "XtDefaultForeground"},
@@ -328,10 +332,16 @@
   XmStringExtent (mw->menu.font_list, s, &width, &height);
   return width;
 #else
+# ifdef USE_XFONTSET
+  XRectangle ri, rl;
+  XmbTextExtents (mw->menu.font_set, s, strlen (s), &ri, &rl);
+  return rl.width;
+# else
   XCharStruct xcs;
   int drop;
   XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs);
   return xcs.width;
+# endif /* USE_XFONTSET */
 #endif
 }
 
@@ -686,8 +696,13 @@
 		0, /* ???? layout_direction */
 		0);
 #else
+# ifdef USE_XFONTSET
+  XmbDrawString (XtDisplay (mw), window, mw->menu.font_set, gc,
+	       x, y + mw->menu.font_ascent, string, strlen (string));
+# else
   XDrawString (XtDisplay (mw), window, gc,
 	       x, y + mw->menu.font_ascent, string, strlen (string));
+# endif /* USE_XFONTSET */
 
 #endif
 }
@@ -2660,8 +2675,28 @@
     XmFontListFreeFontContext (context);
   }
 #else /* Not Motif */
+# ifdef USE_XFONTSET
+  XFontStruct **fontstruct_list;
+  char **fontname_list;
+  XFontStruct *font;
+  int fontcount = XFontsOfFontSet(mw->menu.font_set, &fontstruct_list,
+                                      &fontname_list);
+  mw->menu.font_ascent  = 0;
+  mw->menu.font_descent = 0;
+#  if 0 /* nasty, personal debug, Kazz */
+  fprintf(stderr, "fontSet count is %d\n", fontcount);
+#  endif
+  while (--fontcount >= 0) {
+      font = fontstruct_list[fontcount];
+      if (font->ascent > (int) mw->menu.font_ascent)
+          mw->menu.font_ascent = font->ascent;
+      if (font->descent > (int) mw->menu.font_descent)
+          mw->menu.font_descent = font->descent;
+  }
+# else /* ! USE_XFONTSET */
   mw->menu.font_ascent  = mw->menu.font->ascent;
   mw->menu.font_descent = mw->menu.font->descent;
+# endif
 #endif /* NEED_MOTIF */
 }