[Fontconfig] Xft broken after upgrade

Philipp v. Hilgers p.v.hilgers at rz.hu-berlin.de
Wed Jun 18 12:36:39 PDT 2003


Dear Developers,
since I upgrade to SuSE 8.2 with Xfree86 4.3.0 and fontconfig 1.0.1 and 
Xft.h,v 1.32, I can't any longer compile an Xft HelloX.c Example.
gcc  complains:
/usr/include/X11/Xft/Xft.h:36:35: fontconfig/fontconfig.h: Datei oder 
Verzeichnis nicht gefunden [file not found]
and goes on with messages like those:
/usr/include/X11/Xft/XftCompat.h:33: error: parse error before "XftChar8"
/usr/include/X11/Xft/XftCompat.h:34: error: parse error before "XftChar16"

.
.
.

I attached the whole example programm and the compile-command.

For any hint tanx in advance,

So long,

Philipp


*** Example ***

//gcc -o HelloX HelloX.c -L/usr/X11R6/lib -lfontconfig -lX11 -lXft
/*

   HelloX.C
   ========
   (c) Copyright Paul Griffiths 1999
   Email: mail at paulgriffiths.net

   "Hello, World!", X Window System style.

*/


#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <X11/Xatom.h>

#include <stdlib.h>
#include <string.h>
#include <stdio.h>


//added ->
#include <X11/Xdefs.h>
//<-
#include <X11/Xft/Xft.h>


//added ->
#include <fontconfig/fontconfig.h>
#include <freetype/freetype.h>
#include <freetype/tttables.h>
//<-
/*  Global variables  */

Display *     display;
int           screen_num;
static char * appname;




/*########################################################*/
/*# BEGIN:  TT/AA message */
/*{
	
	static char * msg = "Hello, X FreeType AA!";
	XftDraw *xftdraw;
	XftFont *xftfont;
	XftColor color_fg;
	XColor dummyc,fg;
	Status retval;
	
	xftdraw = XftDrawCreate(display, (Drawable) win,
				DefaultVisual(display, screen_num),
				DefaultColormap(display, screen_num));
	if (!xftdraw) {
		perror("XftDrawCreate(): Failed"); exit(1);}
	
	xftfont = XftFontOpen(display, screen_num,XFT_FAMILY, XftTypeString, 
"garamond",XFT_SIZE, XftTypeInteger, 25,0);
	if (!xftfont) {
		perror("XftFontOpen(): Failed"); exit(1);}
	
	retval = XAllocNamedColor(display,DefaultColormap(display,screen_num), 
"green", &fg, &dummyc);
	if (!retval) {
		perror("XAllocNamedColor(): Failed"); exit(1);}
	
	color_fg.color.red = dummyc.red;
	color_fg.color.green = dummyc.green;
	color_fg.color.blue = dummyc.blue;
	color_fg.color.alpha = 0x00ff00;
	color_fg.pixel = fg.pixel;
	
	XftDrawString8(xftdraw, &color_fg, xftfont, msg_x-30, msg_y+30,
		       (unsigned char *) msg, strlen(msg));
}*/

/*  main() function  */

