summaryrefslogtreecommitdiff
path: root/x11-fonts/libXft
diff options
context:
space:
mode:
authorJoe Marcus Clarke <marcus@FreeBSD.org>2003-03-02 17:16:46 +0000
committerJoe Marcus Clarke <marcus@FreeBSD.org>2003-03-02 17:16:46 +0000
commit2fc564088c2705404e18382a0f185ee989f3b12f (patch)
tree1a86662c796cfcafec0310d79faacbdb834a0d06 /x11-fonts/libXft
parentSync fontconfig with the XFree86 4.3.0 release. (diff)
Sync with XFree86 4.3.0 release.
* Finishes off the UTF-16 APIs * Fixes bugs with non-Render enabled servers * Adds a missing zero-sized check to one of the core rendering routines Obtained from: XFree86 CVS
Notes
Notes: svn path=/head/; revision=76739
Diffstat (limited to 'x11-fonts/libXft')
-rw-r--r--x11-fonts/libXft/Makefile2
-rw-r--r--x11-fonts/libXft/files/patch-xft-cvs276
2 files changed, 277 insertions, 1 deletions
diff --git a/x11-fonts/libXft/Makefile b/x11-fonts/libXft/Makefile
index a5625fa90a81..6d8c227062cb 100644
--- a/x11-fonts/libXft/Makefile
+++ b/x11-fonts/libXft/Makefile
@@ -7,7 +7,7 @@
PORTNAME= Xft
PORTVERSION= 2.1
-PORTREVISION= 2
+PORTREVISION= 3
CATEGORIES= x11-fonts
MASTER_SITES= http://fontconfig.org/fontconfig/release/
DISTNAME= fcpackage.${PORTVERSION:S/./_/}
diff --git a/x11-fonts/libXft/files/patch-xft-cvs b/x11-fonts/libXft/files/patch-xft-cvs
new file mode 100644
index 000000000000..85355143df7e
--- /dev/null
+++ b/x11-fonts/libXft/files/patch-xft-cvs
@@ -0,0 +1,276 @@
+--- Xft.h 2002/10/11 17:53:02 1.30
++++ Xft.h 2003/02/25 21:57:53 1.32
+@@ -26,8 +26,8 @@
+ #define _XFT_H_
+
+ #define XFT_MAJOR 2
+-#define XFT_MINOR 0
+-#define XFT_REVISION 1
++#define XFT_MINOR 1
++#define XFT_REVISION 0
+ #define XFT_VERSION ((XFT_MAJOR * 10000) + (XFT_MINOR * 100) + (XFT_REVISION))
+ #define XftVersion XFT_VERSION
+
+@@ -325,11 +325,12 @@ XftTextExtentsUtf8 (Display *dpy,
+ XGlyphInfo *extents);
+
+ void
+-XftTextExtentsUtf16 (XftFont *pub,
++XftTextExtentsUtf16 (Display *dpy,
++ XftFont *pub,
+ _Xconst FcChar8 *string,
+ FcEndian endian,
+- int len,
+- XGlyphInfo *extents);
++ int len,
++ XGlyphInfo *extents);
+
+ /* xftfont.c */
+ FcPattern *
+@@ -605,6 +606,20 @@ XftTextRenderUtf8 (Display *dpy,
+ int y,
+ _Xconst FcChar8 *string,
+ int len);
++
++void
++XftTextRenderUtf16 (Display *dpy,
++ int op,
++ Picture src,
++ XftFont *pub,
++ Picture dst,
++ int srcx,
++ int srcy,
++ int x,
++ int y,
++ _Xconst FcChar8 *string,
++ FcEndian endian,
++ int len);
+
+ /* xftstr.c */
+
+--- xftcore.c 2002/10/16 21:07:08 1.11
++++ xftcore.c 2003/02/15 22:30:51 1.13
+@@ -355,7 +355,7 @@ _XftSmoothGlyphMono (XImage *image,
+ bits = *src++;
+
+ xspan = x;
+- while (w)
++ while (w--)
+ {
+ if (bits & bitsMask)
+ XPutPixel (image, xspan, y, pixel);
+@@ -1088,7 +1088,6 @@ XftGlyphSpecCore (XftDraw *draw,
+ /*
+ * Load missing glyphs
+ */
+- nmissing = 0;
+ glyphs_loaded = FcFalse;
+ x1 = y1 = x2 = y2 = 0;
+ for (i = 0; i < nglyphs; i++)
+@@ -1096,8 +1095,12 @@ XftGlyphSpecCore (XftDraw *draw,
+ XGlyphInfo gi;
+ int g_x1, g_x2, g_y1, g_y2;
+
++ nmissing = 0;
+ if (XftFontCheckGlyph (dpy, public, FcTrue, glyphs[i].glyph, missing, &nmissing))
+ glyphs_loaded = FcTrue;
++ if (nmissing)
++ XftFontLoadGlyphs (dpy, public, FcTrue, missing, nmissing);
++
+ XftGlyphExtents (dpy, public, &glyphs[i].glyph, 1, &gi);
+ g_x1 = glyphs[i].x - gi.x;
+ g_y1 = glyphs[i].y - gi.y;
+@@ -1122,8 +1125,6 @@ XftGlyphSpecCore (XftDraw *draw,
+ y2 = g_y2;
+ }
+ }
+- if (nmissing)
+- XftFontLoadGlyphs (dpy, public, FcTrue, missing, nmissing);
+
+ if (x1 == x2 || y1 == y2)
+ goto bail1;
+@@ -1273,6 +1274,9 @@ XftGlyphFontSpecCore (XftDraw *draw,
+ }
+ }
+
++ if (x1 == x2 || y1 == y2)
++ goto bail1;
++
+ for (i = 0; i < nglyphs; i++)
+ if (((XftFontInt *) glyphs[i].font)->info.antialias)
+ break;
+--- xftextent.c 2002/10/11 17:53:02 1.9
++++ xftextent.c 2002/12/14 01:59:38 1.10
+@@ -220,6 +220,50 @@ XftTextExtentsUtf8 (Display *dpy,
+ glyphs = glyphs_local;
+ size = NUM_LOCAL;
+ while (len && (l = FcUtf8ToUcs4 (string, &ucs4, len)) > 0)
++ {
++ if (i == size)
++ {
++ glyphs_new = malloc (size * 2 * sizeof (FT_UInt));
++ if (!glyphs_new)
++ {
++ if (glyphs != glyphs_local)
++ free (glyphs);
++ memset (extents, '\0', sizeof (XGlyphInfo));
++ return;
++ }
++ memcpy (glyphs_new, glyphs, size * sizeof (FT_UInt));
++ size *= 2;
++ if (glyphs != glyphs_local)
++ free (glyphs);
++ glyphs = glyphs_new;
++ }
++ glyphs[i++] = XftCharIndex (dpy, pub, ucs4);
++ string += l;
++ len -= l;
++ }
++ XftGlyphExtents (dpy, pub, glyphs, i, extents);
++ if (glyphs != glyphs_local)
++ free (glyphs);
++}
++
++void
++XftTextExtentsUtf16 (Display *dpy,
++ XftFont *pub,
++ _Xconst FcChar8 *string,
++ FcEndian endian,
++ int len,
++ XGlyphInfo *extents)
++{
++ FT_UInt *glyphs, *glyphs_new, glyphs_local[NUM_LOCAL];
++ FcChar32 ucs4;
++ int i;
++ int l;
++ int size;
++
++ i = 0;
++ glyphs = glyphs_local;
++ size = NUM_LOCAL;
++ while (len && (l = FcUtf16ToUcs4 (string, endian, &ucs4, len)) > 0)
+ {
+ if (i == size)
+ {
+--- xftrender.c 2002/10/11 17:53:02 1.14
++++ xftrender.c 2002/12/14 01:59:38 1.15
+@@ -673,7 +673,7 @@ XftTextRender8 (Display *dpy,
+ }
+ for (i = 0; i < len; i++)
+ glyphs[i] = XftCharIndex (dpy, pub, string[i]);
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -705,7 +705,7 @@ XftTextRender16 (Display *dpy,
+ }
+ for (i = 0; i < len; i++)
+ glyphs[i] = XftCharIndex (dpy, pub, string[i]);
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -738,7 +738,7 @@ XftTextRender16BE (Display *dpy,
+ for (i = 0; i < len; i++)
+ glyphs[i] = XftCharIndex (dpy, pub,
+ (string[i*2]<<8) | string[i*2+1]);
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -771,7 +771,7 @@ XftTextRender16LE (Display *dpy,
+ for (i = 0; i < len; i++)
+ glyphs[i] = XftCharIndex (dpy, pub,
+ string[i*2] | (string[i*2+1]<<8));
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -803,7 +803,7 @@ XftTextRender32 (Display *dpy,
+ }
+ for (i = 0; i < len; i++)
+ glyphs[i] = XftCharIndex (dpy, pub, string[i]);
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -839,7 +839,7 @@ XftTextRender32BE (Display *dpy,
+ (string[i*4+1] << 16) |
+ (string[i*4+2] << 8) |
+ (string[i*4+3]));
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -875,7 +875,7 @@ XftTextRender32LE (Display *dpy,
+ (string[i*4+1] << 8) |
+ (string[i*4+2] << 16) |
+ (string[i*4+3] << 24));
+- XftGlyphRender (dpy, PictOpOver, src, pub, dst,
++ XftGlyphRender (dpy, op, src, pub, dst,
+ srcx, srcy, x, y, glyphs, len);
+ if (glyphs != glyphs_local)
+ free (glyphs);
+@@ -904,6 +904,56 @@ XftTextRenderUtf8 (Display *dpy,
+ glyphs = glyphs_local;
+ size = NUM_LOCAL;
+ while (len && (l = FcUtf8ToUcs4 (string, &ucs4, len)) > 0)
++ {
++ if (i == size)
++ {
++ glyphs_new = malloc (size * 2 * sizeof (FT_UInt));
++ if (!glyphs_new)
++ {
++ if (glyphs != glyphs_local)
++ free (glyphs);
++ return;
++ }
++ memcpy (glyphs_new, glyphs, size * sizeof (FT_UInt));
++ size *= 2;
++ if (glyphs != glyphs_local)
++ free (glyphs);
++ glyphs = glyphs_new;
++ }
++ glyphs[i++] = XftCharIndex (dpy, pub, ucs4);
++ string += l;
++ len -= l;
++ }
++ XftGlyphRender (dpy, op, src, pub, dst,
++ srcx, srcy, x, y, glyphs, i);
++ if (glyphs != glyphs_local)
++ free (glyphs);
++}
++
++void
++XftTextRenderUtf16 (Display *dpy,
++ int op,
++ Picture src,
++ XftFont *pub,
++ Picture dst,
++ int srcx,
++ int srcy,
++ int x,
++ int y,
++ _Xconst FcChar8 *string,
++ FcEndian endian,
++ int len)
++{
++ FT_UInt *glyphs, *glyphs_new, glyphs_local[NUM_LOCAL];
++ FcChar32 ucs4;
++ int i;
++ int l;
++ int size;
++
++ i = 0;
++ glyphs = glyphs_local;
++ size = NUM_LOCAL;
++ while (len && (l = FcUtf16ToUcs4 (string, endian, &ucs4, len)) > 0)
+ {
+ if (i == size)
+ {