From 827730e72b8223f2ec9b1360f2a2ab2e3f9c2101 Mon Sep 17 00:00:00 2001 From: Boram Park Date: Tue, 21 Aug 2012 18:04:10 +0900 Subject: [PATCH] upload tizen2.0 source --- ChangeLog | 228 ++++++ INSTALL | 290 +++++++ Makefile.am | 0 NEWS | 16 +- README | 2 +- autogen.sh | 12 - configure.ac | 149 +--- debian/README.source | 73 -- debian/changelog | 829 -------------------- debian/compat | 1 - debian/control | 62 -- debian/copyright | 33 - debian/libxft-dev.install | 5 - debian/libxft2-udeb.install | 1 - debian/libxft2.install | 1 - .../patches/100-libXft-2.1.10-lcd-filter-3.patch | 843 -------------------- debian/patches/series | 1 - debian/rules | 102 --- debian/watch | 2 - debian/xsfbs/repack.sh | 32 - debian/xsfbs/xsfbs.mk | 276 ------- debian/xsfbs/xsfbs.sh | 622 --------------- include/X11/Xft/Xft.h | 46 +- include/X11/Xft/Xft.h.in | 42 +- man/Makefile.am | 0 man/Xft.man | 0 packaging/100-libXft-2.1.10-lcd-filter-3.patch | 844 --------------------- packaging/libXft.spec | 76 ++ packaging/libxft.spec | 79 -- src/Makefile.am | 0 src/xftcolor.c | 6 +- src/xftcore.c | 96 +-- src/xftdpy.c | 62 +- src/xftdraw.c | 46 +- src/xftextent.c | 14 +- src/xftfont.c | 16 +- src/xftfreetype.c | 161 ++-- src/xftglyphs.c | 696 ++++++++++------- src/xftinit.c | 4 +- src/xftint.h | 23 +- src/xftlist.c | 6 +- src/xftname.c | 8 +- src/xftrender.c | 54 +- src/xftswap.c | 2 +- src/xftxlfd.c | 28 +- xft.pc.in | 3 +- 46 files changed, 1354 insertions(+), 4538 deletions(-) mode change 100755 => 100644 ChangeLog create mode 100644 INSTALL mode change 100755 => 100644 Makefile.am mode change 100755 => 100644 NEWS delete mode 100644 autogen.sh mode change 100755 => 100644 configure.ac delete mode 100644 debian/README.source delete mode 100755 debian/changelog delete mode 100644 debian/compat delete mode 100755 debian/control delete mode 100644 debian/copyright delete mode 100755 debian/libxft-dev.install delete mode 100644 debian/libxft2-udeb.install delete mode 100644 debian/libxft2.install delete mode 100644 debian/patches/100-libXft-2.1.10-lcd-filter-3.patch delete mode 100644 debian/patches/series delete mode 100755 debian/rules delete mode 100644 debian/watch delete mode 100644 debian/xsfbs/repack.sh delete mode 100644 debian/xsfbs/xsfbs.mk delete mode 100644 debian/xsfbs/xsfbs.sh mode change 100755 => 100644 include/X11/Xft/Xft.h mode change 100755 => 100644 include/X11/Xft/Xft.h.in mode change 100755 => 100644 man/Makefile.am mode change 100755 => 100644 man/Xft.man delete mode 100644 packaging/100-libXft-2.1.10-lcd-filter-3.patch create mode 100644 packaging/libXft.spec delete mode 100644 packaging/libxft.spec mode change 100755 => 100644 src/Makefile.am mode change 100755 => 100644 xft.pc.in diff --git a/ChangeLog b/ChangeLog old mode 100755 new mode 100644 index 6a6d960..cdf9035 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,231 @@ +commit 0847b64af14acefaa7aa86b3cec8632497babe73 +Author: Alan Coopersmith +Date: Sat Jun 2 09:36:29 2012 -0700 + + libXft 2.3.1 + + Signed-off-by: Alan Coopersmith + +commit 1066d2b34db6124fbb0105f5d30f560217fd2a5a +Author: Jeremy Huddleston +Date: Sat Mar 10 23:09:21 2012 -0800 + + Dead code removal + + Signed-off-by: Jeremy Huddleston + +commit 84b8b5b46773f9b686d57f28092824b86bffed9d +Author: Mikael Magnusson +Date: Sun Mar 11 02:41:55 2012 +0100 + + Fixup for 550b2f76401c2 which broke bold fonts + + The commit removed the line + AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_GlyphSlot_Embolden) + but failed to remove the #if lines that this commit removes, resulting + in that code never being executed. + + Fixes: https://bugs.freedesktop.org/attachment.cgi?id=58280 + + Reviewed-by: Jeremy Huddleston + +commit b543efafefb71fb1f87ee9c1c261e86c8ca29e76 +Author: Alan Coopersmith +Date: Wed Mar 7 20:12:27 2012 -0800 + + libXft 2.3.0 + + Signed-off-by: Alan Coopersmith + +commit 301029c9a1d9429009eaf08bb726357d4e94780d +Author: Jeremy Huddleston +Date: Mon Oct 24 23:39:25 2011 -0700 + + Fix undefined ftbit in XftFontLoadGlyphs + + https://bugs.freedesktop.org/show_bug.cgi?id=42173 + + Fixes regression from: 6f1d7bcdd461b1f6cc64370793f52d7c170187d0 + + Fixed by examining original patch before rebase from: + https://bugs.freedesktop.org/show_bug.cgi?id=29151 + + Signed-off-by: Jeremy Huddleston + +commit 550b2f76401c292d982700b60326e0a837e391b4 +Author: Jeremy Huddleston +Date: Mon Oct 10 13:00:35 2011 -0700 + + Remove fontconfig and freetype ifdef-fu and instead require non-ancinet versions of both + + Signed-off-by: Jeremy Huddleston + +commit 21a59c10803582c8f90d3b5f32e8f0240c050adf +Author: Tom \"spot\" Callaway +Date: Thu Oct 6 15:58:29 2011 -0400 + + compiler noise cleanups related to subpixel LCD support + + Reviewed-by: Jeremy Huddleston + +commit 6f1d7bcdd461b1f6cc64370793f52d7c170187d0 +Author: Tom \"spot\" Callaway +Date: Thu Oct 6 15:41:10 2011 -0400 + + Subpixel LCD text rendering improvements + + Reviewed-by: Jeremy Huddleston + +commit 0e0efb8b26a241f8370053bc3686f7abc69357c1 +Author: Alan Coopersmith +Date: Mon Sep 26 15:41:49 2011 -0700 + + Add const attributes to fix gcc -Wwrite-strings warnings + + Signed-off-by: Alan Coopersmith + Reviewed-by: Aaron Plattner + +commit df353cc7fe40fadc6e48586e95a0cbf1d2e33cfa +Author: Ross Burton +Date: Sun Sep 25 17:47:15 2011 -0700 + + constify some bits + + https://bugs.freedesktop.org/show_bug.cgi?id=2658 + + Signed-off-by: Jeremy Huddleston + +commit 5cac9764a55c96fee64f63748c054be81fcaadf4 +Author: Jeremy Huddleston +Date: Sun Sep 25 11:11:01 2011 -0700 + + Remove dependency on libXext + + ldd -r -u reports: + Unused direct dependencies: + .../lib/libXext.so.6 + + Reported-by: Gaetan Nadon + Signed-off-by: Jeremy Huddleston + +commit d39337048d31245b69e1b72b98beb957f52ba4e6 +Author: Jeremy Huddleston +Date: Sat Sep 24 21:05:27 2011 -0700 + + Remove broken fallback on non-pkg-config search for libXrender + + https://bugs.freedesktop.org/show_bug.cgi?id=5425 + + Signed-off-by: Jeremy Huddleston + Reviewed-by: Gaetan Nadon + Reviewed-by: Alan Coopersmith + +commit 3ad77b636978746786546ab2b779730997839f63 +Author: Alan Coopersmith +Date: Fri Sep 16 22:42:59 2011 -0700 + + Strip trailing whitespace + + Performed with: find * -type f | xargs perl -i -p -e 's{[ \t]+$}{}' + git diff -w & git diff -b show no diffs from this change + + Signed-off-by: Alan Coopersmith + +commit d274ffc91b22bb8f3a2447237491cbe04f2ee0c3 +Author: Derek Wang +Date: Wed Feb 2 22:15:13 2011 -0800 + + XftGlyphFontSpecCore: check to make sure glyphs are in range + + This fixes a crash reported when selecting "View Page Source" in Mozilla + on Solaris 10, due to invalid parameters being given to XPutImage. + + http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6261221 + + Signed-off-by: Alan Coopersmith + +commit 652d9b47fc902e12c8e28481742c382676f1d035 +Author: Jay Cotton +Date: Wed Feb 2 22:09:34 2011 -0800 + + XftDrawSrcPicture: fail if info->solidFormat is NULL + + Fixed a core dump in x11perf render tests when a driver was returning + incorrect information due to a bug in the driver. + + http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6872780 + + Signed-off-by: Alan Coopersmith + +commit 1e03ac60d1221d5c16b7f4797ab0c461f13b123a +Author: Gaetan Nadon +Date: Wed Feb 2 11:43:42 2011 -0500 + + config: comment, minor upgrade, quote and layout configure.ac + + Group statements per section as per Autoconf standard layout + Quote statements where appropriate. + Autoconf recommends not using dnl instead of # for comments + + Use AC_CONFIG_FILES to replace the deprecated AC_OUTPUT with parameters. + Add AC_CONFIG_SRCDIR([Makefile.am]) + + This helps automated maintenance and release activities. + Details can be found in http://wiki.x.org/wiki/NewModuleGuidelines + +commit bcc24bf5bd4141cf5ca62bdd2c52d971ea88d421 +Author: Gaetan Nadon +Date: Fri Jan 28 19:41:37 2011 -0500 + + config: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS + + Signed-off-by: Gaetan Nadon + +commit 791d10dbac030d6a164f54a7adb9b6c816c68930 +Author: Gaetan Nadon +Date: Fri Jan 28 16:34:14 2011 -0500 + + config: remove unrequired AC_CONFIG_AUX_DIR + + The default location for the generation of configuation files is the current + package root directory. These files are config.* and friends. + + Signed-off-by: Gaetan Nadon + +commit 28d61e969800820b1483d41445befcd1bf35fa85 +Author: Gaetan Nadon +Date: Thu Jan 27 16:12:55 2011 -0500 + + config: remove already included AC_PROG_SED + + Use AC_PROG_SED now supplied by XORG_DEFAULT_OPTIONS + Use the appropriate platform version of sed + + Signed-off-by: Gaetan Nadon + +commit 0e3c21ab0aeb99ca76ac2535f4618cb1949b7f40 +Author: Gaetan Nadon +Date: Thu Jan 27 16:09:03 2011 -0500 + + config: remove AC_PROG_CC as it overrides AC_PROG_C_C99 + + XORG_STRICT_OPTION from XORG_DEFAULT_OPTIONS calls + AC_PROG_C_C99. This sets gcc with -std=gnu99. + If AC_PROG_CC macro is called afterwards, it resets CC to gcc. + + Reported-by: Roberto Branciforti + Signed-off-by: Gaetan Nadon + +commit 9c23173cf1ff861bdb8538e3aa21ec509b0d87d8 +Author: Roberto Branciforti +Date: Mon Jan 17 22:32:15 2011 +0100 + + libXft: Fix variable assignment. + + Signed-off-by: Roberto Branciforti + Reviewed-by: Mikhail Gusarov + Signed-off-by: Alan Coopersmith + commit b9d4a2b5be71ca883f5a876500edb0a1a9add0cf Author: Alan Coopersmith Date: Fri Oct 29 16:21:18 2010 -0700 diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..c9fd2c0 --- /dev/null +++ b/INSTALL @@ -0,0 +1,290 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *Note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. diff --git a/Makefile.am b/Makefile.am old mode 100755 new mode 100644 diff --git a/NEWS b/NEWS old mode 100755 new mode 100644 index 01e6dbe..b547c78 --- a/NEWS +++ b/NEWS @@ -1,12 +1,22 @@ Xft X FreeType library - Version 2.2.0 - 2010-10-29 + Version 2.3.0 + 2012-03-07 -Xft version 2.1 is the first stand alone release of Xft, a library that +Xft version 2.1 was the first stand alone release of Xft, a library that connects X applications with the FreeType font rasterization library. Xft uses fontconfig to locate fonts so it has no configuration files. +Version 2.3.0 + +Subpixel LCD text rendering improvements + +Dropped support for versions of freetype2, fontconfig & libXrender that +pre-dated pkgconfig support. + +Raised minimum required versions to freetype2 2.1.6 & fontconfig 2.5.92. + + Version 2.2.0 Dropped xft-config, now that pkg-config is well established. diff --git a/README b/README index b1097eb..3dede12 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ Xft X FreeType library -Xft version 2.1 is the first stand alone release of Xft, a library that +Xft version 2.1 was the first stand alone release of Xft, a library that connects X applications with the FreeType font rasterization library. Xft uses fontconfig to locate fonts so it has no configuration files. diff --git a/autogen.sh b/autogen.sh deleted file mode 100644 index 904cd67..0000000 --- a/autogen.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -ORIGDIR=`pwd` -cd $srcdir - -autoreconf -v --install || exit 1 -cd $ORIGDIR || exit $? - -$srcdir/configure --enable-maintainer-mode "$@" diff --git a/configure.ac b/configure.ac old mode 100755 new mode 100644 index f35eb91..dd415ef --- a/configure.ac +++ b/configure.ac @@ -1,51 +1,49 @@ -dnl -dnl Copyright © 2003 Keith Packard, Noah Levitt -dnl -dnl Permission to use, copy, modify, distribute, and sell this software and its -dnl documentation for any purpose is hereby granted without fee, provided that -dnl the above copyright notice appear in all copies and that both that -dnl copyright notice and this permission notice appear in supporting -dnl documentation, and that the name of Keith Packard not be used in -dnl advertising or publicity pertaining to distribution of the software without -dnl specific, written prior permission. Keith Packard makes no -dnl representations about the suitability of this software for any purpose. It -dnl is provided "as is" without express or implied warranty. -dnl -dnl KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -dnl EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR -dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -dnl PERFORMANCE OF THIS SOFTWARE. -dnl -dnl Process this file with autoconf to create configure. +# +# Copyright © 2003 Keith Packard, Noah Levitt +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of Keith Packard not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. Keith Packard makes no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Initialize Autoconf AC_PREREQ([2.60]) - -dnl -dnl This is the package version number, not the shared library -dnl version. This version number will be substituted into Xft.h -dnl Please bump the minor library number at each release as well. -dnl -AC_INIT([libXft], [2.2.0], +# +# This is the package version number, not the shared library +# version. This version number will be substituted into Xft.h +# Please bump the minor library number at each release as well. +# +AC_INIT([libXft], [2.3.1], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXft]) -AC_CONFIG_AUX_DIR(.) +AC_CONFIG_SRCDIR([Makefile.am]) +AC_CONFIG_HEADERS([config.h]) +# Initialize Automake AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE +# Initialize libtool +AC_PROG_LIBTOOL + # Require X.Org macros 1.8 or later for MAN_SUBSTS set by XORG_MANPAGE_SECTIONS m4_ifndef([XORG_MACROS_VERSION], [m4_fatal([must install xorg-macros 1.8 or later before running autoconf/autogen])]) XORG_MACROS_VERSION(1.8) XORG_DEFAULT_OPTIONS -AM_CONFIG_HEADER(config.h) - -# checks for progs -AC_PROG_CC -AC_PROG_LIBTOOL -AC_PROG_SED # Set library version for Xft.h from package version set in AC_INIT # copied from PACKAGE_VERSION_* settings in XORG_VERSION @@ -66,61 +64,13 @@ AC_SUBST([XFT_LT_VERSION]) # # Check for Xrender # -PKG_CHECK_MODULES(XRENDER, xrender >= 0.8.2, [xrender_found_with_pkgconfig=yes], - [xrender_found_with_pkgconfig=no]) -case "$xrender_found_with_pkgconfig" in -no) - PKG_CHECK_MODULES(XRENDER, xrender >= 0, [old_xrender_found_with_pkgconfig=yes], - [old_xrender_found_with_pkgconfig=no]) - case "$old_xrender_found_with_pkgconfig" in - yes) - XRENDER_LIBS="$XRENDER_LIBS -lXext -lX11" - ;; - *) - # checks for X - AC_PATH_X - - XRENDER_CFLAGS="-I$x_includes" - XRENDER_LIBS="-L$x_libraries -lXrender -lXext -lX11" - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $XRENDER_CFLAGS" - AC_CHECK_HEADERS([X11/extensions/Xrender.h], [], [AC_MSG_ERROR([Xrender.h not found.])]) - CPPFLAGS="$saved_CPPFLAGS" - - saved_LIBS="$LIBS" - LIBS="$LIBS $XRENDER_LIBS" - AC_CHECK_FUNCS([XRenderFindStandardFormat], [], [AC_MSG_ERROR([libXrender not found or too old.])]) - LIBS="$saved_LIBS" - ;; - esac - ;; -esac +PKG_CHECK_MODULES(XRENDER, xrender >= 0.8.2 x11) # Check freetype configuration -AC_ARG_WITH(freetype-config, [ --with-freetype-config=PROG Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=auto) - -if test "$freetype_config" = "auto"; then - PKG_CHECK_MODULES(FREETYPE, freetype2, - freetype_config=no, freetype_config=yes) -fi - -if test "$freetype_config" = "yes"; then - AC_PATH_PROG(ft_config,freetype-config,no) - if test "$ft_config" = "no"; then - AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/]) - fi -else - ft_config="$freetype_config" -fi - -if test "$freetype_config" != "no"; then - FREETYPE_CFLAGS="`$ft_config --cflags`" - FREETYPE_LIBS="`$ft_config --libs`" -fi +PKG_CHECK_MODULES(FREETYPE, freetype2 >= 2.1.6) # Check fontconfig configuration -PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.2) +PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.5.92) AC_SUBST(XRENDER_CFLAGS) AC_SUBST(XRENDER_LIBS) @@ -129,27 +79,12 @@ AC_SUBST(FREETYPE_LIBS) AC_SUBST(FONTCONFIG_CFLAGS) AC_SUBST(FONTCONFIG_LIBS) -fontconfig_save_libs="$LIBS" -fontconfig_save_cflags="$CFLAGS" -LIBS="$LIBS $FREETYPE_LIBS" -CFLAGS="$CFLAGS $FREETYPE_CFLAGS" -AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_GlyphSlot_Embolden) -AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem, - HAVE_FT_BITMAP_SIZE_Y_PPEM=1, - HAVE_FT_BITMAP_SIZE_Y_PPEM=0, -[#include -#include FT_FREETYPE_H]) -AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM, - [FT_Bitmap_Size structure includes y_ppem field]) - -LIBS="$fontconfig_save_libs" -CFLAGS="$fontconfig_save_cflags" - if test "$VERSION" = "" ; then VERSION=$PACKAGE_VERSION; fi -AC_OUTPUT([Makefile - xft.pc - src/Makefile - man/Makefile]) +AC_CONFIG_FILES([Makefile + xft.pc + src/Makefile + man/Makefile]) +AC_OUTPUT diff --git a/debian/README.source b/debian/README.source deleted file mode 100644 index 34ab4bf..0000000 --- a/debian/README.source +++ /dev/null @@ -1,73 +0,0 @@ ------------------------------------------------------- -Quick Guide To Patching This Package For The Impatient ------------------------------------------------------- - -1. Make sure you have quilt installed -2. Unpack the package as usual with "dpkg-source -x" -3. Run the "patch" target in debian/rules -4. Create a new patch with "quilt new" (see quilt(1)) -5. Edit all the files you want to include in the patch with "quilt edit" - (see quilt(1)). -6. Write the patch with "quilt refresh" (see quilt(1)) -7. Run the "clean" target in debian/rules - -Alternatively, instead of using quilt directly, you can drop the patch in to -debian/patches and add the name of the patch to debian/patches/series. - ------------------------------------- -Guide To The X Strike Force Packages ------------------------------------- - -The X Strike Force team maintains X packages in git repositories on -git.debian.org in the pkg-xorg subdirectory. Most upstream packages -are actually maintained in git repositories as well, so they often -just need to be pulled into git.debian.org in a "upstream-*" branch. -Otherwise, the upstream sources are manually installed in the Debian -git repository. - -The .orig.tar.gz upstream source file could be generated this -"upstream-*" branch in the Debian git repository but it is actually -copied from upstream tarballs directly. - -Due to X.org being highly modular, packaging all X.org applications -as their own independent packages would have created too many Debian -packages. For this reason, some X.org applications have been grouped -into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils, -x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils. -Most packages, including the X.org server itself and all libraries -and drivers are, however maintained independently. - -The Debian packaging is added by creating the "debian-*" git branch -which contains the aforementioned "upstream-*" branch plus the debian/ -repository files. -When a patch has to be applied to the Debian package, two solutions -are involved: -* If the patch is available in one of the upstream branches, it - may be git'cherry-picked into the Debian repository. In this - case, it appears directly in the .diff.gz. -* Otherwise, the patch is added to debian/patches/ which is managed - with quilt as documented in /usr/share/doc/quilt/README.source. - -quilt is actually invoked by the Debian X packaging through a larger -set of scripts called XSFBS. XSFBS brings some other X specific -features such as managing dependencies and conflicts due to the video -and input driver ABIs. -XSFBS itself is maintained in a separate repository at - git://git.debian.org/pkg-xorg/xsfbs.git -and it is pulled inside the other Debian X repositories when needed. - -The XSFBS patching system requires a build dependency on quilt. Also -a dependency on $(STAMP_DIR)/patch has to be added to debian/rules -so that the XSFBS patching occurs before the actual build. So the -very first target of the build (likely the one running autoreconf) -should depend on $(STAMP_DIR)/patch. It should also not depend on -anything so that parallel builds are correctly supported (nothing -should probably run while patching is being done). And finally, the -clean target should depend on the xsfclean target so that patches -are unapplied on clean. - -When the upstream sources contain some DFSG-nonfree files, they are -listed in text files in debian/prune/ in the "debian-*" branch of -the Debian repository. XSFBS' scripts then take care of removing -these listed files during the build so as to generate a modified -DFSG-free .orig.tar.gz tarball. diff --git a/debian/changelog b/debian/changelog deleted file mode 100755 index 16d61c2..0000000 --- a/debian/changelog +++ /dev/null @@ -1,829 +0,0 @@ -libxft (1:2.2.0-5slp2) unstable; urgency=low - - * upgrade the version due to the change of fontconfig - * Git: 165.213.180.234:slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.2.0-5slp2 - - -- SooChan Lim Mon, 11 Apr 2011 11:05:56 +0900 - -libxft (1:2.2.0-4slp2) unstable; urgency=low - - * [X11R7.6] upgrade package - * Git: 165.213.180.234:slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.2.0-4slp2 - - -- SooChan Lim Sun, 06 Mar 2011 11:15:04 +0900 - -libxft (1:2.2.0-3slp2) unstable; urgency=low - - * [X11R7.6] Change libxft2.install file to install libXft.so - * Git: 165.213.180.234:slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.2.0-3slp2 - - -- Doyoun Kang Sat, 05 Mar 2011 10:07:39 +0900 - -libxft (1:2.2.0-2slp2) unstable; urgency=low - - * [X11R7.6] upgrade package - * Git: 165.213.180.234:slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.2.0-2slp2 - - -- SooChan Lim Fri, 04 Mar 2011 22:38:07 +0900 - -libxft (1:2.2.0-1slp2) unstable; urgency=low - - * [X11R7.6] upgrade package - * Git: 165.213.180.234:slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.2.0-1slp2 - - -- SooChan Lim Fri, 07 Jan 2011 15:26:58 +0900 - -xft (2.1.14-2ubuntu1) unstable; urgency=low - - * Merge from Debian, remaining changes: - - Add patch 100-libXft-2.1.10-lcd-filter-3, use new FreeType LCD colour - filtering features, with additional modification that the specific LCD - Filter can be changed; LP #305399. - - -- Loïc Minier Sun, 06 Jun 2010 15:41:54 +0200 - -xft (2.1.14-2) unstable; urgency=low - - [ Julien Cristau ] - * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no - good reason. Thanks, Colin Watson! - * Remove myself from Uploaders - - [ Cyril Brulebois ] - * Add udeb needed for the graphical installer: libxft2-udeb. - * Version/Bump some B-D to make sure the udeb gets its dependencies on - the (recently-added) udebs rather than on the libraries: - - libx11-dev - - libxrender-dev - * Bump Standards-Version from 3.8.3 to 3.8.4 (no changes needed). - * Add ${misc:Depends} to non-udeb binaries, and wrap Depends. - * Add myself to Uploaders. - - -- Cyril Brulebois Thu, 11 Mar 2010 02:33:50 +0100 - -xft (2.1.14-1ubuntu1) unstable; urgency=low - - * Merge from Debian unstable, remaining chnages: - - patches/100-libXft-2.1.10-lcd-filter-3.patch: - + Use new FreeType LCD colour filtering features, with additional - modification that the specific LCD Filter can be changed - (LP: #305399). - * Renumbered the patch to follow our unwritten policy. - * Drop patch 002_embeddedbitmap_property.patch, included upstream. - - -- Timo Aaltonen Fri, 04 Dec 2009 16:02:38 +0200 - -xft (2.1.14-1) unstable; urgency=low - - [ Timo Aaltonen ] - * New upstream release. - * Bump the build-dep on xutils-dev (>= 1:7.5~1). - * Bump Standards-Version to 3.8.3 (README.source added). - * Drop pre-dependency on x11-common from libxft-dev. This was needed - for upgrades from sarge. - * Move -dbg package to section debug. - - -- Julien Cristau Thu, 03 Dec 2009 14:40:25 +0100 - -xft (2.1.13-3ubuntu1) jaunty; urgency=low - - * Merge from debian unstable, remaining changes: - - debian/patches/002_embeddedbitmap_property.patch: - + Allow "embeddedbitmap" property in fontconfig. - - debian/patches/libXft-2.1.10-lcd-filter-3.patch: - + Use new FreeType LCD colour filtering features, with additional - modification that the specific LCD Filter can be changed - (LP: #305399). - - -- Bryce Harrington Thu, 26 Feb 2009 13:40:39 -0800 - -xft (2.1.13-3) unstable; urgency=low - - * Upload to unstable. - - -- Julien Cristau Sun, 15 Feb 2009 22:07:06 +0100 - -xft (2.1.13-2ubuntu1) jaunty; urgency=low - - * Merge from debian unstable, remaining changes: - - debian/patches/002_embeddedbitmap_property.patch: - + Allow "embeddedbitmap" property in fontconfig. - - debian/patches/libXft-2.1.10-lcd-filter-3.patch: - + Use new FreeType LCD colour filtering features, with additional - modification that the specific LCD Filter can be changed - (LP: #305399). - - -- Anders Kaseorg Mon, 22 Dec 2008 00:50:15 -0500 - -xft (2.1.13-2) experimental; urgency=low - - * Delete obsolete libxft-dev preinst (closes: #491633). - - -- Julien Cristau Sat, 26 Jul 2008 23:02:21 +0200 - -libxft (1:2.1.13-10slp2) unstable; urgency=low - - * modify autogen.sh - * Git: 165.213.180.234:/git/slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.1.13-10slp2 - - -- SooChan Lim Fri, 03 Dec 2010 17:26:09 +0900 - -libxft (1:2.1.13-9slp2) unstable; urgency=low - - * Add libxft2-dbg package - * Git: 165.213.180.234:/git/slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.1.13-9slp2 - - -- Sung-Jin Park Mon, 22 Nov 2010 14:37:25 +0900 - -libxft (1:2.1.13-8slp2) unstable; urgency=low - - * add --as-needed option - * Git: 165.213.180.234:/git/slp/pkgs/xorg/lib/libxft - * Tag: libxft_2.1.13-8slp2 - - -- SooChan Lim Sat, 20 Nov 2010 14:32:29 +0900 - -libxft (1:2.1.13-7slp2) unstable; urgency=low - - * modify the package name - - -- SooChan Lim Thu, 25 Mar 2010 17:51:55 +0900 - -libxft (1:2.1.13-6) unstable; urgency=low - - * Install .la files - - -- Sung-Jin Park Mon, 07 Dec 2009 10:29:42 +0900 - -libxft (1:2.1.13-5) unstable; urgency=low - - * Install *.so file - - -- DoHyun Pyun Fri, 20 Nov 2009 16:55:57 +0900 - -libxft (1:2.1.13-4) unstable; urgency=low - - * Remove .git folder - - -- DoHyun Pyun Fri, 20 Nov 2009 16:00:08 +0900 - -libxft (1:2.1.13-3) unstable; urgency=low - - * Change the copywrite - - -- DoHyun Pyun Tue, 17 Nov 2009 15:53:20 +0900 - -libxft (1:2.1.13-2) unstable; urgency=low - - * Change rules file (About dh_makdeshlibs) - - -- DoHyun Pyun Mon, 16 Nov 2009 14:59:38 +0900 - -libxft (1:2.1.13-1) unstable; urgency=low - - * Initial Release. - - -- DoHyun Pyun Thu, 12 Nov 2009 15:52:12 +0900 - -xft (2.1.13-1) experimental; urgency=low - - [ Brice Goglin ] - * Update upstream URL in debian/copyright. - - [ Julien Cristau ] - * New upstream release. - * Stop handling nostrip explicitly in debian/rules (dh_strip does it - already), and allow parallel builds using sample code from policy. - * Switch to running autoreconf at build time; build-depend on automake, - libtool and xutils-dev. - - -- Julien Cristau Sat, 19 Jul 2008 16:30:18 +0200 - -xft (2.1.12-3ubuntu2) jaunty; urgency=low - - * Fix build failure with new fontconfig, integrating the lcd-filter patch. - - -- Matthias Klose Tue, 18 Nov 2008 07:13:02 +0100 - -xft (2.1.12-3ubuntu1) intrepid; urgency=low - - * Merge from debian unstable, remaining changes: - - debian/patches/002_embeddedbitmap_property.patch: - + Allow "embeddedbitmap" property in fontconfig. (LP: 208745) - - debian/patches/libXft-2.1.10-lcd-filter-3.patch: - + Use new FreeType LCD colour filtering features, with additional - modification that the specific LCD Filter can be changed. - - Specify minimum versions for some depends - - Update maintainer field to Ubuntu - - -- Bryce Harrington Tue, 17 Jun 2008 00:59:28 -0700 - -xft (2.1.12-3) unstable; urgency=low - - * Remove Branden from Uploaders with his permission. - * Bump Standards-Version to 3.7.3. - * Add Vcs-Git and Vcs-Browser control fields. - * Drop pre-dependency on x11-common from libxft2 and libxft2-dbg, as it's - not needed. - * Use ${binary:Version} instead of the equivalent but confusingly-named - ${Source-Version}. - * Modify patch 001_no_export_freetype.diff to not export fontconfig in - 'pkg-config --libs xft' (closes: #389831). - * Add myself to Uploaders. - * Fix XftDrawRect when Render not supported (cherry-picked from upstream - git; closes: #462262). - - -- Julien Cristau Tue, 10 Jun 2008 16:12:37 +0200 - -xft (2.1.12-2ubuntu5) hardy; urgency=low - - [Liu Qishuai] - * debian/patches/002_embeddedbitmap_property.patch: - - Allow "embeddedbitmap" property in fontconfig. (LP: #208745) - * debian/changelog: - - Update to Ubuntu maintainer - - -- Bryce Harrington Wed, 09 Apr 2008 14:12:59 -0700 - -xft (2.1.12-2ubuntu4) gutsy; urgency=low - - * debian/patches/libXft-2.1.10-lcd-filter-3.patch: - - Restore patch that uses new FreeType LCD colour filtering features, - with additional modification that the specific LCD Filter can be - changed. - - -- Scott James Remnant Thu, 20 Sep 2007 20:09:10 +0100 - -xft (2.1.12-2ubuntu3) gutsy; urgency=low - - * debian/patches/series - - remove mention of libXft-2.1.10-lcd-filter-2.patch - - -- Matthew Garrett Thu, 20 Sep 2007 15:48:21 +0100 - -xft (2.1.12-2ubuntu2) gutsy; urgency=low - - * debian/patches/libXft-2.1.10-lcd-filter-2.patch: - - remove - results in incorrect rendering, and we have the bytecode - interpreter enabled anyway - - -- Matthew Garrett Thu, 20 Sep 2007 05:08:05 +0100 - -xft (2.1.12-2ubuntu1) gutsy; urgency=low - - [ Matti Lindell ] - * debian/patches/libXft-2.1.10-lcd-filter-2.patch: - - use new built-in FreeType LCD color filtering features - - -- Scott James Remnant Tue, 18 Sep 2007 17:39:18 +0100 - -xft (2.1.12-2) unstable; urgency=low - - * Upload to unstable. - - -- Julien Cristau Tue, 10 Apr 2007 20:43:57 +0200 - -xft (2.1.12-1) experimental; urgency=low - - * New upstream release. - * Install the upstream ChangeLog. - - -- Julien Cristau Fri, 9 Feb 2007 14:56:32 +0100 - -xft (2.1.10-3) experimental; urgency=low - - * Remove that explicit shlibs file added in the last upload. The only - symbols that are hidden are private, so if your app is using those symbols - it's being very naughty. Go back to just generating shlibs using - dh_makeshlibs. - - -- David Nusinow Thu, 24 Aug 2006 00:29:33 +0000 - -xft (2.1.10-2) experimental; urgency=low - - * Add shlibs file because the public API and exported symbols changed - between 2.1.8.2 and now - - -- David Nusinow Wed, 16 Aug 2006 20:34:41 +0000 - -xft (2.1.10-1) experimental; urgency=low - - * New upstream release. - * Test for obj-$(DEB_BUILD_GNU_TYPE) before creating it during build; - idempotency fix. - * Fix changelog to not make lintian upset. - * Drop patches/002_no_xproto_dep.diff, now that x11proto-core-dev has - a .pc file. Make the dep on libx11-dev versioned so that we're sure - to have an xproto.pc file (from xorg 7.0 or higher). - - -- Andres Salomon Sun, 23 Jul 2006 03:17:32 -0400 - -xft (2.1.8.2-8) unstable; urgency=low - - * Bump standards version to 3.7.2.0 - * Bump debhelper compat level to 5 - * Rebuild with freetype6 2.2.1, which fixes ABI breakages of the past. - Thanks Steve Langasek and Keith Packard for managing the freetype side of - things. (closes: #350113) - - -- David Nusinow Sun, 21 May 2006 16:18:09 -0400 - -xft (2.1.8.2-7) unstable; urgency=low - - * Reorder makeshlib command in rules file so that ldconfig is run - properly. Thanks Drew Parsons and Steve Langasek. (closes: #363922) - * Run dh_install with --list-missing - * Fix package name in rules file so that the debugging symbols go to the - right place. Thanks Tim Johann. (closes: #365341) - * Remove useless instaces of x-dev in dependencies. Thaks Ross Burton. - (closes: #363507) - - -- David Nusinow Tue, 2 May 2006 22:31:46 -0400 - -xft (2.1.8.2-6) unstable; urgency=low - - * Upload to unstable - * Move the header files back to /usr/include/X11/Xft to bring them in line - with X11R7 - * Add versioned pre-depends on x11-common to match X11R7. Do this for all - packages shipped by this source package. - - -- David Nusinow Thu, 23 Mar 2006 22:44:40 -0500 - -xft (2.1.8.2-5) unstable; urgency=low - - * Actually install the header files to /usr/X11R6/include/Xft. Thanks Steve - Langasek. - - -- David Nusinow Wed, 22 Mar 2006 00:33:46 -0500 - -xft (2.1.8.2-4) unstable; urgency=low - - * Make libxft-dev pre-depend on x11-common so as to make sure that the - symlink for /usr/include/X11 is already in place when we install the - package. (closes: #358254, #358260, #350298, #358308) - - -- David Nusinow Wed, 22 Mar 2006 00:06:39 -0500 - - -xft (2.1.8.2-3) unstable; urgency=low - - * Include freetype headers in cflags in the xft.pc file. This is an edit to - 001_no_export_freetype.diff. The freetype headers are included in xft's - headers, so these are necessary. Also, don't use variables in the .pc file - that haven't been defined anywhere. Thanks to Roger Leigh, Decklin Foster, - Eric Dorland, and Steve Langasek (who wrote the patch). (closes: #350458) - - -- David Nusinow Sun, 5 Feb 2006 12:59:29 -0500 - -xft (2.1.8.2-2) unstable; urgency=low - - * Add 002_no_xproto_dep.diff so that the .pc file doesn't depend on xproto, - which doesn't yet have a .pc file in Debian (to be removed when 7.0 enters - the archive). Thanks Mike Hommey. (closes: #349678) - * Include patch from Steve Langasek in full from previous upload. This - should work around the issue properly. (closes: #349318) - - -- David Nusinow Tue, 24 Jan 2006 21:52:01 -0500 - -xft (2.1.8.2-1) unstable; urgency=low - - * Add build-dep on quilt - * Add 001_no_export_freetype.diff. This is a modified patch from Steve - Langasek that causes xft.pc not to export freetype or xrender as part of - the interface, but hide them in Requires.private instead (closes: #349318) - * Remove versioned build-deps on libx11 and libxrender. - * Move preinst to preinst.in so it doesn't get deleted by clean target. We - really need a better way to deal with these things... - - -- David Nusinow Sun, 22 Jan 2006 22:35:36 -0500 - -libxft (2.1.8.2-0ubuntu2) dapper; urgency=low - - * Change dependency on x-common to x11-common. - - -- Daniel Stone Thu, 19 Jan 2006 18:27:58 +1100 - -libxft (2.1.8.2-0ubuntu1) dapper; urgency=low - - * New upstream release. - * Repackaged to fit all the other X packages. - * Stop shipping libXft.la. - - -- Daniel Stone Wed, 21 Dec 2005 13:13:31 +1100 - -xft (2.1.8.1-0ubuntu1) dapper; urgency=low - - * New upstream release. - - -- Daniel Stone Mon, 12 Dec 2005 15:33:13 +1100 - -xft (2.1.7-1ubuntu2) breezy; urgency=low - - * Add Pre-Depends on x-common to libxft-dev, so its files don't get caught - in /usr/X11R6 thanks to symlink treachery. - - -- Daniel Stone Thu, 19 May 2005 00:48:57 +1000 - -xft (2.1.7-1ubuntu1) breezy; urgency=low - - * Move files from /usr/X11R6 to /usr. - - -- Fabio M. Di Nitto Tue, 17 May 2005 18:44:50 +0200 - -xft (2.1.7-1) unstable; urgency=low - - * New upstream release. - + Keith Packard attests, and Branden Robinson verified as far as he is - able, that no interface changes have been made since 2.1.2. - + Highlights of upstream changes: - - Change FC_CHARCELL and FC_MONO interpretation. FC_MONO no longer - clips glyphs to charcell, you must specify FC_CHARCELL for that. - - Add support for FT_GlyphSlot_Embolden where it exists (which it - usually doesn't). - - Avoid crashing when using FT_Face objects. - - Deal with broken FreeType 2.1.7 BDF/PCF loaders by trying both - y_ppem/x_ppem and width/height values. - - Work with older versions of Fontconfig by using various pattern - elements only when defined. - - Change Freetype includes to new syntax. - - Search for nearest bitmap for bitmap-only fonts. - - Support fontconfig 2.2 release which doesn't include FC_HINT_STYLE. - - * Update Debian copyright file with URL to new tar archive, and identify - Keith Packard as the upstream maintainer, not the upstream author - (upstream now provides an AUTHORS file to clarify the latter). - - * Correct and enhance xft-config's usage message: - + No non-option arguments are allowed. - + At least one option argument must be specified. - + Use ellipsis notation to indicate that more than one option is allowed. - + Provide one-sentence summary of the command's purpose. - + Sort option names in lexicographic order. - - * Write and ship manual page for xft-config. - - * Drop libxft2.docs debhelper file; CDBS is now brainy enough to identify - and tell dh_installdocs to ship a non-empty README file, so libxft2.docs - has become redundant. - - * Add debian/compat file to declare debhelper version 4 compatibility. - - -- Branden Robinson Fri, 1 Apr 2005 13:13:48 -0500 - -xft (2.1.2-6) unstable; urgency=low - - * Make package compatible with the XFree86 4.3.0 package reorganization. - - debian/control: - + package build-depends on x-dev and libx11-dev instead of xlibs-dev - + libxrender-dev depends on x-dev and libx11-dev instead of xlibs-dev - + make libxft-dev conflict with xlibs-dev (<< 4.3.0) due to (now - undiverted) file overlaps - - debian/libxft-dev.preinst: remove diversions made by previous versions - of package if present - - debian/libxft-dev.postrm: deleted - - -- Branden Robinson Thu, 11 Mar 2004 02:13:15 -0500 - -xft (2.1.2-5) unstable; urgency=medium - - * Urgency due to fix for FTBFS problem introduced by new FreeType library. - - * Clean up package's build-dependencies and dependencies. - - debian/control: - + Drop versioning of build-dependencies on libxrender-dev and xlibs-dev. - All officially released versions of these Debian packages are - sufficient to build this package. - + Drop package dependencies on debhelper's "${misc:Depends}" construct; - this package is too simple to need it. - + Drop versioning of libxft-dev's dependencies on libxrender-dev and - xlibs-dev. All officially released versions of these Debian packages - should be sufficient to objects using this package. - + Drop libxft-dev's dependency on pkg-config; pkg-config is supported - but not mandated. - - * Document more functions in the Xft(3) manual page. - - Xft.3.in - - * Set package maintainer to the Debian X Strike Force and put myself in the - Uploaders field. - - debian/control - - * Do not include directly; use the macro FT_FREETYPE_H - to include it instead, as required by freetype 2.1.7 (fixes FTBFS when - FreeType 2.1.7 is on the system; thanks, Tore Anderson). - (Closes: #221129) - - Xft.h - - * Stop passing --x-includes and --x-libraries flags to - DEB_CONFIGURE_EXTRA_FLAGS; AC_PATH_X suffices to locate the X include - files and libraries. - - debian/rules - - * Pass --disable-rpath flag to DEB_CONFIGURE_EXTRA_FLAGS; consequently, drop - invocation of chrpath from common-install-arch target. - - debian/rules - - debian/control: drop build-dependency on chrpath - - * In the pre-installation script, only remove diversions from old - libxft2-dev package if that package has those diversions; dpkg-divert will - barf if you try to remove a nonexistent diversion when a different package - is diverting the same file. This enables libxft-dev to be upgraded from - the previous version, and installed over the same version. - - debian/libxft-dev.preinst - - -- Branden Robinson Mon, 17 Nov 2003 03:07:41 -0500 - -xft (2.1.2-4) unstable; urgency=low - - * Set AM_MAINTAINER_MODE because we do not want users of the Debian source - package to have to have automake installed. - - configure.ac - - * Run aclocal && automake --foreign && autoconf to resynchronize with - changes to Makefile.am and configure.ac. - - Makefile.in - - aclocal.m4 - - configure - - * Make libxft-dev conflict with and provide libxft2-dev to help apt figure - out an upgrade path. Deliberately *not* making libxft-dev replace - libxft2-dev, even though it would be correct to do so, because doing that - plays such havoc with dpkg-divert that libxft-dev will fail to install on - upgrades from libxft2-dev. This way libxft2-dev will be properly removed - first. - - debian/control - - -- Branden Robinson Wed, 8 Oct 2003 18:09:37 -0500 - -xft (2.1.2-3) unstable; urgency=low - - * Migrate dpkg diversions from libxft2-dev to libxft-dev, which was - neglected in the previous release. - - debian/libxft-dev.preinst: - + remove all previous diversions created by libxft2-dev on all installs - and upgrades (libxft-dev's preinst script will not be passed a $2 - corresponding to the most-recently-configured version of libxft2-dev) - + add diversions using new package name - - debian/libxft-dev.postrm: remove diversions using new package name - - -- Branden Robinson Tue, 7 Oct 2003 15:02:06 -0500 - -xft (2.1.2-2) unstable; urgency=low - - * Take a hatchet to the RPATH that libtool insists on putting into the - libXft shared object by using chrpath. - - debian/control: add build-dependency on chrpath - - debian/rules: add common-install-arch double-colon rule to invoke - chrpath on the libXft shared object - - -- Branden Robinson Tue, 7 Oct 2003 00:00:13 -0500 - -xft (2.1.2-1) unstable; urgency=low - - * new upstream version - - debian/copyright: - + updated URL of upstream release - + resync copyright and license notice with upstream - - * Rename source package to "xft" from "xft2". - - debian/control - - * Rename libxft2-dev package to libxft-dev. Consequently, drop conflict and - provide relationship with (formerly virtual) libxft-dev package. - - debian/control - - debian/libxft-dev.install: renamed from libxft2-dev.install - - debian/libxft-dev.postrm: renamed from libxft2-dev.postrm - - debian/libxft-dev.preinst: renamed from libxft2-dev.preinst - - * Add versioning (>> 4.2.1) to libxft-dev's dependency on xlibs-dev. - - debian/control - - * Ship upstream README in libxft2's documentation directory. - - debian/libxft2.docs - - * Correct libxft2-dbg's extended description to mention the correct path - where the debugging library is installed. - - debian/control - - * Migrate from CBS to CDBS. - - debian/control: add build-dependency on cdbs (>= 0.4.12) (thanks to - Colin Walters for adding debugging package support I can use with a - clear conscience :) ) - - debian/rules: renamed from debian/rocks and translated to CDBS-speak - - -- Branden Robinson Mon, 6 Oct 2003 20:55:54 -0500 - -xft2 (2.1.1-3) unstable; urgency=low - - * configure: re-run autoconf to expose the fix to configure.ac from 2.1.1-1 - (thanks, Robert Millan) (Closes: #185536) - - * debian/control: - - tweak packages' short descriptions - - make libxft2 depend on ${misc:Depends} so debhelper can do its thing - - add libxft2-dbg binary package - * debian/rocks: - - new rule, deb-makeshlibs-libxft2-dbg, which is a no-op to prevent CBS - from running dh_makeshlibs on this package - - new rule, deb-strip-libxft2-dbg, which is a no-op to prevent CBS from - running dh_strip on this package - * debian/libxft2-dbg.install: ship the shared object(s) in - /usr/X11R6/lib/debug/ - - * Version the build dependency on xlibs-dev to specify version 4.2.1 or - later; xft2 will not build successfully with woody-era (4.1.0) versions of - xlibs-dev. - - debian/control - - * Bump Standards-Version to 3.6.1; no changes necessary. - - debian/control - - * Source package build-depends, and libxft2-dev depends, on libxrender-dev - (>> 0.8.1). - - debian/control - - * Drop README.Debian file; xft will be separately packaged from XFree86 for - the forseeable future. - - debian/README.Debian: deleted - - * Ship libXft.la file in libxft2-dev. - - debian/libxft2-dev.install - - * Ship library files in /usr/lib instead of /usr/X11R6/lib, and debugging - library files in /usr/lib/debug instead of /usr/X11R6/lib/debug, per - policy 11.8.7. Continuing to ship include files in /usr/X11R6/include/X11 - until upstream default changes. - - debian/libxft2{,-dbg,-dev}.install - - * Ship Xft.3 manpage (in /usr/share/man/man3, so it does not conflict with - the XFree86-provided Xft manpage, which is being renamed to Xft1.3x in - 4.3.0 anyway). - - debian/libxft2-dev.install - - -- Branden Robinson Sat, 4 Oct 2003 19:31:11 -0500 - -xft2 (2.1.1-2) unstable; urgency=low - - * debian/control: move libxft2-dev from section "devel" to "libdevel" - * debian/rocks: - - drop deb-common-build and deb-extra-clean rules per Colin Walters - - pass --x-includes and --x-libraries to configure script, since the - AC_PATH_X autoconf macro is highly suboptimal - - don't be so crazy about the versioning in the shlibs file (i.e., drop - Debian package component) - * debian/libxft2-dev.preinst: sense of the version comparison when removing - the obsolete diversion of XftFreetype.h was wrong; fixed - - -- Branden Robinson Wed, 30 Apr 2003 23:24:33 -0500 - -xft2 (2.1.1-1) unstable; urgency=low - - * New upstream version. - + includes fixes for some bugs when drawing to non-RENDER-enabled servers - (Closes: #178817) - + handle both 0-indexed and 1-indexed glyph numbering schemes - (Closes: #190610) - + xft-config --cflags and --libs now give more correct output - (Closes: #179942, #179944) - - * configure.ac: add -lXext and -lX11 to XRENDER_LIBS - * xft-config.in: add -lX11 to --libs output - * xft.pc.in: add -lX11 to Libs line - - * the above changes ensure that libXft.so.2.1.1 has proper linkage, declares - needed shared objects correctly, and thus enables dpkg-shlibdeps to find - what it's looking for (Closes: #186042) - - * debian/*: various cosmetic cleanups - * debian/control: - - Update Build-Depends and libxft-dev's Depends to reflect all development - library dependencies - - Bump Standards-Version to 3.5.9. - - Rewrite extended descriptions. - * debian/copyright: updated - * debian/rocks: stop nuking config.{guess,sub} in debian-extra-clean rule; - it is no longer part of the upstream source archive - * debian/libxft2-dev.{postrm,preinst}: stop diverting XftFreetype.h, since - the package no longer ships it; also handle removal of now-obsolete - diversion when upgrading from earlier versions - - -- Branden Robinson Wed, 30 Apr 2003 01:31:58 -0500 - -xft2 (2.1-8) unstable; urgency=low - - * Adopting this package per request from Colin Walters (XFree86 4.3.0 will - be generating libxft2, anyway.) - * config/{config.guess,config.sub,ltmain.sh}: updated with libtoolize - --force --copy - * debian/control: set Maintainer field to me - - -- Branden Robinson Tue, 11 Mar 2003 23:28:33 -0500 - -xft2 (2.1-7) unstable; urgency=low - - * debian/control: - - Build-Depend on xlibs-dev (>= 4.2.0) (Closes: #174596). - - [libxft2-dev] Depend on xlibs-dev (>= 4.2.0). - - -- Colin Walters Fri, 17 Jan 2003 13:11:34 -0500 - -xft2 (2.1-6) unstable; urgency=low - - * debian/rules: - - Update to latest version of Colin's Build System. - * debian/rocks: - - Tighten up shlibs for libxft2. - - -- Colin Walters Wed, 8 Jan 2003 22:47:30 -0500 - -xft2 (2.1-5) unstable; urgency=low - - * debian/control: - - Build-Depend on the latest libfontconfig1-dev, and by transitivity - the latest libfreetype6-dev. The libfreetype6-dev issue was causing - configuration problems, which is what caused the autoconf macros to - pick up empty paths for X. (Closes: #172661). - - -- Colin Walters Sun, 22 Dec 2002 17:42:30 -0500 - -xft2 (2.1-4) unstable; urgency=low - - * debian/patches/fix-configure-in-x-paths.patch: - - New patch (Closes: #172703, #172661). - * debian/rocks: - - Remove extra cruft in deb-extra-clean rule. - - -- Colin Walters Thu, 12 Dec 2002 17:42:57 -0500 - -xft2 (2.1-3) unstable; urgency=low - - * debian/control: - - Depend (and Build-Depend) on the latest libfontconfig1-dev. - * debian/rules: - - Update to latest version of Colin's Build System. - - -- Colin Walters Wed, 11 Dec 2002 00:42:03 -0500 - -xft2 (2.1-2) unstable; urgency=low - - * First upload to unstable; this is part of #170559, which is closed - with the fontconfig upload. - * debian/rules: - - Update to latest version of Colin's Build System. - - -- Colin Walters Fri, 6 Dec 2002 01:39:21 -0500 - -xft2 (2.1-1) unstable; urgency=low - - * New upstream version. - * debian/rules: - - Use Colin's Build System. - * debian/control: - - Bump Standards-Version to 3.5.8. - - Build-Depend on the latest fontconfig. - * debian/libxft2-dev.{preinst,postrm}: - - Add Debhelper tokens. - * debian/copyright: - - Fix Upstream Authors. - - -- Colin Walters Tue, 3 Dec 2002 23:04:12 -0500 - -xft2 (2.0-4) unstable; urgency=low - - * debian/libxft2.install: - - Install xft-config. - - -- Colin Walters Sat, 19 Oct 2002 10:24:35 -0400 - -xft2 (2.0-3) unstable; urgency=low - - * debian/libxft2.install: - - Install libraries in /usr/X11R6/lib, not /usr/lib. - - -- Colin Walters Tue, 15 Oct 2002 11:22:58 -0400 - -xft2 (2.0-2) unstable; urgency=low - - * debian/control: - - [xft2] Build-Depend on xlibs-dev, not xlib6g-dev. - - [libxft2-dev] Depend on xlibs-dev, not xlib6g-dev. Also depend on pkg-config. - * debian/rules: - - Install xft.pc. - - -- Colin Walters Mon, 14 Oct 2002 22:59:06 -0400 - -xft2 (2.0-1) unstable; urgency=low - - * Initial version. - - -- Colin Walters Sun, 13 Oct 2002 14:43:56 -0400 - -vim:set ai tw=78 et sw=2 sts=2: diff --git a/debian/compat b/debian/compat deleted file mode 100644 index 7ed6ff8..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -5 diff --git a/debian/control b/debian/control deleted file mode 100755 index 539243a..0000000 --- a/debian/control +++ /dev/null @@ -1,62 +0,0 @@ -Source: libxft -Section: devel -Priority: optional -Maintainer: SooChan Lim , Sangjin Lee , Ubuntu X-SWAT -Uploaders: SooChan Lim , David Nusinow , Andres Salomon , Cyril Brulebois , Doyoun Kang -Build-Depends: debhelper (>= 5.0.0), libfontconfig1-dev, libfreetype6-dev, libx11-dev (>= 2:1.3.3-2), libxrender-dev (>= 1:0.9.5-2), zlib1g-dev | libz-dev, quilt, automake, libtool, xutils-dev (>= 1:7.5-1slp2) -Standards-Version: 3.8.4 -Vcs-Git: git://git.debian.org/git/pkg-xorg/lib/xft -Vcs-Browser: http://git.debian.org/?p=pkg-xorg/lib/xft.git - -Package: libxft2 -Section: libs -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, -Description: FreeType-based font drawing library for X - Xft provides a client-side font API for X applications, making the FreeType - font rasterizer available to X clients. Fontconfig is used for font - specification resolution. Where available, the RENDER extension handles - glyph drawing; otherwise, the core X protocol is used. - -#Package: libxft2-udeb -#XC-Package-Type: udeb -#Section: debian-installer -#Architecture: any -#Depends: -# ${shlibs:Depends}, -#Description: FreeType-based font drawing library for X -# This is a udeb, or a microdeb, for the debian-installer. - -Package: libxft2-dbg -Section: debug -Priority: extra -Architecture: any -Depends: libxft2 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, -Description: FreeType-based font drawing library for X (unstripped) - Xft provides a client-side font API for X applications, making the FreeType - font rasterizer available to X clients. Fontconfig is used for font - specification resolution. Where available, the RENDER extension handles - glyph drawing; otherwise, the core X protocol is used. - . - This package provides an unstripped shared object with debugging symbols, - useful to provide a backtrace with symbol names in a debugger; this - facilitates interpretation of core dumps, and aids in finding logic errors in - programs using this library (or the library itself). The library is - installed in /usr/lib/debug and can be used by placing that directory in the - LD_LIBRARY_PATH environment variable when the code to be debugged is - executed. Non-programmers will likely have little use for this package, and - should use libxft2 instead. - -Package: libxft-dev -Section: libdevel -Architecture: any -Depends: libxft2 (= ${binary:Version}), libc6-dev | libc-dev, libfontconfig1-dev, libfreetype6-dev, libx11-dev (>= 2:1.0.0), libxrender-dev, zlib1g-dev | libz-dev, ${misc:Depends}, -Conflicts: libxft2-dev, xlibs-dev (<< 4.3.0) -Provides: libxft2-dev -Description: FreeType-based font drawing library for X (development files) - Xft provides a client-side font API for X applications, making the FreeType - font rasterizer available to X clients. Fontconfig is used for font - specification resolution. Where available, the RENDER extension handles - glyph drawing; otherwise, the core X protocol is used. - . - This package provides a static library and C header files. diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index e5ee6ce..0000000 --- a/debian/copyright +++ /dev/null @@ -1,33 +0,0 @@ -This package was downloaded from -http://xorg.freedesktop.org/releases/individual/lib/ - -This package was originally Debianized by Colin Walters - on Sun, 13 Oct 2002 15:01:50 -0400. - -Later versions were Debianized by Branden Robinson . - -Upstream maintainer: Keith Packard - -Copyright and license: - -Copyright © 2001,2003 Keith Packard - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Keith Packard not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Keith Packard makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -$Id: copyright 114 2005-03-30 07:39:46Z branden $ diff --git a/debian/libxft-dev.install b/debian/libxft-dev.install deleted file mode 100755 index 02cbc7a..0000000 --- a/debian/libxft-dev.install +++ /dev/null @@ -1,5 +0,0 @@ -usr/include/X11/Xft/* -usr/lib/libXft.a -usr/lib/libXft.la -usr/lib/libXft.so -usr/lib/pkgconfig/*.pc diff --git a/debian/libxft2-udeb.install b/debian/libxft2-udeb.install deleted file mode 100644 index c33b7c9..0000000 --- a/debian/libxft2-udeb.install +++ /dev/null @@ -1 +0,0 @@ -usr/lib/libXft.so.* diff --git a/debian/libxft2.install b/debian/libxft2.install deleted file mode 100644 index c33b7c9..0000000 --- a/debian/libxft2.install +++ /dev/null @@ -1 +0,0 @@ -usr/lib/libXft.so.* diff --git a/debian/patches/100-libXft-2.1.10-lcd-filter-3.patch b/debian/patches/100-libXft-2.1.10-lcd-filter-3.patch deleted file mode 100644 index 5e86ac7..0000000 --- a/debian/patches/100-libXft-2.1.10-lcd-filter-3.patch +++ /dev/null @@ -1,843 +0,0 @@ ---- a/src/xftdpy.c -+++ b/src/xftdpy.c -@@ -369,6 +369,10 @@ - goto bail1; - if (!_XftDefaultInitInteger (dpy, pat, FC_RGBA)) - goto bail1; -+#ifdef FC_LCD_FILTER -+ if (!_XftDefaultInitInteger (dpy, pat, FC_LCD_FILTER)) -+ goto bail1; -+#endif - if (!_XftDefaultInitBool (dpy, pat, FC_ANTIALIAS)) - goto bail1; - #ifdef FC_EMBOLDEN -@@ -521,6 +525,14 @@ - XftDefaultGetInteger (dpy, FC_RGBA, screen, - subpixel)); - } -+#ifdef FC_LCD_FILTER -+ if (FcPatternGet (pattern, FC_LCD_FILTER, 0, &v) == FcResultNoMatch) -+ { -+ FcPatternAddInteger (pattern, FC_LCD_FILTER, -+ XftDefaultGetInteger (dpy, FC_LCD_FILTER, screen, -+ FC_LCD_DEFAULT)); -+ } -+#endif - if (FcPatternGet (pattern, FC_MINSPACE, 0, &v) == FcResultNoMatch) - { - FcPatternAddBool (pattern, FC_MINSPACE, ---- a/src/xftfreetype.c -+++ b/src/xftfreetype.c -@@ -469,6 +469,21 @@ - goto bail1; - } - -+#ifdef FC_LCD_FILTER -+ /* -+ * Get lcd_filter value -+ */ -+ switch (FcPatternGetInteger (pattern, FC_LCD_FILTER, 0, &fi->lcd_filter)) { -+ case FcResultNoMatch: -+ fi->lcd_filter = FC_LCD_DEFAULT; -+ break; -+ case FcResultMatch: -+ break; -+ default: -+ goto bail1; -+ } -+#endif -+ - /* - * Get matrix and transform values - */ ---- a/src/xftglyphs.c -+++ b/src/xftglyphs.c -@@ -21,27 +21,18 @@ - */ - - #include "xftint.h" --#include - - #if HAVE_FT_GLYPHSLOT_EMBOLDEN - #include - #endif - --static const int filters[3][3] = { -- /* red */ --#if 0 --{ 65538*4/7,65538*2/7,65538*1/7 }, -- /* green */ --{ 65536*1/4, 65536*2/4, 65537*1/4 }, -- /* blue */ --{ 65538*1/7,65538*2/7,65538*4/7 }, -+#if FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH < 20202 -+# error "FreeType 2.2.2 or later required to compile this version of libXft" - #endif --{ 65538*9/13,65538*3/13,65538*1/13 }, -- /* green */ --{ 65538*1/6, 65538*4/6, 65538*1/6 }, -- /* blue */ --{ 65538*1/13,65538*3/13,65538*9/13 }, --}; -+ -+#include FT_OUTLINE_H -+#include FT_LCD_FILTER_H -+#include FT_SYNTHESIS_H - - /* - * Validate the memory info for a font -@@ -69,6 +60,295 @@ - font->glyph_memory, glyph_memory); - } - -+ -+/* we sometimes need to convert the glyph bitmap in a FT_GlyphSlot -+ * into a different format. For example, we want to convert a -+ * FT_PIXEL_MODE_LCD or FT_PIXEL_MODE_LCD_V bitmap into a 32-bit -+ * ARGB or ABGR bitmap. -+ * -+ * this function prepares a target descriptor for this operation. -+ * -+ * input :: target bitmap descriptor. The function will set its -+ * 'width', 'rows' and 'pitch' fields, and only these -+ * -+ * slot :: the glyph slot containing the source bitmap. this -+ * function assumes that slot->format == FT_GLYPH_FORMAT_BITMAP -+ * -+ * mode :: the requested final rendering mode. supported values are -+ * MONO, NORMAL (i.e. gray), LCD and LCD_V -+ * -+ * the function returns the size in bytes of the corresponding buffer, -+ * it's up to the caller to allocate the corresponding memory block -+ * before calling _fill_xrender_bitmap -+ * -+ * it also returns -1 in case of error (e.g. incompatible arguments, -+ * like trying to convert a gray bitmap into a monochrome one) -+ */ -+static int -+_compute_xrender_bitmap_size( FT_Bitmap* target, -+ FT_GlyphSlot slot, -+ FT_Render_Mode mode ) -+{ -+ FT_Bitmap* ftbit; -+ int width, height, pitch; -+ -+ if ( slot->format != FT_GLYPH_FORMAT_BITMAP ) -+ return -1; -+ -+ // compute the size of the final bitmap -+ ftbit = &slot->bitmap; -+ -+ width = ftbit->width; -+ height = ftbit->rows; -+ pitch = (width+3) & ~3; -+ -+ switch ( ftbit->pixel_mode ) -+ { -+ case FT_PIXEL_MODE_MONO: -+ if ( mode == FT_RENDER_MODE_MONO ) -+ { -+ pitch = (((width+31) & ~31) >> 3); -+ break; -+ } -+ /* fall-through */ -+ -+ case FT_PIXEL_MODE_GRAY: -+ if ( mode == FT_RENDER_MODE_LCD || -+ mode == FT_RENDER_MODE_LCD_V ) -+ { -+ /* each pixel is replicated into a 32-bit ARGB value */ -+ pitch = width*4; -+ } -+ break; -+ -+ case FT_PIXEL_MODE_LCD: -+ if ( mode != FT_RENDER_MODE_LCD ) -+ return -1; -+ -+ /* horz pixel triplets are packed into 32-bit ARGB values */ -+ width /= 3; -+ pitch = width*4; -+ break; -+ -+ case FT_PIXEL_MODE_LCD_V: -+ if ( mode != FT_RENDER_MODE_LCD_V ) -+ return -1; -+ -+ /* vert pixel triplets are packed into 32-bit ARGB values */ -+ height /= 3; -+ pitch = width*4; -+ break; -+ -+ default: /* unsupported source format */ -+ return -1; -+ } -+ -+ target->width = width; -+ target->rows = height; -+ target->pitch = pitch; -+ target->buffer = NULL; -+ -+ return pitch * height; -+} -+ -+/* this functions converts the glyph bitmap found in a FT_GlyphSlot -+ * into a different format (see _compute_xrender_bitmap_size) -+ * -+ * you should call this function after _compute_xrender_bitmap_size -+ * -+ * target :: target bitmap descriptor. Note that its 'buffer' pointer -+ * must point to memory allocated by the caller -+ * -+ * slot :: the glyph slot containing the source bitmap -+ * -+ * mode :: the requested final rendering mode -+ * -+ * bgr :: boolean, set if BGR or VBGR pixel ordering is needed -+ */ -+static void -+_fill_xrender_bitmap( FT_Bitmap* target, -+ FT_GlyphSlot slot, -+ FT_Render_Mode mode, -+ int bgr ) -+{ -+ FT_Bitmap* ftbit = &slot->bitmap; -+ -+ { -+ unsigned char* srcLine = ftbit->buffer; -+ unsigned char* dstLine = target->buffer; -+ int src_pitch = ftbit->pitch; -+ int width = target->width; -+ int height = target->rows; -+ int pitch = target->pitch; -+ int subpixel; -+ int h; -+ -+ subpixel = ( mode == FT_RENDER_MODE_LCD || -+ mode == FT_RENDER_MODE_LCD_V ); -+ -+ if ( src_pitch < 0 ) -+ srcLine -= src_pitch*(ftbit->rows-1); -+ -+ switch ( ftbit->pixel_mode ) -+ { -+ case FT_PIXEL_MODE_MONO: -+ if ( subpixel ) /* convert mono to ARGB32 values */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ -+ for ( x = 0; x < width; x++ ) -+ { -+ if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) ) -+ ((unsigned int*)dstLine)[x] = 0xffffffffU; -+ } -+ } -+ } -+ else if ( mode == FT_RENDER_MODE_NORMAL ) /* convert mono to 8-bit gray */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ -+ for ( x = 0; x < width; x++ ) -+ { -+ if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) ) -+ dstLine[x] = 0xff; -+ } -+ } -+ } -+ else /* copy mono to mono */ -+ { -+ int bytes = (width+7) >> 3; -+ -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ memcpy( dstLine, srcLine, bytes ); -+ } -+ break; -+ -+ case FT_PIXEL_MODE_GRAY: -+ if ( subpixel ) /* convert gray to ARGB32 values */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++ ) -+ { -+ unsigned int pix = srcLine[x]; -+ -+ pix |= (pix << 8); -+ pix |= (pix << 16); -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ else /* copy gray into gray */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ memcpy( dstLine, srcLine, width ); -+ } -+ break; -+ -+ case FT_PIXEL_MODE_LCD: -+ if ( !bgr ) -+ { -+ /* convert horizontal RGB into ARGB32 */ -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 3 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[0] << 16) | -+ ((unsigned int)src[1] << 8) | -+ ((unsigned int)src[2] ) | -+ ((unsigned int)src[1] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ else -+ { -+ /* convert horizontal BGR into ARGB32 */ -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 3 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[2] << 16) | -+ ((unsigned int)src[1] << 8) | -+ ((unsigned int)src[0] ) | -+ ((unsigned int)src[1] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ break; -+ -+ default: /* FT_PIXEL_MODE_LCD_V */ -+ /* convert vertical RGB into ARGB32 */ -+ if ( !bgr ) -+ { -+ for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 1 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[0] << 16) | -+ ((unsigned int)src[src_pitch] << 8) | -+ ((unsigned int)src[src_pitch*2] ) | -+ ((unsigned int)src[src_pitch] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ else -+ { -+ for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 1 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[src_pitch*2] << 16) | -+ ((unsigned int)src[src_pitch] << 8) | -+ ((unsigned int)src[0] ) | -+ ((unsigned int)src[src_pitch] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ } -+ } -+} -+ -+ - _X_EXPORT void - XftFontLoadGlyphs (Display *dpy, - XftFont *pub, -@@ -87,20 +367,14 @@ - unsigned char *bufBitmap = bufLocal; - int bufSize = sizeof (bufLocal); - int size, pitch; -- unsigned char bufLocalRgba[4096]; -- unsigned char *bufBitmapRgba = bufLocalRgba; -- int bufSizeRgba = sizeof (bufLocalRgba); -- int sizergba, pitchrgba, widthrgba; - int width; - int height; - int left, right, top, bottom; -- int hmul = 1; -- int vmul = 1; -- FT_Bitmap ftbit; -- FT_Matrix matrix; -+ FT_Bitmap* ftbit; -+ FT_Bitmap local; - FT_Vector vector; -- Bool subpixel = False; - FT_Face face; -+ FT_Render_Mode mode = FT_RENDER_MODE_MONO; - - if (!info) - return; -@@ -110,24 +384,19 @@ - if (!face) - return; - -- matrix.xx = matrix.yy = 0x10000L; -- matrix.xy = matrix.yx = 0; -- - if (font->info.antialias) - { - switch (font->info.rgba) { - case FC_RGBA_RGB: - case FC_RGBA_BGR: -- matrix.xx *= 3; -- subpixel = True; -- hmul = 3; -+ mode = FT_RENDER_MODE_LCD; - break; - case FC_RGBA_VRGB: - case FC_RGBA_VBGR: -- matrix.yy *= 3; -- vmul = 3; -- subpixel = True; -+ mode = FT_RENDER_MODE_LCD_V; - break; -+ default: -+ mode = FT_RENDER_MODE_NORMAL; - } - } - -@@ -148,7 +417,10 @@ - if (xftg->glyph_memory) - continue; - -+ FT_Library_SetLcdFilter( _XftFTlibrary, font->info.lcd_filter); -+ - error = FT_Load_Glyph (face, glyphindex, font->info.load_flags); -+ - if (error) - { - /* -@@ -181,7 +453,7 @@ - /* - * Compute glyph metrics from FreeType information - */ -- if(font->info.transform && glyphslot->format != ft_glyph_format_bitmap) -+ if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP) - { - /* - * calculate the true width by transforming all four corners. -@@ -260,17 +532,14 @@ - } - } - -- if (font->info.antialias) -- pitch = (width * hmul + 3) & ~3; -- else -- pitch = ((width + 31) & ~31) >> 3; -- -- size = pitch * height * vmul; -+ if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP ) -+ { -+ error = FT_Render_Glyph( face->glyph, mode ); -+ if (error) -+ continue; -+ } - -- xftg->metrics.width = width; -- xftg->metrics.height = height; -- xftg->metrics.x = -TRUNC(left); -- xftg->metrics.y = TRUNC(top); -+ FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE ); - - if (font->info.spacing >= FC_MONO) - { -@@ -310,103 +579,13 @@ - xftg->metrics.yOff = -TRUNC(ROUND(glyphslot->advance.y)); - } - -- /* -- * If the glyph is relatively large (> 1% of server memory), -- * don't send it until necessary -- */ -- if (!need_bitmaps && size > info->max_glyph_memory / 100) -- continue; - -- /* -- * Make sure there's enough buffer space for the glyph -- */ -- if (size > bufSize) -- { -- if (bufBitmap != bufLocal) -- free (bufBitmap); -- bufBitmap = (unsigned char *) malloc (size); -- if (!bufBitmap) -- continue; -- bufSize = size; -- } -- memset (bufBitmap, 0, size); -- -- /* -- * Rasterize into the local buffer -- */ -- switch (glyphslot->format) { -- case ft_glyph_format_outline: -- ftbit.width = width * hmul; -- ftbit.rows = height * vmul; -- ftbit.pitch = pitch; -- if (font->info.antialias) -- ftbit.pixel_mode = ft_pixel_mode_grays; -- else -- ftbit.pixel_mode = ft_pixel_mode_mono; -- -- ftbit.buffer = bufBitmap; -- -- if (subpixel) -- FT_Outline_Transform (&glyphslot->outline, &matrix); -+ // compute the size of the final bitmap -+ ftbit = &glyphslot->bitmap; - -- FT_Outline_Translate ( &glyphslot->outline, -left*hmul, -bottom*vmul ); -- -- FT_Outline_Get_Bitmap( _XftFTlibrary, &glyphslot->outline, &ftbit ); -- break; -- case ft_glyph_format_bitmap: -- if (font->info.antialias) -- { -- unsigned char *srcLine, *dstLine; -- int height; -- int x; -- int h, v; -- -- srcLine = glyphslot->bitmap.buffer; -- dstLine = bufBitmap; -- height = glyphslot->bitmap.rows; -- while (height--) -- { -- for (x = 0; x < glyphslot->bitmap.width; x++) -- { -- /* always MSB bitmaps */ -- unsigned char a = ((srcLine[x >> 3] & (0x80 >> (x & 7))) ? -- 0xff : 0x00); -- if (subpixel) -- { -- for (v = 0; v < vmul; v++) -- for (h = 0; h < hmul; h++) -- dstLine[v * pitch + x*hmul + h] = a; -- } -- else -- dstLine[x] = a; -- } -- dstLine += pitch * vmul; -- srcLine += glyphslot->bitmap.pitch; -- } -- } -- else -- { -- unsigned char *srcLine, *dstLine; -- int h, bytes; -- -- srcLine = glyphslot->bitmap.buffer; -- dstLine = bufBitmap; -- h = glyphslot->bitmap.rows; -- bytes = (glyphslot->bitmap.width + 7) >> 3; -- while (h--) -- { -- memcpy (dstLine, srcLine, bytes); -- dstLine += pitch; -- srcLine += glyphslot->bitmap.pitch; -- } -- } -- break; -- default: -- if (XftDebug() & XFT_DBG_GLYPH) -- printf ("glyph %d is not in a usable format\n", -- (int) glyphindex); -- continue; -- } -+ width = ftbit->width; -+ height = ftbit->rows; -+ pitch = (width+3) & ~3; - - if (XftDebug() & XFT_DBG_GLYPH) - { -@@ -423,29 +602,72 @@ - int x, y; - unsigned char *line; - -- line = bufBitmap; -- for (y = 0; y < height * vmul; y++) -+ line = ftbit->buffer; -+ -+ if (ftbit->pitch < 0) -+ line -= ftbit->pitch*(height-1); -+ -+ for (y = 0; y < height; y++) - { - if (font->info.antialias) - { -- static char den[] = { " .:;=+*#" }; -- for (x = 0; x < pitch; x++) -+ static const char den[] = { " .:;=+*#" }; -+ for (x = 0; x < width; x++) - printf ("%c", den[line[x] >> 5]); - } - else - { -- for (x = 0; x < pitch * 8; x++) -+ for (x = 0; x < width * 8; x++) - { - printf ("%c", line[x>>3] & (1 << (x & 7)) ? '#' : ' '); - } - } - printf ("|\n"); -- line += pitch; -+ line += ftbit->pitch; - } - printf ("\n"); - } - } - -+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode ); -+ if ( size < 0 ) -+ continue; -+ -+ xftg->metrics.width = local.width; -+ xftg->metrics.height = local.rows; -+ xftg->metrics.x = - glyphslot->bitmap_left; -+ xftg->metrics.y = glyphslot->bitmap_top; -+ -+ /* -+ * If the glyph is relatively large (> 1% of server memory), -+ * don't send it until necessary -+ */ -+ if (!need_bitmaps && size > info->max_glyph_memory / 100) -+ continue; -+ -+ /* -+ * Make sure there's enough buffer space for the glyph -+ */ -+ if (size > bufSize) -+ { -+ if (bufBitmap != bufLocal) -+ free (bufBitmap); -+ bufBitmap = (unsigned char *) malloc (size); -+ if (!bufBitmap) -+ continue; -+ bufSize = size; -+ } -+ memset (bufBitmap, 0, size); -+ -+ local.buffer = bufBitmap; -+ -+ _fill_xrender_bitmap( &local, glyphslot, mode, -+ (font->info.rgba == FC_RGBA_BGR || -+ font->info.rgba == FC_RGBA_VBGR ) ); -+ /* -+ * Copy or convert into local buffer -+ */ -+ - /* - * Use the glyph index as the wire encoding; it - * might be more efficient for some locales to map -@@ -455,121 +677,23 @@ - */ - glyph = (Glyph) glyphindex; - -- if (subpixel) -- { -- int x, y; -- unsigned char *in_line, *out_line, *in; -- unsigned int *out; -- unsigned int red, green, blue; -- int rf, gf, bf; -- int s; -- int o, os; -- -- /* -- * Filter the glyph to soften the color fringes -- */ -- widthrgba = width; -- pitchrgba = (widthrgba * 4 + 3) & ~3; -- sizergba = pitchrgba * height; -- -- os = 1; -- switch (font->info.rgba) { -- case FC_RGBA_VRGB: -- os = pitch; -- case FC_RGBA_RGB: -- default: -- rf = 0; -- gf = 1; -- bf = 2; -- break; -- case FC_RGBA_VBGR: -- os = pitch; -- case FC_RGBA_BGR: -- bf = 0; -- gf = 1; -- rf = 2; -- break; -- } -- if (sizergba > bufSizeRgba) -- { -- if (bufBitmapRgba != bufLocalRgba) -- free (bufBitmapRgba); -- bufBitmapRgba = (unsigned char *) malloc (sizergba); -- if (!bufBitmapRgba) -- continue; -- bufSizeRgba = sizergba; -- } -- memset (bufBitmapRgba, 0, sizergba); -- in_line = bufBitmap; -- out_line = bufBitmapRgba; -- for (y = 0; y < height; y++) -- { -- in = in_line; -- out = (unsigned int *) out_line; -- in_line += pitch * vmul; -- out_line += pitchrgba; -- for (x = 0; x < width * hmul; x += hmul) -- { -- red = green = blue = 0; -- o = 0; -- for (s = 0; s < 3; s++) -- { -- red += filters[rf][s]*in[x+o]; -- green += filters[gf][s]*in[x+o]; -- blue += filters[bf][s]*in[x+o]; -- o += os; -- } -- red = red / 65536; -- green = green / 65536; -- blue = blue / 65536; -- *out++ = (green << 24) | (red << 16) | (green << 8) | blue; -- } -- } -- -- xftg->glyph_memory = sizergba + sizeof (XftGlyph); -- if (font->format) -+ xftg->glyph_memory = size + sizeof (XftGlyph); -+ if (font->format) - { - if (!font->glyphset) - font->glyphset = XRenderCreateGlyphSet (dpy, font->format); -- if (ImageByteOrder (dpy) != XftNativeByteOrder ()) -- XftSwapCARD32 ((CARD32 *) bufBitmapRgba, sizergba >> 2); -- XRenderAddGlyphs (dpy, font->glyphset, &glyph, -- &xftg->metrics, 1, -- (char *) bufBitmapRgba, sizergba); -- } -- else -- { -- if (sizergba) -- { -- xftg->bitmap = malloc (sizergba); -- if (xftg->bitmap) -- memcpy (xftg->bitmap, bufBitmapRgba, sizergba); -- } -- else -- xftg->bitmap = NULL; -- } -- } -- else -- { -- xftg->glyph_memory = size + sizeof (XftGlyph); -- if (font->format) -- { -- /* -- * swap bit order around; FreeType is always MSBFirst -- */ -- if (!font->info.antialias) -+ if ( mode == FT_RENDER_MODE_MONO ) - { -+ /* swap bits in each byte */ - if (BitmapBitOrder (dpy) != MSBFirst) - { -- unsigned char *line; -- unsigned char c; -- int i; -+ unsigned char *line = (unsigned char*)bufBitmap; -+ int i = size; - -- line = (unsigned char *) bufBitmap; -- i = size; - while (i--) - { -- c = *line; -+ int c = *line; -+ - c = ((c << 1) & 0xaa) | ((c >> 1) & 0x55); - c = ((c << 2) & 0xcc) | ((c >> 2) & 0x33); - c = ((c << 4) & 0xf0) | ((c >> 4) & 0x0f); -@@ -577,8 +701,12 @@ - } - } - } -- if (!font->glyphset) -- font->glyphset = XRenderCreateGlyphSet (dpy, font->format); -+ else if ( mode != FT_RENDER_MODE_NORMAL ) -+ { -+ /* invert ARGB <=> BGRA */ -+ if (ImageByteOrder (dpy) != XftNativeByteOrder ()) -+ XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2); -+ } - XRenderAddGlyphs (dpy, font->glyphset, &glyph, - &xftg->metrics, 1, - (char *) bufBitmap, size); -@@ -594,7 +722,7 @@ - else - xftg->bitmap = NULL; - } -- } -+ - font->glyph_memory += xftg->glyph_memory; - info->glyph_memory += xftg->glyph_memory; - if (XftDebug() & XFT_DBG_CACHE) -@@ -605,8 +733,6 @@ - } - if (bufBitmap != bufLocal) - free (bufBitmap); -- if (bufBitmapRgba != bufLocalRgba) -- free (bufBitmapRgba); - XftUnlockFace (&font->public); - } - ---- a/src/xftint.h -+++ b/src/xftint.h -@@ -145,6 +145,7 @@ - FcBool antialias; /* doing antialiasing */ - FcBool embolden; /* force emboldening */ - int rgba; /* subpixel order */ -+ int lcd_filter; /* lcd filter */ - FT_Matrix matrix; /* glyph transformation matrix */ - FcBool transform; /* non-identify matrix? */ - FT_Int load_flags; /* glyph load flags */ diff --git a/debian/patches/series b/debian/patches/series deleted file mode 100644 index 232e519..0000000 --- a/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -100-libXft-2.1.10-lcd-filter-3.patch diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 504c56f..0000000 --- a/debian/rules +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/make -f -# debian/rules for the Debian libxft package. -# Copyright © 2004 Scott James Remnant -# Copyright © 2005 Daniel Stone -# Copyright © 2005 David Nusinow - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - -PACKAGE = libxft2 - -include debian/xsfbs/xsfbs.mk - -CFLAGS = -Wall -g -LDFLAGS += -Wl,--hash-style=both -Wl,--as-needed -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif -ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) - NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) - MAKEFLAGS += -j$(NUMJOBS) -endif - -DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) -DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) -ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) - confflags += --build=$(DEB_HOST_GNU_TYPE) -else - confflags += --build=$(DEB_HOST_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) -# confflags += --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE) -endif - -configure: $(STAMP_DIR)/patch - dh_testdir - autoreconf -vfi - -obj-$(DEB_BUILD_GNU_TYPE)/config.status: configure - mkdir -p obj-$(DEB_BUILD_GNU_TYPE) - cd obj-$(DEB_BUILD_GNU_TYPE) && \ - ../configure --prefix=/usr --mandir=\$${prefix}/share/man \ - --infodir=\$${prefix}/share/info $(confflags) \ - CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" - -build: build-stamp -build-stamp: obj-$(DEB_BUILD_GNU_TYPE)/config.status - dh_testdir - - cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) - >$@ - -clean: xsfclean - dh_testdir - dh_testroot - rm -f build-stamp - - rm -f config.cache config.log config.status - rm -f */config.cache */config.log */config.status - rm -f conftest* */conftest* - rm -rf autom4te.cache */autom4te.cache - rm -rf obj-* - rm -f $$(find -name Makefile.in) - rm -f aclocal.m4 config.guess config.h.in config.sub configure - rm -f depcomp install-sh ltmain.sh missing mkinstalldirs - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - cd obj-$(DEB_BUILD_GNU_TYPE) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - -# dh_installdocs - dh_install --sourcedir=debian/tmp --list-missing -# dh_installchangelogs ChangeLog - dh_link - dh_strip --dbg-package=$(PACKAGE)-dbg - dh_compress - dh_fixperms - dh_makeshlibs -V "libxft2 (>> 2.1.1)" - dh_shlibdeps - dh_installdeb - dh_gencontrol - dh_md5sums - dh_builddeb - -# Build architecture-independent files here. -binary-indep: build install -# Nothing to do - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install diff --git a/debian/watch b/debian/watch deleted file mode 100644 index 7ac4fde..0000000 --- a/debian/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=3 -http://xorg.freedesktop.org/releases/individual/lib/ libXft-(.*)\.tar\.gz diff --git a/debian/xsfbs/repack.sh b/debian/xsfbs/repack.sh deleted file mode 100644 index 5935cc9..0000000 --- a/debian/xsfbs/repack.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -set -e - -if ! [ -d debian/prune ]; then - exit 0 -fi - -if [ "x$1" != x--upstream-version ]; then - exit 1 -fi - -version="$2" -filename="$3" - -if [ -z "$version" ] || ! [ -f "$filename" ]; then - exit 1 -fi - -dir="$(pwd)" -tempdir="$(mktemp -d)" - -cd "$tempdir" -tar xf "$dir/$filename" -cat "$dir"/debian/prune/* | while read file; do rm -f */$file; done - -tar czf "$dir/$filename" * -cd "$dir" -rm -rf "$tempdir" -echo "Done pruning upstream tarball" - -exit 0 diff --git a/debian/xsfbs/xsfbs.mk b/debian/xsfbs/xsfbs.mk deleted file mode 100644 index 5e16b10..0000000 --- a/debian/xsfbs/xsfbs.mk +++ /dev/null @@ -1,276 +0,0 @@ -#!/usr/bin/make -f - -# Debian X Strike Force Build System (XSFBS): Make portion - -# Copyright 1996 Stephen Early -# Copyright 1997 Mark Eichin -# Copyright 1998-2005, 2007 Branden Robinson -# Copyright 2005 David Nusinow -# -# Licensed under the GNU General Public License, version 2. See the file -# /usr/share/common-licenses/GPL or . - -# Originally by Stephen Early -# Modified by Mark W. Eichin -# Modified by Adam Heath -# Modified by Branden Robinson -# Modified by Fabio Massimo Di Nitto -# Modified by David Nusinow -# Acknowledgements to Manoj Srivastava. - -# Pass $(DH_OPTIONS) into the environment for debhelper's benefit. -export DH_OPTIONS - -# force quilt to not use ~/.quiltrc and to use debian/patches -QUILT = QUILT_PATCHES=debian/patches quilt --quiltrc /dev/null - -# Set up parameters for the upstream build environment. - -# Determine (source) package name from Debian changelog. -SOURCE_NAME:=$(shell dpkg-parsechangelog -ldebian/changelog \ - | grep '^Source:' | awk '{print $$2}') - -# Determine package version from Debian changelog. -SOURCE_VERSION:=$(shell dpkg-parsechangelog -ldebian/changelog \ - | grep '^Version:' | awk '{print $$2}') - -# Determine upstream version number. -UPSTREAM_VERSION:=$(shell echo $(SOURCE_VERSION) | sed 's/-.*//') - -# Determine the source version without the epoch for make-orig-tar-gz -NO_EPOCH_VER:=$(shell echo $(UPSTREAM_VERSION) | sed 's/^.://') - -# Figure out who's building this package. -BUILDER:=$(shell echo $${DEBEMAIL:-$${EMAIL:-$$(echo $$LOGNAME@$$(cat /etc/mailname 2>/dev/null))}}) - -# Find out if this is an official build; an official build has nothing but -# digits, dots, and/or the codename of a release in the Debian part of the -# version number. Anything else indicates an unofficial build. -OFFICIAL_BUILD:=$(shell VERSION=$(SOURCE_VERSION); if ! expr "$$(echo $${VERSION\#\#*-} | sed 's/\(woody\|sarge\|etch\|lenny\)//g')" : ".*[^0-9.].*" >/dev/null 2>&1; then echo yes; fi) - -# Set up parameters for the Debian build environment. - -# Determine our architecture. -BUILD_ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH) -# Work around some old-time dpkg braindamage. -BUILD_ARCH:=$(subst i486,i386,$(BUILD_ARCH)) -# The DEB_HOST_ARCH variable may be set per the Debian cross-compilation policy. -ifdef DEB_HOST_ARCH - ARCH:=$(DEB_HOST_ARCH) -else - # dpkg-cross sets the ARCH environment variable; if set, use it. - ifdef ARCH - ARCH:=$(ARCH) - else - ARCH:=$(BUILD_ARCH) - endif -endif - -# $(STAMP_DIR) houses stamp files for complex targets. -STAMP_DIR:=stampdir - -# $(DEBTREEDIR) is where all install rules are told (via $(DESTDIR)) to place -# their files. -DEBTREEDIR:=$(CURDIR)/debian/tmp - -# All "important" targets have four lines: -# 1) A target name that is invoked by a package-building tool or the user. -# This consists of a dependency on a "$(STAMP_DIR)/"-prefixed counterpart. -# 2) A line delcaring 1) as a phony target (".PHONY:"). -# 3) A "$(STAMP_DIR)/"-prefixed target which does the actual work, and may -# depend on other targets. -# 4) A line declaring 3) as a member of the $(stampdir_targets) variable; the -# "$(STAMP_DIR)/" prefix is omitted. -# -# This indirection is needed so that the "stamp" files that signify when a rule -# is done can be located in a separate "stampdir". Recall that make has no way -# to know when a goal has been met for a phony target (like "build" or -# "install"). -# -# At the end of each "$(STAMP_DIR)/" target, be sure to run the command ">$@" -# so that the target will not be run again. Removing the file will make Make -# run the target over. - -# All phony targets should be declared as dependencies of .PHONY, even if they -# do not have "($STAMP_DIR)/"-prefixed counterparts. - -# Define a harmless default rule to keep things from going nuts by accident. -.PHONY: default -default: - -# Set up the $(STAMP_DIR) directory. -.PHONY: stampdir -stampdir_targets+=stampdir -stampdir: $(STAMP_DIR)/stampdir -$(STAMP_DIR)/stampdir: - mkdir $(STAMP_DIR) - >$@ - -# Set up the package build directory as quilt expects to find it. -.PHONY: prepare -stampdir_targets+=prepare -prepare: $(STAMP_DIR)/prepare -$(STAMP_DIR)/prepare: $(STAMP_DIR)/log $(STAMP_DIR)/genscripts - >$@ - -.PHONY: log -stampdir_targets+=log -log: $(STAMP_DIR)/log -$(STAMP_DIR)/log: $(STAMP_DIR)/stampdir - mkdir -p $(STAMP_DIR)/log - -# Apply all patches to the upstream source. -.PHONY: patch -stampdir_targets+=patch -patch: $(STAMP_DIR)/patch -$(STAMP_DIR)/patch: $(STAMP_DIR)/prepare - if ! [ `which quilt` ]; then \ - echo "Couldn't find quilt. Please install it or add it to the build-depends for this package."; \ - exit 1; \ - fi; \ - if $(QUILT) next >/dev/null 2>&1; then \ - echo -n "Applying patches..."; \ - if $(QUILT) push -a -v >$(STAMP_DIR)/log/patch 2>&1; then \ - cat $(STAMP_DIR)/log/patch; \ - echo "successful."; \ - else \ - cat $(STAMP_DIR)/log/patch; \ - echo "failed! (check $(STAMP_DIR)/log/patch for details)"; \ - exit 1; \ - fi; \ - else \ - echo "No patches to apply"; \ - fi; \ - >$@ - -# Revert all patches to the upstream source. -.PHONY: unpatch -unpatch: $(STAMP_DIR)/log - rm -f $(STAMP_DIR)/patch - @echo -n "Unapplying patches..."; \ - if $(QUILT) applied >/dev/null 2>/dev/null; then \ - if $(QUILT) pop -a -v >$(STAMP_DIR)/log/unpatch 2>&1; then \ - cat $(STAMP_DIR)/log/unpatch; \ - echo "successful."; \ - else \ - cat $(STAMP_DIR)/log/unpatch; \ - echo "failed! (check $(STAMP_DIR)/log/unpatch for details)"; \ - exit 1; \ - fi; \ - else \ - echo "nothing to do."; \ - fi - -# Clean the generated maintainer scripts. -.PHONY: cleanscripts -cleanscripts: - rm -f $(STAMP_DIR)/genscripts - rm -f debian/*.config \ - debian/*.postinst \ - debian/*.postrm \ - debian/*.preinst \ - debian/*.prerm - -# Clean the package build tree. -.PHONY: xsfclean -xsfclean: cleanscripts unpatch - dh_testdir - rm -rf .pc - rm -rf $(STAMP_DIR) - dh_clean - -# Remove files from the upstream source tree that we don't need, or which have -# licensing problems. It must be run before creating the .orig.tar.gz. -# -# Note: This rule is for Debian package maintainers' convenience, and is not -# needed for conventional build scenarios. -.PHONY: prune-upstream-tree -prune-upstream-tree: - # Ensure we're in the correct directory. - dh_testdir - grep -rvh '^#' debian/prune/ | xargs --no-run-if-empty rm -rf - -# Verify that there are no offsets or fuzz in the patches we apply. -# -# Note: This rule is for Debian package maintainers' convenience, and is not -# needed for conventional build scenarios. -.PHONY: patch-audit -patch-audit: prepare unpatch - @echo -n "Auditing patches..."; \ - >$(STAMP_DIR)/log/patch; \ - FUZZY=; \ - while [ -n "$$($(QUILT) next)" ]; do \ - RESULT=$$($(QUILT) push -v | tee -a $(STAMP_DIR)/log/patch | grep ^Hunk | sed 's/^Hunk.*\(succeeded\|FAILED\).*/\1/');\ - case "$$RESULT" in \ - succeeded) \ - echo "fuzzy patch: $$($(QUILT) top)" \ - | tee -a $(STAMP_DIR)/log/$$($(QUILT) top); \ - FUZZY=yes; \ - ;; \ - FAILED) \ - echo "broken patch: $$($(QUILT) next)" \ - | tee -a $(STAMP_DIR)/log/$$($(QUILT) next); \ - exit 1; \ - ;; \ - esac; \ - done; \ - if [ -n "$$FUZZY" ]; then \ - echo "there were fuzzy patches; please fix."; \ - exit 1; \ - else \ - echo "done."; \ - fi - -# Generate the maintainer scripts. -.PHONY: genscripts -stampdir_targets+=genscripts -genscripts: $(STAMP_DIR)/genscripts -$(STAMP_DIR)/genscripts: $(STAMP_DIR)/stampdir - for FILE in debian/*.config.in \ - debian/*.postinst.in \ - debian/*.postrm.in \ - debian/*.preinst.in \ - debian/*.prerm.in; do \ - if [ -e "$$FILE" ]; then \ - MAINTSCRIPT=$$(echo $$FILE | sed 's/.in$$//'); \ - sed -n '1,/^#INCLUDE_SHELL_LIB#$$/p' <$$FILE \ - | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >$$MAINTSCRIPT.tmp; \ - cat debian/xsfbs/xsfbs.sh >>$$MAINTSCRIPT.tmp; \ - sed -n '/^#INCLUDE_SHELL_LIB#$$/,$$p' <$$FILE \ - | sed -e '/^#INCLUDE_SHELL_LIB#$$/d' >>$$MAINTSCRIPT.tmp; \ - sed -e 's/@SOURCE_VERSION@/$(SOURCE_VERSION)/' \ - -e 's/@OFFICIAL_BUILD@/$(OFFICIAL_BUILD)/' \ - <$$MAINTSCRIPT.tmp >$$MAINTSCRIPT; \ - rm $$MAINTSCRIPT.tmp; \ - fi; \ - done - # Validate syntax of generated shell scripts. - #sh debian/scripts/validate-posix-sh debian/*.config \ - # debian/*.postinst \ - # debian/*.postrm \ - # debian/*.preinst \ - # debian/*.prerm - >$@ - -SERVERMINVERS = $(shell cat /usr/share/xserver-xorg/serverminver 2>/dev/null) -VIDEOABI = $(shell cat /usr/share/xserver-xorg/videoabiver 2>/dev/null) -INPUTABI = $(shell cat /usr/share/xserver-xorg/inputabiver 2>/dev/null) -SERVER_DEPENDS = xserver-xorg-core (>= $(SERVERMINVERS)) -VIDDRIVER_PROVIDES = xserver-xorg-video-$(VIDEOABI) -INPDRIVER_PROVIDES = xserver-xorg-input-$(INPUTABI) -ifeq ($(PACKAGE),) -PACKAGE=$(shell awk '/^Package:/ { print $$2; exit }' < debian/control) -endif - -.PHONY: serverabi -serverabi: install -ifeq ($(SERVERMINVERS),) - @echo error: xserver-xorg-dev needs to be installed - @exit 1 -else - echo "xserver:Depends=$(SERVER_DEPENDS)" >> debian/$(PACKAGE).substvars - echo "xviddriver:Provides=$(VIDDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars - echo "xinpdriver:Provides=$(INPDRIVER_PROVIDES)" >> debian/$(PACKAGE).substvars -endif - -# vim:set noet ai sts=8 sw=8 tw=0: diff --git a/debian/xsfbs/xsfbs.sh b/debian/xsfbs/xsfbs.sh deleted file mode 100644 index 813fd8d..0000000 --- a/debian/xsfbs/xsfbs.sh +++ /dev/null @@ -1,622 +0,0 @@ -# This is the X Strike Force shell library for X Window System package -# maintainer scripts. It serves to define shell functions commonly used by -# such packages, and performs some error checking necessary for proper operation -# of those functions. By itself, it does not "do" much; the maintainer scripts -# invoke the functions defined here to accomplish package installation and -# removal tasks. - -# If you are reading this within a Debian package maintainer script (e.g., -# /var/lib/dpkg/info/PACKAGE.{config,preinst,postinst,prerm,postrm}), you can -# skip past this library by scanning forward in this file to the string -# "GOBSTOPPER". - -SOURCE_VERSION=@SOURCE_VERSION@ -OFFICIAL_BUILD=@OFFICIAL_BUILD@ - -# Use special abnormal exit codes so that problems with this library are more -# easily tracked down. -SHELL_LIB_INTERNAL_ERROR=86 -SHELL_LIB_THROWN_ERROR=74 -SHELL_LIB_USAGE_ERROR=99 - -# old -> new variable names -if [ -z "$DEBUG_XORG_PACKAGE" ] && [ -n "$DEBUG_XFREE86_PACKAGE" ]; then - DEBUG_XORG_PACKAGE="$DEBUG_XFREE86_PACKAGE" -fi -if [ -z "$DEBUG_XORG_DEBCONF" ] && [ -n "$DEBUG_XFREE86_DEBCONF" ]; then - DEBUG_XORG_DEBCONF="$DEBUG_XFREE86_DEBCONF" -fi - -# initial sanity checks -if [ -z "$THIS_PACKAGE" ]; then - cat >&2 < on the World Wide Web for -instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the -"doc-debian" package, or install the "reportbug" package and use the command of -the same name to file a report against version $SOURCE_VERSION of this package. -EOF - exit $SHELL_LIB_USAGE_ERROR -fi - -if [ -z "$THIS_SCRIPT" ]; then - cat >&2 < on the World Wide Web for -instructions, read the file /usr/share/doc/debian/bug-reporting.txt from the -"doc-debian" package, or install the "reportbug" package and use the command of -the same name to file a report against version $SOURCE_VERSION of the -"$THIS_PACKAGE" package. -EOF - exit $SHELL_LIB_USAGE_ERROR -fi - -if [ "$1" = "reconfigure" ] || [ -n "$DEBCONF_RECONFIGURE" ]; then - RECONFIGURE="true" -else - RECONFIGURE= -fi - -if ([ "$1" = "install" ] || [ "$1" = "configure" ]) && [ -z "$2" ]; then - FIRSTINST="yes" -fi - -if [ -z "$RECONFIGURE" ] && [ -z "$FIRSTINST" ]; then - UPGRADE="yes" -fi - -trap "message;\ - message \"Received signal. Aborting $THIS_PACKAGE package $THIS_SCRIPT script.\";\ - message;\ - exit 1" HUP INT QUIT TERM - -reject_nondigits () { - # syntax: reject_nondigits [ operand ... ] - # - # scan operands (typically shell variables whose values cannot be trusted) for - # characters other than decimal digits and barf if any are found - while [ -n "$1" ]; do - # does the operand contain anything but digits? - if ! expr "$1" : "[[:digit:]]\+$" > /dev/null 2>&1; then - # can't use die(), because it wraps message() which wraps this function - echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_nondigits() encountered" \ - "possibly malicious garbage \"$1\"" >&2 - exit $SHELL_LIB_THROWN_ERROR - fi - shift - done -} - -reject_unlikely_path_chars () { - # syntax: reject_unlikely_path_chars [ operand ... ] - # - # scan operands (typically shell variables whose values cannot be trusted) for - # characters unlikely to be seen in a path and which the shell might - # interpret and barf if any are found - while [ -n "$1" ]; do - # does the operand contain any funny characters? - if expr "$1" : '.*[!$&()*;<>?|].*' > /dev/null 2>&1; then - # can't use die(), because I want to avoid forward references - echo "$THIS_PACKAGE $THIS_SCRIPT error: reject_unlikely_path_chars()" \ - "encountered possibly malicious garbage \"$1\"" >&2 - exit $SHELL_LIB_THROWN_ERROR - fi - shift - done -} - -# Query the terminal to establish a default number of columns to use for -# displaying messages to the user. This is used only as a fallback in the -# event the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while -# the script is running, and this cannot, only being calculated once.) -DEFCOLUMNS=$(stty size 2> /dev/null | awk '{print $2}') || true -if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" > /dev/null 2>&1; then - DEFCOLUMNS=80 -fi - -message () { - # pretty-print messages of arbitrary length - reject_nondigits "$COLUMNS" - echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} >&2 -} - -observe () { - # syntax: observe message ... - # - # issue observational message suitable for logging someday when support for - # it exists in dpkg - if [ -n "$DEBUG_XORG_PACKAGE" ]; then - message "$THIS_PACKAGE $THIS_SCRIPT note: $*" - fi -} - -warn () { - # syntax: warn message ... - # - # issue warning message suitable for logging someday when support for - # it exists in dpkg; also send to standard error - message "$THIS_PACKAGE $THIS_SCRIPT warning: $*" -} - -die () { - # syntax: die message ... - # - # exit script with error message - message "$THIS_PACKAGE $THIS_SCRIPT error: $*" - exit $SHELL_LIB_THROWN_ERROR -} - -internal_error () { - # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message - message "internal error: $*" - if [ -n "$OFFICIAL_BUILD" ]; then - message "Please report a bug in the $THIS_SCRIPT script of the" \ - "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ - "Tracking System. Include all messages above that mention the" \ - "$THIS_PACKAGE package. Visit " \ - " on the World Wide Web for" \ - "instructions, read the file" \ - "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ - "package, or install the reportbug package and use the command of" \ - "the same name to file a report." - fi - exit $SHELL_LIB_INTERNAL_ERROR -} - -usage_error () { - message "usage error: $*" - message "Please report a bug in the $THIS_SCRIPT script of the" \ - "$THIS_PACKAGE package, version $SOURCE_VERSION to the Debian Bug" \ - "Tracking System. Include all messages above that mention the" \ - "$THIS_PACKAGE package. Visit " \ - " on the World Wide Web for" \ - "instructions, read the file" \ - "/usr/share/doc/debian/bug-reporting.txt from the doc-debian" \ - "package, or install the reportbug package and use the command of" \ - "the same name to file a report." - exit $SHELL_LIB_USAGE_ERROR -} - -font_update () { - # run $UPDATECMDS in $FONTDIRS - - local dir cmd shortcmd x_font_dir_prefix - - x_font_dir_prefix="/usr/share/fonts/X11" - - if [ -z "$UPDATECMDS" ]; then - usage_error "font_update() called but \$UPDATECMDS not set" - fi - if [ -z "$FONTDIRS" ]; then - usage_error "font_update() called but \$FONTDIRS not set" - fi - - reject_unlikely_path_chars "$UPDATECMDS" - reject_unlikely_path_chars "$FONTDIRS" - - for dir in $FONTDIRS; do - if [ -d "$x_font_dir_prefix/$dir" ]; then - for cmd in $UPDATECMDS; do - if which "$cmd" > /dev/null 2>&1; then - shortcmd=${cmd##*/} - observe "running $shortcmd in $dir font directory" - cmd_opts= - if [ "$shortcmd" = "update-fonts-alias" ]; then - cmd_opts=--x11r7-layout - fi - if [ "$shortcmd" = "update-fonts-dir" ]; then - cmd_opts=--x11r7-layout - fi - if [ "$shortcmd" = "update-fonts-scale" ]; then - cmd_opts=--x11r7-layout - fi - $cmd $cmd_opts $dir || warn "$cmd $cmd_opts $dir" \ - "failed; font directory data may not" \ - "be up to date" - else - warn "$cmd not found; not updating corresponding $dir font" \ - "directory data" - fi - done - else - warn "$dir is not a directory; not updating font directory data" - fi - done -} - -remove_conffile_prepare () { - # syntax: remove_conffile_prepare filename official_md5sum ... - # - # Check a conffile "filename" against a list of canonical MD5 checksums. - # If the file's current MD5 checksum matches one of the "official_md5sum" - # operands provided, then prepare the conffile for removal from the system. - # We defer actual deletion until the package is configured so that we can - # roll this operation back if package installation fails. - # - # Call this function from a preinst script in the event $1 is "upgrade" or - # "install" and verify $2 to ensure the package is being upgraded from a - # version (or installed over a version removed-but-not-purged) prior to the - # one in which the conffile was obsoleted. - - local conffile current_checksum - - # validate arguments - if [ $# -lt 2 ]; then - usage_error "remove_conffile_prepare() called with wrong number of" \ - "arguments; expected at least 2, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - conffile="$1" - shift - - # does the conffile even exist? - if [ -e "$conffile" ]; then - # calculate its checksum - current_checksum=$(md5sum < "$conffile" | sed 's/[[:space:]].*//') - # compare it to each supplied checksum - while [ -n "$1" ]; do - if [ "$current_checksum" = "$1" ]; then - # we found a match; move the confffile and stop looking - observe "preparing obsolete conffile $conffile for removal" - mv "$conffile" "$conffile.$THIS_PACKAGE-tmp" - break - fi - shift - done - fi -} - -remove_conffile_lookup () { - # syntax: remove_conffile_lookup package filename - # - # Lookup the md5sum of a conffile in dpkg's database, and prepare for removal - # if it matches the actual file's md5sum. - # - # Call this function when you would call remove_conffile_prepare but only - # want to check against dpkg's status database instead of known checksums. - - local package conffile old_md5sum - - # validate arguments - if [ $# -ne 2 ]; then - usage_error "remove_conffile_lookup() called with wrong number of" \ - "arguments; expected 1, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - package="$1" - conffile="$2" - - if ! [ -e "$conffile" ]; then - return - fi - old_md5sum="$(dpkg-query -W -f='${Conffiles}' "$package" | \ - awk '{ if (match($0, "^ '"$conffile"' ")) print $2}')" - if [ -n "$old_md5sum" ]; then - remove_conffile_prepare "$conffile" "$old_md5sum" - fi -} - -remove_conffile_commit () { - # syntax: remove_conffile_commit filename - # - # Complete the removal of a conffile "filename" that has become obsolete. - # - # Call this function from a postinst script after having used - # remove_conffile_prepare() in the preinst. - - local conffile - - # validate arguments - if [ $# -ne 1 ]; then - usage_error "remove_conffile_commit() called with wrong number of" \ - "arguments; expected 1, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - conffile="$1" - - # if the temporary file created by remove_conffile_prepare() exists, remove it - if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then - observe "committing removal of obsolete conffile $conffile" - rm "$conffile.$THIS_PACKAGE-tmp" - fi -} - -remove_conffile_rollback () { - # syntax: remove_conffile_rollback filename - # - # Roll back the removal of a conffile "filename". - # - # Call this function from a postrm script in the event $1 is "abort-upgrade" - # or "abort-install" is after having used remove_conffile_prepare() in the - # preinst. - - local conffile - - # validate arguments - if [ $# -ne 1 ]; then - usage_error "remove_conffile_rollback() called with wrong number of" \ - "arguments; expected 1, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - conffile="$1" - - # if the temporary file created by remove_conffile_prepare() exists, move it - # back - if [ -e "$conffile.$THIS_PACKAGE-tmp" ]; then - observe "rolling back removal of obsolete conffile $conffile" - mv "$conffile.$THIS_PACKAGE-tmp" "$conffile" - fi -} - -replace_conffile_with_symlink_prepare () { - # syntax: replace_conffile_with_symlink_prepare oldfilename newfilename \ - # official_md5sum ... - # - # Check a conffile "oldfilename" against a list of canonical MD5 checksums. - # If the file's current MD5 checksum matches one of the "official_md5sum" - # operands provided, then prepare the conffile for removal from the system. - # We defer actual deletion until the package is configured so that we can - # roll this operation back if package installation fails. Otherwise copy it - # to newfilename and let dpkg handle it through conffiles mechanism. - # - # Call this function from a preinst script in the event $1 is "upgrade" or - # "install" and verify $2 to ensure the package is being upgraded from a - # version (or installed over a version removed-but-not-purged) prior to the - # one in which the conffile was obsoleted. - - local conffile current_checksum - - # validate arguments - if [ $# -lt 3 ]; then - usage_error "replace_conffile_with_symlink_prepare() called with wrong" \ - " number of arguments; expected at least 3, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - oldconffile="$1" - shift - newconffile="$1" - shift - - remove_conffile_prepare "$_oldconffile" "$@" - # If $oldconffile still exists, then md5sums didn't match. - # Copy it to new one. - if [ -f "$oldconffile" ]; then - cp "$oldconffile" "$newconffile" - fi - -} - -replace_conffile_with_symlink_commit () { - # syntax: replace_conffile_with_symlink_commit oldfilename - # - # Complete the removal of a conffile "oldfilename" that has been - # replaced by a symlink. - # - # Call this function from a postinst script after having used - # replace_conffile_with_symlink_prepare() in the preinst. - - local conffile - - # validate arguments - if [ $# -ne 1 ]; then - usage_error "replace_conffile_with_symlink_commit() called with wrong" \ - "number of arguments; expected 1, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - conffile="$1" - - remove_conffile_commit "$conffile" -} - -replace_conffile_with_symlink_rollback () { - # syntax: replace_conffile_with_symlink_rollback oldfilename newfilename - # - # Roll back the replacing of a conffile "oldfilename" with symlink to - # "newfilename". - # - # Call this function from a postrm script in the event $1 is "abort-upgrade" - # or "abort-install" and verify $2 to ensure the package failed to upgrade - # from a version (or install over a version removed-but-not-purged) prior - # to the one in which the conffile was obsoleted. - # You should have used replace_conffile_with_symlink_prepare() in the - # preinst. - - local conffile - - # validate arguments - if [ $# -ne 2 ]; then - usage_error "replace_conffile_with_symlink_rollback() called with wrong" \ - "number of arguments; expected 2, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - oldconffile="$1" - newconffile="$2" - - remove_conffile_rollback "$_oldconffile" - if [ -f "$newconffile" ]; then - rm "$newconffile" - fi -} - -run () { - # syntax: run command [ argument ... ] - # - # Run specified command with optional arguments and report its exit status. - # Useful for commands whose exit status may be nonzero, but still acceptable, - # or commands whose failure is not fatal to us. - # - # NOTE: Do *not* use this function with db_get or db_metaget commands; in - # those cases the return value of the debconf command *must* be checked - # before the string returned by debconf is used for anything. - - local retval - - # validate arguments - if [ $# -lt 1 ]; then - usage_error "run() called with wrong number of arguments; expected at" \ - "least 1, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - "$@" || retval=$? - - if [ ${retval:-0} -ne 0 ]; then - observe "command \"$*\" exited with status $retval" - fi -} - -make_symlink_sane () { - # syntax: make_symlink_sane symlink target - # - # Ensure that the symbolic link symlink exists, and points to target. - # - # If symlink does not exist, create it and point it at target. - # - # If symlink exists but is not a symbolic link, back it up. - # - # If symlink exists, is a symbolic link, but points to the wrong location, fix - # it. - # - # If symlink exists, is a symbolic link, and already points to target, do - # nothing. - # - # This function wouldn't be needed if ln had an -I, --idempotent option. - - # Validate arguments. - if [ $# -ne 2 ]; then - usage_error "make_symlink_sane() called with wrong number of arguments;" \ - "expected 2, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - # We could just use the positional parameters as-is, but that makes things - # harder to follow. - local symlink target - - symlink="$1" - target="$2" - - if [ -L "$symlink" ] && [ "$(readlink "$symlink")" = "$target" ]; then - observe "link from $symlink to $target already exists" - else - observe "creating symbolic link from $symlink to $target" - mkdir -p "${target%/*}" "${symlink%/*}" - ln -s -b -S ".dpkg-old" "$target" "$symlink" - fi -} - -migrate_dir_to_symlink () { - # syntax: migrate_dir_to_symlink old_location new_location - # - # Per Debian Policy section 6.5.4, "A directory will never be replaced by a - # symbolic link to a directory or vice versa; instead, the existing state - # (symlink or not) will be left alone and dpkg will follow the symlink if - # there is one." - # - # We have to do it ourselves. - # - # This function moves the contents of old_location, a directory, into - # new_location, a directory, then makes old_location a symbolic link to - # new_location. - # - # old_location need not exist, but if it does, it must be a directory (or a - # symlink to a directory). If it is not, it is backed up. If new_location - # exists already and is not a directory, it is backed up. - # - # This function should be called from a package's preinst so that other - # packages unpacked after this one --- but before this package's postinst runs - # --- are unpacked into new_location even if their payloads contain - # old_location filespecs. - - # Validate arguments. - if [ $# -ne 2 ]; then - usage_error "migrate_dir_to_symlink() called with wrong number of" - "arguments; expected 2, got $#" - exit $SHELL_LIB_USAGE_ERROR - fi - - # We could just use the positional parameters as-is, but that makes things - # harder to follow. - local new old - - old="$1" - new="$2" - - # Is old location a symlink? - if [ -L "$old" ]; then - # Does it already point to new location? - if [ "$(readlink "$old")" = "$new" ]; then - # Nothing to do; migration has already been done. - observe "migration of $old to $new already done" - return 0 - else - # Back it up. - warn "backing up symbolic link $old as $old.dpkg-old" - mv -b "$old" "$old.dpkg-old" - fi - fi - - # Does old location exist, but is not a directory? - if [ -e "$old" ] && ! [ -d "$old" ]; then - # Back it up. - warn "backing up non-directory $old as $old.dpkg-old" - mv -b "$old" "$old.dpkg-old" - fi - - observe "migrating $old to $new" - - # Is new location a symlink? - if [ -L "$new" ]; then - # Does it point the wrong way, i.e., back to where we're migrating from? - if [ "$(readlink "$new")" = "$old" ]; then - # Get rid of it. - observe "removing symbolic link $new which points to $old" - rm "$new" - else - # Back it up. - warn "backing up symbolic link $new as $new.dpkg-old" - mv -b "$new" "$new.dpkg-old" - fi - fi - - # Does new location exist, but is not a directory? - if [ -e "$new" ] && ! [ -d "$new" ]; then - warn "backing up non-directory $new as $new.dpkg-old" - mv -b "$new" "$new.dpkg-old" - fi - - # Create new directory if it does not yet exist. - if ! [ -e "$new" ]; then - observe "creating $new" - mkdir -p "$new" - fi - - # Copy files in old location to new location. Back up any filenames that - # already exist in the new location with the extension ".dpkg-old". - observe "copying files from $old to $new" - if ! (cd "$old" && cp -a -b -S ".dpkg-old" . "$new"); then - die "error(s) encountered while copying files from $old to $new" - fi - - # Remove files at old location. - observe "removing $old" - rm -r "$old" - - # Create symlink from old location to new location. - make_symlink_sane "$old" "$new" -} - -# vim:set ai et sw=2 ts=2 tw=80: - -# GOBSTOPPER: The X Strike Force shell library ends here. diff --git a/include/X11/Xft/Xft.h b/include/X11/Xft/Xft.h old mode 100755 new mode 100644 index 1d68ad9..a854fc5 --- a/include/X11/Xft/Xft.h +++ b/include/X11/Xft/Xft.h @@ -29,8 +29,8 @@ */ /* #undef will be substituted by configure */ #define XFT_MAJOR 2 -#define XFT_MINOR 2 -#define XFT_REVISION 0 +#define XFT_MINOR 3 +#define XFT_REVISION 1 #define XFT_VERSION ((XFT_MAJOR * 10000) + (XFT_MINOR * 100) + (XFT_REVISION)) #define XftVersion XFT_VERSION @@ -105,7 +105,7 @@ typedef struct _XftGlyphFontSpec { _XFUNCPROTOBEGIN - + /* xftcolor.c */ Bool XftColorAllocName (Display *dpy, @@ -130,13 +130,13 @@ XftColorFree (Display *dpy, /* xftdpy.c */ Bool XftDefaultHasRender (Display *dpy); - + Bool XftDefaultSet (Display *dpy, FcPattern *defaults); void XftDefaultSubstitute (Display *dpy, int screen, FcPattern *pattern); - + /* xftdraw.c */ XftDraw * @@ -150,7 +150,7 @@ XftDrawCreateBitmap (Display *dpy, Pixmap bitmap); XftDraw * -XftDrawCreateAlpha (Display *dpy, +XftDrawCreateAlpha (Display *dpy, Pixmap pixmap, int depth); @@ -192,7 +192,7 @@ void XftDrawString8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, - int x, + int x, int y, _Xconst FcChar8 *string, int len); @@ -219,7 +219,7 @@ void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, - int x, + int x, int y, _Xconst FcChar8 *string, int len); @@ -263,7 +263,7 @@ XftDrawGlyphFontSpec (XftDraw *draw, void XftDrawRect (XftDraw *draw, _Xconst XftColor *color, - int x, + int x, int y, unsigned int width, unsigned int height); @@ -297,35 +297,35 @@ XftGlyphExtents (Display *dpy, void XftTextExtents8 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, int len, XGlyphInfo *extents); void XftTextExtents16 (Display *dpy, XftFont *pub, - _Xconst FcChar16 *string, + _Xconst FcChar16 *string, int len, XGlyphInfo *extents); void XftTextExtents32 (Display *dpy, XftFont *pub, - _Xconst FcChar32 *string, + _Xconst FcChar32 *string, int len, XGlyphInfo *extents); - + void XftTextExtentsUtf8 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, int len, XGlyphInfo *extents); void XftTextExtentsUtf16 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, FcEndian endian, int len, XGlyphInfo *extents); @@ -367,8 +367,8 @@ FcBool XftFontInfoEqual (_Xconst XftFontInfo *a, _Xconst XftFontInfo *b); XftFont * -XftFontOpenInfo (Display *dpy, - FcPattern *pattern, +XftFontOpenInfo (Display *dpy, + FcPattern *pattern, XftFontInfo *fi); XftFont * @@ -411,12 +411,12 @@ FcBool XftCharExists (Display *dpy, XftFont *pub, FcChar32 ucs4); - + FT_UInt -XftCharIndex (Display *dpy, +XftCharIndex (Display *dpy, XftFont *pub, FcChar32 ucs4); - + /* xftinit.c */ FcBool XftInit (_Xconst char *config); @@ -432,7 +432,7 @@ XftListFonts (Display *dpy, ...) _X_SENTINEL(0); /* xftname.c */ -FcPattern +FcPattern *XftNameParse (_Xconst char *name); /* xftrender.c */ @@ -466,7 +466,7 @@ XftCharSpecRender (Display *dpy, Picture src, XftFont *pub, Picture dst, - int srcx, + int srcx, int srcy, _Xconst XftCharSpec *chars, int len); @@ -612,7 +612,7 @@ XftTextRenderUtf16 (Display *dpy, /* xftxlfd.c */ FcPattern * XftXlfdParse (_Xconst char *xlfd_orig, Bool ignore_scalable, Bool complete); - + _XFUNCPROTOEND #endif /* _XFT_H_ */ diff --git a/include/X11/Xft/Xft.h.in b/include/X11/Xft/Xft.h.in old mode 100755 new mode 100644 index 490945f..9b3b475 --- a/include/X11/Xft/Xft.h.in +++ b/include/X11/Xft/Xft.h.in @@ -104,7 +104,7 @@ typedef struct _XftGlyphFontSpec { _XFUNCPROTOBEGIN - + /* xftcolor.c */ Bool XftColorAllocName (Display *dpy, @@ -129,13 +129,13 @@ XftColorFree (Display *dpy, /* xftdpy.c */ Bool XftDefaultHasRender (Display *dpy); - + Bool XftDefaultSet (Display *dpy, FcPattern *defaults); void XftDefaultSubstitute (Display *dpy, int screen, FcPattern *pattern); - + /* xftdraw.c */ XftDraw * @@ -149,7 +149,7 @@ XftDrawCreateBitmap (Display *dpy, Pixmap bitmap); XftDraw * -XftDrawCreateAlpha (Display *dpy, +XftDrawCreateAlpha (Display *dpy, Pixmap pixmap, int depth); @@ -191,7 +191,7 @@ void XftDrawString8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, - int x, + int x, int y, _Xconst FcChar8 *string, int len); @@ -218,7 +218,7 @@ void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, - int x, + int x, int y, _Xconst FcChar8 *string, int len); @@ -262,7 +262,7 @@ XftDrawGlyphFontSpec (XftDraw *draw, void XftDrawRect (XftDraw *draw, _Xconst XftColor *color, - int x, + int x, int y, unsigned int width, unsigned int height); @@ -296,35 +296,35 @@ XftGlyphExtents (Display *dpy, void XftTextExtents8 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, int len, XGlyphInfo *extents); void XftTextExtents16 (Display *dpy, XftFont *pub, - _Xconst FcChar16 *string, + _Xconst FcChar16 *string, int len, XGlyphInfo *extents); void XftTextExtents32 (Display *dpy, XftFont *pub, - _Xconst FcChar32 *string, + _Xconst FcChar32 *string, int len, XGlyphInfo *extents); - + void XftTextExtentsUtf8 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, int len, XGlyphInfo *extents); void XftTextExtentsUtf16 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, FcEndian endian, int len, XGlyphInfo *extents); @@ -366,8 +366,8 @@ FcBool XftFontInfoEqual (_Xconst XftFontInfo *a, _Xconst XftFontInfo *b); XftFont * -XftFontOpenInfo (Display *dpy, - FcPattern *pattern, +XftFontOpenInfo (Display *dpy, + FcPattern *pattern, XftFontInfo *fi); XftFont * @@ -410,12 +410,12 @@ FcBool XftCharExists (Display *dpy, XftFont *pub, FcChar32 ucs4); - + FT_UInt -XftCharIndex (Display *dpy, +XftCharIndex (Display *dpy, XftFont *pub, FcChar32 ucs4); - + /* xftinit.c */ FcBool XftInit (_Xconst char *config); @@ -431,7 +431,7 @@ XftListFonts (Display *dpy, ...) _X_SENTINEL(0); /* xftname.c */ -FcPattern +FcPattern *XftNameParse (_Xconst char *name); /* xftrender.c */ @@ -465,7 +465,7 @@ XftCharSpecRender (Display *dpy, Picture src, XftFont *pub, Picture dst, - int srcx, + int srcx, int srcy, _Xconst XftCharSpec *chars, int len); @@ -611,7 +611,7 @@ XftTextRenderUtf16 (Display *dpy, /* xftxlfd.c */ FcPattern * XftXlfdParse (_Xconst char *xlfd_orig, Bool ignore_scalable, Bool complete); - + _XFUNCPROTOEND #endif /* _XFT_H_ */ diff --git a/man/Makefile.am b/man/Makefile.am old mode 100755 new mode 100644 diff --git a/man/Xft.man b/man/Xft.man old mode 100755 new mode 100644 diff --git a/packaging/100-libXft-2.1.10-lcd-filter-3.patch b/packaging/100-libXft-2.1.10-lcd-filter-3.patch deleted file mode 100644 index 09189d1..0000000 --- a/packaging/100-libXft-2.1.10-lcd-filter-3.patch +++ /dev/null @@ -1,844 +0,0 @@ ---- a/src/xftdpy.c -+++ b/src/xftdpy.c -@@ -369,6 +369,10 @@ - goto bail1; - if (!_XftDefaultInitInteger (dpy, pat, FC_RGBA)) - goto bail1; -+#ifdef FC_LCD_FILTER -+ if (!_XftDefaultInitInteger (dpy, pat, FC_LCD_FILTER)) -+ goto bail1; -+#endif - if (!_XftDefaultInitBool (dpy, pat, FC_ANTIALIAS)) - goto bail1; - #ifdef FC_EMBOLDEN -@@ -521,6 +525,14 @@ - XftDefaultGetInteger (dpy, FC_RGBA, screen, - subpixel)); - } -+#ifdef FC_LCD_FILTER -+ if (FcPatternGet (pattern, FC_LCD_FILTER, 0, &v) == FcResultNoMatch) -+ { -+ FcPatternAddInteger (pattern, FC_LCD_FILTER, -+ XftDefaultGetInteger (dpy, FC_LCD_FILTER, screen, -+ FC_LCD_DEFAULT)); -+ } -+#endif - if (FcPatternGet (pattern, FC_MINSPACE, 0, &v) == FcResultNoMatch) - { - FcPatternAddBool (pattern, FC_MINSPACE, ---- a/src/xftfreetype.c -+++ b/src/xftfreetype.c -@@ -469,6 +469,21 @@ - goto bail1; - } - -+#ifdef FC_LCD_FILTER -+ /* -+ * Get lcd_filter value -+ */ -+ switch (FcPatternGetInteger (pattern, FC_LCD_FILTER, 0, &fi->lcd_filter)) { -+ case FcResultNoMatch: -+ fi->lcd_filter = FC_LCD_DEFAULT; -+ break; -+ case FcResultMatch: -+ break; -+ default: -+ goto bail1; -+ } -+#endif -+ - /* - * Get matrix and transform values - */ ---- a/src/xftglyphs.c -+++ b/src/xftglyphs.c -@@ -21,27 +21,18 @@ - */ - - #include "xftint.h" --#include - - #if HAVE_FT_GLYPHSLOT_EMBOLDEN - #include - #endif - --static const int filters[3][3] = { -- /* red */ --#if 0 --{ 65538*4/7,65538*2/7,65538*1/7 }, -- /* green */ --{ 65536*1/4, 65536*2/4, 65537*1/4 }, -- /* blue */ --{ 65538*1/7,65538*2/7,65538*4/7 }, -+#if FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH < 20202 -+# error "FreeType 2.2.2 or later required to compile this version of libXft" - #endif --{ 65538*9/13,65538*3/13,65538*1/13 }, -- /* green */ --{ 65538*1/6, 65538*4/6, 65538*1/6 }, -- /* blue */ --{ 65538*1/13,65538*3/13,65538*9/13 }, --}; -+ -+#include FT_OUTLINE_H -+#include FT_LCD_FILTER_H -+#include FT_SYNTHESIS_H - - /* - * Validate the memory info for a font -@@ -69,6 +60,295 @@ - font->glyph_memory, glyph_memory); - } - -+ -+/* we sometimes need to convert the glyph bitmap in a FT_GlyphSlot -+ * into a different format. For example, we want to convert a -+ * FT_PIXEL_MODE_LCD or FT_PIXEL_MODE_LCD_V bitmap into a 32-bit -+ * ARGB or ABGR bitmap. -+ * -+ * this function prepares a target descriptor for this operation. -+ * -+ * input :: target bitmap descriptor. The function will set its -+ * 'width', 'rows' and 'pitch' fields, and only these -+ * -+ * slot :: the glyph slot containing the source bitmap. this -+ * function assumes that slot->format == FT_GLYPH_FORMAT_BITMAP -+ * -+ * mode :: the requested final rendering mode. supported values are -+ * MONO, NORMAL (i.e. gray), LCD and LCD_V -+ * -+ * the function returns the size in bytes of the corresponding buffer, -+ * it's up to the caller to allocate the corresponding memory block -+ * before calling _fill_xrender_bitmap -+ * -+ * it also returns -1 in case of error (e.g. incompatible arguments, -+ * like trying to convert a gray bitmap into a monochrome one) -+ */ -+static int -+_compute_xrender_bitmap_size( FT_Bitmap* target, -+ FT_GlyphSlot slot, -+ FT_Render_Mode mode ) -+{ -+ FT_Bitmap* ftbit; -+ int width, height, pitch; -+ -+ if ( slot->format != FT_GLYPH_FORMAT_BITMAP ) -+ return -1; -+ -+ // compute the size of the final bitmap -+ ftbit = &slot->bitmap; -+ -+ width = ftbit->width; -+ height = ftbit->rows; -+ pitch = (width+3) & ~3; -+ -+ switch ( ftbit->pixel_mode ) -+ { -+ case FT_PIXEL_MODE_MONO: -+ if ( mode == FT_RENDER_MODE_MONO ) -+ { -+ pitch = (((width+31) & ~31) >> 3); -+ break; -+ } -+ /* fall-through */ -+ -+ case FT_PIXEL_MODE_GRAY: -+ if ( mode == FT_RENDER_MODE_LCD || -+ mode == FT_RENDER_MODE_LCD_V ) -+ { -+ /* each pixel is replicated into a 32-bit ARGB value */ -+ pitch = width*4; -+ } -+ break; -+ -+ case FT_PIXEL_MODE_LCD: -+ if ( mode != FT_RENDER_MODE_LCD ) -+ return -1; -+ -+ /* horz pixel triplets are packed into 32-bit ARGB values */ -+ width /= 3; -+ pitch = width*4; -+ break; -+ -+ case FT_PIXEL_MODE_LCD_V: -+ if ( mode != FT_RENDER_MODE_LCD_V ) -+ return -1; -+ -+ /* vert pixel triplets are packed into 32-bit ARGB values */ -+ height /= 3; -+ pitch = width*4; -+ break; -+ -+ default: /* unsupported source format */ -+ return -1; -+ } -+ -+ target->width = width; -+ target->rows = height; -+ target->pitch = pitch; -+ target->buffer = NULL; -+ -+ return pitch * height; -+} -+ -+/* this functions converts the glyph bitmap found in a FT_GlyphSlot -+ * into a different format (see _compute_xrender_bitmap_size) -+ * -+ * you should call this function after _compute_xrender_bitmap_size -+ * -+ * target :: target bitmap descriptor. Note that its 'buffer' pointer -+ * must point to memory allocated by the caller -+ * -+ * slot :: the glyph slot containing the source bitmap -+ * -+ * mode :: the requested final rendering mode -+ * -+ * bgr :: boolean, set if BGR or VBGR pixel ordering is needed -+ */ -+static void -+_fill_xrender_bitmap( FT_Bitmap* target, -+ FT_GlyphSlot slot, -+ FT_Render_Mode mode, -+ int bgr ) -+{ -+ FT_Bitmap* ftbit = &slot->bitmap; -+ -+ { -+ unsigned char* srcLine = ftbit->buffer; -+ unsigned char* dstLine = target->buffer; -+ int src_pitch = ftbit->pitch; -+ int width = target->width; -+ int height = target->rows; -+ int pitch = target->pitch; -+ int subpixel; -+ int h; -+ -+ subpixel = ( mode == FT_RENDER_MODE_LCD || -+ mode == FT_RENDER_MODE_LCD_V ); -+ -+ if ( src_pitch < 0 ) -+ srcLine -= src_pitch*(ftbit->rows-1); -+ -+ switch ( ftbit->pixel_mode ) -+ { -+ case FT_PIXEL_MODE_MONO: -+ if ( subpixel ) /* convert mono to ARGB32 values */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ -+ for ( x = 0; x < width; x++ ) -+ { -+ if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) ) -+ ((unsigned int*)dstLine)[x] = 0xffffffffU; -+ } -+ } -+ } -+ else if ( mode == FT_RENDER_MODE_NORMAL ) /* convert mono to 8-bit gray */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ -+ for ( x = 0; x < width; x++ ) -+ { -+ if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) ) -+ dstLine[x] = 0xff; -+ } -+ } -+ } -+ else /* copy mono to mono */ -+ { -+ int bytes = (width+7) >> 3; -+ -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ memcpy( dstLine, srcLine, bytes ); -+ } -+ break; -+ -+ case FT_PIXEL_MODE_GRAY: -+ if ( subpixel ) /* convert gray to ARGB32 values */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++ ) -+ { -+ unsigned int pix = srcLine[x]; -+ -+ pix |= (pix << 8); -+ pix |= (pix << 16); -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ else /* copy gray into gray */ -+ { -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ memcpy( dstLine, srcLine, width ); -+ } -+ break; -+ -+ case FT_PIXEL_MODE_LCD: -+ if ( !bgr ) -+ { -+ /* convert horizontal RGB into ARGB32 */ -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 3 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[0] << 16) | -+ ((unsigned int)src[1] << 8) | -+ ((unsigned int)src[2] ) | -+ ((unsigned int)src[1] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ else -+ { -+ /* convert horizontal BGR into ARGB32 */ -+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 3 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[2] << 16) | -+ ((unsigned int)src[1] << 8) | -+ ((unsigned int)src[0] ) | -+ ((unsigned int)src[1] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ break; -+ -+ default: /* FT_PIXEL_MODE_LCD_V */ -+ /* convert vertical RGB into ARGB32 */ -+ if ( !bgr ) -+ { -+ for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 1 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[0] << 16) | -+ ((unsigned int)src[src_pitch] << 8) | -+ ((unsigned int)src[src_pitch*2] ) | -+ ((unsigned int)src[src_pitch] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ else -+ { -+ for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch ) -+ { -+ int x; -+ unsigned char* src = srcLine; -+ unsigned int* dst = (unsigned int*)dstLine; -+ -+ for ( x = 0; x < width; x++, src += 1 ) -+ { -+ unsigned int pix; -+ -+ pix = ((unsigned int)src[src_pitch*2] << 16) | -+ ((unsigned int)src[src_pitch] << 8) | -+ ((unsigned int)src[0] ) | -+ ((unsigned int)src[src_pitch] << 24) ; -+ -+ dst[x] = pix; -+ } -+ } -+ } -+ } -+ } -+} -+ -+ - _X_EXPORT void - XftFontLoadGlyphs (Display *dpy, - XftFont *pub, -@@ -87,20 +367,14 @@ - unsigned char *bufBitmap = bufLocal; - int bufSize = sizeof (bufLocal); - int size, pitch; -- unsigned char bufLocalRgba[4096]; -- unsigned char *bufBitmapRgba = bufLocalRgba; -- int bufSizeRgba = sizeof (bufLocalRgba); -- int sizergba, pitchrgba, widthrgba; - int width; - int height; - int left, right, top, bottom; -- int hmul = 1; -- int vmul = 1; -- FT_Bitmap ftbit; -- FT_Matrix matrix; -+ FT_Bitmap* ftbit; -+ FT_Bitmap local; - FT_Vector vector; -- Bool subpixel = False; - FT_Face face; -+ FT_Render_Mode mode = FT_RENDER_MODE_MONO; - - if (!info) - return; -@@ -110,24 +384,19 @@ - if (!face) - return; - -- matrix.xx = matrix.yy = 0x10000L; -- matrix.xy = matrix.yx = 0; -- - if (font->info.antialias) - { - switch (font->info.rgba) { - case FC_RGBA_RGB: - case FC_RGBA_BGR: -- matrix.xx *= 3; -- subpixel = True; -- hmul = 3; -+ mode = FT_RENDER_MODE_LCD; - break; - case FC_RGBA_VRGB: - case FC_RGBA_VBGR: -- matrix.yy *= 3; -- vmul = 3; -- subpixel = True; -+ mode = FT_RENDER_MODE_LCD_V; - break; -+ default: -+ mode = FT_RENDER_MODE_NORMAL; - } - } - -@@ -148,7 +417,10 @@ - if (xftg->glyph_memory) - continue; - -+ FT_Library_SetLcdFilter( _XftFTlibrary, font->info.lcd_filter); -+ - error = FT_Load_Glyph (face, glyphindex, font->info.load_flags); -+ - if (error) - { - /* -@@ -181,7 +453,7 @@ - /* - * Compute glyph metrics from FreeType information - */ -- if(font->info.transform && glyphslot->format != ft_glyph_format_bitmap) -+ if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP) - { - /* - * calculate the true width by transforming all four corners. -@@ -260,17 +532,14 @@ - } - } - -- if (font->info.antialias) -- pitch = (width * hmul + 3) & ~3; -- else -- pitch = ((width + 31) & ~31) >> 3; -- -- size = pitch * height * vmul; -+ if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP ) -+ { -+ error = FT_Render_Glyph( face->glyph, mode ); -+ if (error) -+ continue; -+ } - -- xftg->metrics.width = width; -- xftg->metrics.height = height; -- xftg->metrics.x = -TRUNC(left); -- xftg->metrics.y = TRUNC(top); -+ FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE ); - - if (font->info.spacing >= FC_MONO) - { -@@ -310,103 +579,13 @@ - xftg->metrics.yOff = -TRUNC(ROUND(glyphslot->advance.y)); - } - -- /* -- * If the glyph is relatively large (> 1% of server memory), -- * don't send it until necessary -- */ -- if (!need_bitmaps && size > info->max_glyph_memory / 100) -- continue; - -- /* -- * Make sure there's enough buffer space for the glyph -- */ -- if (size > bufSize) -- { -- if (bufBitmap != bufLocal) -- free (bufBitmap); -- bufBitmap = (unsigned char *) malloc (size); -- if (!bufBitmap) -- continue; -- bufSize = size; -- } -- memset (bufBitmap, 0, size); -- -- /* -- * Rasterize into the local buffer -- */ -- switch (glyphslot->format) { -- case ft_glyph_format_outline: -- ftbit.width = width * hmul; -- ftbit.rows = height * vmul; -- ftbit.pitch = pitch; -- if (font->info.antialias) -- ftbit.pixel_mode = ft_pixel_mode_grays; -- else -- ftbit.pixel_mode = ft_pixel_mode_mono; -- -- ftbit.buffer = bufBitmap; -- -- if (subpixel) -- FT_Outline_Transform (&glyphslot->outline, &matrix); -+ // compute the size of the final bitmap -+ ftbit = &glyphslot->bitmap; - -- FT_Outline_Translate ( &glyphslot->outline, -left*hmul, -bottom*vmul ); -- -- FT_Outline_Get_Bitmap( _XftFTlibrary, &glyphslot->outline, &ftbit ); -- break; -- case ft_glyph_format_bitmap: -- if (font->info.antialias) -- { -- unsigned char *srcLine, *dstLine; -- int height; -- int x; -- int h, v; -- -- srcLine = glyphslot->bitmap.buffer; -- dstLine = bufBitmap; -- height = glyphslot->bitmap.rows; -- while (height--) -- { -- for (x = 0; x < glyphslot->bitmap.width; x++) -- { -- /* always MSB bitmaps */ -- unsigned char a = ((srcLine[x >> 3] & (0x80 >> (x & 7))) ? -- 0xff : 0x00); -- if (subpixel) -- { -- for (v = 0; v < vmul; v++) -- for (h = 0; h < hmul; h++) -- dstLine[v * pitch + x*hmul + h] = a; -- } -- else -- dstLine[x] = a; -- } -- dstLine += pitch * vmul; -- srcLine += glyphslot->bitmap.pitch; -- } -- } -- else -- { -- unsigned char *srcLine, *dstLine; -- int h, bytes; -- -- srcLine = glyphslot->bitmap.buffer; -- dstLine = bufBitmap; -- h = glyphslot->bitmap.rows; -- bytes = (glyphslot->bitmap.width + 7) >> 3; -- while (h--) -- { -- memcpy (dstLine, srcLine, bytes); -- dstLine += pitch; -- srcLine += glyphslot->bitmap.pitch; -- } -- } -- break; -- default: -- if (XftDebug() & XFT_DBG_GLYPH) -- printf ("glyph %d is not in a usable format\n", -- (int) glyphindex); -- continue; -- } -+ width = ftbit->width; -+ height = ftbit->rows; -+ pitch = (width+3) & ~3; - - if (XftDebug() & XFT_DBG_GLYPH) - { -@@ -423,29 +602,72 @@ - int x, y; - unsigned char *line; - -- line = bufBitmap; -- for (y = 0; y < height * vmul; y++) -+ line = ftbit->buffer; -+ -+ if (ftbit->pitch < 0) -+ line -= ftbit->pitch*(height-1); -+ -+ for (y = 0; y < height; y++) - { - if (font->info.antialias) - { -- static char den[] = { " .:;=+*#" }; -- for (x = 0; x < pitch; x++) -+ static const char den[] = { " .:;=+*#" }; -+ for (x = 0; x < width; x++) - printf ("%c", den[line[x] >> 5]); - } - else - { -- for (x = 0; x < pitch * 8; x++) -+ for (x = 0; x < width * 8; x++) - { - printf ("%c", line[x>>3] & (1 << (x & 7)) ? '#' : ' '); - } - } - printf ("|\n"); -- line += pitch; -+ line += ftbit->pitch; - } - printf ("\n"); - } - } - -+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode ); -+ if ( size < 0 ) -+ continue; -+ -+ xftg->metrics.width = local.width; -+ xftg->metrics.height = local.rows; -+ xftg->metrics.x = - glyphslot->bitmap_left; -+ xftg->metrics.y = glyphslot->bitmap_top; -+ -+ /* -+ * If the glyph is relatively large (> 1% of server memory), -+ * don't send it until necessary -+ */ -+ if (!need_bitmaps && size > info->max_glyph_memory / 100) -+ continue; -+ -+ /* -+ * Make sure there's enough buffer space for the glyph -+ */ -+ if (size > bufSize) -+ { -+ if (bufBitmap != bufLocal) -+ free (bufBitmap); -+ bufBitmap = (unsigned char *) malloc (size); -+ if (!bufBitmap) -+ continue; -+ bufSize = size; -+ } -+ memset (bufBitmap, 0, size); -+ -+ local.buffer = bufBitmap; -+ -+ _fill_xrender_bitmap( &local, glyphslot, mode, -+ (font->info.rgba == FC_RGBA_BGR || -+ font->info.rgba == FC_RGBA_VBGR ) ); -+ /* -+ * Copy or convert into local buffer -+ */ -+ - /* - * Use the glyph index as the wire encoding; it - * might be more efficient for some locales to map -@@ -455,121 +677,23 @@ - */ - glyph = (Glyph) glyphindex; - -- if (subpixel) -- { -- int x, y; -- unsigned char *in_line, *out_line, *in; -- unsigned int *out; -- unsigned int red, green, blue; -- int rf, gf, bf; -- int s; -- int o, os; -- -- /* -- * Filter the glyph to soften the color fringes -- */ -- widthrgba = width; -- pitchrgba = (widthrgba * 4 + 3) & ~3; -- sizergba = pitchrgba * height; -- -- os = 1; -- switch (font->info.rgba) { -- case FC_RGBA_VRGB: -- os = pitch; -- case FC_RGBA_RGB: -- default: -- rf = 0; -- gf = 1; -- bf = 2; -- break; -- case FC_RGBA_VBGR: -- os = pitch; -- case FC_RGBA_BGR: -- bf = 0; -- gf = 1; -- rf = 2; -- break; -- } -- if (sizergba > bufSizeRgba) -- { -- if (bufBitmapRgba != bufLocalRgba) -- free (bufBitmapRgba); -- bufBitmapRgba = (unsigned char *) malloc (sizergba); -- if (!bufBitmapRgba) -- continue; -- bufSizeRgba = sizergba; -- } -- memset (bufBitmapRgba, 0, sizergba); -- in_line = bufBitmap; -- out_line = bufBitmapRgba; -- for (y = 0; y < height; y++) -- { -- in = in_line; -- out = (unsigned int *) out_line; -- in_line += pitch * vmul; -- out_line += pitchrgba; -- for (x = 0; x < width * hmul; x += hmul) -- { -- red = green = blue = 0; -- o = 0; -- for (s = 0; s < 3; s++) -- { -- red += filters[rf][s]*in[x+o]; -- green += filters[gf][s]*in[x+o]; -- blue += filters[bf][s]*in[x+o]; -- o += os; -- } -- red = red / 65536; -- green = green / 65536; -- blue = blue / 65536; -- *out++ = (green << 24) | (red << 16) | (green << 8) | blue; -- } -- } -- -- xftg->glyph_memory = sizergba + sizeof (XftGlyph); -- if (font->format) -+ xftg->glyph_memory = size + sizeof (XftGlyph); -+ if (font->format) - { - if (!font->glyphset) - font->glyphset = XRenderCreateGlyphSet (dpy, font->format); -- if (ImageByteOrder (dpy) != XftNativeByteOrder ()) -- XftSwapCARD32 ((CARD32 *) bufBitmapRgba, sizergba >> 2); -- XRenderAddGlyphs (dpy, font->glyphset, &glyph, -- &xftg->metrics, 1, -- (char *) bufBitmapRgba, sizergba); -- } -- else -- { -- if (sizergba) -- { -- xftg->bitmap = malloc (sizergba); -- if (xftg->bitmap) -- memcpy (xftg->bitmap, bufBitmapRgba, sizergba); -- } -- else -- xftg->bitmap = NULL; -- } -- } -- else -- { -- xftg->glyph_memory = size + sizeof (XftGlyph); -- if (font->format) -- { -- /* -- * swap bit order around; FreeType is always MSBFirst -- */ -- if (!font->info.antialias) -+ if ( mode == FT_RENDER_MODE_MONO ) - { -+ /* swap bits in each byte */ - if (BitmapBitOrder (dpy) != MSBFirst) - { -- unsigned char *line; -- unsigned char c; -- int i; -+ unsigned char *line = (unsigned char*)bufBitmap; -+ int i = size; - -- line = (unsigned char *) bufBitmap; -- i = size; - while (i--) - { -- c = *line; -+ int c = *line; -+ - c = ((c << 1) & 0xaa) | ((c >> 1) & 0x55); - c = ((c << 2) & 0xcc) | ((c >> 2) & 0x33); - c = ((c << 4) & 0xf0) | ((c >> 4) & 0x0f); -@@ -577,8 +701,12 @@ - } - } - } -- if (!font->glyphset) -- font->glyphset = XRenderCreateGlyphSet (dpy, font->format); -+ else if ( mode != FT_RENDER_MODE_NORMAL ) -+ { -+ /* invert ARGB <=> BGRA */ -+ if (ImageByteOrder (dpy) != XftNativeByteOrder ()) -+ XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2); -+ } - XRenderAddGlyphs (dpy, font->glyphset, &glyph, - &xftg->metrics, 1, - (char *) bufBitmap, size); -@@ -594,7 +722,7 @@ - else - xftg->bitmap = NULL; - } -- } -+ - font->glyph_memory += xftg->glyph_memory; - info->glyph_memory += xftg->glyph_memory; - if (XftDebug() & XFT_DBG_CACHE) -@@ -605,8 +733,6 @@ - } - if (bufBitmap != bufLocal) - free (bufBitmap); -- if (bufBitmapRgba != bufLocalRgba) -- free (bufBitmapRgba); - XftUnlockFace (&font->public); - } - ---- a/src/xftint.h -+++ b/src/xftint.h -@@ -145,6 +145,7 @@ - FcBool antialias; /* doing antialiasing */ - FcBool embolden; /* force emboldening */ - int rgba; /* subpixel order */ -+ int lcd_filter; /* lcd filter */ - FT_Matrix matrix; /* glyph transformation matrix */ - FcBool transform; /* non-identify matrix? */ - FT_Int load_flags; /* glyph load flags */ - diff --git a/packaging/libXft.spec b/packaging/libXft.spec new file mode 100644 index 0000000..ad86fae --- /dev/null +++ b/packaging/libXft.spec @@ -0,0 +1,76 @@ +Summary: X.Org X11 libXft runtime library +Name: libXft +Version: 2.3.1 +Release: 1 +License: MIT +Group: System Environment/Libraries +URL: http://www.x.org + +Source0: %{name}-%{version}.tar.gz + +BuildRequires: pkgconfig(xorg-macros) +BuildRequires: pkgconfig(xproto) +BuildRequires: pkgconfig(xrender) +BuildRequires: freetype-devel >= 2.1.9-2 +BuildRequires: fontconfig-devel >= 2.2-1 + +Requires: fontconfig >= 2.2-1 + +%description +X.Org X11 libXft runtime library + +%package devel +Summary: X.Org X11 libXft development package +Group: Development/Libraries +Provides: libxft-devel +Requires: %{name} = %{version}-%{release} + +%description devel +X.Org X11 libXft development package + +%prep +%setup -q + +%build + +%reconfigure --disable-static \ + LDFLAGS="${LDFLAGS} -Wl,--hash-style=both -Wl,--as-needed" +make %{?jobs:-j%jobs} + +%install +rm -rf $RPM_BUILD_ROOT + +make install DESTDIR=$RPM_BUILD_ROOT + +# FIXME: There's no real good reason to ship these anymore, as pkg-config +# is the official way to detect flags, etc. now. +rm -f $RPM_BUILD_ROOT%{_bindir}/xft-config +rm -f $RPM_BUILD_ROOT%{_mandir}/man1/xft-config* + +# We intentionally don't ship *.la files +rm -f $RPM_BUILD_ROOT%{_libdir}/*.la + +%remove_docs + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,-) +%doc AUTHORS COPYING README ChangeLog +%{_libdir}/libXft.so.2* + +%files devel +%defattr(-,root,root,-) +#%{_bindir}/xft-config +%dir %{_includedir}/X11/Xft +%{_includedir}/X11/Xft/Xft.h +%{_includedir}/X11/Xft/XftCompat.h +%{_libdir}/libXft.so +%{_libdir}/pkgconfig/xft.pc +#%{_mandir}/man1/xft-config.1.gz +#%dir %{_mandir}/man3x +#%{_mandir}/man3/Xft.3* \ No newline at end of file diff --git a/packaging/libxft.spec b/packaging/libxft.spec deleted file mode 100644 index 1bb75ff..0000000 --- a/packaging/libxft.spec +++ /dev/null @@ -1,79 +0,0 @@ - -Name: libxft -Summary: X.Org X11 libXft runtime library -Version: 2.2.0 -Release: 2.5 -Group: System/Libraries -License: MIT -URL: http://www.x.org/ -Source0: http://xorg.freedesktop.org/releases/individual/lib/%{name}-%{version}.tar.gz -Patch1: 100-libXft-2.1.10-lcd-filter-3.patch -Requires(post): /sbin/ldconfig -Requires(postun): /sbin/ldconfig -BuildRequires: pkgconfig(xproto) -BuildRequires: pkgconfig(x11) -BuildRequires: pkgconfig(xrender) -BuildRequires: pkgconfig(freetype2) -BuildRequires: pkgconfig(fontconfig) -BuildRequires: pkgconfig(xorg-macros) - - -%description -Xft is a library that connects X applications with the FreeType font rasterization -library. - - - -%package devel -Summary: Development components for the libXft library -Group: Development/Libraries -Requires: %{name} = %{version}-%{release} - -%description devel -xft Development Librariy files - - - -%prep -%setup -q -n %{name}-%{version} - -# 100-libXft-2.1.10-lcd-filter-3.patch -%patch1 -p1 - -%build -LDFLAGS+=" -Wl,--hash-style=both -Wl,--as-needed" -%reconfigure --disable-static -make %{?jobs:-j%jobs} - -%install -rm -rf %{buildroot} -%make_install - - - - -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - - - - - -%files -%defattr(-,root,root,-) -%doc AUTHORS COPYING README ChangeLog -%{_libdir}/libXft.so.2 -%{_libdir}/libXft.so.2.2.0 - - -%files devel -%defattr(-,root,root,-) -%dir %{_includedir}/X11 -%dir %{_includedir}/X11/Xft -%{_includedir}/X11/Xft/Xft.h -%{_includedir}/X11/Xft/XftCompat.h -%{_libdir}/libXft.so -%{_libdir}/pkgconfig/xft.pc -%doc %{_mandir}/man3/Xft.3* - diff --git a/src/Makefile.am b/src/Makefile.am old mode 100755 new mode 100644 diff --git a/src/xftcolor.c b/src/xftcolor.c index 77872ef..a323822 100644 --- a/src/xftcolor.c +++ b/src/xftcolor.c @@ -30,7 +30,7 @@ XftColorAllocName (Display *dpy, XftColor *result) { XColor screen, exact; - + if (!XAllocNamedColor (dpy, cmap, name, &screen, &exact)) { /* XXX stick standard colormap stuff here */ @@ -97,7 +97,7 @@ XftColorAllocValue (Display *dpy, else { XColor xcolor; - + xcolor.red = color->red; xcolor.green = color->green; xcolor.blue = color->blue; @@ -112,7 +112,7 @@ XftColorAllocValue (Display *dpy, return True; } -_X_EXPORT void +_X_EXPORT void XftColorFree (Display *dpy, Visual *visual, Colormap cmap, diff --git a/src/xftcore.c b/src/xftcore.c index 3f87109..85b58c3 100644 --- a/src/xftcore.c +++ b/src/xftcore.c @@ -25,7 +25,7 @@ _X_HIDDEN void XftRectCore (XftDraw *draw, _Xconst XftColor *color, - int x, + int x, int y, unsigned int width, unsigned int height) @@ -63,10 +63,10 @@ _XftSharpGlyphMono (XftDraw *draw, src = srcLine; srcLine += stride; w = width; - + bitsMask = 0x80; /* FreeType is always MSB first */ bits = *src++; - + xspan = x; while (w) { @@ -85,7 +85,7 @@ _XftSharpGlyphMono (XftDraw *draw, bitsMask = 0x80; } } while (bits & bitsMask); - XFillRectangle (draw->dpy, draw->drawable, + XFillRectangle (draw->dpy, draw->drawable, draw->core.gc, xspan, y, lenspan, 1); xspan += lenspan; w -= lenspan; @@ -135,7 +135,7 @@ _XftSharpGlyphGray (XftDraw *draw, src = srcLine; srcLine += stride; w = width; - + bits = *src++; xspan = x; while (w) @@ -150,7 +150,7 @@ _XftSharpGlyphGray (XftDraw *draw, break; bits = *src++; } while (bits >= 0x80); - XFillRectangle (draw->dpy, draw->drawable, + XFillRectangle (draw->dpy, draw->drawable, draw->core.gc, xspan, y, lenspan, 1); xspan += lenspan; w -= lenspan; @@ -191,7 +191,7 @@ _XftSharpGlyphRgba (XftDraw *draw, src = srcLine; srcLine += stride; w = width; - + bits = *src++; xspan = x; while (w) @@ -206,7 +206,7 @@ _XftSharpGlyphRgba (XftDraw *draw, break; bits = *src++; } while (bits >= 0x80000000); - XFillRectangle (draw->dpy, draw->drawable, + XFillRectangle (draw->dpy, draw->drawable, draw->core.gc, xspan, y, lenspan, 1); xspan += lenspan; w -= lenspan; @@ -257,7 +257,7 @@ _XftSharpGlyphFind (XftDraw *draw, XftFont *public) /* * Primitives for converting between RGB values and TrueColor pixels */ - + static void _XftExamineBitfield (unsigned long mask, int *shift, int *len) { @@ -283,7 +283,7 @@ static CARD32 _XftGetField (unsigned long l_pixel, int shift, int len) { CARD32 pixel = (CARD32) l_pixel; - + pixel = pixel & (((1 << (len)) - 1) << shift); pixel = pixel << (32 - (shift + len)) >> 24; while (len < 8) @@ -346,10 +346,10 @@ _XftSmoothGlyphMono (XImage *image, src = srcLine; srcLine += stride; w = width; - + bitsMask = 0x80; /* FreeType is always MSB first */ bits = *src++; - + xspan = x; while (w--) { @@ -465,7 +465,7 @@ _XftSmoothGlyphGray8888 (XImage *image, int w; srca = color->color.alpha >> 8; - + /* This handles only RGB and BGR */ g = (color->color.green & 0xff00); if (image->red_mask == 0xff0000) @@ -479,10 +479,10 @@ _XftSmoothGlyphGray8888 (XImage *image, b = (color->color.blue & 0xff00) << 8; } src = (srca << 24) | r | g | b; - + width = xftg->metrics.width; height = xftg->metrics.height; - + x -= xftg->metrics.x; y -= xftg->metrics.y; @@ -490,7 +490,7 @@ _XftSmoothGlyphGray8888 (XImage *image, dstStride = image->bytes_per_line >> 2; maskLine = (unsigned char *) xftg->bitmap; maskStride = (width + 3) & ~3; - + while (height--) { dst = dstLine; @@ -536,7 +536,7 @@ _XftSmoothGlyphGray565 (XImage *image, int w; srca = color->color.alpha >> 8; - + /* This handles only RGB and BGR */ g = (color->color.green & 0xff00); if (image->red_mask == 0xf800) @@ -550,10 +550,10 @@ _XftSmoothGlyphGray565 (XImage *image, b = (color->color.blue & 0xff00) << 8; } src = (srca << 24) | r | g | b; - + width = xftg->metrics.width; height = xftg->metrics.height; - + x -= xftg->metrics.x; y -= xftg->metrics.y; @@ -561,7 +561,7 @@ _XftSmoothGlyphGray565 (XImage *image, dstStride = image->bytes_per_line >> 1; maskLine = (unsigned char *) xftg->bitmap; maskStride = (width + 3) & ~3; - + while (height--) { dst = dstLine; @@ -612,7 +612,7 @@ _XftSmoothGlyphGray555 (XImage *image, int w; srca = color->color.alpha >> 8; - + /* This handles only RGB and BGR */ g = (color->color.green & 0xff00); if (image->red_mask == 0xf800) @@ -626,10 +626,10 @@ _XftSmoothGlyphGray555 (XImage *image, b = (color->color.blue & 0xff00) << 8; } src = (srca << 24) | r | g | b; - + width = xftg->metrics.width; height = xftg->metrics.height; - + x -= xftg->metrics.x; y -= xftg->metrics.y; @@ -637,7 +637,7 @@ _XftSmoothGlyphGray555 (XImage *image, dstStride = image->bytes_per_line >> 1; maskLine = (unsigned char *) xftg->bitmap; maskStride = (width + 3) & ~3; - + while (height--) { dst = dstLine; @@ -688,7 +688,7 @@ _XftSmoothGlyphGray (XImage *image, unsigned long pixel; int width, height; int w, tx; - + srca = color->color.alpha >> 8; src = (srca << 24 | (color->color.red & 0xff00) << 8 | @@ -698,7 +698,7 @@ _XftSmoothGlyphGray (XImage *image, y -= xftg->metrics.y; width = xftg->metrics.width; height = xftg->metrics.height; - + maskLine = (unsigned char *) xftg->bitmap; maskStride = (width + 3) & ~3; @@ -711,7 +711,7 @@ _XftSmoothGlyphGray (XImage *image, maskLine += maskStride; w = width; tx = x; - + while (w--) { m = *mask++; @@ -766,7 +766,7 @@ _XftSmoothGlyphRgba (XImage *image, unsigned long pixel; int width, height; int w, tx; - + srca = color->color.alpha >> 8; src = (srca << 24 | (color->color.red & 0xff00) << 8 | @@ -776,7 +776,7 @@ _XftSmoothGlyphRgba (XImage *image, y -= xftg->metrics.y; width = xftg->metrics.width; height = xftg->metrics.height; - + mask = (CARD32 *) xftg->bitmap; _XftExamineBitfield (image->red_mask, &r_shift, &r_len); @@ -786,7 +786,7 @@ _XftSmoothGlyphRgba (XImage *image, { w = width; tx = x; - + while (w--) { ma = *mask++; @@ -849,7 +849,7 @@ _XftSmoothGlyphPossible (XftDraw *draw) return FcTrue; } -typedef void (*XftSmoothGlyph) (XImage *image, +typedef void (*XftSmoothGlyph) (XImage *image, _Xconst XftGlyph *xftg, int x, int y, @@ -960,7 +960,7 @@ XftGlyphCore (XftDraw *draw, glyphs_loaded = FcTrue; if (nmissing) XftFontLoadGlyphs (dpy, public, FcTrue, missing, nmissing); - + g = glyphs; n = nglyphs; if ((font->info.antialias || color->color.alpha != 0xffff) && @@ -971,7 +971,7 @@ XftGlyphCore (XftDraw *draw, unsigned int depth; int ox, oy; XftSmoothGlyph smooth = _XftSmoothGlyphFind (draw, public); - + XftGlyphExtents (dpy, public, glyphs, nglyphs, &gi); if (!gi.width || !gi.height) goto bail1; @@ -1090,7 +1090,7 @@ 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; @@ -1121,7 +1121,7 @@ XftGlyphSpecCore (XftDraw *draw, y2 = g_y2; } } - + if (x1 == x2 || y1 == y2) goto bail1; @@ -1186,7 +1186,7 @@ XftGlyphSpecCore (XftDraw *draw, xftg = _XftGlyphDefault (dpy, public); if (xftg) { - (*smooth) (image, xftg, glyphs[i].x - x1, + (*smooth) (image, xftg, glyphs[i].x - x1, glyphs[i].y - y1, color); } } @@ -1238,13 +1238,13 @@ XftGlyphFontSpecCore (XftDraw *draw, XftFont *public = glyphs[i].font; 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; @@ -1253,7 +1253,17 @@ XftGlyphFontSpecCore (XftDraw *draw, if (i) { if (g_x1 < x1) + { + if (g_x1 < 0) + { + /* do nothing if the given glyphs are out of range */ + short t = glyphs[i-1].font->max_advance_width + + glyphs[i-1].x; + if (t < 0 && glyphs[i-1].x > 0) + goto bail1; + } x1 = g_x1; + } if (g_y1 < y1) y1 = g_y1; if (g_x2 > x2) @@ -1269,14 +1279,14 @@ XftGlyphFontSpecCore (XftDraw *draw, y2 = g_y2; } } - + if (x1 == x2 || y1 == y2) goto bail1; for (i = 0; i < nglyphs; i++) if (((XftFontInt *) glyphs[i].font)->info.antialias) break; - + if ((i != nglyphs || color->color.alpha != 0xffff) && _XftSmoothGlyphPossible (draw)) { @@ -1336,12 +1346,12 @@ XftGlyphFontSpecCore (XftDraw *draw, XftFontInt *font = (XftFontInt *) public; XftSmoothGlyph smooth = _XftSmoothGlyphFind (draw, public); FT_UInt glyph = glyphs[i].glyph; - + if (glyph >= font->num_glyphs || !(xftg = font->glyphs[glyph])) xftg = _XftGlyphDefault (dpy, public); if (xftg) { - (*smooth) (image, xftg, glyphs[i].x - x1, + (*smooth) (image, xftg, glyphs[i].x - x1, glyphs[i].y - y1, color); } } @@ -1359,7 +1369,7 @@ XftGlyphFontSpecCore (XftDraw *draw, XftFontInt *font = (XftFontInt *) public; XftSharpGlyph sharp = _XftSharpGlyphFind (draw, public); FT_UInt glyph = glyphs[i].glyph; - + if (glyph >= font->num_glyphs || !(xftg = font->glyphs[glyph])) xftg = _XftGlyphDefault (dpy, public); if (xftg) diff --git a/src/xftdpy.c b/src/xftdpy.c index 0553515..c5b756e 100644 --- a/src/xftdpy.c +++ b/src/xftdpy.c @@ -32,19 +32,19 @@ _XftCloseDisplay (Display *dpy, XExtCodes *codes) info = _XftDisplayInfoGet (dpy, FcFalse); if (!info) return 0; - + /* * Get rid of any dangling unreferenced fonts */ info->max_unref_fonts = 0; XftFontManageMemory (dpy); - + /* * Clean up the default values */ if (info->defaults) FcPatternDestroy (info->defaults); - + /* * Unhook from the global list */ @@ -52,7 +52,7 @@ _XftCloseDisplay (Display *dpy, XExtCodes *codes) if (info->display == dpy) break; *prev = info->next; - + free (info); return 0; } @@ -126,8 +126,8 @@ _XftDisplayInfoGet (Display *dpy, FcBool createIfNecessary) { Visual *visual = DefaultVisual (dpy, DefaultScreen (dpy)); XRenderPictFormat *format = XRenderFindVisualFormat (dpy, visual); - - printf ("XftDisplayInfoGet Default visual 0x%x ", + + printf ("XftDisplayInfoGet Default visual 0x%x ", (int) visual->visualid); if (format) { @@ -146,7 +146,7 @@ _XftDisplayInfoGet (Display *dpy, FcBool createIfNecessary) } else printf ("No Render format for default visual\n"); - + printf ("XftDisplayInfoGet initialized, hasRender set to \"%s\"\n", info->hasRender ? "True" : "False"); } @@ -156,18 +156,18 @@ _XftDisplayInfoGet (Display *dpy, FcBool createIfNecessary) info->colors[i].pict = 0; } info->fonts = NULL; - + info->next = _XftDisplayInfo; _XftDisplayInfo = info; - info->glyph_memory = NULL; + info->glyph_memory = 0; info->max_glyph_memory = XftDefaultGetInteger (dpy, XFT_MAX_GLYPH_MEMORY, 0, XFT_DPY_MAX_GLYPH_MEMORY); if (XftDebug () & XFT_DBG_CACHE) printf ("global max cache memory %ld\n", info->max_glyph_memory); - + info->num_unref_fonts = 0; info->max_unref_fonts = XftDefaultGetInteger (dpy, XFT_MAX_UNREF_FONTS, 0, @@ -177,7 +177,7 @@ _XftDisplayInfoGet (Display *dpy, FcBool createIfNecessary) memset (info->fontHash, '\0', sizeof (XftFont *) * XFT_NUM_FONT_HASH); return info; - + bail1: free (info); bail0: @@ -282,7 +282,7 @@ XftDefaultSet (Display *dpy, FcPattern *defaults) } _X_HIDDEN int -XftDefaultParseBool (char *v) +XftDefaultParseBool (const char *v) { char c0, c1; @@ -307,7 +307,7 @@ XftDefaultParseBool (char *v) } static Bool -_XftDefaultInitBool (Display *dpy, FcPattern *pat, char *option) +_XftDefaultInitBool (Display *dpy, FcPattern *pat, const char *option) { char *v; int i; @@ -319,7 +319,7 @@ _XftDefaultInitBool (Display *dpy, FcPattern *pat, char *option) } static Bool -_XftDefaultInitDouble (Display *dpy, FcPattern *pat, char *option) +_XftDefaultInitDouble (Display *dpy, FcPattern *pat, const char *option) { char *v, *e; double d; @@ -335,7 +335,7 @@ _XftDefaultInitDouble (Display *dpy, FcPattern *pat, char *option) } static Bool -_XftDefaultInitInteger (Display *dpy, FcPattern *pat, char *option) +_XftDefaultInitInteger (Display *dpy, FcPattern *pat, const char *option) { char *v, *e; int i; @@ -369,27 +369,25 @@ _XftDefaultInit (Display *dpy) goto bail1; if (!_XftDefaultInitInteger (dpy, pat, FC_RGBA)) goto bail1; + if (!_XftDefaultInitInteger (dpy, pat, FC_LCD_FILTER)) + goto bail1; if (!_XftDefaultInitBool (dpy, pat, FC_ANTIALIAS)) goto bail1; -#ifdef FC_EMBOLDEN if (!_XftDefaultInitBool (dpy, pat, FC_EMBOLDEN)) goto bail1; -#endif if (!_XftDefaultInitBool (dpy, pat, FC_AUTOHINT)) goto bail1; -#ifdef FC_HINT_STYLE if (!_XftDefaultInitInteger (dpy, pat, FC_HINT_STYLE)) goto bail1; -#endif if (!_XftDefaultInitBool (dpy, pat, FC_HINTING)) goto bail1; if (!_XftDefaultInitBool (dpy, pat, FC_MINSPACE)) goto bail1; if (!_XftDefaultInitInteger (dpy, pat, XFT_MAX_GLYPH_MEMORY)) goto bail1; - + return pat; - + bail1: FcPatternDestroy (pat); bail0: @@ -404,7 +402,7 @@ _XftDefaultGet (Display *dpy, const char *object, int screen, FcValue *v) if (!info) return FcResultNoMatch; - + if (!info->defaults) { info->defaults = _XftDefaultInit (dpy); @@ -462,7 +460,7 @@ XftDefaultSubstitute (Display *dpy, int screen, FcPattern *pattern) if (FcPatternGet (pattern, XFT_RENDER, 0, &v) == FcResultNoMatch) { FcPatternAddBool (pattern, XFT_RENDER, - XftDefaultGetBool (dpy, XFT_RENDER, screen, + XftDefaultGetBool (dpy, XFT_RENDER, screen, XftDefaultHasRender (dpy))); } if (FcPatternGet (pattern, FC_ANTIALIAS, 0, &v) == FcResultNoMatch) @@ -471,28 +469,24 @@ XftDefaultSubstitute (Display *dpy, int screen, FcPattern *pattern) XftDefaultGetBool (dpy, FC_ANTIALIAS, screen, True)); } -#ifdef FC_EMBOLDEN if (FcPatternGet (pattern, FC_EMBOLDEN, 0, &v) == FcResultNoMatch) { FcPatternAddBool (pattern, FC_EMBOLDEN, XftDefaultGetBool (dpy, FC_EMBOLDEN, screen, False)); } -#endif if (FcPatternGet (pattern, FC_HINTING, 0, &v) == FcResultNoMatch) { FcPatternAddBool (pattern, FC_HINTING, XftDefaultGetBool (dpy, FC_HINTING, screen, True)); } -#ifdef FC_HINT_STYLE if (FcPatternGet (pattern, FC_HINT_STYLE, 0, &v) == FcResultNoMatch) { FcPatternAddInteger (pattern, FC_HINT_STYLE, XftDefaultGetInteger (dpy, FC_HINT_STYLE, screen, FC_HINT_FULL)); } -#endif if (FcPatternGet (pattern, FC_AUTOHINT, 0, &v) == FcResultNoMatch) { FcPatternAddBool (pattern, FC_AUTOHINT, @@ -518,9 +512,15 @@ XftDefaultSubstitute (Display *dpy, int screen, FcPattern *pattern) } #endif FcPatternAddInteger (pattern, FC_RGBA, - XftDefaultGetInteger (dpy, FC_RGBA, screen, + XftDefaultGetInteger (dpy, FC_RGBA, screen, subpixel)); } + if (FcPatternGet (pattern, FC_LCD_FILTER, 0, &v) == FcResultNoMatch) + { + FcPatternAddInteger (pattern, FC_LCD_FILTER, + XftDefaultGetInteger (dpy, FC_LCD_FILTER, screen, + FC_LCD_DEFAULT)); + } if (FcPatternGet (pattern, FC_MINSPACE, 0, &v) == FcResultNoMatch) { FcPatternAddBool (pattern, FC_MINSPACE, @@ -529,10 +529,10 @@ XftDefaultSubstitute (Display *dpy, int screen, FcPattern *pattern) } if (FcPatternGet (pattern, FC_DPI, 0, &v) == FcResultNoMatch) { - dpi = (((double) DisplayHeight (dpy, screen) * 25.4) / + dpi = (((double) DisplayHeight (dpy, screen) * 25.4) / (double) DisplayHeightMM (dpy, screen)); - FcPatternAddDouble (pattern, FC_DPI, - XftDefaultGetDouble (dpy, FC_DPI, screen, + FcPatternAddDouble (pattern, FC_DPI, + XftDefaultGetDouble (dpy, FC_DPI, screen, dpi)); } if (FcPatternGet (pattern, FC_SCALE, 0, &v) == FcResultNoMatch) diff --git a/src/xftdraw.c b/src/xftdraw.c index ab51749..186bcb8 100644 --- a/src/xftdraw.c +++ b/src/xftdraw.c @@ -88,7 +88,7 @@ XftDrawDepth (XftDraw *draw) Window root; int x, y; unsigned int width, height, borderWidth, depth; - if (XGetGeometry (draw->dpy, draw->drawable, + if (XGetGeometry (draw->dpy, draw->drawable, &root, &x, &y, &width, &height, &borderWidth, &depth)) draw->depth = depth; @@ -104,7 +104,7 @@ XftDrawBitsPerPixel (XftDraw *draw) XPixmapFormatValues *formats; int nformats; unsigned int depth; - + if ((depth = XftDrawDepth (draw)) && (formats = XListPixmapFormats (draw->dpy, &nformats))) { @@ -135,7 +135,7 @@ XftDrawCreate (Display *dpy, draw = (XftDraw *) malloc (sizeof (XftDraw)); if (!draw) return NULL; - + draw->dpy = dpy; draw->drawable = drawable; draw->screen = _XftDrawScreen (dpy, drawable, visual); @@ -301,9 +301,9 @@ XftDrawSrcPicture (XftDraw *draw, _Xconst XftColor *color) int i; XftColor bitmapColor; - if (!info) + if (!info || !info->solidFormat) return 0; - + /* * Monochrome targets require special handling; the PictOp controls * the color, and the color must be opaque @@ -322,9 +322,9 @@ XftDrawSrcPicture (XftDraw *draw, _Xconst XftColor *color) */ for (i = 0; i < XFT_NUM_SOLID_COLOR; i++) { - if (info->colors[i].pict && + if (info->colors[i].pict && info->colors[i].screen == draw->screen && - !memcmp ((void *) &color->color, + !memcmp ((void *) &color->color, (void *) &info->colors[i].color, sizeof (XRenderColor))) return info->colors[i].pict; @@ -348,7 +348,7 @@ XftDrawSrcPicture (XftDraw *draw, _Xconst XftColor *color) { Pixmap pix; XRenderPictureAttributes pa; - + pix = XCreatePixmap (dpy, RootWindow (dpy, draw->screen), 1, 1, info->solidFormat->depth); pa.repeat = True; @@ -391,7 +391,7 @@ _XftDrawRenderPrepare (XftDraw *draw) format = _XftDrawFormat (draw); if (!format) return FcFalse; - + if (draw->subwindow_mode == IncludeInferiors) { pa.subwindow_mode = IncludeInferiors; @@ -454,7 +454,7 @@ _XftDrawCorePrepare (XftDraw *draw, _Xconst XftColor *color) XSetForeground (draw->dpy, draw->core.gc, color->pixel); return FcTrue; } - + _X_EXPORT Picture XftDrawPicture (XftDraw *draw) { @@ -479,7 +479,7 @@ XftDrawGlyphs (XftDraw *draw, if (font->format) { Picture src; - + if (_XftDrawRenderPrepare (draw) && (src = XftDrawSrcPicture (draw, color))) XftGlyphRender (draw->dpy, _XftDrawOp (draw, color), @@ -497,7 +497,7 @@ _X_EXPORT void XftDrawString8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, - int x, + int x, int y, _Xconst FcChar8 *string, int len) @@ -507,7 +507,7 @@ XftDrawString8 (XftDraw *draw, if (XftDebug () & XFT_DBG_DRAW) printf ("DrawString \"%*.*s\"\n", len, len, string); - + if (len <= NUM_LOCAL) glyphs = glyphs_local; else @@ -545,7 +545,7 @@ XftDrawString16 (XftDraw *draw, } for (i = 0; i < len; i++) glyphs[i] = XftCharIndex (draw->dpy, pub, string[i]); - + XftDrawGlyphs (draw, color, pub, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -573,7 +573,7 @@ XftDrawString32 (XftDraw *draw, } for (i = 0; i < len; i++) glyphs[i] = XftCharIndex (draw->dpy, pub, string[i]); - + XftDrawGlyphs (draw, color, pub, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -583,7 +583,7 @@ _X_EXPORT void XftDrawStringUtf8 (XftDraw *draw, _Xconst XftColor *color, XftFont *pub, - int x, + int x, int y, _Xconst FcChar8 *string, int len) @@ -795,7 +795,7 @@ XftDrawCharFontSpec (XftDraw *draw, _X_EXPORT void XftDrawRect (XftDraw *draw, _Xconst XftColor *color, - int x, + int x, int y, unsigned int width, unsigned int height) @@ -825,9 +825,9 @@ XftDrawSetClip (XftDraw *draw, */ if (!r && draw->clip_type == XftClipTypeNone) return True; - - if (r && - draw->clip_type == XftClipTypeRegion && + + if (r && + draw->clip_type == XftClipTypeRegion && XEqualRegion (r, draw->clip.region)) { return True; @@ -862,7 +862,7 @@ XftDrawSetClip (XftDraw *draw, case XftClipTypeNone: break; } - + /* * Set the clip */ @@ -946,7 +946,7 @@ XftDrawSetClipRectangles (XftDraw *draw, case XftClipTypeNone: break; } - + /* * Set the clip */ @@ -986,7 +986,7 @@ XftDrawSetSubwindowMode (XftDraw *draw, int mode) XRenderPictureAttributes pa; pa.subwindow_mode = mode; - XRenderChangePicture (draw->dpy, draw->render.pict, + XRenderChangePicture (draw->dpy, draw->render.pict, CPSubwindowMode, &pa); } if (draw->core.gc) diff --git a/src/xftextent.c b/src/xftextent.c index 71f5c1c..1e418f2 100644 --- a/src/xftextent.c +++ b/src/xftextent.c @@ -21,7 +21,7 @@ */ #include "xftint.h" - + _X_EXPORT void XftGlyphExtents (Display *dpy, XftFont *pub, @@ -41,7 +41,7 @@ XftGlyphExtents (Display *dpy, int left, right, top, bottom; int overall_left, overall_right; int overall_top, overall_bottom; - + g = glyphs; n = nglyphs; nmissing = 0; @@ -116,7 +116,7 @@ XftGlyphExtents (Display *dpy, _X_EXPORT void XftTextExtents8 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, int len, XGlyphInfo *extents) { @@ -144,7 +144,7 @@ XftTextExtents8 (Display *dpy, _X_EXPORT void XftTextExtents16 (Display *dpy, XftFont *pub, - _Xconst FcChar16 *string, + _Xconst FcChar16 *string, int len, XGlyphInfo *extents) { @@ -172,7 +172,7 @@ XftTextExtents16 (Display *dpy, _X_EXPORT void XftTextExtents32 (Display *dpy, XftFont *pub, - _Xconst FcChar32 *string, + _Xconst FcChar32 *string, int len, XGlyphInfo *extents) { @@ -200,7 +200,7 @@ XftTextExtents32 (Display *dpy, _X_EXPORT void XftTextExtentsUtf8 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, int len, XGlyphInfo *extents) { @@ -243,7 +243,7 @@ XftTextExtentsUtf8 (Display *dpy, _X_EXPORT void XftTextExtentsUtf16 (Display *dpy, XftFont *pub, - _Xconst FcChar8 *string, + _Xconst FcChar8 *string, FcEndian endian, int len, XGlyphInfo *extents) diff --git a/src/xftfont.c b/src/xftfont.c index 70ab5d8..d361498 100644 --- a/src/xftfont.c +++ b/src/xftfont.c @@ -33,7 +33,7 @@ XftFontMatch (Display *dpy, if (!XftInit (NULL)) return NULL; - + new = FcPatternDuplicate (pattern); if (!new) return NULL; @@ -100,7 +100,7 @@ XftFontOpen (Display *dpy, int screen, ...) FcPatternDestroy (pat); if (!match) return NULL; - + font = XftFontOpenPattern (dpy, match); if (!font) { @@ -129,7 +129,7 @@ XftFontOpenName (Display *dpy, int screen, const char *name) else printf ("Invalid name\n"); } - + if (!pat) return NULL; match = XftFontMatch (dpy, screen, pat, &result); @@ -146,7 +146,7 @@ XftFontOpenName (Display *dpy, int screen, const char *name) FcPatternDestroy (pat); if (!match) return NULL; - + font = XftFontOpenPattern (dpy, match); if (!font) { @@ -154,7 +154,7 @@ XftFontOpenName (Display *dpy, int screen, const char *name) printf ("No Font\n"); FcPatternDestroy (match); } - + return font; } @@ -175,7 +175,7 @@ XftFontOpenXlfd (Display *dpy, int screen, const char *xlfd) else FcPatternPrint (pat); } - + if (!pat) return NULL; match = XftFontMatch (dpy, screen, pat, &result); @@ -192,7 +192,7 @@ XftFontOpenXlfd (Display *dpy, int screen, const char *xlfd) FcPatternDestroy (pat); if (!match) return NULL; - + font = XftFontOpenPattern (dpy, match); if (!font) { @@ -200,7 +200,7 @@ XftFontOpenXlfd (Display *dpy, int screen, const char *xlfd) printf ("No Font\n"); FcPatternDestroy (match); } - + return font; } diff --git a/src/xftfreetype.c b/src/xftfreetype.c index 7238b82..a3b8332 100644 --- a/src/xftfreetype.c +++ b/src/xftfreetype.c @@ -57,20 +57,20 @@ _XftGetFile (const FcChar8 *file, int id) f = malloc (sizeof (XftFtFile) + strlen ((char *) file) + 1); if (!f) return NULL; - + XftMemAlloc (XFT_MEM_FILE, sizeof (XftFtFile) + strlen ((char *) file) + 1); if (XftDebug () & XFT_DBG_REF) printf ("FontFile %s/%d matches new\n", file, id); f->next = _XftFtFiles; _XftFtFiles = f; - + f->ref = 1; - + f->file = (char *) (f+1); strcpy (f->file, (char *) file); f->id = id; - + f->lock = 0; f->face = NULL; f->xsize = 0; @@ -89,7 +89,7 @@ _XftGetFaceFile (FT_Face face) return NULL; XftMemAlloc (XFT_MEM_FILE, sizeof(XftFtFile)); f->next = NULL; - + f->ref = 1; f->file = NULL; @@ -154,7 +154,7 @@ _XftLockFile (XftFtFile *f) printf ("Loading file %s/%d\n", f->file, f->id); if (FT_New_Face (_XftFTlibrary, f->file, f->id, &f->face)) --f->lock; - + f->xsize = 0; f->ysize = 0; f->matrix.xx = f->matrix.xy = f->matrix.yx = f->matrix.yy = 0; @@ -164,7 +164,7 @@ _XftLockFile (XftFtFile *f) } static void -_XftLockError (char *reason) +_XftLockError (const char *reason) { fprintf (stderr, "Xft: locking error %s\n", reason); } @@ -176,23 +176,18 @@ _XftUnlockFile (XftFtFile *f) _XftLockError ("too many file unlocks"); } -#if HAVE_FT_BITMAP_SIZE_Y_PPEM #define X_SIZE(face,i) ((face)->available_sizes[i].x_ppem) #define Y_SIZE(face,i) ((face)->available_sizes[i].y_ppem) -#else -#define X_SIZE(face,i) ((face)->available_sizes[i].width << 6) -#define Y_SIZE(face,i) ((face)->available_sizes[i].height << 6) -#endif _X_HIDDEN FcBool _XftSetFace (XftFtFile *f, FT_F26Dot6 xsize, FT_F26Dot6 ysize, FT_Matrix *matrix) { FT_Face face = f->face; - + if (f->xsize != xsize || f->ysize != ysize) { if (XftDebug() & XFT_DBG_GLYPH) - printf ("Set face size to %dx%d (%dx%d)\n", + printf ("Set face size to %dx%d (%dx%d)\n", (int) (xsize >> 6), (int) (ysize >> 6), (int) xsize, (int) ysize); /* * Bitmap only faces must match exactly, so find the closest @@ -217,19 +212,16 @@ _XftSetFace (XftFtFile *f, FT_F26Dot6 xsize, FT_F26Dot6 ysize, FT_Matrix *matrix best = i; } } - /* + /* * Freetype 2.1.7 and earlier used width/height * for matching sizes in the BDF and PCF loaders. * This has been fixed for 2.1.8. Because BDF and PCF * files have but a single strike per file, we can * simply try both sizes. */ - if ( -#if HAVE_FT_BITMAP_SIZE_Y_PPEM - FT_Set_Char_Size (face, face->available_sizes[best].x_ppem, + if (FT_Set_Char_Size (face, face->available_sizes[best].x_ppem, face->available_sizes[best].y_ppem, 0, 0) != 0 && -#endif FT_Set_Char_Size (face, face->available_sizes[best].width << 6, face->available_sizes[best].height << 6, 0, 0) != 0) @@ -265,7 +257,7 @@ static void _XftReleaseFile (XftFtFile *f) { XftFtFile **prev; - + if (--f->ref != 0) return; if (f->lock) @@ -283,7 +275,7 @@ _XftReleaseFile (XftFtFile *f) if (f->face) FT_Done_Face (f->face); } - XftMemFree (XFT_MEM_FILE, + XftMemFree (XFT_MEM_FILE, sizeof (XftFtFile) + (f->file ? strlen (f->file) + 1 : 0)); free (f); } @@ -349,7 +341,7 @@ XftLockFace (XftFont *public) XftFontInt *font = (XftFontInt *) public; XftFontInfo *fi = &font->info; FT_Face face; - + face = _XftLockFile (fi->file); /* * Make sure the face is usable at the requested size @@ -379,9 +371,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) double aspect; FcMatrix *font_matrix; FcBool hinting, vertical_layout, autohint, global_advance; -#ifdef FC_HINT_STYLE int hint_style; -#endif FcChar32 hash, *hashp; FT_Face face; int nhash; @@ -394,7 +384,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) * Initialize the whole XftFontInfo so that padding doesn't interfere with * hash or XftFontInfoEqual(). */ - + memset (fi, '\0', sizeof(*fi)); /* @@ -409,7 +399,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail0; } - + switch (FcPatternGetInteger (pattern, FC_INDEX, 0, &id)) { case FcResultNoMatch: id = 0; @@ -419,7 +409,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail0; } - + if (filename) fi->file = _XftGetFile (filename, id); else if (FcPatternGetFTFace (pattern, FC_FT_FACE, 0, &face) == FcResultMatch @@ -436,7 +426,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) if (FcPatternGetDouble (pattern, FC_ASPECT, 0, &aspect) != FcResultMatch) aspect = 1.0; - + fi->ysize = (FT_F26Dot6) (dsize * 64.0); fi->xsize = (FT_F26Dot6) (dsize * aspect * 64.0); @@ -455,7 +445,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail1; } - + /* * Get rgba value */ @@ -468,7 +458,20 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail1; } - + + /* + * Get lcd_filter value + */ + switch (FcPatternGetInteger (pattern, FC_LCD_FILTER, 0, &fi->lcd_filter)) { + case FcResultNoMatch: + fi->lcd_filter = FC_LCD_DEFAULT; + break; + case FcResultMatch: + break; + default: + goto bail1; + } + /* * Get matrix and transform values */ @@ -489,8 +492,8 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) fi->transform = (fi->matrix.xx != 0x10000 || fi->matrix.xy != 0 || fi->matrix.yx != 0 || fi->matrix.yy != 0x10000); - - /* + + /* * Get render value, set to false if no Render extension present */ if (info->hasRender) @@ -507,7 +510,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) } else fi->render = FcFalse; - + /* * Compute glyph load flags */ @@ -530,7 +533,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) /* disable bitmaps when anti-aliasing or transforming glyphs */ if ((!bitmap && fi->antialias) || fi->transform) fi->load_flags |= FT_LOAD_NO_BITMAP; - + /* disable hinting if requested */ switch (FcPatternGetBool (pattern, FC_HINTING, 0, &hinting)) { case FcResultNoMatch: @@ -542,7 +545,6 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) goto bail1; } -#ifdef FC_EMBOLDEN switch (FcPatternGetBool (pattern, FC_EMBOLDEN, 0, &fi->embolden)) { case FcResultNoMatch: fi->embolden = FcFalse; @@ -552,11 +554,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail1; } -#else - fi->embolden = FcFalse; -#endif - -#ifdef FC_HINT_STYLE + switch (FcPatternGetInteger (pattern, FC_HINT_STYLE, 0, &hint_style)) { case FcResultNoMatch: hint_style = FC_HINT_FULL; @@ -566,12 +564,9 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail1; } -#endif if (!hinting -#ifdef FC_HINT_STYLE || hint_style == FC_HINT_NONE -#endif ) { fi->load_flags |= FT_LOAD_NO_HINTING; @@ -582,15 +577,11 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) */ if (fi->antialias) { -#ifdef FC_HINT_STYLE -#ifdef FT_LOAD_TARGET_LIGHT if (FC_HINT_NONE < hint_style && hint_style < FC_HINT_FULL) { fi->load_flags |= FT_LOAD_TARGET_LIGHT; } else -#endif -#endif { /* autohinter will snap stems to integer widths, when * the LCD targets are used. @@ -598,24 +589,18 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) switch (fi->rgba) { case FC_RGBA_RGB: case FC_RGBA_BGR: -#ifdef FT_LOAD_TARGET_LCD fi->load_flags |= FT_LOAD_TARGET_LCD; -#endif break; case FC_RGBA_VRGB: case FC_RGBA_VBGR: -#ifdef FT_LOAD_TARGET_LCD_V fi->load_flags |= FT_LOAD_TARGET_LCD_V; -#endif break; } } } -#ifdef FT_LOAD_TARGET_MONO else fi->load_flags |= FT_LOAD_TARGET_MONO; -#endif - + /* set vertical layout if requested */ switch (FcPatternGetBool (pattern, FC_VERTICAL_LAYOUT, 0, &vertical_layout)) { case FcResultNoMatch: @@ -657,7 +642,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) if (!global_advance) fi->load_flags |= FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH; - + /* * Get requested spacing value */ @@ -670,7 +655,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) default: goto bail1; } - + /* * Check for minspace */ @@ -685,7 +670,7 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) goto bail1; } /* - * Check for fixed pixel spacing + * Check for fixed pixel spacing */ switch (FcPatternGetInteger (pattern, FC_CHAR_WIDTH, 0, &fi->char_width)) { case FcResultNoMatch: @@ -709,12 +694,12 @@ XftFontInfoFill (Display *dpy, _Xconst FcPattern *pattern, XftFontInfo *fi) while (nhash--) hash += *hashp++; fi->hash = hash; - + /* * All done */ return FcTrue; - + bail1: _XftReleaseFile (fi->file); fi->file = NULL; @@ -736,7 +721,7 @@ XftFontInfoCreate (Display *dpy, _Xconst FcPattern *pattern) if (!fi) return NULL; - + if (!XftFontInfoFill (dpy, pattern, fi)) { free (fi); @@ -759,7 +744,7 @@ XftFontInfoHash (_Xconst XftFontInfo *fi) { return fi->hash; } - + _X_EXPORT FcBool XftFontInfoEqual (_Xconst XftFontInfo *a, _Xconst XftFontInfo *b) { @@ -767,8 +752,8 @@ XftFontInfoEqual (_Xconst XftFontInfo *a, _Xconst XftFontInfo *b) } _X_EXPORT XftFont * -XftFontOpenInfo (Display *dpy, - FcPattern *pattern, +XftFontOpenInfo (Display *dpy, + FcPattern *pattern, XftFontInfo *fi) { XftDisplayInfo *info = _XftDisplayInfoGet (dpy, True); @@ -803,14 +788,14 @@ XftFontOpenInfo (Display *dpy, } /* - * No existing font, create another. + * No existing font, create another. */ - + if (XftDebug () & XFT_DBG_CACHE) printf ("New font %s/%d size %dx%d\n", fi->file->file, fi->file->id, (int) fi->xsize >> 6, (int) fi->ysize >> 6); - + if (FcPatternGetInteger (pattern, XFT_MAX_GLYPH_MEMORY, 0, &max_glyph_memory) != FcResultMatch) max_glyph_memory = XFT_FONT_MAX_GLYPH_MEMORY; @@ -832,7 +817,7 @@ XftFontOpenInfo (Display *dpy, charset = FcCharSetCopy (charset); else charset = FcFreeTypeCharSet (face, FcConfigGetBlanks (NULL)); - + antialias = fi->antialias; if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) antialias = FcFalse; @@ -860,13 +845,13 @@ XftFontOpenInfo (Display *dpy, { format = XRenderFindStandardFormat (dpy, PictStandardA1); } - + if (!format) goto bail2; } else format = NULL; - + if (charset) { num_unicode = FcCharSetCount (charset); @@ -879,17 +864,17 @@ XftFontOpenInfo (Display *dpy, hash_value = 0; rehash_value = 0; } - + /* * Sometimes the glyphs are numbered 1..n, other times 0..n-1, * accept either numbering scheme by making room in the table */ num_glyphs = face->num_glyphs + 1; - alloc_size = (sizeof (XftFontInt) + + alloc_size = (sizeof (XftFontInt) + num_glyphs * sizeof (XftGlyph *) + hash_value * sizeof (XftUcsHash)); font = malloc (alloc_size); - + if (!font) goto bail2; @@ -901,12 +886,12 @@ XftFontOpenInfo (Display *dpy, if (fi->transform) { FT_Vector vector; - + vector.x = 0; vector.y = face->size->metrics.descender; FT_Vector_Transform (&vector, &fi->matrix); descent = -(vector.y >> 6); - + vector.x = 0; vector.y = face->size->metrics.ascender; FT_Vector_Transform (&vector, &fi->matrix); @@ -934,7 +919,7 @@ XftFontOpenInfo (Display *dpy, font->public.ascent = ascent; font->public.descent = descent; font->public.height = height; - + if (fi->char_width) font->public.max_advance_width = fi->char_width; else @@ -952,7 +937,7 @@ XftFontOpenInfo (Display *dpy, } font->public.charset = charset; font->public.pattern = pattern; - + /* * Management fields */ @@ -960,10 +945,10 @@ XftFontOpenInfo (Display *dpy, font->next = info->fonts; info->fonts = &font->public; - + font->hash_next = *bucket; *bucket = &font->public; - + /* * Copy the info over */ @@ -978,7 +963,7 @@ XftFontOpenInfo (Display *dpy, * bump XftFile reference count */ font->info.file->ref++; - + /* * Per glyph information */ @@ -1001,18 +986,18 @@ XftFontOpenInfo (Display *dpy, */ font->glyphset = 0; font->format = format; - + /* * Glyph memory management fields */ font->glyph_memory = 0; font->max_glyph_memory = max_glyph_memory; font->use_free_glyphs = info->use_free_glyphs; - + _XftUnlockFile (fi->file); return &font->public; - + bail2: FcCharSetDestroy (charset); bail1: @@ -1050,7 +1035,7 @@ XftFontDestroy (Display *dpy, XftFont *public) XftDisplayInfo *info = _XftDisplayInfoGet (dpy, False); XftFontInt *font = (XftFontInt *) public; int i; - + /* note reduction in memory use */ if (info) info->glyph_memory -= font->glyph_memory; @@ -1070,11 +1055,11 @@ XftFontDestroy (Display *dpy, XftFont *public) free (xftg); } } - + /* Free the pattern and the charset */ FcPatternDestroy (font->public.pattern); FcCharSetDestroy (font->public.charset); - + /* Finally, free the font structure */ XftMemFree (XFT_MEM_FONT, sizeof (XftFontInt) + font->num_glyphs * sizeof (XftGlyph *) + @@ -1087,7 +1072,7 @@ XftFontFindNthUnref (XftDisplayInfo *info, int n) { XftFont *public; XftFontInt *font; - + for (public = info->fonts; public; public = font->next) { font = (XftFontInt*) public; @@ -1148,10 +1133,10 @@ XftFontClose (Display *dpy, XftFont *public) { XftDisplayInfo *info = _XftDisplayInfoGet (dpy, False); XftFontInt *font = (XftFontInt *) public; - + if (--font->ref != 0) return; - + if (info) { ++info->num_unref_fonts; diff --git a/src/xftglyphs.c b/src/xftglyphs.c index 10adb15..2f3dc5a 100644 --- a/src/xftglyphs.c +++ b/src/xftglyphs.c @@ -22,26 +22,9 @@ #include "xftint.h" #include +#include -#if HAVE_FT_GLYPHSLOT_EMBOLDEN #include -#endif - -static const int filters[3][3] = { - /* red */ -#if 0 -{ 65538*4/7,65538*2/7,65538*1/7 }, - /* green */ -{ 65536*1/4, 65536*2/4, 65537*1/4 }, - /* blue */ -{ 65538*1/7,65538*2/7,65538*4/7 }, -#endif -{ 65538*9/13,65538*3/13,65538*1/13 }, - /* green */ -{ 65538*1/6, 65538*4/6, 65538*1/6 }, - /* blue */ -{ 65538*1/13,65538*3/13,65538*9/13 }, -}; /* * Validate the memory info for a font @@ -69,6 +52,293 @@ _XftFontValidateMemory (Display *dpy, XftFont *public) font->glyph_memory, glyph_memory); } +/* we sometimes need to convert the glyph bitmap in a FT_GlyphSlot + * into a different format. For example, we want to convert a + * FT_PIXEL_MODE_LCD or FT_PIXEL_MODE_LCD_V bitmap into a 32-bit + * ARGB or ABGR bitmap. + * + * this function prepares a target descriptor for this operation. + * + * input :: target bitmap descriptor. The function will set its + * 'width', 'rows' and 'pitch' fields, and only these + * + * slot :: the glyph slot containing the source bitmap. this + * function assumes that slot->format == FT_GLYPH_FORMAT_BITMAP + * + * mode :: the requested final rendering mode. supported values are + * MONO, NORMAL (i.e. gray), LCD and LCD_V + * + * the function returns the size in bytes of the corresponding buffer, + * it's up to the caller to allocate the corresponding memory block + * before calling _fill_xrender_bitmap + * + * it also returns -1 in case of error (e.g. incompatible arguments, + * like trying to convert a gray bitmap into a monochrome one) + */ +static int +_compute_xrender_bitmap_size( FT_Bitmap* target, + FT_GlyphSlot slot, + FT_Render_Mode mode ) +{ + FT_Bitmap* ftbit; + int width, height, pitch; + + if ( slot->format != FT_GLYPH_FORMAT_BITMAP ) + return -1; + + // compute the size of the final bitmap + ftbit = &slot->bitmap; + + width = ftbit->width; + height = ftbit->rows; + pitch = (width+3) & ~3; + + switch ( ftbit->pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + if ( mode == FT_RENDER_MODE_MONO ) + { + pitch = (((width+31) & ~31) >> 3); + break; + } + /* fall-through */ + + case FT_PIXEL_MODE_GRAY: + if ( mode == FT_RENDER_MODE_LCD || + mode == FT_RENDER_MODE_LCD_V ) + { + /* each pixel is replicated into a 32-bit ARGB value */ + pitch = width*4; + } + break; + + case FT_PIXEL_MODE_LCD: + if ( mode != FT_RENDER_MODE_LCD ) + return -1; + + /* horz pixel triplets are packed into 32-bit ARGB values */ + width /= 3; + pitch = width*4; + break; + + case FT_PIXEL_MODE_LCD_V: + if ( mode != FT_RENDER_MODE_LCD_V ) + return -1; + + /* vert pixel triplets are packed into 32-bit ARGB values */ + height /= 3; + pitch = width*4; + break; + + default: /* unsupported source format */ + return -1; + } + + target->width = width; + target->rows = height; + target->pitch = pitch; + target->buffer = NULL; + + return pitch * height; +} + +/* this functions converts the glyph bitmap found in a FT_GlyphSlot + * into a different format (see _compute_xrender_bitmap_size) + * + * you should call this function after _compute_xrender_bitmap_size + * + * target :: target bitmap descriptor. Note that its 'buffer' pointer + * must point to memory allocated by the caller + * + * slot :: the glyph slot containing the source bitmap + * + * mode :: the requested final rendering mode + * + * bgr :: boolean, set if BGR or VBGR pixel ordering is needed + */ +static void +_fill_xrender_bitmap( FT_Bitmap* target, + FT_GlyphSlot slot, + FT_Render_Mode mode, + int bgr ) +{ + FT_Bitmap* ftbit = &slot->bitmap; + + { + unsigned char* srcLine = ftbit->buffer; + unsigned char* dstLine = target->buffer; + int src_pitch = ftbit->pitch; + int width = target->width; + int height = target->rows; + int pitch = target->pitch; + int subpixel; + int h; + + subpixel = ( mode == FT_RENDER_MODE_LCD || + mode == FT_RENDER_MODE_LCD_V ); + + if ( src_pitch < 0 ) + srcLine -= src_pitch*(ftbit->rows-1); + + switch ( ftbit->pixel_mode ) + { + case FT_PIXEL_MODE_MONO: + if ( subpixel ) /* convert mono to ARGB32 values */ + { + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + { + int x; + + for ( x = 0; x < width; x++ ) + { + if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) ) + ((unsigned int*)dstLine)[x] = 0xffffffffU; + } + } + } + else if ( mode == FT_RENDER_MODE_NORMAL ) /* convert mono to 8-bit gray */ + { + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + { + int x; + + for ( x = 0; x < width; x++ ) + { + if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) ) + dstLine[x] = 0xff; + } + } + } + else /* copy mono to mono */ + { + int bytes = (width+7) >> 3; + + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + memcpy( dstLine, srcLine, bytes ); + } + break; + + case FT_PIXEL_MODE_GRAY: + if ( subpixel ) /* convert gray to ARGB32 values */ + { + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + { + int x; + unsigned int* dst = (unsigned int*)dstLine; + + for ( x = 0; x < width; x++ ) + { + unsigned int pix = srcLine[x]; + + pix |= (pix << 8); + pix |= (pix << 16); + + dst[x] = pix; + } + } + } + else /* copy gray into gray */ + { + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + memcpy( dstLine, srcLine, width ); + } + break; + + case FT_PIXEL_MODE_LCD: + if ( !bgr ) + { + /* convert horizontal RGB into ARGB32 */ + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + { + int x; + unsigned char* src = srcLine; + unsigned int* dst = (unsigned int*)dstLine; + + for ( x = 0; x < width; x++, src += 3 ) + { + unsigned int pix; + + pix = ((unsigned int)src[0] << 16) | + ((unsigned int)src[1] << 8) | + ((unsigned int)src[2] ) | + ((unsigned int)src[1] << 24) ; + + dst[x] = pix; + } + } + } + else + { + /* convert horizontal BGR into ARGB32 */ + for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch ) + { + int x; + unsigned char* src = srcLine; + unsigned int* dst = (unsigned int*)dstLine; + + for ( x = 0; x < width; x++, src += 3 ) + { + unsigned int pix; + + pix = ((unsigned int)src[2] << 16) | + ((unsigned int)src[1] << 8) | + ((unsigned int)src[0] ) | + ((unsigned int)src[1] << 24) ; + + dst[x] = pix; + } + } + } + break; + + default: /* FT_PIXEL_MODE_LCD_V */ + /* convert vertical RGB into ARGB32 */ + if ( !bgr ) + { + for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch ) + { + int x; + unsigned char* src = srcLine; + unsigned int* dst = (unsigned int*)dstLine; + + for ( x = 0; x < width; x++, src += 1 ) + { + unsigned int pix; + + pix = ((unsigned int)src[0] << 16) | + ((unsigned int)src[src_pitch] << 8) | + ((unsigned int)src[src_pitch*2] ) | + ((unsigned int)src[src_pitch] << 24) ; + + dst[x] = pix; + } + } + } + else + { + for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch ) + { + int x; + unsigned char* src = srcLine; + unsigned int* dst = (unsigned int*)dstLine; + + for ( x = 0; x < width; x++, src += 1 ) + { + unsigned int pix; + + pix = ((unsigned int)src[src_pitch*2] << 16) | + ((unsigned int)src[src_pitch] << 8) | + ((unsigned int)src[0] ) | + ((unsigned int)src[src_pitch] << 24) ; + + dst[x] = pix; + } + } + } + } + } +} + _X_EXPORT void XftFontLoadGlyphs (Display *dpy, XftFont *pub, @@ -86,48 +356,37 @@ XftFontLoadGlyphs (Display *dpy, unsigned char bufLocal[4096]; unsigned char *bufBitmap = bufLocal; int bufSize = sizeof (bufLocal); - int size, pitch; - unsigned char bufLocalRgba[4096]; - unsigned char *bufBitmapRgba = bufLocalRgba; - int bufSizeRgba = sizeof (bufLocalRgba); - int sizergba, pitchrgba, widthrgba; + int size; int width; int height; int left, right, top, bottom; - int hmul = 1; - int vmul = 1; - FT_Bitmap ftbit; - FT_Matrix matrix; + FT_Bitmap* ftbit; + FT_Bitmap local; FT_Vector vector; - Bool subpixel = False; FT_Face face; + FT_Render_Mode mode = FT_RENDER_MODE_MONO; if (!info) return; face = XftLockFace (&font->public); - + if (!face) return; - matrix.xx = matrix.yy = 0x10000L; - matrix.xy = matrix.yx = 0; - if (font->info.antialias) { switch (font->info.rgba) { case FC_RGBA_RGB: case FC_RGBA_BGR: - matrix.xx *= 3; - subpixel = True; - hmul = 3; + mode = FT_RENDER_MODE_LCD; break; case FC_RGBA_VRGB: case FC_RGBA_VBGR: - matrix.yy *= 3; - vmul = 3; - subpixel = True; + mode = FT_RENDER_MODE_LCD_V; break; + default: + mode = FT_RENDER_MODE_NORMAL; } } @@ -137,7 +396,7 @@ XftFontLoadGlyphs (Display *dpy, xftg = font->glyphs[glyphindex]; if (!xftg) continue; - + if (XftDebug() & XFT_DBG_CACHE) _XftFontValidateMemory (dpy, pub); /* @@ -147,7 +406,9 @@ XftFontLoadGlyphs (Display *dpy, */ if (xftg->glyph_memory) continue; - + + FT_Library_SetLcdFilter( _XftFTlibrary, font->info.lcd_filter); + error = FT_Load_Glyph (face, glyphindex, font->info.load_flags); if (error) { @@ -168,20 +429,18 @@ XftFontLoadGlyphs (Display *dpy, #define CEIL(x) (((x)+63) & -64) #define TRUNC(x) ((x) >> 6) #define ROUND(x) (((x)+32) & -64) - + glyphslot = face->glyph; -#if HAVE_FT_GLYPHSLOT_EMBOLDEN /* * Embolden if required */ if (font->info.embolden) FT_GlyphSlot_Embolden(glyphslot); -#endif /* * Compute glyph metrics from FreeType information */ - if(font->info.transform && glyphslot->format != ft_glyph_format_bitmap) + if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP) { /* * calculate the true width by transforming all four corners. @@ -192,9 +451,9 @@ XftFontLoadGlyphs (Display *dpy, for(yc = 0; yc <= 1; yc++) { vector.x = glyphslot->metrics.horiBearingX + xc * glyphslot->metrics.width; vector.y = glyphslot->metrics.horiBearingY - yc * glyphslot->metrics.height; - FT_Vector_Transform(&vector, &font->info.matrix); + FT_Vector_Transform(&vector, &font->info.matrix); if (XftDebug() & XFT_DBG_GLYPH) - printf("Trans %d %d: %d %d\n", (int) xc, (int) yc, + printf("Trans %d %d: %d %d\n", (int) xc, (int) yc, (int) vector.x, (int) vector.y); if(xc == 0 && yc == 0) { left = right = vector.x; @@ -235,7 +494,7 @@ XftFontLoadGlyphs (Display *dpy, if (TRUNC(bottom) > font->public.max_advance_width) { int adjust; - + adjust = bottom - (font->public.max_advance_width << 6); if (adjust > top) adjust = top; @@ -249,7 +508,7 @@ XftFontLoadGlyphs (Display *dpy, if (TRUNC(right) > font->public.max_advance_width) { int adjust; - + adjust = right - (font->public.max_advance_width << 6); if (adjust > left) adjust = left; @@ -260,17 +519,14 @@ XftFontLoadGlyphs (Display *dpy, } } - if (font->info.antialias) - pitch = (width * hmul + 3) & ~3; - else - pitch = ((width + 31) & ~31) >> 3; - - size = pitch * height * vmul; + if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP ) + { + error = FT_Render_Glyph( face->glyph, mode ); + if (error) + continue; + } - xftg->metrics.width = width; - xftg->metrics.height = height; - xftg->metrics.x = -TRUNC(left); - xftg->metrics.y = TRUNC(top); + FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE ); if (font->info.spacing >= FC_MONO) { @@ -309,105 +565,13 @@ XftFontLoadGlyphs (Display *dpy, xftg->metrics.xOff = TRUNC(ROUND(glyphslot->advance.x)); xftg->metrics.yOff = -TRUNC(ROUND(glyphslot->advance.y)); } - - /* - * If the glyph is relatively large (> 1% of server memory), - * don't send it until necessary - */ - if (!need_bitmaps && size > info->max_glyph_memory / 100) - continue; - - /* - * Make sure there's enough buffer space for the glyph - */ - if (size > bufSize) - { - if (bufBitmap != bufLocal) - free (bufBitmap); - bufBitmap = (unsigned char *) malloc (size); - if (!bufBitmap) - continue; - bufSize = size; - } - memset (bufBitmap, 0, size); - /* - * Rasterize into the local buffer - */ - switch (glyphslot->format) { - case ft_glyph_format_outline: - ftbit.width = width * hmul; - ftbit.rows = height * vmul; - ftbit.pitch = pitch; - if (font->info.antialias) - ftbit.pixel_mode = ft_pixel_mode_grays; - else - ftbit.pixel_mode = ft_pixel_mode_mono; - - ftbit.buffer = bufBitmap; - - if (subpixel) - FT_Outline_Transform (&glyphslot->outline, &matrix); + // compute the size of the final bitmap + ftbit = &glyphslot->bitmap; - FT_Outline_Translate ( &glyphslot->outline, -left*hmul, -bottom*vmul ); + width = ftbit->width; + height = ftbit->rows; - FT_Outline_Get_Bitmap( _XftFTlibrary, &glyphslot->outline, &ftbit ); - break; - case ft_glyph_format_bitmap: - if (font->info.antialias) - { - unsigned char *srcLine, *dstLine; - int height; - int x; - int h, v; - - srcLine = glyphslot->bitmap.buffer; - dstLine = bufBitmap; - height = glyphslot->bitmap.rows; - while (height--) - { - for (x = 0; x < glyphslot->bitmap.width; x++) - { - /* always MSB bitmaps */ - unsigned char a = ((srcLine[x >> 3] & (0x80 >> (x & 7))) ? - 0xff : 0x00); - if (subpixel) - { - for (v = 0; v < vmul; v++) - for (h = 0; h < hmul; h++) - dstLine[v * pitch + x*hmul + h] = a; - } - else - dstLine[x] = a; - } - dstLine += pitch * vmul; - srcLine += glyphslot->bitmap.pitch; - } - } - else - { - unsigned char *srcLine, *dstLine; - int h, bytes; - - srcLine = glyphslot->bitmap.buffer; - dstLine = bufBitmap; - h = glyphslot->bitmap.rows; - bytes = (glyphslot->bitmap.width + 7) >> 3; - while (h--) - { - memcpy (dstLine, srcLine, bytes); - dstLine += pitch; - srcLine += glyphslot->bitmap.pitch; - } - } - break; - default: - if (XftDebug() & XFT_DBG_GLYPH) - printf ("glyph %d is not in a usable format\n", - (int) glyphindex); - continue; - } - if (XftDebug() & XFT_DBG_GLYPH) { printf ("glyph %d:\n", (int) glyphindex); @@ -423,29 +587,72 @@ XftFontLoadGlyphs (Display *dpy, int x, y; unsigned char *line; - line = bufBitmap; - for (y = 0; y < height * vmul; y++) + line = ftbit->buffer; + if (ftbit->pitch < 0) + line -= ftbit->pitch*(height-1); + + for (y = 0; y < height; y++) { - if (font->info.antialias) + if (font->info.antialias) { - static char den[] = { " .:;=+*#" }; - for (x = 0; x < pitch; x++) + static const char den[] = { " .:;=+*#" }; + for (x = 0; x < width; x++) printf ("%c", den[line[x] >> 5]); } else { - for (x = 0; x < pitch * 8; x++) + for (x = 0; x < width * 8; x++) { printf ("%c", line[x>>3] & (1 << (x & 7)) ? '#' : ' '); } } printf ("|\n"); - line += pitch; + line += ftbit->pitch; } printf ("\n"); } } + size = _compute_xrender_bitmap_size( &local, glyphslot, mode ); + if ( size < 0 ) + continue; + + xftg->metrics.width = local.width; + xftg->metrics.height = local.rows; + xftg->metrics.x = - glyphslot->bitmap_left; + xftg->metrics.y = glyphslot->bitmap_top; + + /* + * If the glyph is relatively large (> 1% of server memory), + * don't send it until necessary. + */ + if (!need_bitmaps && size > info->max_glyph_memory / 100) + continue; + + /* + * Make sure there is enough buffer space for the glyph. + */ + if (size > bufSize) + { + if (bufBitmap != bufLocal) + free (bufBitmap); + bufBitmap = (unsigned char *) malloc (size); + if (!bufBitmap) + continue; + bufSize = size; + } + memset (bufBitmap, 0, size); + + local.buffer = bufBitmap; + + _fill_xrender_bitmap( &local, glyphslot, mode, + (font->info.rgba == FC_RGBA_BGR || + font->info.rgba == FC_RGBA_VBGR ) ); + + /* + * Copy or convert into local buffer. + */ + /* * Use the glyph index as the wire encoding; it * might be more efficient for some locales to map @@ -455,146 +662,51 @@ XftFontLoadGlyphs (Display *dpy, */ glyph = (Glyph) glyphindex; - if (subpixel) + xftg->glyph_memory = size + sizeof (XftGlyph); + if (font->format) { - int x, y; - unsigned char *in_line, *out_line, *in; - unsigned int *out; - unsigned int red, green, blue; - int rf, gf, bf; - int s; - int o, os; - - /* - * Filter the glyph to soften the color fringes - */ - widthrgba = width; - pitchrgba = (widthrgba * 4 + 3) & ~3; - sizergba = pitchrgba * height; - - os = 1; - switch (font->info.rgba) { - case FC_RGBA_VRGB: - os = pitch; - case FC_RGBA_RGB: - default: - rf = 0; - gf = 1; - bf = 2; - break; - case FC_RGBA_VBGR: - os = pitch; - case FC_RGBA_BGR: - bf = 0; - gf = 1; - rf = 2; - break; - } - if (sizergba > bufSizeRgba) - { - if (bufBitmapRgba != bufLocalRgba) - free (bufBitmapRgba); - bufBitmapRgba = (unsigned char *) malloc (sizergba); - if (!bufBitmapRgba) - continue; - bufSizeRgba = sizergba; - } - memset (bufBitmapRgba, 0, sizergba); - in_line = bufBitmap; - out_line = bufBitmapRgba; - for (y = 0; y < height; y++) + if (!font->glyphset) + font->glyphset = XRenderCreateGlyphSet (dpy, font->format); + if ( mode == FT_RENDER_MODE_MONO ) { - in = in_line; - out = (unsigned int *) out_line; - in_line += pitch * vmul; - out_line += pitchrgba; - for (x = 0; x < width * hmul; x += hmul) + /* swap bits in each byte */ + if (BitmapBitOrder (dpy) != MSBFirst) { - red = green = blue = 0; - o = 0; - for (s = 0; s < 3; s++) + unsigned char *line = (unsigned char*)bufBitmap; + int i = size; + + while (i--) { - red += filters[rf][s]*in[x+o]; - green += filters[gf][s]*in[x+o]; - blue += filters[bf][s]*in[x+o]; - o += os; + int c = *line; + c = ((c << 1) & 0xaa) | ((c >> 1) & 0x55); + c = ((c << 2) & 0xcc) | ((c >> 2) & 0x33); + c = ((c << 4) & 0xf0) | ((c >> 4) & 0x0f); + *line++ = c; } - red = red / 65536; - green = green / 65536; - blue = blue / 65536; - *out++ = (green << 24) | (red << 16) | (green << 8) | blue; } } - - xftg->glyph_memory = sizergba + sizeof (XftGlyph); - if (font->format) + else if ( mode != FT_RENDER_MODE_NORMAL ) { - if (!font->glyphset) - font->glyphset = XRenderCreateGlyphSet (dpy, font->format); + /* invert ARGB <=> BGRA */ if (ImageByteOrder (dpy) != XftNativeByteOrder ()) - XftSwapCARD32 ((CARD32 *) bufBitmapRgba, sizergba >> 2); - XRenderAddGlyphs (dpy, font->glyphset, &glyph, - &xftg->metrics, 1, - (char *) bufBitmapRgba, sizergba); - } - else - { - if (sizergba) - { - xftg->bitmap = malloc (sizergba); - if (xftg->bitmap) - memcpy (xftg->bitmap, bufBitmapRgba, sizergba); - } - else - xftg->bitmap = NULL; + XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2); } + XRenderAddGlyphs (dpy, font->glyphset, &glyph, + &xftg->metrics, 1, + (char *) bufBitmap, size); } else { - xftg->glyph_memory = size + sizeof (XftGlyph); - if (font->format) + if (size) { - /* - * swap bit order around; FreeType is always MSBFirst - */ - if (!font->info.antialias) - { - if (BitmapBitOrder (dpy) != MSBFirst) - { - unsigned char *line; - unsigned char c; - int i; - - line = (unsigned char *) bufBitmap; - i = size; - while (i--) - { - c = *line; - c = ((c << 1) & 0xaa) | ((c >> 1) & 0x55); - c = ((c << 2) & 0xcc) | ((c >> 2) & 0x33); - c = ((c << 4) & 0xf0) | ((c >> 4) & 0x0f); - *line++ = c; - } - } - } - if (!font->glyphset) - font->glyphset = XRenderCreateGlyphSet (dpy, font->format); - XRenderAddGlyphs (dpy, font->glyphset, &glyph, - &xftg->metrics, 1, - (char *) bufBitmap, size); + xftg->bitmap = malloc (size); + if (xftg->bitmap) + memcpy (xftg->bitmap, bufBitmap, size); } else - { - if (size) - { - xftg->bitmap = malloc (size); - if (xftg->bitmap) - memcpy (xftg->bitmap, bufBitmap, size); - } - else - xftg->bitmap = NULL; - } + xftg->bitmap = NULL; } + font->glyph_memory += xftg->glyph_memory; info->glyph_memory += xftg->glyph_memory; if (XftDebug() & XFT_DBG_CACHE) @@ -605,8 +717,6 @@ XftFontLoadGlyphs (Display *dpy, } if (bufBitmap != bufLocal) free (bufBitmap); - if (bufBitmapRgba != bufLocalRgba) - free (bufBitmapRgba); XftUnlockFace (&font->public); } @@ -622,7 +732,7 @@ XftFontUnloadGlyphs (Display *dpy, FT_UInt glyphindex; Glyph glyphBuf[1024]; int nused; - + nused = 0; while (nglyph--) { @@ -656,7 +766,7 @@ XftFontUnloadGlyphs (Display *dpy, free (xftg); XftMemFree (XFT_MEM_GLYPH, sizeof (XftGlyph)); font->glyphs[glyphindex] = NULL; - } + } if (font->glyphset && nused) XRenderFreeGlyphs (dpy, font->glyphset, glyphBuf, nused); } @@ -672,7 +782,7 @@ XftFontCheckGlyph (Display *dpy, XftFontInt *font = (XftFontInt *) pub; XftGlyph *xftg; int n; - + if (glyph >= font->num_glyphs) return FcFalse; xftg = font->glyphs[glyph]; @@ -715,14 +825,14 @@ XftCharExists (Display *dpy, #define Missing ((FT_UInt) ~0) _X_EXPORT FT_UInt -XftCharIndex (Display *dpy, +XftCharIndex (Display *dpy, XftFont *pub, FcChar32 ucs4) { XftFontInt *font = (XftFontInt *) pub; FcChar32 ent, offset; FT_Face face; - + if (!font->hash_value) return 0; @@ -765,7 +875,7 @@ _XftFontUncacheGlyph (Display *dpy, XftFont *pub) unsigned long glyph_memory; FT_UInt glyphindex; XftGlyph *xftg; - + if (!font->glyph_memory) return; if (font->use_free_glyphs) @@ -781,7 +891,7 @@ _XftFontUncacheGlyph (Display *dpy, XftFont *pub) } glyph_memory = 0; } - + if (XftDebug() & XFT_DBG_CACHE) _XftFontValidateMemory (dpy, pub); for (glyphindex = 0; glyphindex < font->num_glyphs; glyphindex++) diff --git a/src/xftinit.c b/src/xftinit.c index 43efc00..ff23722 100644 --- a/src/xftinit.c +++ b/src/xftinit.c @@ -43,7 +43,7 @@ XftGetVersion (void) } static struct { - char *name; + const char *name; int alloc_count; int alloc_mem; int free_count; @@ -58,7 +58,7 @@ static struct { static int XftAllocCount, XftAllocMem; static int XftFreeCount, XftFreeMem; -static int XftMemNotice = 1*1024*1024; +static const int XftMemNotice = 1*1024*1024; static int XftAllocNotify, XftFreeNotify; diff --git a/src/xftint.h b/src/xftint.h index 3aafecf..1658977 100644 --- a/src/xftint.h +++ b/src/xftint.h @@ -68,16 +68,6 @@ # define _X_EXPORT /**/ #endif -#ifndef HAVE_CONFIG_H -# if (FREETYPE_MAJOR > 2 || \ - (FREETYPE_MAJOR == 2 && (FREETYPE_MINOR > 1 || \ - (FREETYPE_MINOR == 1 && FREETYPE_PATCH >= 5)))) -# define HAVE_FT_BITMAP_SIZE_Y_PPEM 1 -# else -# define HAVE_FT_BITMAP_SIZE_Y_PPEM 0 -# endif -#endif - typedef struct _XftMatcher { char *object; double (*compare) (char *object, FcValue value1, FcValue value2); @@ -115,14 +105,14 @@ typedef struct _XftUcsHash { typedef struct _XftFtFile { struct _XftFtFile *next; int ref; /* number of font infos using this file */ - + char *file; /* file name */ int id; /* font index within that file */ FT_F26Dot6 xsize; /* current xsize setting */ FT_F26Dot6 ysize; /* current ysize setting */ FT_Matrix matrix; /* current matrix setting */ - + int lock; /* lock count; can't unload unless 0 */ FT_Face face; /* pointer to face; only valid when lock */ } XftFtFile; @@ -145,6 +135,7 @@ struct _XftFontInfo { FcBool antialias; /* doing antialiasing */ FcBool embolden; /* force emboldening */ int rgba; /* subpixel order */ + int lcd_filter; /* lcd filter */ FT_Matrix matrix; /* glyph transformation matrix */ FcBool transform; /* non-identify matrix? */ FT_Int load_flags; /* glyph load flags */ @@ -337,7 +328,7 @@ FcFontSet *XftListFontSets (FcFontSet **sets, int nsets, FcPattern *p, FcObjectS void XftRectCore (XftDraw *draw, _Xconst XftColor *color, - int x, + int x, int y, unsigned int width, unsigned int height); @@ -376,7 +367,7 @@ void _XftDisplayManageMemory (Display *dpy); int -XftDefaultParseBool (char *v); +XftDefaultParseBool (const char *v); FcBool XftDefaultGetBool (Display *dpy, const char *object, int screen, FcBool def); @@ -401,7 +392,7 @@ FcBool XftDrawRenderPrepare (XftDraw *draw); /* xftextent.c */ - + /* xftfont.c */ /* xftfreetype.c */ @@ -436,7 +427,7 @@ XftListFontsPatternObjects (Display *dpy, FcObjectSet *os); /* xftname.c */ -void +void _XftNameInit (void); /* xftrender.c */ diff --git a/src/xftlist.c b/src/xftlist.c index 0780f7c..f159745 100644 --- a/src/xftlist.c +++ b/src/xftlist.c @@ -45,12 +45,12 @@ XftListFonts (Display *dpy, va_start (va, screen); FcPatternVapBuild (pattern, NULL, va); - + first = va_arg (va, const char *); FcObjectSetVapBuild (os, first, va); - + va_end (va); - + fs = XftListFontsPatternObjects (dpy, screen, pattern, os); FcPatternDestroy (pattern); FcObjectSetDestroy (os); diff --git a/src/xftname.c b/src/xftname.c index a0c6be7..30dd6e0 100644 --- a/src/xftname.c +++ b/src/xftname.c @@ -33,7 +33,7 @@ static const FcObjectType _XftObjectTypes[] = { static FcBool _XftNameInitialized; -_X_HIDDEN void +_X_HIDDEN void _XftNameInit (void) { if (_XftNameInitialized) @@ -42,11 +42,11 @@ _XftNameInit (void) FcNameRegisterObjectTypes (_XftObjectTypes, NUM_OBJECT_TYPES); } -_X_EXPORT FcPattern +_X_EXPORT FcPattern *XftNameParse (const char *name) -{ +{ _XftNameInit (); - return FcNameParse ((FcChar8 *) name); + return FcNameParse ((FcChar8 *) name); } _X_EXPORT FcBool diff --git a/src/xftrender.c b/src/xftrender.c index 94c211b..b280c03 100644 --- a/src/xftrender.c +++ b/src/xftrender.c @@ -55,10 +55,10 @@ XftGlyphRender (Display *dpy, unsigned int char_local[NUM_LOCAL]; unsigned int *chars; FcBool glyphs_loaded; - + if (!font->format) return; - + /* * Load missing glyphs */ @@ -75,7 +75,7 @@ XftGlyphRender (Display *dpy, } if (nmissing) XftFontLoadGlyphs (dpy, pub, FcTrue, missing, nmissing); - + if (!font->glyphset) goto bail1; if (max < 0x100) @@ -169,12 +169,12 @@ XftGlyphSpecRender (Display *dpy, FcBool glyphs_loaded; int nelt; int x, y; - + if (!font->format) return; if (!nglyphs) return; - + /* * Load missing glyphs */ @@ -192,7 +192,7 @@ XftGlyphSpecRender (Display *dpy, } if (nmissing) XftFontLoadGlyphs (dpy, pub, FcTrue, missing, nmissing); - + if (!font->glyphset) goto bail1; @@ -224,7 +224,7 @@ XftGlyphSpecRender (Display *dpy, char8 = (char *) chars; char16 = (unsigned short *) chars; char32 = (unsigned int *) chars; - + /* * Compute the number of glyph elts needed */ @@ -249,7 +249,7 @@ XftGlyphSpecRender (Display *dpy, /* Substitute default for non-existant glyphs */ if (g >= font->num_glyphs || !font->glyphs[g]) g = 0; - /* + /* * check to see if the glyph is placed where it would * fall using the normal spacing */ @@ -354,7 +354,7 @@ XftCharSpecRender (Display *dpy, Picture src, XftFont *pub, Picture dst, - int srcx, + int srcx, int srcy, _Xconst XftCharSpec *chars, int len) @@ -396,7 +396,7 @@ static XRenderPictFormat * XftPreferFormat (Display *dpy, XRenderPictFormat *a, XRenderPictFormat *b) { XRenderPictFormat *prefer = NULL; - + if (a == b) prefer = a; else if (XftIsARGBFormat(a) != XftIsARGBFormat(b)) @@ -439,10 +439,10 @@ XftGlyphFontSpecRender (Display *dpy, FcBool glyphs_loaded; int nelt; int x, y; - + if (!nglyphs) return; - + /* * Load missing glyphs. Have to load them * one at a time in case the font changes @@ -467,7 +467,7 @@ XftGlyphFontSpecRender (Display *dpy, if (!font->glyphset) goto bail1; } - + /* * See what encoding size is needed */ @@ -496,7 +496,7 @@ XftGlyphFontSpecRender (Display *dpy, char8 = (char *) chars; char16 = (unsigned short *) chars; char32 = (unsigned int *) chars; - + /* * Compute the number of glyph elts needed */ @@ -531,7 +531,7 @@ XftGlyphFontSpecRender (Display *dpy, /* Substitute default for non-existant glyphs */ if (g >= font->num_glyphs || !font->glyphs[g]) g = 0; - /* + /* * check to see if the glyph is placed where it would * fall using the normal spacing */ @@ -571,7 +571,7 @@ XftGlyphFontSpecRender (Display *dpy, { XftFont *pub = glyphs[i].font; XftFontInt *font = (XftFontInt *) pub; - + g = glyphs[i].glyph; /* Substitute default for non-existant glyphs */ if (g >= font->num_glyphs || !font->glyphs[g]) @@ -699,7 +699,7 @@ XftTextRender8 (Display *dpy, } for (i = 0; i < len; i++) glyphs[i] = XftCharIndex (dpy, pub, string[i]); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -731,7 +731,7 @@ XftTextRender16 (Display *dpy, } for (i = 0; i < len; i++) glyphs[i] = XftCharIndex (dpy, pub, string[i]); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -762,9 +762,9 @@ XftTextRender16BE (Display *dpy, return; } for (i = 0; i < len; i++) - glyphs[i] = XftCharIndex (dpy, pub, + glyphs[i] = XftCharIndex (dpy, pub, (string[i*2]<<8) | string[i*2+1]); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -795,9 +795,9 @@ XftTextRender16LE (Display *dpy, return; } for (i = 0; i < len; i++) - glyphs[i] = XftCharIndex (dpy, pub, + glyphs[i] = XftCharIndex (dpy, pub, string[i*2] | (string[i*2+1]<<8)); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -829,7 +829,7 @@ XftTextRender32 (Display *dpy, } for (i = 0; i < len; i++) glyphs[i] = XftCharIndex (dpy, pub, string[i]); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -860,12 +860,12 @@ XftTextRender32BE (Display *dpy, return; } for (i = 0; i < len; i++) - glyphs[i] = XftCharIndex (dpy, pub, + glyphs[i] = XftCharIndex (dpy, pub, (string[i*4] << 24) | (string[i*4+1] << 16) | (string[i*4+2] << 8) | (string[i*4+3])); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); @@ -896,12 +896,12 @@ XftTextRender32LE (Display *dpy, return; } for (i = 0; i < len; i++) - glyphs[i] = XftCharIndex (dpy, pub, + glyphs[i] = XftCharIndex (dpy, pub, (string[i*4]) | (string[i*4+1] << 8) | (string[i*4+2] << 16) | (string[i*4+3] << 24)); - XftGlyphRender (dpy, op, src, pub, dst, + XftGlyphRender (dpy, op, src, pub, dst, srcx, srcy, x, y, glyphs, len); if (glyphs != glyphs_local) free (glyphs); diff --git a/src/xftswap.c b/src/xftswap.c index 942efdb..e7748c9 100644 --- a/src/xftswap.c +++ b/src/xftswap.c @@ -101,7 +101,7 @@ XftSwapImage (XImage *image) { switch (image->bits_per_pixel) { case 32: - XftSwapCARD32 ((CARD32 *) image->data, + XftSwapCARD32 ((CARD32 *) image->data, image->height * image->bytes_per_line >> 2); break; case 24: diff --git a/src/xftxlfd.c b/src/xftxlfd.c index 7c19911..dee2f44 100644 --- a/src/xftxlfd.c +++ b/src/xftxlfd.c @@ -119,42 +119,42 @@ XftXlfdParse (const char *xlfd_orig, FcBool ignore_scalable, FcBool complete) if (!pixel) return NULL; - + pat = FcPatternCreate (); if (!pat) return NULL; - + save = (char *) malloc (strlen (foundry) + 1); - + if (!save) { FcPatternDestroy (pat); return NULL; } if (!FcPatternAddString (pat, XFT_XLFD, (FcChar8 *) xlfd_orig)) goto bail; - + XftSplitStr (foundry, save); if (save[0] && strcmp (save, "*") != 0) if (!FcPatternAddString (pat, FC_FOUNDRY, (FcChar8 *) save)) goto bail; - + XftSplitStr (family, save); if (save[0] && strcmp (save, "*") != 0) if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) save)) goto bail; - + weight_value = _XftMatchSymbolic (XftXlfdWeights, NUM_XLFD_WEIGHTS, XftSplitStr (weight_name, save), FC_WEIGHT_MEDIUM); - if (!FcPatternAddInteger (pat, FC_WEIGHT, weight_value)) + if (!FcPatternAddInteger (pat, FC_WEIGHT, weight_value)) goto bail; - + slant_value = _XftMatchSymbolic (XftXlfdSlants, NUM_XLFD_SLANTS, XftSplitStr (slant, save), FC_SLANT_ROMAN); - if (!FcPatternAddInteger (pat, FC_SLANT, slant_value)) + if (!FcPatternAddInteger (pat, FC_SLANT, slant_value)) goto bail; - + dpixel = (double) pixel; - + if (point > 0) { if (!FcPatternAddDouble (pat, FC_SIZE, ((double) point) / 10.0)) goto bail; @@ -163,13 +163,13 @@ XftXlfdParse (const char *xlfd_orig, FcBool ignore_scalable, FcBool complete) dpixel = (double) point * (double) resy / 720.0; } } - + if (dpixel > 0) if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE, dpixel)) goto bail; - + free (save); return pat; - + bail: free (save); FcPatternDestroy (pat); diff --git a/xft.pc.in b/xft.pc.in old mode 100755 new mode 100644 index c719830..68d1089 --- a/xft.pc.in +++ b/xft.pc.in @@ -6,8 +6,7 @@ includedir=@includedir@ Name: Xft Description: X FreeType library Version: @VERSION@ -#Requires: xproto -Requires: xrender, fontconfig, freetype2 +Requires: xproto Requires.private: xrender, fontconfig, freetype2 Cflags: -I${includedir} Libs: -L${libdir} -lXft -- 2.7.4