X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=hacks%2Fglx%2Ffont-ximage.c;h=c7b0051d752664b6e0b1722c0a1392800acceb07;hb=50be9bb40dc60130c99ffa568e6677779904ff70;hp=1b95173ae8432e64095b47afeb1189efa2b9e76e;hpb=8eb2873d7054e705c4e83f22d18c40946a9e2529;p=xscreensaver diff --git a/hacks/glx/font-ximage.c b/hacks/glx/font-ximage.c index 1b95173a..c7b0051d 100644 --- a/hacks/glx/font-ximage.c +++ b/hacks/glx/font-ximage.c @@ -1,5 +1,5 @@ /* font-ximage.c --- renders text to an XImage for use with OpenGL. - * xscreensaver, Copyright (c) 2001 Jamie Zawinski + * xscreensaver, Copyright (c) 2001, 2003 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -17,13 +17,19 @@ #include #include #include -#include -#include -#include /* only for GLfloat */ + +#ifdef HAVE_COCOA +# include "jwxyz.h" +# include +#else /* !HAVE_COCOA */ +# include +# include +# include /* only for GLfloat */ +#endif /* !HAVE_COCOA */ extern char *progname; -#include +#include "font-ximage.h" #undef MAX #define MAX(a,b) ((a)>(b)?(a):(b)) @@ -31,6 +37,7 @@ extern char *progname; #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) +#if 0 static Bool bigendian (void) { @@ -38,13 +45,15 @@ bigendian (void) u.i = 1; return !u.c[0]; } +#endif /* return the next larger power of 2. */ static int to_pow2 (int i) { - static unsigned int pow2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, - 2048, 4096, 8192, 16384, 32768, 65536 }; + static const unsigned int pow2[] = { + 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, + 2048, 4096, 8192, 16384, 32768, 65536 }; int j; for (j = 0; j < countof(pow2); j++) if (pow2[j] >= i) return pow2[j]; @@ -149,15 +158,11 @@ text_to_ximage (Screen *screen, Visual *visual, while ((line = strtok(token, "\r\n"))) { XCharStruct o2; - int ascent, descent, direction, xoff2; + int ascent, descent, direction; token = 0; XTextExtents(f, line, strlen(line), &direction, &ascent, &descent, &o2); - xoff2 = (xoff + - ((overall.lbearing + overall.rbearing) - - (o2.lbearing + o2.rbearing)) / 2); - XDrawString(dpy, bitmap, gc, overall.lbearing + margin + xoff, ((f->ascent * (lines + 1)) + @@ -199,9 +204,15 @@ text_to_ximage (Screen *screen, Visual *visual, things as necessary) OpenGL pretends everything is client-side, so we need to pack things in the right order for the client machine. */ +#if 0 + /* #### Cherub says that the little-endian case must be taken on MacOSX, + or else the colors/alpha are the wrong way around. How can + that be the case? + */ if (bigendian()) rpos = 24, gpos = 16, bpos = 8, apos = 0; else +#endif rpos = 0, gpos = 8, bpos = 16, apos = 24; fg = (((unsigned long) (texture_fg[0] * 255.0) << rpos) | @@ -222,8 +233,6 @@ text_to_ximage (Screen *screen, Visual *visual, XGetPixel (ximage1, x, y2) ? fg : bg); } - free (ximage1->data); - ximage1->data = 0; XDestroyImage (ximage1); #if 0