int main( int argc, char * argv[] ) {

     /*  Window variables  */

     Window       win;
     int          x, y;
     unsigned int width, height;
     unsigned int border_width;
     char *       window_name = "Hello, X Window System!";
     char *       icon_name   = "HelloX";


     /*  Display variables  */

     char *       display_name = NULL;
     unsigned int display_width, display_height;


     /*  Miscellaneous X variables  */

     XSizeHints *  size_hints;
     XWMHints   *  wm_hints;
     XClassHint *  class_hints;
     XTextProperty windowName, iconName;
     XEvent        report;
     XFontStruct * font_info;
     XGCValues     values;
     GC            gc;

     static char * msg = "1234567890qwertzuiop!";
     XftDraw *xftdraw;
     XftFont *xftfont,*xftfont2 ;
     XftColor color_fg,color_fg2;
     XColor dummyc,fg, fg2;
     Status retval, retval2;


     appname = argv[0];


     /*  Allocate memory for our structures  */

     if ( !( size_hints  = XAllocSizeHints() ) ||
          !( wm_hints    = XAllocWMHints()   ) ||
          !( class_hints = XAllocClassHint() )    ) {
         fprintf(stderr, "%s: couldn't allocate memory.\n", appname);
         exit(EXIT_FAILURE);
     }


     /*  Connect to X server  */

     if ( (display = XOpenDisplay(display_name)) == NULL ) {
         fprintf(stderr, "%s: couldn't connect to X server %s\n",
                 appname, display_name);
         exit(EXIT_FAILURE);
     }


     /*  Get screen size from display structure macro  */

     screen_num     = DefaultScreen(display);
     display_width  = DisplayWidth(display, screen_num);
     display_height = DisplayHeight(display, screen_num);


     /*  Set initial window size and position, and create it  */

     x = y = 0;
     width  = display_width / 3;
     height = display_width / 3;


     win = XCreateSimpleWindow(display, RootWindow(display, screen_num),
                               x, y, width, height, border_width,
                               BlackPixel(display, screen_num),
                               WhitePixel(display, screen_num));


     /*  Set hints for window manager before mapping window  */

     if ( XStringListToTextProperty(&window_name, 1, &windowName) == 0 ) {
         fprintf(stderr, "%s: structure allocation for windowName 
failed.\n",
                 appname);
         exit(EXIT_FAILURE);
     }

     if ( XStringListToTextProperty(&icon_name, 1, &iconName) == 0 ) {
         fprintf(stderr, "%s: structure allocation for iconName failed.\n",
                 appname);
         exit(EXIT_FAILURE);
     }

     size_hints->flags       = PPosition | PSize | PMinSize;
     size_hints->min_width   = 200;
     size_hints->min_height  = 100;

     wm_hints->flags         = StateHint | InputHint;
     wm_hints->initial_state = NormalState;
     wm_hints->input         = True;

     class_hints->res_name   = appname;
     class_hints->res_class  = "hellox";

     XSetWMProperties(display, win, &windowName, &iconName, argv, argc,
                      size_hints, wm_hints, class_hints);


     /*  Choose which events we want to handle  */

     XSelectInput(display, win, ExposureMask | KeyPressMask |
                  ButtonPressMask | StructureNotifyMask);


     /*  Load a font called "9x15"  */

     if ( (font_info = XLoadQueryFont(display, "9x15")) == NULL ) {
         fprintf(stderr, "%s: cannot open 9x15 font.\n", appname);
         exit(EXIT_FAILURE);
     }


     /*  Create graphics context  */

     gc = XCreateGC(display, win, 0, &values);

     XSetFont(display, gc, font_info->fid);
     XSetForeground(display, gc, BlackPixel(display, screen_num));


     /*  Display Window  */

     XMapWindow(display, win);


     /*  Enter event loop  */

     while ( 1 ) {
	    static char *message = "Hallo";
         static int    length;
         static int    font_height;
         static int    msg_x, msg_y;

         XNextEvent(display, &report);

         switch ( report.type ) {

         case Expose:

             if ( report.xexpose.count != 0 )
                 break;

             /*  Output message centrally in window  */

             length = XTextWidth(font_info, message, strlen(message));
             msg_x  = (width - length) / 2;

             font_height = font_info->ascent + font_info->descent;
             msg_y  = (height + font_height) / 2;

             XDrawString(display, win, gc, msg_x, msg_y,
                         message, strlen(message));

	    xftdraw = XftDrawCreate(display, (Drawable) win,
				DefaultVisual(display, screen_num),
				DefaultColormap(display, screen_num));
	    if (!xftdraw) {
		    perror("XftDrawCreate(): Failed"); exit(1);}
	

	
	    //xftfont = XftFontOpenXlfd 
(display,screen_num,"-*-*-*-*-*-*-*-*-*-*-*-*-koi8-ru");
	     /*xftfont = XftFontOpen (display, screen_num,
                             XFT_FAMILY, XftTypeString, "helvetica",
                             XFT_SIZE, XftTypeDouble, 160.0,
                             XFT_WEIGHT, XftTypeInteger, XFT_WEIGHT_BOLD,
			    0);*/
	    xftfont = XftFontOpen (display,screen_num,
				   XFT_FAMILY, XftTypeString, "Courier New KOI-8",
                                XFT_SIZE, XftTypeDouble, 46.0,
                                XFT_ENCODING, XftTypeString, "koi8-ru",
                                NULL);
	
	    //xftfont = XftFontOpenName(display, screen_num, "lucida 
sans:encoding-r");
	    xftfont2 = XftFontOpenName(display, screen_num, "lucidux");

	    //xftfont = XftFontOpen(display, screen_num,XFT_FAMILY, 
XftTypeString,"garamond",XFT_SIZE, XftTypeInteger,80,0);
	    if (!xftfont) {
		    perror("XftFontOpen(): Failed"); exit(1);}
	
	    retval = XAllocNamedColor(display,DefaultColormap(display,screen_num),
				      "brown", &fg, &dummyc);
	    if (!retval) {
		    perror("XAllocNamedColor(): Failed"); exit(1);}
	
	    color_fg.color.red = dummyc.red;
	    color_fg.color.green = dummyc.green;
	    color_fg.color.blue = dummyc.blue;
	    color_fg.color.alpha =  0xE580;//0x00ff00;
	    color_fg.pixel = fg.pixel;


	    retval2 = 
XAllocNamedColor(display,DefaultColormap(display,screen_num),
				      "brown", &fg2, &dummyc);
	    if (!retval) {
		    perror("XAllocNamedColor(): Failed"); exit(1);}
	
	    color_fg2.color.red = dummyc.red;
	    color_fg2.color.green = dummyc.green;
	    color_fg2.color.blue = dummyc.blue;
	    color_fg2.color.alpha =  0xE580;//-1/2;
	    color_fg.pixel = fg2.pixel;
	

	
	    XftDrawString8(xftdraw, &color_fg, xftfont, msg_x-30, 
msg_y+30,"Äq", 2);
	
	    XftDrawString8(xftdraw, &color_fg2, xftfont2, msg_x-30, 
msg_y+60,"Test",4);

             break;


         case ConfigureNotify:

             /*  Store new window width & height  */

             width  = report.xconfigure.width;
             height = report.xconfigure.height;

             break;


         case ButtonPress:            /*  Fall through  */
         case KeyPress:

             /*  Clean up and exit  */

             XUnloadFont(display, font_info->fid);
             XFreeGC(display, gc);
             XCloseDisplay(display);
             exit(EXIT_SUCCESS);

         }
     }

     return EXIT_SUCCESS;   /*  We shouldn't get here  */
}





More information about the Fontconfig mailing list