+commit 0847b64af14acefaa7aa86b3cec8632497babe73
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Sat Jun 2 09:36:29 2012 -0700
+
+ libXft 2.3.1
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 1066d2b34db6124fbb0105f5d30f560217fd2a5a
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date: Sat Mar 10 23:09:21 2012 -0800
+
+ Dead code removal
+
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 84b8b5b46773f9b686d57f28092824b86bffed9d
+Author: Mikael Magnusson <mikachu@gmail.com>
+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 <jeremyhu@apple.com>
+
+commit b543efafefb71fb1f87ee9c1c261e86c8ca29e76
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Wed Mar 7 20:12:27 2012 -0800
+
+ libXft 2.3.0
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 301029c9a1d9429009eaf08bb726357d4e94780d
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+
+commit 550b2f76401c292d982700b60326e0a837e391b4
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+
+commit 21a59c10803582c8f90d3b5f32e8f0240c050adf
+Author: Tom \"spot\" Callaway <tcallawa@redhat.com>
+Date: Thu Oct 6 15:58:29 2011 -0400
+
+ compiler noise cleanups related to subpixel LCD support
+
+ Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 6f1d7bcdd461b1f6cc64370793f52d7c170187d0
+Author: Tom \"spot\" Callaway <tcallawa@redhat.com>
+Date: Thu Oct 6 15:41:10 2011 -0400
+
+ Subpixel LCD text rendering improvements
+
+ Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 0e0efb8b26a241f8370053bc3686f7abc69357c1
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date: Mon Sep 26 15:41:49 2011 -0700
+
+ Add const attributes to fix gcc -Wwrite-strings warnings
+
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+ Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
+
+commit df353cc7fe40fadc6e48586e95a0cbf1d2e33cfa
+Author: Ross Burton <ross@burtonini.com>
+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 <jeremyhu@apple.com>
+
+commit 5cac9764a55c96fee64f63748c054be81fcaadf4
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <memsize@videotron.ca>
+ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit d39337048d31245b69e1b72b98beb957f52ba4e6
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+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 <jeremyhu@apple.com>
+ Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+ Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 3ad77b636978746786546ab2b779730997839f63
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit d274ffc91b22bb8f3a2447237491cbe04f2ee0c3
+Author: Derek Wang <Derek.Wang@sun.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 652d9b47fc902e12c8e28481742c382676f1d035
+Author: Jay Cotton <jay.cotton@oracle.com>
+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 <alan.coopersmith@oracle.com>
+
+commit 1e03ac60d1221d5c16b7f4797ab0c461f13b123a
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+Date: Fri Jan 28 19:41:37 2011 -0500
+
+ config: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
+
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 791d10dbac030d6a164f54a7adb9b6c816c68930
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 28d61e969800820b1483d41445befcd1bf35fa85
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <memsize@videotron.ca>
+
+commit 0e3c21ab0aeb99ca76ac2535f4618cb1949b7f40
+Author: Gaetan Nadon <memsize@videotron.ca>
+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 <rbbrnc@gmail.com>
+ Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 9c23173cf1ff861bdb8538e3aa21ec509b0d87d8
+Author: Roberto Branciforti <rbbrnc@gmail.com>
+Date: Mon Jan 17 22:32:15 2011 +0100
+
+ libXft: Fix variable assignment.
+
+ Signed-off-by: Roberto Branciforti <rbbrnc@gmail.com>
+ Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net>
+ Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
commit b9d4a2b5be71ca883f5a876500edb0a1a9add0cf
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Fri Oct 29 16:21:18 2010 -0700
--- /dev/null
+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 `<wchar.h>' 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.
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.
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.
+++ /dev/null
-#! /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 "$@"
-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
#
# 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)
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 <ft2build.h>
-#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
+++ /dev/null
-------------------------------------------------------
-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.
+++ /dev/null
-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 <sc1.lim@samsung.com> 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 <sc1.lim@samsung.com> 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 <doyoun.kang@samsung.com> 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 <sc1.lim@samsung.com> 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 <sc1.lim@samsung.com> 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 <loic.minier@ubuntu.com> 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 <kibi@debian.org> 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 <tjaalton@ubuntu.com> 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 <jcristau@debian.org> 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 <bryce@ubuntu.com> Thu, 26 Feb 2009 13:40:39 -0800
-
-xft (2.1.13-3) unstable; urgency=low
-
- * Upload to unstable.
-
- -- Julien Cristau <jcristau@debian.org> 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 <andersk@mit.edu> 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 <jcristau@debian.org> 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 <sc1.lim@samsung.com> 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 <sj76.park@samsung.com> 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 <sc1.lim@samsung.com> Sat, 20 Nov 2010 14:32:29 +0900
-
-libxft (1:2.1.13-7slp2) unstable; urgency=low
-
- * modify the package name
-
- -- SooChan Lim <sc1.lim@samsung.com> Thu, 25 Mar 2010 17:51:55 +0900
-
-libxft (1:2.1.13-6) unstable; urgency=low
-
- * Install .la files
-
- -- Sung-Jin Park <sj76.park@samsung.com> Mon, 07 Dec 2009 10:29:42 +0900
-
-libxft (1:2.1.13-5) unstable; urgency=low
-
- * Install *.so file
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Fri, 20 Nov 2009 16:55:57 +0900
-
-libxft (1:2.1.13-4) unstable; urgency=low
-
- * Remove .git folder
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> Fri, 20 Nov 2009 16:00:08 +0900
-
-libxft (1:2.1.13-3) unstable; urgency=low
-
- * Change the copywrite
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> 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 <dh79.pyun@samsung.com> Mon, 16 Nov 2009 14:59:38 +0900
-
-libxft (1:2.1.13-1) unstable; urgency=low
-
- * Initial Release.
-
- -- DoHyun Pyun <dh79.pyun@samsung.com> 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 <jcristau@debian.org> 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 <doko@ubuntu.com> 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 <bryce@ubuntu.com> 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 <jcristau@debian.org> 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 <bryce@ubuntu.com> 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 <scott@ubuntu.com> 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 <mjg59@srcf.ucam.org> 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 <mjg59@srcf.ucam.org> 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 <scott@ubuntu.com> Tue, 18 Sep 2007 17:39:18 +0100
-
-xft (2.1.12-2) unstable; urgency=low
-
- * Upload to unstable.
-
- -- Julien Cristau <jcristau@debian.org> 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 <jcristau@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dilinger@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <dnusinow@debian.org> 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 <daniel.stone@ubuntu.com> 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 <daniel.stone@ubuntu.com> Wed, 21 Dec 2005 13:13:31 +1100
-
-xft (2.1.8.1-0ubuntu1) dapper; urgency=low
-
- * New upstream release.
-
- -- Daniel Stone <daniel.stone@ubuntu.com> 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 <daniel.stone@ubuntu.com> 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 <fabbione@ubuntu.com> 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 <branden@debian.org> 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 <branden@debian.org> 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 <freetype/freetype.h> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <branden@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> Tue, 3 Dec 2002 23:04:12 -0500
-
-xft2 (2.0-4) unstable; urgency=low
-
- * debian/libxft2.install:
- - Install xft-config.
-
- -- Colin Walters <walters@debian.org> 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 <walters@debian.org> 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 <walters@debian.org> Mon, 14 Oct 2002 22:59:06 -0400
-
-xft2 (2.0-1) unstable; urgency=low
-
- * Initial version.
-
- -- Colin Walters <walters@debian.org> Sun, 13 Oct 2002 14:43:56 -0400
-
-vim:set ai tw=78 et sw=2 sts=2:
+++ /dev/null
-Source: libxft
-Section: devel
-Priority: optional
-Maintainer: SooChan Lim <sc1.lim@samsung.com>, Sangjin Lee <lsj119@samsung.com>, Ubuntu X-SWAT <ubuntu-x@lists.ubuntu.com>
-Uploaders: SooChan Lim <sc1.lim@samsung.com>, David Nusinow <dnusinow@debian.org>, Andres Salomon <dilinger@debian.org>, Cyril Brulebois <kibi@debian.org>, Doyoun Kang <doyoun.kang@samsung.com>
-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.
+++ /dev/null
-This package was downloaded from
-http://xorg.freedesktop.org/releases/individual/lib/
-
-This package was originally Debianized by Colin Walters
-<walters@debian.org> on Sun, 13 Oct 2002 15:01:50 -0400.
-
-Later versions were Debianized by Branden Robinson <branden@debian.org>.
-
-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 $
+++ /dev/null
-usr/include/X11/Xft/*
-usr/lib/libXft.a
-usr/lib/libXft.la
-usr/lib/libXft.so
-usr/lib/pkgconfig/*.pc
+++ /dev/null
-usr/lib/libXft.so.*
+++ /dev/null
-usr/lib/libXft.so.*
+++ /dev/null
---- 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 <freetype/ftoutln.h>
-
- #if HAVE_FT_GLYPHSLOT_EMBOLDEN
- #include <freetype/ftsynth.h>
- #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 */
+++ /dev/null
-100-libXft-2.1.10-lcd-filter-3.patch
+++ /dev/null
-#!/usr/bin/make -f
-# debian/rules for the Debian libxft package.
-# Copyright © 2004 Scott James Remnant <scott@netsplit.com>
-# Copyright © 2005 Daniel Stone <daniel@fooishbar.org>
-# Copyright © 2005 David Nusinow <dnusinow@debian.org>
-
-# 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
+++ /dev/null
-version=3
-http://xorg.freedesktop.org/releases/individual/lib/ libXft-(.*)\.tar\.gz
+++ /dev/null
-#!/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
+++ /dev/null
-#!/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 <http://www.gnu.org/copyleft/gpl.txt>.
-
-# Originally by Stephen Early <sde1000@debian.org>
-# Modified by Mark W. Eichin <eichin@kitten.gen.ma.us>
-# Modified by Adam Heath <doogie@debian.org>
-# Modified by Branden Robinson <branden@debian.org>
-# Modified by Fabio Massimo Di Nitto <fabbione@fabbione.net>
-# Modified by David Nusinow <dnusinow@debian.org>
-# 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:
+++ /dev/null
-# 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 <<EOF
-Error: package maintainer script attempted to use shell library without
-definining \$THIS_PACKAGE shell variable. Please report the package name,
-version, and the text of this error message to the Debian Bug Tracking System.
-Visit <http://www.debian.org/Bugs/Reporting> 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 <<EOF
-Error: package maintainer script attempted to use shell library without
-definining \$THIS_SCRIPT shell variable. Please report the package name,
-version, and the text of this error message to the Debian Bug Tracking System.
-Visit <http://www.debian.org/Bugs/Reporting> 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 " \
- "<http://www.debian.org/Bugs/Reporting> 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 " \
- "<http://www.debian.org/Bugs/Reporting> 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.
*/
/* #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
_XFUNCPROTOBEGIN
-
+
/* xftcolor.c */
Bool
XftColorAllocName (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 *
Pixmap bitmap);
XftDraw *
-XftDrawCreateAlpha (Display *dpy,
+XftDrawCreateAlpha (Display *dpy,
Pixmap pixmap,
int depth);
XftDrawString8 (XftDraw *draw,
_Xconst XftColor *color,
XftFont *pub,
- int x,
+ int x,
int y,
_Xconst FcChar8 *string,
int len);
XftDrawStringUtf8 (XftDraw *draw,
_Xconst XftColor *color,
XftFont *pub,
- int x,
+ int x,
int y,
_Xconst FcChar8 *string,
int len);
void
XftDrawRect (XftDraw *draw,
_Xconst XftColor *color,
- int x,
+ int x,
int y,
unsigned int width,
unsigned int height);
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);
XftFontInfoEqual (_Xconst XftFontInfo *a, _Xconst XftFontInfo *b);
XftFont *
-XftFontOpenInfo (Display *dpy,
- FcPattern *pattern,
+XftFontOpenInfo (Display *dpy,
+ FcPattern *pattern,
XftFontInfo *fi);
XftFont *
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);
...) _X_SENTINEL(0);
/* xftname.c */
-FcPattern
+FcPattern
*XftNameParse (_Xconst char *name);
/* xftrender.c */
Picture src,
XftFont *pub,
Picture dst,
- int srcx,
+ int srcx,
int srcy,
_Xconst XftCharSpec *chars,
int len);
/* xftxlfd.c */
FcPattern *
XftXlfdParse (_Xconst char *xlfd_orig, Bool ignore_scalable, Bool complete);
-
+
_XFUNCPROTOEND
#endif /* _XFT_H_ */
_XFUNCPROTOBEGIN
-
+
/* xftcolor.c */
Bool
XftColorAllocName (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 *
Pixmap bitmap);
XftDraw *
-XftDrawCreateAlpha (Display *dpy,
+XftDrawCreateAlpha (Display *dpy,
Pixmap pixmap,
int depth);
XftDrawString8 (XftDraw *draw,
_Xconst XftColor *color,
XftFont *pub,
- int x,
+ int x,
int y,
_Xconst FcChar8 *string,
int len);
XftDrawStringUtf8 (XftDraw *draw,
_Xconst XftColor *color,
XftFont *pub,
- int x,
+ int x,
int y,
_Xconst FcChar8 *string,
int len);
void
XftDrawRect (XftDraw *draw,
_Xconst XftColor *color,
- int x,
+ int x,
int y,
unsigned int width,
unsigned int height);
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);
XftFontInfoEqual (_Xconst XftFontInfo *a, _Xconst XftFontInfo *b);
XftFont *
-XftFontOpenInfo (Display *dpy,
- FcPattern *pattern,
+XftFontOpenInfo (Display *dpy,
+ FcPattern *pattern,
XftFontInfo *fi);
XftFont *
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);
...) _X_SENTINEL(0);
/* xftname.c */
-FcPattern
+FcPattern
*XftNameParse (_Xconst char *name);
/* xftrender.c */
Picture src,
XftFont *pub,
Picture dst,
- int srcx,
+ int srcx,
int srcy,
_Xconst XftCharSpec *chars,
int len);
/* xftxlfd.c */
FcPattern *
XftXlfdParse (_Xconst char *xlfd_orig, Bool ignore_scalable, Bool complete);
-
+
_XFUNCPROTOEND
#endif /* _XFT_H_ */
+++ /dev/null
---- 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 <freetype/ftoutln.h>
-
- #if HAVE_FT_GLYPHSLOT_EMBOLDEN
- #include <freetype/ftsynth.h>
- #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 */
-
--- /dev/null
+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
+++ /dev/null
-
-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*
-
XftColor *result)
{
XColor screen, exact;
-
+
if (!XAllocNamedColor (dpy, cmap, name, &screen, &exact))
{
/* XXX stick standard colormap stuff here */
else
{
XColor xcolor;
-
+
xcolor.red = color->red;
xcolor.green = color->green;
xcolor.blue = color->blue;
return True;
}
-_X_EXPORT void
+_X_EXPORT void
XftColorFree (Display *dpy,
Visual *visual,
Colormap cmap,
_X_HIDDEN void
XftRectCore (XftDraw *draw,
_Xconst XftColor *color,
- int x,
+ int x,
int y,
unsigned int width,
unsigned int height)
src = srcLine;
srcLine += stride;
w = width;
-
+
bitsMask = 0x80; /* FreeType is always MSB first */
bits = *src++;
-
+
xspan = x;
while (w)
{
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;
src = srcLine;
srcLine += stride;
w = width;
-
+
bits = *src++;
xspan = x;
while (w)
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;
src = srcLine;
srcLine += stride;
w = width;
-
+
bits = *src++;
xspan = x;
while (w)
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;
/*
* Primitives for converting between RGB values and TrueColor pixels
*/
-
+
static void
_XftExamineBitfield (unsigned long mask, int *shift, int *len)
{
_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)
src = srcLine;
srcLine += stride;
w = width;
-
+
bitsMask = 0x80; /* FreeType is always MSB first */
bits = *src++;
-
+
xspan = x;
while (w--)
{
int w;
srca = color->color.alpha >> 8;
-
+
/* This handles only RGB and BGR */
g = (color->color.green & 0xff00);
if (image->red_mask == 0xff0000)
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;
dstStride = image->bytes_per_line >> 2;
maskLine = (unsigned char *) xftg->bitmap;
maskStride = (width + 3) & ~3;
-
+
while (height--)
{
dst = dstLine;
int w;
srca = color->color.alpha >> 8;
-
+
/* This handles only RGB and BGR */
g = (color->color.green & 0xff00);
if (image->red_mask == 0xf800)
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;
dstStride = image->bytes_per_line >> 1;
maskLine = (unsigned char *) xftg->bitmap;
maskStride = (width + 3) & ~3;
-
+
while (height--)
{
dst = dstLine;
int w;
srca = color->color.alpha >> 8;
-
+
/* This handles only RGB and BGR */
g = (color->color.green & 0xff00);
if (image->red_mask == 0xf800)
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;
dstStride = image->bytes_per_line >> 1;
maskLine = (unsigned char *) xftg->bitmap;
maskStride = (width + 3) & ~3;
-
+
while (height--)
{
dst = dstLine;
unsigned long pixel;
int width, height;
int w, tx;
-
+
srca = color->color.alpha >> 8;
src = (srca << 24 |
(color->color.red & 0xff00) << 8 |
y -= xftg->metrics.y;
width = xftg->metrics.width;
height = xftg->metrics.height;
-
+
maskLine = (unsigned char *) xftg->bitmap;
maskStride = (width + 3) & ~3;
maskLine += maskStride;
w = width;
tx = x;
-
+
while (w--)
{
m = *mask++;
unsigned long pixel;
int width, height;
int w, tx;
-
+
srca = color->color.alpha >> 8;
src = (srca << 24 |
(color->color.red & 0xff00) << 8 |
y -= xftg->metrics.y;
width = xftg->metrics.width;
height = xftg->metrics.height;
-
+
mask = (CARD32 *) xftg->bitmap;
_XftExamineBitfield (image->red_mask, &r_shift, &r_len);
{
w = width;
tx = x;
-
+
while (w--)
{
ma = *mask++;
return FcTrue;
}
-typedef void (*XftSmoothGlyph) (XImage *image,
+typedef void (*XftSmoothGlyph) (XImage *image,
_Xconst XftGlyph *xftg,
int x,
int y,
glyphs_loaded = FcTrue;
if (nmissing)
XftFontLoadGlyphs (dpy, public, FcTrue, missing, nmissing);
-
+
g = glyphs;
n = nglyphs;
if ((font->info.antialias || color->color.alpha != 0xffff) &&
unsigned int depth;
int ox, oy;
XftSmoothGlyph smooth = _XftSmoothGlyphFind (draw, public);
-
+
XftGlyphExtents (dpy, public, glyphs, nglyphs, &gi);
if (!gi.width || !gi.height)
goto bail1;
{
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;
y2 = g_y2;
}
}
-
+
if (x1 == x2 || y1 == y2)
goto bail1;
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);
}
}
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;
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)
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))
{
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);
}
}
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)
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
*/
if (info->display == dpy)
break;
*prev = info->next;
-
+
free (info);
return 0;
}
{
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)
{
}
else
printf ("No Render format for default visual\n");
-
+
printf ("XftDisplayInfoGet initialized, hasRender set to \"%s\"\n",
info->hasRender ? "True" : "False");
}
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,
memset (info->fontHash, '\0', sizeof (XftFont *) * XFT_NUM_FONT_HASH);
return info;
-
+
bail1:
free (info);
bail0:
}
_X_HIDDEN int
-XftDefaultParseBool (char *v)
+XftDefaultParseBool (const char *v)
{
char c0, c1;
}
static Bool
-_XftDefaultInitBool (Display *dpy, FcPattern *pat, char *option)
+_XftDefaultInitBool (Display *dpy, FcPattern *pat, const char *option)
{
char *v;
int i;
}
static Bool
-_XftDefaultInitDouble (Display *dpy, FcPattern *pat, char *option)
+_XftDefaultInitDouble (Display *dpy, FcPattern *pat, const char *option)
{
char *v, *e;
double d;
}
static Bool
-_XftDefaultInitInteger (Display *dpy, FcPattern *pat, char *option)
+_XftDefaultInitInteger (Display *dpy, FcPattern *pat, const char *option)
{
char *v, *e;
int i;
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:
if (!info)
return FcResultNoMatch;
-
+
if (!info->defaults)
{
info->defaults = _XftDefaultInit (dpy);
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)
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,
}
#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,
}
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)
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;
XPixmapFormatValues *formats;
int nformats;
unsigned int depth;
-
+
if ((depth = XftDrawDepth (draw)) &&
(formats = XListPixmapFormats (draw->dpy, &nformats)))
{
draw = (XftDraw *) malloc (sizeof (XftDraw));
if (!draw)
return NULL;
-
+
draw->dpy = dpy;
draw->drawable = drawable;
draw->screen = _XftDrawScreen (dpy, drawable, visual);
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
*/
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;
{
Pixmap pix;
XRenderPictureAttributes pa;
-
+
pix = XCreatePixmap (dpy, RootWindow (dpy, draw->screen), 1, 1,
info->solidFormat->depth);
pa.repeat = True;
format = _XftDrawFormat (draw);
if (!format)
return FcFalse;
-
+
if (draw->subwindow_mode == IncludeInferiors)
{
pa.subwindow_mode = IncludeInferiors;
XSetForeground (draw->dpy, draw->core.gc, color->pixel);
return FcTrue;
}
-
+
_X_EXPORT Picture
XftDrawPicture (XftDraw *draw)
{
if (font->format)
{
Picture src;
-
+
if (_XftDrawRenderPrepare (draw) &&
(src = XftDrawSrcPicture (draw, color)))
XftGlyphRender (draw->dpy, _XftDrawOp (draw, color),
XftDrawString8 (XftDraw *draw,
_Xconst XftColor *color,
XftFont *pub,
- int x,
+ int x,
int y,
_Xconst FcChar8 *string,
int len)
if (XftDebug () & XFT_DBG_DRAW)
printf ("DrawString \"%*.*s\"\n", len, len, string);
-
+
if (len <= NUM_LOCAL)
glyphs = glyphs_local;
else
}
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);
}
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);
XftDrawStringUtf8 (XftDraw *draw,
_Xconst XftColor *color,
XftFont *pub,
- int x,
+ int x,
int y,
_Xconst FcChar8 *string,
int len)
_X_EXPORT void
XftDrawRect (XftDraw *draw,
_Xconst XftColor *color,
- int x,
+ int x,
int y,
unsigned int width,
unsigned int height)
*/
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;
case XftClipTypeNone:
break;
}
-
+
/*
* Set the clip
*/
case XftClipTypeNone:
break;
}
-
+
/*
* Set the clip
*/
XRenderPictureAttributes pa;
pa.subwindow_mode = mode;
- XRenderChangePicture (draw->dpy, draw->render.pict,
+ XRenderChangePicture (draw->dpy, draw->render.pict,
CPSubwindowMode, &pa);
}
if (draw->core.gc)
*/
#include "xftint.h"
-
+
_X_EXPORT void
XftGlyphExtents (Display *dpy,
XftFont *pub,
int left, right, top, bottom;
int overall_left, overall_right;
int overall_top, overall_bottom;
-
+
g = glyphs;
n = nglyphs;
nmissing = 0;
_X_EXPORT void
XftTextExtents8 (Display *dpy,
XftFont *pub,
- _Xconst FcChar8 *string,
+ _Xconst FcChar8 *string,
int len,
XGlyphInfo *extents)
{
_X_EXPORT void
XftTextExtents16 (Display *dpy,
XftFont *pub,
- _Xconst FcChar16 *string,
+ _Xconst FcChar16 *string,
int len,
XGlyphInfo *extents)
{
_X_EXPORT void
XftTextExtents32 (Display *dpy,
XftFont *pub,
- _Xconst FcChar32 *string,
+ _Xconst FcChar32 *string,
int len,
XGlyphInfo *extents)
{
_X_EXPORT void
XftTextExtentsUtf8 (Display *dpy,
XftFont *pub,
- _Xconst FcChar8 *string,
+ _Xconst FcChar8 *string,
int len,
XGlyphInfo *extents)
{
_X_EXPORT void
XftTextExtentsUtf16 (Display *dpy,
XftFont *pub,
- _Xconst FcChar8 *string,
+ _Xconst FcChar8 *string,
FcEndian endian,
int len,
XGlyphInfo *extents)
if (!XftInit (NULL))
return NULL;
-
+
new = FcPatternDuplicate (pattern);
if (!new)
return NULL;
FcPatternDestroy (pat);
if (!match)
return NULL;
-
+
font = XftFontOpenPattern (dpy, match);
if (!font)
{
else
printf ("Invalid name\n");
}
-
+
if (!pat)
return NULL;
match = XftFontMatch (dpy, screen, pat, &result);
FcPatternDestroy (pat);
if (!match)
return NULL;
-
+
font = XftFontOpenPattern (dpy, match);
if (!font)
{
printf ("No Font\n");
FcPatternDestroy (match);
}
-
+
return font;
}
else
FcPatternPrint (pat);
}
-
+
if (!pat)
return NULL;
match = XftFontMatch (dpy, screen, pat, &result);
FcPatternDestroy (pat);
if (!match)
return NULL;
-
+
font = XftFontOpenPattern (dpy, match);
if (!font)
{
printf ("No Font\n");
FcPatternDestroy (match);
}
-
+
return font;
}
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;
return NULL;
XftMemAlloc (XFT_MEM_FILE, sizeof(XftFtFile));
f->next = NULL;
-
+
f->ref = 1;
f->file = NULL;
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;
}
static void
-_XftLockError (char *reason)
+_XftLockError (const char *reason)
{
fprintf (stderr, "Xft: locking error %s\n", reason);
}
_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
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)
_XftReleaseFile (XftFtFile *f)
{
XftFtFile **prev;
-
+
if (--f->ref != 0)
return;
if (f->lock)
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);
}
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
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;
* Initialize the whole XftFontInfo so that padding doesn't interfere with
* hash or XftFontInfoEqual().
*/
-
+
memset (fi, '\0', sizeof(*fi));
/*
default:
goto bail0;
}
-
+
switch (FcPatternGetInteger (pattern, FC_INDEX, 0, &id)) {
case FcResultNoMatch:
id = 0;
default:
goto bail0;
}
-
+
if (filename)
fi->file = _XftGetFile (filename, id);
else if (FcPatternGetFTFace (pattern, FC_FT_FACE, 0, &face) == FcResultMatch
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);
default:
goto bail1;
}
-
+
/*
* Get rgba value
*/
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
*/
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)
}
else
fi->render = FcFalse;
-
+
/*
* Compute glyph load flags
*/
/* 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:
goto bail1;
}
-#ifdef FC_EMBOLDEN
switch (FcPatternGetBool (pattern, FC_EMBOLDEN, 0, &fi->embolden)) {
case FcResultNoMatch:
fi->embolden = FcFalse;
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;
default:
goto bail1;
}
-#endif
if (!hinting
-#ifdef FC_HINT_STYLE
|| hint_style == FC_HINT_NONE
-#endif
)
{
fi->load_flags |= FT_LOAD_NO_HINTING;
*/
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.
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:
if (!global_advance)
fi->load_flags |= FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH;
-
+
/*
* Get requested spacing value
*/
default:
goto bail1;
}
-
+
/*
* Check for minspace
*/
goto bail1;
}
/*
- * Check for fixed pixel spacing
+ * Check for fixed pixel spacing
*/
switch (FcPatternGetInteger (pattern, FC_CHAR_WIDTH, 0, &fi->char_width)) {
case FcResultNoMatch:
while (nhash--)
hash += *hashp++;
fi->hash = hash;
-
+
/*
* All done
*/
return FcTrue;
-
+
bail1:
_XftReleaseFile (fi->file);
fi->file = NULL;
if (!fi)
return NULL;
-
+
if (!XftFontInfoFill (dpy, pattern, fi))
{
free (fi);
{
return fi->hash;
}
-
+
_X_EXPORT FcBool
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);
}
/*
- * 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;
charset = FcCharSetCopy (charset);
else
charset = FcFreeTypeCharSet (face, FcConfigGetBlanks (NULL));
-
+
antialias = fi->antialias;
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
antialias = FcFalse;
{
format = XRenderFindStandardFormat (dpy, PictStandardA1);
}
-
+
if (!format)
goto bail2;
}
else
format = NULL;
-
+
if (charset)
{
num_unicode = FcCharSetCount (charset);
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;
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);
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
}
font->public.charset = charset;
font->public.pattern = pattern;
-
+
/*
* Management fields
*/
font->next = info->fonts;
info->fonts = &font->public;
-
+
font->hash_next = *bucket;
*bucket = &font->public;
-
+
/*
* Copy the info over
*/
* bump XftFile reference count
*/
font->info.file->ref++;
-
+
/*
* Per glyph information
*/
*/
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:
XftDisplayInfo *info = _XftDisplayInfoGet (dpy, False);
XftFontInt *font = (XftFontInt *) public;
int i;
-
+
/* note reduction in memory use */
if (info)
info->glyph_memory -= font->glyph_memory;
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 *) +
{
XftFont *public;
XftFontInt *font;
-
+
for (public = info->fonts; public; public = font->next)
{
font = (XftFontInt*) public;
{
XftDisplayInfo *info = _XftDisplayInfoGet (dpy, False);
XftFontInt *font = (XftFontInt *) public;
-
+
if (--font->ref != 0)
return;
-
+
if (info)
{
++info->num_unref_fonts;
#include "xftint.h"
#include <freetype/ftoutln.h>
+#include <freetype/ftlcdfil.h>
-#if HAVE_FT_GLYPHSLOT_EMBOLDEN
#include <freetype/ftsynth.h>
-#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
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,
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;
}
}
xftg = font->glyphs[glyphindex];
if (!xftg)
continue;
-
+
if (XftDebug() & XFT_DBG_CACHE)
_XftFontValidateMemory (dpy, pub);
/*
*/
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)
{
#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.
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;
if (TRUNC(bottom) > font->public.max_advance_width)
{
int adjust;
-
+
adjust = bottom - (font->public.max_advance_width << 6);
if (adjust > top)
adjust = top;
if (TRUNC(right) > font->public.max_advance_width)
{
int adjust;
-
+
adjust = right - (font->public.max_advance_width << 6);
if (adjust > left)
adjust = left;
}
}
- 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)
{
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);
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
*/
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)
}
if (bufBitmap != bufLocal)
free (bufBitmap);
- if (bufBitmapRgba != bufLocalRgba)
- free (bufBitmapRgba);
XftUnlockFace (&font->public);
}
FT_UInt glyphindex;
Glyph glyphBuf[1024];
int nused;
-
+
nused = 0;
while (nglyph--)
{
free (xftg);
XftMemFree (XFT_MEM_GLYPH, sizeof (XftGlyph));
font->glyphs[glyphindex] = NULL;
- }
+ }
if (font->glyphset && nused)
XRenderFreeGlyphs (dpy, font->glyphset, glyphBuf, nused);
}
XftFontInt *font = (XftFontInt *) pub;
XftGlyph *xftg;
int n;
-
+
if (glyph >= font->num_glyphs)
return FcFalse;
xftg = font->glyphs[glyph];
#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;
unsigned long glyph_memory;
FT_UInt glyphindex;
XftGlyph *xftg;
-
+
if (!font->glyph_memory)
return;
if (font->use_free_glyphs)
}
glyph_memory = 0;
}
-
+
if (XftDebug() & XFT_DBG_CACHE)
_XftFontValidateMemory (dpy, pub);
for (glyphindex = 0; glyphindex < font->num_glyphs; glyphindex++)
}
static struct {
- char *name;
+ const char *name;
int alloc_count;
int alloc_mem;
int free_count;
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;
# 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);
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;
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 */
void
XftRectCore (XftDraw *draw,
_Xconst XftColor *color,
- int x,
+ int x,
int y,
unsigned int width,
unsigned int height);
_XftDisplayManageMemory (Display *dpy);
int
-XftDefaultParseBool (char *v);
+XftDefaultParseBool (const char *v);
FcBool
XftDefaultGetBool (Display *dpy, const char *object, int screen, FcBool def);
XftDrawRenderPrepare (XftDraw *draw);
/* xftextent.c */
-
+
/* xftfont.c */
/* xftfreetype.c */
FcObjectSet *os);
/* xftname.c */
-void
+void
_XftNameInit (void);
/* xftrender.c */
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);
static FcBool _XftNameInitialized;
-_X_HIDDEN void
+_X_HIDDEN void
_XftNameInit (void)
{
if (_XftNameInitialized)
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
unsigned int char_local[NUM_LOCAL];
unsigned int *chars;
FcBool glyphs_loaded;
-
+
if (!font->format)
return;
-
+
/*
* Load missing glyphs
*/
}
if (nmissing)
XftFontLoadGlyphs (dpy, pub, FcTrue, missing, nmissing);
-
+
if (!font->glyphset)
goto bail1;
if (max < 0x100)
FcBool glyphs_loaded;
int nelt;
int x, y;
-
+
if (!font->format)
return;
if (!nglyphs)
return;
-
+
/*
* Load missing glyphs
*/
}
if (nmissing)
XftFontLoadGlyphs (dpy, pub, FcTrue, missing, nmissing);
-
+
if (!font->glyphset)
goto bail1;
char8 = (char *) chars;
char16 = (unsigned short *) chars;
char32 = (unsigned int *) chars;
-
+
/*
* Compute the number of glyph elts needed
*/
/* 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
*/
Picture src,
XftFont *pub,
Picture dst,
- int srcx,
+ int srcx,
int srcy,
_Xconst XftCharSpec *chars,
int len)
XftPreferFormat (Display *dpy, XRenderPictFormat *a, XRenderPictFormat *b)
{
XRenderPictFormat *prefer = NULL;
-
+
if (a == b)
prefer = a;
else if (XftIsARGBFormat(a) != XftIsARGBFormat(b))
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
if (!font->glyphset)
goto bail1;
}
-
+
/*
* See what encoding size is needed
*/
char8 = (char *) chars;
char16 = (unsigned short *) chars;
char32 = (unsigned int *) chars;
-
+
/*
* Compute the number of glyph elts needed
*/
/* 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
*/
{
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])
}
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);
}
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);
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);
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);
}
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);
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);
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);
{
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:
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;
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);
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