diff src/glyphs-x.c @ 3094:ad2f4ae9895b

[xemacs-hg @ 2005-11-26 11:45:47 by stephent] Xft merge. <87k6ev4p8q.fsf@tleepslib.sk.tsukuba.ac.jp>
author stephent
date Sat, 26 Nov 2005 11:46:25 +0000
parents 4eb2a8c07cb3
children 9b4442ac18c7
line wrap: on
line diff
--- a/src/glyphs-x.c	Fri Nov 25 22:51:38 2005 +0000
+++ b/src/glyphs-x.c	Sat Nov 26 11:46:25 2005 +0000
@@ -239,7 +239,7 @@
 	  color.green = qtable->gm[i] ? qtable->gm[i] << 8 : 0;
 	  color.blue = qtable->bm[i] ? qtable->bm[i] << 8 : 0;
 	  color.flags = DoRed | DoGreen | DoBlue;
-	  res = allocate_nearest_color (dpy, cmap, vis, &color);
+	  res = x_allocate_nearest_color (dpy, cmap, vis, &color);
 	  if (res > 0 && res < 3)
 	    {
 	      DO_REALLOC(*pixtbl, pixcount, n+1, unsigned long);
@@ -2364,21 +2364,41 @@
   bcolor = COLOR_INSTANCE_X_COLOR (XCOLOR_INSTANCE (pixel));
   lw_add_widget_value_arg (wv, XtNbackground, bcolor.pixel);
 
+  {
+    Lisp_Object face = IMAGE_INSTANCE_WIDGET_FACE (ii);
+    Lisp_Font_Instance *fi =
+      XFONT_INSTANCE (query_string_font (IMAGE_INSTANCE_WIDGET_TEXT (ii),
+					 face,
+					 domain));
+    XFontStruct *fs = FONT_INSTANCE_X_FONT (fi);
+#ifdef USE_XFT
+    XftFont *rf = FONT_INSTANCE_X_XFTFONT (fi);
+
+    if (rf)
+      {
+	/* #### What to do about Motif? */
+	lw_add_widget_value_arg (wv, XtNxftFont, (XtArgVal) rf);
+      }
+#endif
+
+    if (fs)
+      {
 #ifdef LWLIB_WIDGETS_MOTIF
-  fontList = XmFontListCreate
-    (FONT_INSTANCE_X_FONT
-     (XFONT_INSTANCE (query_string_font
-		      (IMAGE_INSTANCE_WIDGET_TEXT (ii),
-		       IMAGE_INSTANCE_WIDGET_FACE (ii),
-		       domain))),  XmSTRING_DEFAULT_CHARSET);
-  lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal)fontList);
+	fontList = XmFontListCreate (fs, XmSTRING_DEFAULT_CHARSET);
+	lw_add_widget_value_arg (wv, XmNfontList, (XtArgVal) fontList);
 #endif
-  lw_add_widget_value_arg
-    (wv, XtNfont, (XtArgVal)FONT_INSTANCE_X_FONT
-     (XFONT_INSTANCE (query_string_font
-		      (IMAGE_INSTANCE_WIDGET_TEXT (ii),
-		       IMAGE_INSTANCE_WIDGET_FACE (ii),
-		       domain))));
+	lw_add_widget_value_arg (wv, XtNfont, (XtArgVal) fs);
+      }
+
+#ifdef USE_XFT
+    /* #### sanity check, should wrap in appropriate ERROR_CHECK macro */
+    if (!rf && !fs)
+      warn_when_safe_lispobj
+	(intern ("xft"), Qdebug,
+	 Fcons (build_string ("missing font in update_widget_face"),
+		Fface_name (face)));
+#endif
+  }
   wv->change = VISIBLE_CHANGE;
   /* #### Megahack - but its just getting too complicated to do this
      in the right place. */