mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 17:44:45 +00:00
Rollback hinter enabling since font output looks worse with the auto
hinter enabled svn path=/trunk/; revision=8202
This commit is contained in:
parent
a9f2364436
commit
fec177ccee
230 changed files with 13063 additions and 40322 deletions
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
|||
# FreeType 2 top Jamfile (c) 2001, 2002, 2003, 2004 David Turner
|
||||
# FreeType 2 top Jamfile (c) 2001, 2002, 2003 David Turner
|
||||
#
|
||||
|
||||
# The HDRMACRO is already defined in FTJam and is used to add
|
||||
|
@ -61,8 +61,7 @@ FT2_BUILD_INCLUDE ?= ;
|
|||
# IMPORTANT: You'll need to change the content of "ftmodule.h" as well
|
||||
# if you modify this list or provide your own.
|
||||
#
|
||||
FT2_COMPONENTS ?= autofit # auto-fitter
|
||||
gzip # support for gzip-compressed files
|
||||
FT2_COMPONENTS ?= gzip # support for gzip-compressed files
|
||||
autohint # auto-hinter
|
||||
base # base component (public APIs)
|
||||
bdf # BDF font driver
|
||||
|
@ -147,7 +146,7 @@ if $(DEBUG_HINTER)
|
|||
|
||||
actions RefDoc
|
||||
{
|
||||
python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.1.8 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h $(FT2_INCLUDE)/freetype/cache/*.h
|
||||
python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.1.5 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h $(FT2_INCLUDE)/freetype/cache/*.h
|
||||
}
|
||||
|
||||
RefDoc refdoc ;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# $Id: Makefile,v 1.8 2004/02/07 00:21:45 navaraf Exp $
|
||||
# $Id: Makefile,v 1.9 2004/02/15 21:45:28 gvg Exp $
|
||||
|
||||
PATH_TO_TOP = ../..
|
||||
|
||||
|
@ -37,9 +37,9 @@ all: $(MK_FULLNAME) $(MK_NOSTRIPNAME)
|
|||
|
||||
objs/*.o objs/libfreetype.a:
|
||||
ifeq ($(DBG), 1)
|
||||
@$(MAKE) -f Makefile.freetype CC:=$(CC)
|
||||
@$(MAKE) -f Makefile.freetype CFLAGS="-c -g -Wall" CC:=$(CC)
|
||||
else
|
||||
@$(MAKE) -f Makefile.freetype CC:=$(CC)
|
||||
@$(MAKE) -f Makefile.freetype CFLAGS="-c -Wall -O3" CC:=$(CC)
|
||||
endif
|
||||
|
||||
# Automatic dependency tracking
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
is called `libttf'. They are *not* compatible!
|
||||
|
||||
|
||||
FreeType 2.1.8
|
||||
FreeType 2.1.5
|
||||
==============
|
||||
|
||||
Please read the docs/CHANGES file, it contains IMPORTANT INFORMATION.
|
||||
|
@ -19,9 +19,9 @@
|
|||
Note that the FreeType 2 documentation is now available as a
|
||||
separate package from our sites. See:
|
||||
|
||||
ftp://ftp.freetype.org/pub/freetype2/ftdocs-2.1.8.tar.bz2
|
||||
ftp://ftp.freetype.org/pub/freetype2/ftdocs-2.1.8.tar.gz
|
||||
ftp://ftp.freetype.org/pub/freetype2/ftdoc218.zip
|
||||
ftp://ftp.freetype.org/pub/freetype2/ftdocs-2.1.5.tar.bz2
|
||||
ftp://ftp.freetype.org/pub/freetype2/ftdocs-2.1.5.tar.gz
|
||||
ftp://ftp.freetype.org/pub/freetype2/ftdoc215.zip
|
||||
|
||||
|
||||
Bugs
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
#ifndef ATARI_H
|
||||
#define ATARI_H
|
||||
|
||||
#pragma warn -stu
|
||||
|
||||
/* PureC doesn't like 32bit enumerations */
|
||||
|
||||
#ifndef FT_IMAGE_TAG
|
||||
#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value
|
||||
#endif /* FT_IMAGE_TAG */
|
||||
|
||||
#ifndef FT_ENC_TAG
|
||||
#define FT_ENC_TAG( value, a, b, c, d ) value
|
||||
#endif /* FT_ENC_TAG */
|
||||
|
||||
#endif /* ATARI_H */
|
|
@ -1,37 +0,0 @@
|
|||
/* the following changes file names for PureC projects */
|
||||
|
||||
if (argc > 0)
|
||||
{
|
||||
ordner = argv[0];
|
||||
if (basename(ordner) == "") /* ist Ordner */
|
||||
{
|
||||
ChangeFilenames(ordner);
|
||||
}
|
||||
}
|
||||
|
||||
proc ChangeFilenames(folder)
|
||||
local i,entries,directory,file;
|
||||
{
|
||||
entries = filelist(directory,folder);
|
||||
for (i = 0; i < entries; ++i)
|
||||
{
|
||||
file = directory[i,0];
|
||||
if ((directory[i,3]&16) > 0) /* subdirectory */
|
||||
{
|
||||
ChangeFilenames(folder+file+"\\");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((stricmp(suffix(file),".h")==0)|(stricmp(suffix(file),".c")==0))
|
||||
ChangeFilename(folder,file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proc ChangeFilename(path,datei)
|
||||
local newfile,err;
|
||||
{
|
||||
newfile=datei;
|
||||
newfile[0]=(newfile[0] | 32) ^ 32;
|
||||
err=files.rename("-q",path+datei,newfile);
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
;FreeType project file
|
||||
|
||||
FREETYPE.LIB
|
||||
|
||||
.C [-K -P -R -A]
|
||||
.L [-J -V]
|
||||
.S
|
||||
|
||||
=
|
||||
|
||||
..\..\src\base\ftsystem.c
|
||||
..\..\src\base\ftdebug.c
|
||||
|
||||
..\..\src\base\ftinit.c
|
||||
..\..\src\base\ftglyph.c
|
||||
..\..\src\base\ftmm
|
||||
..\..\src\base\ftbbox
|
||||
|
||||
..\..\src\base\ftbase.c
|
||||
..\..\src\autohint\autohint.c
|
||||
;..\..\src\cache\ftcache.c
|
||||
..\..\src\cff\cff.c
|
||||
..\..\src\cid\type1cid.c
|
||||
..\..\src\psaux\psaux.c
|
||||
..\..\src\pshinter\pshinter.c
|
||||
..\..\src\psnames\psnames.c
|
||||
..\..\src\raster\raster.c
|
||||
..\..\src\sfnt\sfnt.c
|
||||
..\..\src\smooth\smooth.c
|
||||
..\..\src\truetype\truetype.c
|
||||
..\..\src\type1\type1.c
|
||||
..\..\src\type42\type42.c
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
Compiling FreeType 2 with PureC compiler
|
||||
========================================
|
||||
|
||||
[See below for a German version.]
|
||||
|
||||
To compile FreeType 2 as a library the following changes must be applied:
|
||||
|
||||
- All *.c files must start with an uppercase letter.
|
||||
(In case GEMSCRIPT is available:
|
||||
Simply drag the whole FreeType 2 directory to the file `FNames.SIC'.)
|
||||
|
||||
- You have to change the INCLUDE directory in PureC's compiler options
|
||||
to contain both the `INCLUDE' and `freetype2\include' directory.
|
||||
Example:
|
||||
|
||||
INCLUDE;E:\freetype2\include
|
||||
|
||||
- The file `freetype2/include/Ft2build.h' must be patched as follows to
|
||||
include ATARI.H:
|
||||
|
||||
#ifndef __FT2_BUILD_GENERIC_H__
|
||||
#define __FT2_BUILD_GENERIC_H__
|
||||
|
||||
#include "ATARI.H"
|
||||
|
||||
|
||||
|
||||
Compilieren von FreeType 2 mit PureC
|
||||
====================================
|
||||
|
||||
Um FreeType 2 als eine Bibliothek (library) zu compilieren, muss folgendes
|
||||
ge„ndert werden:
|
||||
|
||||
- Alle *.c-files m<>ssen mit einem GROSSBUCHSTABEN beginnen.
|
||||
(Falls GEMSCRIPT zur Verf<72>gung steht:
|
||||
Den kompletten Ordner freetype2 auf die Datei `FNames.SIC' draggen.)
|
||||
|
||||
- In den Compiler-Optionen von PureC muss das INCLUDE directory auf INCLUDE
|
||||
und freetype2\include verweisen. Z.B.:
|
||||
|
||||
INCLUDE;E:\freetype2\include
|
||||
|
||||
- In der Datei freetype2/include/Ft2build.h muss zu Beginn
|
||||
ein #include "ATARI.H" wie folgt eingef<65>gt werden:
|
||||
|
||||
#ifndef __FT2_BUILD_GENERIC_H__
|
||||
#define __FT2_BUILD_GENERIC_H__
|
||||
|
||||
#include "ATARI.H"
|
||||
|
||||
--- end of README.TXT ---
|
|
@ -97,7 +97,6 @@ BASE_DIR := $(SRC_DIR)/base
|
|||
#
|
||||
PUBLIC_DIR := $(TOP_DIR)/include/freetype
|
||||
INTERNAL_DIR := $(PUBLIC_DIR)/internal
|
||||
SERVICES_DIR := $(INTERNAL_DIR)/services
|
||||
CONFIG_DIR := $(PUBLIC_DIR)/config
|
||||
CACHE_DIR := $(PUBLIC_DIR)/cache
|
||||
|
||||
|
@ -156,8 +155,7 @@ OBJECTS_LIST :=
|
|||
# changes, the whole library is recompiled.
|
||||
#
|
||||
PUBLIC_H := $(wildcard $(PUBLIC_DIR)/*.h)
|
||||
BASE_H := $(wildcard $(INTERNAL_DIR)/*.h) \
|
||||
$(wildcard $(SERVICES_DIR)/*.h)
|
||||
BASE_H := $(wildcard $(INTERNAL_DIR)/*.h)
|
||||
CONFIG_H := $(wildcard $(CONFIG_DIR)/*.h) \
|
||||
$(wildcard $(BUILD_DIR)/freetype/config/*.h)
|
||||
CACHE_H := $(wildcard $(CACHE_DIR)/*.h)
|
||||
|
@ -254,7 +252,7 @@ library: $(PROJECT_LIBRARY)
|
|||
refdoc:
|
||||
python $(SRC_DIR)/tools/docmaker/docmaker.py \
|
||||
--prefix=ft2 \
|
||||
--title=FreeType-2.1.7 \
|
||||
--title=FreeType-2.1.5 \
|
||||
--output=$(DOC_DIR) \
|
||||
$(PUBLIC_DIR)/*.h \
|
||||
$(PUBLIC_DIR)/config/*.h \
|
||||
|
|
|
@ -110,7 +110,6 @@ ifdef check_platform
|
|||
$(RM) builds/unix/config.status
|
||||
$(RM) builds/unix/unix-def.mk
|
||||
$(RM) builds/unix/unix-cc.mk
|
||||
$(RM) builds/unix/freetype2.pc
|
||||
$(RM) nul
|
||||
|
||||
endif # test is_unix
|
||||
|
|
|
@ -6,4 +6,3 @@ config.log
|
|||
libtool
|
||||
ftconfig.h
|
||||
freetype-config
|
||||
freetype2.pc
|
||||
|
|
7226
reactos/lib/freetype/builds/unix/aclocal.m4
vendored
7226
reactos/lib/freetype/builds/unix/aclocal.m4
vendored
File diff suppressed because it is too large
Load diff
147
reactos/lib/freetype/builds/unix/config.guess
vendored
147
reactos/lib/freetype/builds/unix/config.guess
vendored
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2003-10-16'
|
||||
timestamp='2003-01-10'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
|
@ -106,7 +106,6 @@ trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
|
|||
: ${TMPDIR=/tmp} ;
|
||||
{ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
|
||||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
|
||||
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
|
||||
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
|
||||
dummy=$tmp/dummy ;
|
||||
tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
||||
|
@ -221,9 +220,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
mvmeppc:OpenBSD:*:*)
|
||||
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
pegasos:OpenBSD:*:*)
|
||||
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
pmax:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
|
@ -239,56 +235,74 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
*:OpenBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:MicroBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-microbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
alpha:OSF1:*:*)
|
||||
if test $UNAME_RELEASE = "V4.0"; then
|
||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||
fi
|
||||
# According to Compaq, /usr/sbin/psrinfo has been available on
|
||||
# OSF/1 and Tru64 systems produced since 1995. I hope that
|
||||
# covers most systems running today. This code pipes the CPU
|
||||
# types through head -n 1, so we only detect the type of CPU 0.
|
||||
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
|
||||
case "$ALPHA_CPU_TYPE" in
|
||||
"EV4 (21064)")
|
||||
UNAME_MACHINE="alpha" ;;
|
||||
"EV4.5 (21064)")
|
||||
UNAME_MACHINE="alpha" ;;
|
||||
"LCA4 (21066/21068)")
|
||||
UNAME_MACHINE="alpha" ;;
|
||||
"EV5 (21164)")
|
||||
UNAME_MACHINE="alphaev5" ;;
|
||||
"EV5.6 (21164A)")
|
||||
UNAME_MACHINE="alphaev56" ;;
|
||||
"EV5.6 (21164PC)")
|
||||
UNAME_MACHINE="alphapca56" ;;
|
||||
"EV5.7 (21164PC)")
|
||||
UNAME_MACHINE="alphapca57" ;;
|
||||
"EV6 (21264)")
|
||||
UNAME_MACHINE="alphaev6" ;;
|
||||
"EV6.7 (21264A)")
|
||||
UNAME_MACHINE="alphaev67" ;;
|
||||
"EV6.8CB (21264C)")
|
||||
UNAME_MACHINE="alphaev68" ;;
|
||||
"EV6.8AL (21264B)")
|
||||
UNAME_MACHINE="alphaev68" ;;
|
||||
"EV6.8CX (21264D)")
|
||||
UNAME_MACHINE="alphaev68" ;;
|
||||
"EV6.9A (21264/EV69A)")
|
||||
UNAME_MACHINE="alphaev69" ;;
|
||||
"EV7 (21364)")
|
||||
UNAME_MACHINE="alphaev7" ;;
|
||||
"EV7.9 (21364A)")
|
||||
UNAME_MACHINE="alphaev79" ;;
|
||||
esac
|
||||
# A Vn.n version is a released version.
|
||||
# A Tn.n version is a released field test version.
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
eval $set_cc_for_build
|
||||
cat <<EOF >$dummy.s
|
||||
.data
|
||||
\$Lformat:
|
||||
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
|
||||
|
||||
.text
|
||||
.globl main
|
||||
.align 4
|
||||
.ent main
|
||||
main:
|
||||
.frame \$30,16,\$26,0
|
||||
ldgp \$29,0(\$27)
|
||||
.prologue 1
|
||||
.long 0x47e03d80 # implver \$0
|
||||
lda \$2,-1
|
||||
.long 0x47e20c21 # amask \$2,\$1
|
||||
lda \$16,\$Lformat
|
||||
mov \$0,\$17
|
||||
not \$1,\$18
|
||||
jsr \$26,printf
|
||||
ldgp \$29,0(\$26)
|
||||
mov 0,\$16
|
||||
jsr \$26,exit
|
||||
.end main
|
||||
EOF
|
||||
$CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
case `$dummy` in
|
||||
0-0)
|
||||
UNAME_MACHINE="alpha"
|
||||
;;
|
||||
1-0)
|
||||
UNAME_MACHINE="alphaev5"
|
||||
;;
|
||||
1-1)
|
||||
UNAME_MACHINE="alphaev56"
|
||||
;;
|
||||
1-101)
|
||||
UNAME_MACHINE="alphapca56"
|
||||
;;
|
||||
2-303)
|
||||
UNAME_MACHINE="alphaev6"
|
||||
;;
|
||||
2-307)
|
||||
UNAME_MACHINE="alphaev67"
|
||||
;;
|
||||
2-1307)
|
||||
UNAME_MACHINE="alphaev68"
|
||||
;;
|
||||
3-1307)
|
||||
UNAME_MACHINE="alphaev7"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
exit 0 ;;
|
||||
Alpha*:OpenVMS:*:*)
|
||||
echo alpha-hp-vms
|
||||
exit 0 ;;
|
||||
Alpha\ *:Windows_NT*:*)
|
||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||
# Should we change UNAME_MACHINE based on the output of uname instead
|
||||
|
@ -310,9 +324,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
*:OS/390:*:*)
|
||||
echo i370-ibm-openedition
|
||||
exit 0 ;;
|
||||
*:OS400:*:*)
|
||||
echo powerpc-ibm-os400
|
||||
exit 0 ;;
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
|
@ -330,9 +341,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||
NILE*:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
exit 0 ;;
|
||||
DRS?6000:unix:4.0:6*)
|
||||
echo sparc-icl-nx6
|
||||
exit 0 ;;
|
||||
DRS?6000:UNIX_SV:4.2*:7*)
|
||||
case `/usr/bin/uname -p` in
|
||||
sparc) echo sparc-icl-nx7 && exit 0 ;;
|
||||
|
@ -740,7 +748,7 @@ EOF
|
|||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
*:UNICOS/mp:*:*)
|
||||
echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
||||
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
|
@ -748,11 +756,6 @@ EOF
|
|||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||
exit 0 ;;
|
||||
5000:UNIX_System_V:4.*:*)
|
||||
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
|
||||
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||
exit 0 ;;
|
||||
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
|
@ -774,10 +777,7 @@ EOF
|
|||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||
# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
|
||||
# FreeBSD's kernel, but not the complete OS.
|
||||
case ${LIBC} in gnu) kernel_only='k' ;; esac
|
||||
echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-cygwin
|
||||
|
@ -788,8 +788,8 @@ EOF
|
|||
i*:PW*:*)
|
||||
echo ${UNAME_MACHINE}-pc-pw32
|
||||
exit 0 ;;
|
||||
x86:Interix*:[34]*)
|
||||
echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
|
||||
x86:Interix*:3*)
|
||||
echo i586-pc-interix3
|
||||
exit 0 ;;
|
||||
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||
echo i${UNAME_MACHINE}-pc-mks
|
||||
|
@ -810,22 +810,14 @@ EOF
|
|||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
# the GNU system
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
*:GNU/*:*:*)
|
||||
# other systems with GNU libc and userland
|
||||
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
||||
exit 0 ;;
|
||||
i*86:Minix:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-minix
|
||||
exit 0 ;;
|
||||
arm*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
cris:Linux:*:*)
|
||||
echo cris-axis-linux-gnu
|
||||
exit 0 ;;
|
||||
ia64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
|
@ -904,9 +896,6 @@ EOF
|
|||
s390:Linux:*:* | s390x:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-ibm-linux
|
||||
exit 0 ;;
|
||||
sh64*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
sh*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
|
@ -964,9 +953,6 @@ EOF
|
|||
LIBC=gnuaout
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __dietlibc__
|
||||
LIBC=dietlibc
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
||||
|
@ -1068,7 +1054,7 @@ EOF
|
|||
exit 0 ;;
|
||||
M68*:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
|
||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0)
|
||||
OS_REL=''
|
||||
test -r /etc/.relid \
|
||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||
|
@ -1183,7 +1169,7 @@ EOF
|
|||
*:QNX:*:4*)
|
||||
echo i386-pc-qnx
|
||||
exit 0 ;;
|
||||
NSR-[DGKLNPTVWY]:NONSTOP_KERNEL:*:*)
|
||||
NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:NonStop-UX:*:*)
|
||||
|
@ -1224,9 +1210,6 @@ EOF
|
|||
*:ITS:*:*)
|
||||
echo pdp10-unknown-its
|
||||
exit 0 ;;
|
||||
SEI:*:*:SEIUX)
|
||||
echo mips-sei-seiux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
|
|
98
reactos/lib/freetype/builds/unix/config.sub
vendored
98
reactos/lib/freetype/builds/unix/config.sub
vendored
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2003-11-03'
|
||||
timestamp='2003-01-03'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
|
@ -118,8 +118,7 @@ esac
|
|||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
|
||||
kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
|
@ -229,14 +228,13 @@ case $basic_machine in
|
|||
| a29k \
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||
| am33_2.0 \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||
| c4x | clipper \
|
||||
| clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fr30 | frv \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k | iq2000 \
|
||||
| ip2k \
|
||||
| m32r | m68000 | m68k | m88k | mcore \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
|
@ -249,7 +247,6 @@ case $basic_machine in
|
|||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa32r2 | mipsisa32r2el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
| mipsisa64r2 | mipsisa64r2el \
|
||||
| mipsisa64sb1 | mipsisa64sb1el \
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
|
@ -260,11 +257,11 @@ case $basic_machine in
|
|||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| pyramid \
|
||||
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh64 | sh64le \
|
||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||
| strongarm \
|
||||
| tahoe | thumb | tic4x | tic80 | tron \
|
||||
| tahoe | thumb | tic80 | tron \
|
||||
| v850 | v850e \
|
||||
| we32k \
|
||||
| x86 | xscale | xstormy16 | xtensa \
|
||||
|
@ -299,7 +296,7 @@ case $basic_machine in
|
|||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* \
|
||||
| bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
|
||||
| clipper-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
| elxsi-* \
|
||||
|
@ -307,7 +304,7 @@ case $basic_machine in
|
|||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* | iq2000-* \
|
||||
| ip2k-* \
|
||||
| m32r-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
|
@ -322,7 +319,6 @@ case $basic_machine in
|
|||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
|
@ -333,13 +329,11 @@ case $basic_machine in
|
|||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* \
|
||||
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
||||
| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
|
||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||
| tron-* \
|
||||
| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||
|
@ -377,9 +371,6 @@ case $basic_machine in
|
|||
basic_machine=a29k-none
|
||||
os=-bsd
|
||||
;;
|
||||
amd64)
|
||||
basic_machine=x86_64-pc
|
||||
;;
|
||||
amdahl)
|
||||
basic_machine=580-amdahl
|
||||
os=-sysv
|
||||
|
@ -744,10 +735,6 @@ case $basic_machine in
|
|||
basic_machine=or32-unknown
|
||||
os=-coff
|
||||
;;
|
||||
os400)
|
||||
basic_machine=powerpc-ibm
|
||||
os=-os400
|
||||
;;
|
||||
OSE68000 | ose68000)
|
||||
basic_machine=m68000-ericsson
|
||||
os=-ose
|
||||
|
@ -779,24 +766,18 @@ case $basic_machine in
|
|||
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentiumii | pentium2 | pentiumiii | pentium3)
|
||||
pentiumii | pentium2)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentium4)
|
||||
basic_machine=i786-pc
|
||||
;;
|
||||
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
|
||||
pentiumii-* | pentium2-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentium4-*)
|
||||
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
;;
|
||||
|
@ -855,10 +836,6 @@ case $basic_machine in
|
|||
sb1el)
|
||||
basic_machine=mipsisa64sb1el-unknown
|
||||
;;
|
||||
sei)
|
||||
basic_machine=mips-sei
|
||||
os=-seiux
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
|
@ -866,9 +843,6 @@ case $basic_machine in
|
|||
basic_machine=sh-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
sh64)
|
||||
basic_machine=sh64-unknown
|
||||
;;
|
||||
sparclite-wrs | simso-wrs)
|
||||
basic_machine=sparclite-wrs
|
||||
os=-vxworks
|
||||
|
@ -943,18 +917,14 @@ case $basic_machine in
|
|||
basic_machine=t90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
tic4x | c4x*)
|
||||
basic_machine=tic4x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic54x | c54x*)
|
||||
basic_machine=tic54x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic55x | c55x*)
|
||||
basic_machine=tic55x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic6x | c6x*)
|
||||
basic_machine=tic6x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
|
@ -968,10 +938,6 @@ case $basic_machine in
|
|||
tower | tower-32)
|
||||
basic_machine=m68k-ncr
|
||||
;;
|
||||
tpf)
|
||||
basic_machine=s390x-ibm
|
||||
os=-tpf
|
||||
;;
|
||||
udi29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
|
@ -1061,7 +1027,7 @@ case $basic_machine in
|
|||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sh64)
|
||||
|
@ -1140,19 +1106,19 @@ case $os in
|
|||
| -aos* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei*)
|
||||
| -powermax* | -dnix* | -microbsd*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-qnx*)
|
||||
|
@ -1176,9 +1142,6 @@ case $os in
|
|||
-mac*)
|
||||
os=`echo $os | sed -e 's|mac|macos|'`
|
||||
;;
|
||||
-linux-dietlibc)
|
||||
os=-linux-dietlibc
|
||||
;;
|
||||
-linux*)
|
||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||
;;
|
||||
|
@ -1191,9 +1154,6 @@ case $os in
|
|||
-opened*)
|
||||
os=-openedition
|
||||
;;
|
||||
-os400*)
|
||||
os=-os400
|
||||
;;
|
||||
-wince*)
|
||||
os=-wince
|
||||
;;
|
||||
|
@ -1237,9 +1197,6 @@ case $os in
|
|||
-sinix*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-tpf*)
|
||||
os=-tpf
|
||||
;;
|
||||
-triton*)
|
||||
os=-sysv3
|
||||
;;
|
||||
|
@ -1270,12 +1227,6 @@ case $os in
|
|||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
;;
|
||||
-aros*)
|
||||
os=-aros
|
||||
;;
|
||||
-kaos*)
|
||||
os=-kaos
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
|
@ -1307,9 +1258,6 @@ case $basic_machine in
|
|||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
c4x-* | tic4x-*)
|
||||
os=-coff
|
||||
;;
|
||||
# This must come before the *-dec entry.
|
||||
pdp10-*)
|
||||
os=-tops20
|
||||
|
@ -1488,15 +1436,9 @@ case $basic_machine in
|
|||
-mvs* | -opened*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-os400*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-tpf*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-vxsim* | -vxworks* | -windiss*)
|
||||
vendor=wrs
|
||||
;;
|
||||
|
|
17236
reactos/lib/freetype/builds/unix/configure
vendored
17236
reactos/lib/freetype/builds/unix/configure
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,121 +1,91 @@
|
|||
# This file is part of the FreeType project.
|
||||
#
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
dnl This file is part of the FreeType project.
|
||||
dnl
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl
|
||||
|
||||
AC_INIT
|
||||
AC_CONFIG_SRCDIR([ftconfig.in])
|
||||
|
||||
dnl configuration file -- stay in 8.3 limit
|
||||
AC_CONFIG_HEADER(ftconfig.h:ftconfig.in)
|
||||
|
||||
# Don't forget to update docs/VERSION.DLL!
|
||||
|
||||
version_info='9:6:3'
|
||||
AC_SUBST([version_info])
|
||||
dnl Don't forget to update VERSION.DLL!
|
||||
version_info='9:4:3'
|
||||
AC_SUBST(version_info)
|
||||
ft_version=`echo $version_info | tr : .`
|
||||
AC_SUBST([ft_version])
|
||||
AC_SUBST(ft_version)
|
||||
|
||||
dnl checks for system type
|
||||
AC_CANONICAL_TARGET([])
|
||||
|
||||
# checks for system type
|
||||
|
||||
AC_CANONICAL_TARGET
|
||||
|
||||
|
||||
# checks for programs
|
||||
|
||||
dnl checks for programs
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
|
||||
|
||||
# get compiler flags right
|
||||
|
||||
dnl get Compiler flags right.
|
||||
if test "x$CC" = xgcc; then
|
||||
XX_CFLAGS="-Wall"
|
||||
XX_ANSIFLAGS="-pedantic -ansi"
|
||||
else
|
||||
case "$host" in
|
||||
*-dec-osf*)
|
||||
CFLAGS=
|
||||
XX_CFLAGS="-std1 -g3"
|
||||
XX_ANSIFLAGS=
|
||||
;;
|
||||
*)
|
||||
XX_CFLAGS=
|
||||
XX_ANSIFLAGS=
|
||||
;;
|
||||
*-dec-osf*)
|
||||
CFLAGS=
|
||||
XX_CFLAGS="-std1 -g3"
|
||||
XX_ANSIFLAGS=
|
||||
;;
|
||||
*)
|
||||
XX_CFLAGS=
|
||||
XX_ANSIFLAGS=
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_SUBST([XX_CFLAGS])
|
||||
AC_SUBST([XX_ANSIFLAGS])
|
||||
AC_SUBST(XX_CFLAGS)
|
||||
AC_SUBST(XX_ANSIFLAGS)
|
||||
|
||||
AC_CHECK_PROG(RMF, rm, rm -f)
|
||||
AC_CHECK_PROG(RMDIR, rmdir, rmdir)
|
||||
|
||||
# auxiliary programs
|
||||
|
||||
AC_CHECK_PROG([RMF], [rm], [rm -f])
|
||||
AC_CHECK_PROG([RMDIR], [rmdir], [rmdir])
|
||||
|
||||
|
||||
# Since this file will be finally moved to another directory we make
|
||||
# the path of the install script absolute. This small code snippet has
|
||||
# been taken from automake's `ylwrap' script.
|
||||
|
||||
dnl Since this file will be finally moved to another directory we make
|
||||
dnl the path of the install script absolute. This small code snippet has
|
||||
dnl been taken from automake's `ylwrap' script.
|
||||
AC_PROG_INSTALL
|
||||
case "$INSTALL" in
|
||||
/*)
|
||||
;;
|
||||
*/*)
|
||||
INSTALL="`pwd`/$INSTALL" ;;
|
||||
/*)
|
||||
;;
|
||||
*/*)
|
||||
INSTALL="`pwd`/$INSTALL" ;;
|
||||
esac
|
||||
|
||||
|
||||
# checks for header files
|
||||
|
||||
dnl checks for header files
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS([fcntl.h unistd.h])
|
||||
|
||||
|
||||
# checks for typedefs, structures, and compiler characteristics
|
||||
AC_CHECK_HEADERS(fcntl.h unistd.h)
|
||||
|
||||
dnl checks for typedefs, structures, and compiler characteristics
|
||||
AC_C_CONST
|
||||
AC_CHECK_SIZEOF([int])
|
||||
AC_CHECK_SIZEOF([long])
|
||||
AC_CHECK_SIZEOF(int)
|
||||
AC_CHECK_SIZEOF(long)
|
||||
|
||||
dnl checks for library functions
|
||||
|
||||
# checks for library functions
|
||||
|
||||
# Here we check whether we can use our mmap file component.
|
||||
|
||||
dnl Here we check whether we can use our mmap file component.
|
||||
AC_FUNC_MMAP
|
||||
if test "$ac_cv_func_mmap_fixed_mapped" != yes; then
|
||||
FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
|
||||
else
|
||||
FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
|
||||
|
||||
AC_CHECK_DECLS([munmap],
|
||||
[],
|
||||
[],
|
||||
[
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <sys/mman.h>
|
||||
|
||||
])
|
||||
|
||||
FT_MUNMAP_DECL
|
||||
FT_MUNMAP_PARAM
|
||||
fi
|
||||
AC_SUBST([FTSYS_SRC])
|
||||
AC_SUBST(FTSYS_SRC)
|
||||
|
||||
AC_CHECK_FUNCS([memcpy memmove])
|
||||
AC_CHECK_FUNCS(memcpy memmove)
|
||||
|
||||
|
||||
# Check for system zlib
|
||||
|
||||
AC_ARG_WITH([zlib],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
AS_HELP_STRING([--without-zlib],
|
||||
[use internal zlib instead of system-wide]))
|
||||
dnl Check for system zlib
|
||||
AC_ARG_WITH(zlib,
|
||||
[ --without-zlib use internal zlib instead of system-wide])
|
||||
if test x$with_zlib != xno && test -z "$LIBZ"; then
|
||||
AC_CHECK_LIB([z], [gzsetparams], [AC_CHECK_HEADER([zlib.h], [LIBZ='-lz'])])
|
||||
AC_CHECK_LIB(z, gzsetparams, [AC_CHECK_HEADER(zlib.h, LIBZ='-lz')])
|
||||
fi
|
||||
if test x$with_zlib != xno && test -n "$LIBZ"; then
|
||||
CFLAGS="$CFLAGS -DFT_CONFIG_OPTION_SYSTEM_ZLIB"
|
||||
|
@ -123,13 +93,9 @@ if test x$with_zlib != xno && test -n "$LIBZ"; then
|
|||
SYSTEM_ZLIB=yes
|
||||
fi
|
||||
|
||||
|
||||
# Whether to use Mac OS resource-based fonts or not
|
||||
|
||||
AC_ARG_WITH([old-mac-fonts],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
AS_HELP_STRING([--with-old-mac-fonts],
|
||||
[allow Mac resource-based fonts to be used]))
|
||||
dnl Whether to use Mac OS resource-based fonts or not
|
||||
AC_ARG_WITH(old-mac-fonts,
|
||||
[ --with-old-mac-fonts allow Mac resource-based fonts to be used])
|
||||
if test x$with_old_mac_fonts = xyes; then
|
||||
CFLAGS="$CFLAGS -DTARGET_API_MAC_CARBON"
|
||||
LDFLAGS="$LDFLAGS -Xlinker -framework -Xlinker CoreServices \
|
||||
|
@ -138,38 +104,25 @@ else
|
|||
CFLAGS="$CFLAGS -DDARWIN_NO_CARBON"
|
||||
fi
|
||||
|
||||
|
||||
AC_SUBST([LIBZ])
|
||||
AC_SUBST([CFLAGS])
|
||||
AC_SUBST([LDFLAGS])
|
||||
AC_SUBST([SYSTEM_ZLIB])
|
||||
|
||||
AC_SUBST(LIBZ)
|
||||
AC_SUBST(CFLAGS)
|
||||
AC_SUBST(LDFLAGS)
|
||||
AC_SUBST(SYSTEM_ZLIB)
|
||||
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
|
||||
# configuration file -- stay in 8.3 limit
|
||||
#
|
||||
# since #undef doesn't survive in configuration header files we replace
|
||||
# `/undef' with `#undef' after creating the output file
|
||||
|
||||
AC_CONFIG_HEADERS([ftconfig.h:ftconfig.in],
|
||||
[mv ftconfig.h ftconfig.tmp
|
||||
sed 's|/undef|#undef|' < ftconfig.tmp > ftconfig.h
|
||||
rm ftconfig.tmp])
|
||||
|
||||
# create the Unix-specific sub-Makefiles `builds/unix/unix-def.mk'
|
||||
# and 'builds/unix/unix-cc.mk' that will be used by the build system
|
||||
#
|
||||
dnl create the Unix-specific sub-Makefiles `builds/unix/unix-def.mk'
|
||||
dnl and 'builds/unix/unix-cc.mk' that will be used by the build system
|
||||
dnl
|
||||
AC_CONFIG_FILES([unix-cc.mk:unix-cc.in
|
||||
unix-def.mk:unix-def.in
|
||||
freetype-config
|
||||
freetype2.pc:freetype2.in])
|
||||
|
||||
# re-generate the Jamfile to use libtool now
|
||||
#
|
||||
# AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
|
||||
dnl re-generate the Jamfile to use libtool now
|
||||
dnl
|
||||
dnl AC_CONFIG_FILES([../../Jamfile:../../Jamfile.in])
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
# end of configure.ac
|
||||
dnl end of configure.ac
|
||||
|
|
|
@ -1,104 +1,88 @@
|
|||
# Configure paths for FreeType2
|
||||
# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
|
||||
#
|
||||
# serial 2
|
||||
|
||||
# AC_CHECK_FT2([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||
# Test for FreeType 2, and define FT2_CFLAGS and FT2_LIBS.
|
||||
# MINIMUM-VERSION is what libtool reports; the default is `7.0.1' (this is
|
||||
# FreeType 2.0.4).
|
||||
#
|
||||
AC_DEFUN([AC_CHECK_FT2],
|
||||
[# Get the cflags and libraries from the freetype-config script
|
||||
#
|
||||
AC_ARG_WITH([ft-prefix],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
AS_HELP_STRING([--with-ft-prefix=PREFIX],
|
||||
[Prefix where FreeType is installed (optional)]),
|
||||
[ft_config_prefix="$withval"],
|
||||
[ft_config_prefix=""])
|
||||
dnl AC_CHECK_FT2([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||
dnl Test for FreeType2, and define FT2_CFLAGS and FT2_LIBS
|
||||
dnl
|
||||
AC_DEFUN(AC_CHECK_FT2,
|
||||
[dnl
|
||||
dnl Get the cflags and libraries from the freetype-config script
|
||||
dnl
|
||||
AC_ARG_WITH(ft-prefix,
|
||||
[ --with-ft-prefix=PREFIX
|
||||
Prefix where FreeType is installed (optional)],
|
||||
ft_config_prefix="$withval", ft_config_prefix="")
|
||||
AC_ARG_WITH(ft-exec-prefix,
|
||||
[ --with-ft-exec-prefix=PREFIX
|
||||
Exec prefix where FreeType is installed (optional)],
|
||||
ft_config_exec_prefix="$withval", ft_config_exec_prefix="")
|
||||
AC_ARG_ENABLE(freetypetest,
|
||||
[ --disable-freetypetest Do not try to compile and run
|
||||
a test FreeType program],
|
||||
[], enable_fttest=yes)
|
||||
|
||||
AC_ARG_WITH([ft-exec-prefix],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
|
||||
[Exec prefix where FreeType is installed (optional)]),
|
||||
[ft_config_exec_prefix="$withval"],
|
||||
[ft_config_exec_prefix=""])
|
||||
|
||||
AC_ARG_ENABLE([freetypetest],
|
||||
dnl don't quote AS_HELP_STRING!
|
||||
AS_HELP_STRING([--disable-freetypetest],
|
||||
[Do not try to compile and run a test FreeType program]),
|
||||
[],
|
||||
[enable_fttest=yes])
|
||||
|
||||
if test x$ft_config_exec_prefix != x ; then
|
||||
ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
|
||||
if test x${FT2_CONFIG+set} != xset ; then
|
||||
FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$ft_config_prefix != x ; then
|
||||
ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
|
||||
if test x${FT2_CONFIG+set} != xset ; then
|
||||
FT2_CONFIG=$ft_config_prefix/bin/freetype-config
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_PATH_PROG([FT2_CONFIG], [freetype-config], [no])
|
||||
|
||||
min_ft_version=m4_if([$1], [], [7.0.1], [$1])
|
||||
AC_MSG_CHECKING([for FreeType -- version >= $min_ft_version])
|
||||
no_ft=""
|
||||
if test "$FT2_CONFIG" = "no" ; then
|
||||
no_ft=yes
|
||||
else
|
||||
FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
|
||||
FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
|
||||
ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
ft_min_major_version=`echo $min_ft_version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
ft_min_minor_version=`echo $min_ft_version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
ft_min_micro_version=`echo $min_ft_version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test x$enable_fttest = xyes ; then
|
||||
ft_config_is_lt=""
|
||||
if test $ft_config_major_version -lt $ft_min_major_version ; then
|
||||
ft_config_is_lt=yes
|
||||
else
|
||||
if test $ft_config_major_version -eq $ft_min_major_version ; then
|
||||
if test $ft_config_minor_version -lt $ft_min_minor_version ; then
|
||||
ft_config_is_lt=yes
|
||||
else
|
||||
if test $ft_config_minor_version -eq $ft_min_minor_version ; then
|
||||
if test $ft_config_micro_version -lt $ft_min_micro_version ; then
|
||||
ft_config_is_lt=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$ft_config_is_lt = xyes ; then
|
||||
no_ft=yes
|
||||
else
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $FT2_CFLAGS"
|
||||
LIBS="$FT2_LIBS $LIBS"
|
||||
|
||||
#
|
||||
# Sanity checks for the results of freetype-config to some extent.
|
||||
#
|
||||
AC_RUN_IFELSE([
|
||||
AC_LANG_SOURCE([[
|
||||
if test x$ft_config_exec_prefix != x ; then
|
||||
ft_config_args="$ft_config_args --exec-prefix=$ft_config_exec_prefix"
|
||||
if test x${FT2_CONFIG+set} != xset ; then
|
||||
FT2_CONFIG=$ft_config_exec_prefix/bin/freetype-config
|
||||
fi
|
||||
fi
|
||||
if test x$ft_config_prefix != x ; then
|
||||
ft_config_args="$ft_config_args --prefix=$ft_config_prefix"
|
||||
if test x${FT2_CONFIG+set} != xset ; then
|
||||
FT2_CONFIG=$ft_config_prefix/bin/freetype-config
|
||||
fi
|
||||
fi
|
||||
AC_PATH_PROG(FT2_CONFIG, freetype-config, no)
|
||||
|
||||
min_ft_version=ifelse([$1], ,6.1.0,$1)
|
||||
AC_MSG_CHECKING(for FreeType - version >= $min_ft_version)
|
||||
no_ft=""
|
||||
if test "$FT2_CONFIG" = "no" ; then
|
||||
no_ft=yes
|
||||
else
|
||||
FT2_CFLAGS=`$FT2_CONFIG $ft_config_args --cflags`
|
||||
FT2_LIBS=`$FT2_CONFIG $ft_config_args --libs`
|
||||
ft_config_major_version=`$FT2_CONFIG $ft_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
ft_config_minor_version=`$FT2_CONFIG $ft_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
ft_config_micro_version=`$FT2_CONFIG $ft_config_args --version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
ft_min_major_version=`echo $min_ft_version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
|
||||
ft_min_minor_version=`echo $min_ft_version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
|
||||
ft_min_micro_version=`echo $min_ft_version | \
|
||||
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
|
||||
if test x$enable_fttest = xyes ; then
|
||||
ft_config_is_lt=""
|
||||
if test $ft_config_major_version -lt $ft_min_major_version ; then
|
||||
ft_config_is_lt=yes
|
||||
else
|
||||
if test $ft_config_major_version -eq $ft_min_major_version ; then
|
||||
if test $ft_config_minor_version -lt $ft_min_minor_version ; then
|
||||
ft_config_is_lt=yes
|
||||
else
|
||||
if test $ft_config_minor_version -eq $ft_min_minor_version ; then
|
||||
if test $ft_config_micro_version -lt $ft_min_micro_version ; then
|
||||
ft_config_is_lt=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test x$ft_config_is_lt = xyes ; then
|
||||
no_ft=yes
|
||||
else
|
||||
ac_save_CFLAGS="$CFLAGS"
|
||||
ac_save_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS $FT2_CFLAGS"
|
||||
LIBS="$FT2_LIBS $LIBS"
|
||||
dnl
|
||||
dnl Sanity checks for the results of freetype-config to some extent
|
||||
dnl
|
||||
AC_TRY_RUN([
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
#include <stdio.h>
|
||||
|
@ -108,7 +92,7 @@ int
|
|||
main()
|
||||
{
|
||||
FT_Library library;
|
||||
FT_Error error;
|
||||
FT_Error error;
|
||||
|
||||
error = FT_Init_FreeType(&library);
|
||||
|
||||
|
@ -120,59 +104,40 @@ main()
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
]])
|
||||
],
|
||||
[],
|
||||
[no_ft=yes],
|
||||
[echo $ECHO_N "cross compiling; assuming OK... $ECHO_C"])
|
||||
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi # test $ft_config_version -lt $ft_min_version
|
||||
fi # test x$enable_fttest = xyes
|
||||
fi # test "$FT2_CONFIG" = "no"
|
||||
|
||||
if test x$no_ft = x ; then
|
||||
AC_MSG_RESULT([yes])
|
||||
m4_if([$2], [], [:], [$2])
|
||||
],, no_ft=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
|
||||
CFLAGS="$ac_save_CFLAGS"
|
||||
LIBS="$ac_save_LIBS"
|
||||
fi # test $ft_config_version -lt $ft_min_version
|
||||
fi # test x$enable_fttest = xyes
|
||||
fi # test "$FT2_CONFIG" = "no"
|
||||
if test x$no_ft = x ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
ifelse([$2], , :, [$2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
if test "$FT2_CONFIG" = "no" ; then
|
||||
echo "*** The freetype-config script installed by FreeType 2 could not be found."
|
||||
echo "*** If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in"
|
||||
echo "*** your path, or set the FT2_CONFIG environment variable to the"
|
||||
echo "*** full path to freetype-config."
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
if test "$FT2_CONFIG" = "no" ; then
|
||||
AC_MSG_WARN([
|
||||
|
||||
The freetype-config script installed by FreeType 2 could not be found.
|
||||
If FreeType 2 was installed in PREFIX, make sure PREFIX/bin is in
|
||||
your path, or set the FT2_CONFIG environment variable to the
|
||||
full path to freetype-config.
|
||||
])
|
||||
if test x$ft_config_is_lt = xyes ; then
|
||||
echo "*** Your installed version of the FreeType 2 library is too old."
|
||||
echo "*** If you have different versions of FreeType 2, make sure that"
|
||||
echo "*** correct values for --with-ft-prefix or --with-ft-exec-prefix"
|
||||
echo "*** are used, or set the FT2_CONFIG environment variable to the"
|
||||
echo "*** full path to freetype-config."
|
||||
else
|
||||
if test x$ft_config_is_lt = xyes ; then
|
||||
AC_MSG_WARN([
|
||||
|
||||
Your installed version of the FreeType 2 library is too old.
|
||||
If you have different versions of FreeType 2, make sure that
|
||||
correct values for --with-ft-prefix or --with-ft-exec-prefix
|
||||
are used, or set the FT2_CONFIG environment variable to the
|
||||
full path to freetype-config.
|
||||
])
|
||||
else
|
||||
AC_MSG_WARN([
|
||||
|
||||
The FreeType test program failed to run. If your system uses
|
||||
shared libraries and they are installed outside the normal
|
||||
system library path, make sure the variable LD_LIBRARY_PATH
|
||||
(or whatever is appropiate for your system) is correctly set.
|
||||
])
|
||||
fi
|
||||
echo "*** The FreeType test program failed to run. If your system uses"
|
||||
echo "*** shared libraries and they are installed outside the normal"
|
||||
echo "*** system library path, make sure the variable LD_LIBRARY_PATH"
|
||||
echo "*** (or whatever is appropiate for your system) is correctly set."
|
||||
fi
|
||||
|
||||
FT2_CFLAGS=""
|
||||
FT2_LIBS=""
|
||||
m4_if([$3], [], [:], [$3])
|
||||
fi
|
||||
|
||||
AC_SUBST([FT2_CFLAGS])
|
||||
AC_SUBST([FT2_LIBS])])
|
||||
|
||||
# end of freetype2.m4
|
||||
FT2_CFLAGS=""
|
||||
FT2_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(FT2_CFLAGS)
|
||||
AC_SUBST(FT2_LIBS)
|
||||
])
|
||||
|
|
|
@ -1,24 +1,31 @@
|
|||
## FreeType specific autoconf tests
|
||||
|
||||
# serial 2
|
||||
# serial 1 FT_MUNMAP_DECL
|
||||
|
||||
AC_DEFUN([FT_MUNMAP_PARAM],
|
||||
[AC_MSG_CHECKING([for munmap's first parameter type])
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_SOURCE([[
|
||||
AC_DEFUN(FT_MUNMAP_DECL,
|
||||
[AC_MSG_CHECKING([whether munmap must be declared])
|
||||
AC_CACHE_VAL(ft_cv_munmap_decl,
|
||||
[AC_TRY_COMPILE([
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <sys/mman.h>],
|
||||
[char *(*pfn) = (char *(*))munmap],
|
||||
ft_cv_munmap_decl=no,
|
||||
ft_cv_munmap_decl=yes)])
|
||||
AC_MSG_RESULT($ft_cv_munmap_decl)
|
||||
if test $ft_cv_munmap_decl = yes; then
|
||||
AC_DEFINE(NEED_MUNMAP_DECL,,
|
||||
[Define to 1 if munmap() is not defined in <sys/mman.h>])
|
||||
fi])
|
||||
|
||||
AC_DEFUN(FT_MUNMAP_PARAM,
|
||||
[AC_MSG_CHECKING([for munmap's first parameter type])
|
||||
AC_TRY_COMPILE([
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
int munmap(void *, size_t);
|
||||
|
||||
]])
|
||||
],
|
||||
[],
|
||||
[AC_MSG_RESULT([void *])
|
||||
AC_DEFINE([MUNMAP_USES_VOIDP],
|
||||
[],
|
||||
[Define to 1 if the first argument of munmap is of type void *])],
|
||||
[AC_MSG_RESULT([char *])])
|
||||
])
|
||||
|
||||
# end of ft-munmap.m4
|
||||
int munmap(void *, size_t);],,
|
||||
AC_MSG_RESULT([void *]);AC_DEFINE(MUNMAP_USES_VOIDP,,
|
||||
[Define to 1 if the first argument of munmap is of type void *]),
|
||||
AC_MSG_RESULT([char *]))
|
||||
])
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* Build macros of the FreeType 2 library. */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2003 by */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -21,15 +21,14 @@
|
|||
/* This is a Unix-specific version of <ft2build.h> that should be used */
|
||||
/* exclusively *after* installation of the library. */
|
||||
/* */
|
||||
/* It assumes that "/usr/local/include/freetype2" (or whatever is */
|
||||
/* returned by the "freetype-config --cflags" or "pkg-config --cflags" */
|
||||
/* command) is in your compilation include path. */
|
||||
/* It assumes that "/usr/local/include/freetype2" (or wathever is */
|
||||
/* returned by the "freetype-config --cflags" command) is in your */
|
||||
/* compilation include path. */
|
||||
/* */
|
||||
/* We don't need to do anything special in this release. However, for */
|
||||
/* a future FreeType 2 release, the following installation changes will */
|
||||
/* be performed: */
|
||||
/* FreeType 2.1, the following installation changes will be performed: */
|
||||
/* */
|
||||
/* - The contents of "freetype-2.x/include/freetype" will be installed */
|
||||
/* - The contents of "freetype-2.1/include/freetype" will be installed */
|
||||
/* to "/usr/local/include/freetype2" instead of */
|
||||
/* "/usr/local/include/freetype2/freetype". */
|
||||
/* */
|
||||
|
@ -40,11 +39,11 @@
|
|||
/* replace all "<freetype/xxx>" with "<freetype2/xxx>". */
|
||||
/* */
|
||||
/* - Adding "/usr/local/include/freetype2" to your compilation include */
|
||||
/* path will not be necessary anymore. */
|
||||
/* path will not be necessary anymore. The command */
|
||||
/* "freetype-config --cflags" will return an empty string. */
|
||||
/* */
|
||||
/* These changes will be transparent to client applications which use */
|
||||
/* freetype-config (or pkg-config). No modifications will be necessary */
|
||||
/* to compile with the new scheme. */
|
||||
/* - Client applications which adhere to the new inclusion scheme */
|
||||
/* WILL NOT NEED TO BE MODIFIED to compile with FT 2.1! */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
@ -52,7 +51,7 @@
|
|||
#ifndef __FT2_BUILD_UNIX_H__
|
||||
#define __FT2_BUILD_UNIX_H__
|
||||
|
||||
/* "<prefix>/include/freetype2" must be in your current inclusion path */
|
||||
/* "/usr/local/include/freetype2" must be in your current inclusion path */
|
||||
#include <freetype/config/ftheader.h>
|
||||
|
||||
#endif /* __FT2_BUILD_UNIX_H__ */
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* UNIX-specific configuration file (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2000, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -57,12 +57,11 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
#undef HAVE_UNISTD_H
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
#undef SIZEOF_INT
|
||||
#undef SIZEOF_LONG
|
||||
#define HAVE_UNISTD_H 0
|
||||
#define HAVE_FCNTL_H 0
|
||||
|
||||
#define SIZEOF_INT 2
|
||||
#define SIZEOF_LONG 2
|
||||
|
||||
#define FT_SIZEOF_INT SIZEOF_INT
|
||||
#define FT_SIZEOF_LONG SIZEOF_LONG
|
||||
|
@ -90,19 +89,6 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Mac support */
|
||||
/* */
|
||||
/* This is the only necessary change, so it is defined here instead */
|
||||
/* providing a new configuration file. */
|
||||
/* */
|
||||
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
|
||||
( defined( __MWERKS__ ) && defined( macintosh ) )
|
||||
#define FT_MACINTOSH 1
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* IntN types */
|
||||
|
@ -126,88 +112,31 @@ FT_BEGIN_HEADER
|
|||
#error "no 32bit type found -- please check your configuration files"
|
||||
#endif
|
||||
|
||||
|
||||
/* look up an integer type that is at least 32 bits */
|
||||
#if FT_SIZEOF_INT >= 4
|
||||
|
||||
typedef int FT_Fast;
|
||||
typedef unsigned int FT_UFast;
|
||||
|
||||
#elif FT_SIZEOF_LONG >= 4
|
||||
|
||||
typedef long FT_Fast;
|
||||
typedef unsigned long FT_UFast;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* determine whether we have a 64-bit int type for platforms without */
|
||||
/* Autoconf */
|
||||
#if FT_SIZEOF_LONG == 8
|
||||
|
||||
/* FT_LONG64 must be defined if a 64-bit type is available */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long
|
||||
|
||||
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __BORLANDC__ ) /* Borland C++ */
|
||||
|
||||
/* XXXX: We should probably check the value of __BORLANDC__ in order */
|
||||
/* to test the compiler version. */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __WATCOMC__ ) /* Watcom C++ */
|
||||
|
||||
/* Watcom doesn't provide 64-bit data types */
|
||||
|
||||
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
||||
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
/* GCC provides the "long long" type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#define FT_BEGIN_STMNT do {
|
||||
#define FT_END_STMNT } while ( 0 )
|
||||
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
||||
#define FT_INT64 long
|
||||
|
||||
#else
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* A 64-bit data type will create compilation problems if you compile */
|
||||
/* in strict ANSI mode. To avoid them, we disable their use if */
|
||||
/* __STDC__ is defined. You can however ignore this rule by */
|
||||
/* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
|
||||
/* Many compilers provide the non-ANSI `long long' 64-bit type. You can */
|
||||
/* activate it by defining the FTCALC_USE_LONG_LONG macro in */
|
||||
/* `ftoption.h'. */
|
||||
/* */
|
||||
#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
|
||||
/* Note that this will produce many -ansi warnings during library */
|
||||
/* compilation, and that in many cases, the generated code will be */
|
||||
/* neither smaller nor faster! */
|
||||
/* */
|
||||
#ifdef FTCALC_USE_LONG_LONG
|
||||
|
||||
#ifdef __STDC__
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long
|
||||
|
||||
/* Undefine the 64-bit macros in strict ANSI compilation mode. */
|
||||
/* Since `#undef' doesn't survive in configuration header files */
|
||||
/* we use the postprocessing facility of AC_CONFIG_HEADERS to */
|
||||
/* replace the leading `/' with `#'. */
|
||||
/undef FT_LONG64
|
||||
/undef FT_INT64
|
||||
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
||||
#endif /* FTCALC_USE_LONG_LONG */
|
||||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
|
||||
|
@ -222,7 +151,7 @@ FT_BEGIN_HEADER
|
|||
#define FT_LOCAL_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_LOCAL( x ) extern x
|
||||
#define FT_LOCAL_DEF( x ) x
|
||||
#define FT_LOCAL_DEF( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
|
||||
|
@ -326,7 +255,6 @@ FT_BEGIN_HEADER
|
|||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCONFIG_H__ */
|
||||
|
||||
|
||||
|
|
|
@ -1,38 +1,21 @@
|
|||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
# This originally came from X11R5 (mit/util/scripts/install.sh).
|
||||
|
||||
scriptversion=2003-09-24.23
|
||||
scriptversion=2003-01-17.15
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
# Copyright 1991 by the Massachusetts Institute of Technology
|
||||
# (FSF changes in the public domain.)
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
# 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 M.I.T. not be used in advertising or
|
||||
# publicity pertaining to distribution of the software without specific,
|
||||
# written prior permission. M.I.T. makes no representations about the
|
||||
# suitability of this software for any purpose. It is provided "as is"
|
||||
# without express or implied warranty.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
|
@ -151,11 +134,6 @@ if test -z "$src"; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
|
@ -180,11 +158,6 @@ else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
|
@ -192,10 +165,11 @@ else
|
|||
fi
|
||||
fi
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
## this sed command emulates the dirname command
|
||||
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
# (this part is taken from Noah Friedman's mkinstalldirs script.)
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
|
@ -239,8 +213,8 @@ else
|
|||
test -z "$dstfile" && dstfile=`basename "$dst"`
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
dsttmp=$dstdir/#inst.$$#
|
||||
rmtmp=$dstdir/#rm.$$#
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
|
||||
|
|
|
@ -51,8 +51,6 @@ install: $(PROJECT_LIBRARY)
|
|||
done
|
||||
$(INSTALL_DATA) $(BUILD_DIR)/ft2unix.h \
|
||||
$(DESTDIR)$(includedir)/ft2build.h
|
||||
$(INSTALL_DATA) $(BUILD_DIR)/ftconfig.h \
|
||||
$(DESTDIR)$(includedir)/freetype2/freetype/config/ftconfig.h
|
||||
$(INSTALL_SCRIPT) -m 755 $(OBJ_BUILD)/freetype-config \
|
||||
$(DESTDIR)$(bindir)/freetype-config
|
||||
$(INSTALL_SCRIPT) -m 644 $(BUILD_DIR)/freetype2.m4 \
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,26 +1,20 @@
|
|||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain.
|
||||
|
||||
scriptversion=2003-09-26.19
|
||||
# Public domain
|
||||
|
||||
errstatus=0
|
||||
dirmode=""
|
||||
|
||||
usage="\
|
||||
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
|
||||
|
||||
Create each directory DIR (with mode MODE, if specified), including all
|
||||
leading file name components.
|
||||
"
|
||||
Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
|
||||
|
||||
# process command line arguments
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
-h | --help | --h*) # -h for help
|
||||
echo "$usage"
|
||||
echo "$usage" 1>&2
|
||||
exit 0
|
||||
;;
|
||||
-m) # -m PERM arg
|
||||
|
@ -29,10 +23,6 @@ while test $# -gt 0 ; do
|
|||
dirmode=$1
|
||||
shift
|
||||
;;
|
||||
--version)
|
||||
echo "$0 $scriptversion"
|
||||
exit 0
|
||||
;;
|
||||
--) # stop option processing
|
||||
shift
|
||||
break
|
||||
|
@ -65,25 +55,12 @@ case $dirmode in
|
|||
if mkdir -p -- . 2>/dev/null; then
|
||||
echo "mkdir -p -- $*"
|
||||
exec mkdir -p -- "$@"
|
||||
else
|
||||
# On NextStep and OpenStep, the `mkdir' command does not
|
||||
# recognize any option. It will interpret all options as
|
||||
# directories to create, and then abort because `.' already
|
||||
# exists.
|
||||
test -d ./-p && rmdir ./-p
|
||||
test -d ./-- && rmdir ./--
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
|
||||
echo "mkdir -m $dirmode -p -- $*"
|
||||
exec mkdir -m "$dirmode" -p -- "$@"
|
||||
else
|
||||
# Clean up after NextStep and OpenStep mkdir.
|
||||
for d in ./-m ./-p ./-- "./$dirmode";
|
||||
do
|
||||
test -d $d && rmdir $d
|
||||
done
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
@ -107,17 +84,17 @@ do
|
|||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
errstatus=$lasterr
|
||||
else
|
||||
if test ! -z "$dirmode"; then
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $pathcomp"
|
||||
lasterr=""
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
lasterr=""
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -130,8 +107,5 @@ exit $errstatus
|
|||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
# mkinstalldirs ends here
|
||||
|
|
|
@ -70,10 +70,7 @@ T := -o$(space)
|
|||
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||
# ANSI compliance.
|
||||
#
|
||||
# We use our own FreeType configuration file.
|
||||
#
|
||||
CFLAGS := -c @XX_CFLAGS@ @CPPFLAGS@ @CFLAGS@ \
|
||||
-DFT_CONFIG_CONFIG_H="<ftconfig.h>"
|
||||
CFLAGS := -c @XX_CFLAGS@ @CPPFLAGS@ @CFLAGS@
|
||||
|
||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||
#
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* VMS-specific configuration file (specification only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -34,8 +34,8 @@
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTCONFIG_H__
|
||||
#define __FTCONFIG_H__
|
||||
#ifndef FTCONFIG_H
|
||||
#define FTCONFIG_H
|
||||
|
||||
|
||||
/* Include the header file containing all developer build options */
|
||||
|
@ -43,7 +43,6 @@
|
|||
#include FT_CONFIG_OPTIONS_H
|
||||
#include FT_CONFIG_STANDARD_LIBRARY_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -90,19 +89,6 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Mac support */
|
||||
/* */
|
||||
/* This is the only necessary change, so it is defined here instead */
|
||||
/* providing a new configuration file. */
|
||||
/* */
|
||||
#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
|
||||
( defined( __MWERKS__ ) && defined( macintosh ) )
|
||||
#define FT_MACINTOSH 1
|
||||
#endif
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* IntN types */
|
||||
|
@ -126,84 +112,32 @@ FT_BEGIN_HEADER
|
|||
#error "no 32bit type found -- please check your configuration files"
|
||||
#endif
|
||||
|
||||
/* look up an integer type that is at least 32 bits */
|
||||
#if FT_SIZEOF_INT >= 4
|
||||
|
||||
typedef int FT_Fast;
|
||||
typedef unsigned int FT_UFast;
|
||||
|
||||
#elif FT_SIZEOF_LONG >= 4
|
||||
|
||||
typedef long FT_Fast;
|
||||
typedef unsigned long FT_UFast;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* determine whether we have a 64-bit int type for platforms without */
|
||||
/* Autoconf */
|
||||
#if FT_SIZEOF_LONG == 8
|
||||
|
||||
/* FT_LONG64 must be defined if a 64-bit type is available */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long
|
||||
|
||||
#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __BORLANDC__ ) /* Borland C++ */
|
||||
|
||||
/* XXXX: We should probably check the value of __BORLANDC__ in order */
|
||||
/* to test the compiler version. */
|
||||
|
||||
/* this compiler provides the __int64 type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 __int64
|
||||
|
||||
#elif defined( __WATCOMC__ ) /* Watcom C++ */
|
||||
|
||||
/* Watcom doesn't provide 64-bit data types */
|
||||
|
||||
#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */
|
||||
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#elif defined( __GNUC__ )
|
||||
|
||||
/* GCC provides the "long long" type */
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long int
|
||||
|
||||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#define FT_BEGIN_STMNT do {
|
||||
#define FT_END_STMNT } while ( 0 )
|
||||
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
||||
#define FT_INT64 long
|
||||
|
||||
#else
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* A 64-bit data type will create compilation problems if you compile */
|
||||
/* in strict ANSI mode. To avoid them, we disable their use if */
|
||||
/* __STDC__ is defined. You can however ignore this rule by */
|
||||
/* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro. */
|
||||
/* Many compilers provide the non-ANSI `long long' 64-bit type. You can */
|
||||
/* activate it by defining the FTCALC_USE_LONG_LONG macro in */
|
||||
/* `ftoption.h'. */
|
||||
/* */
|
||||
#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
|
||||
/* Note that this will produce many -ansi warnings during library */
|
||||
/* compilation, and that in many cases, the generated code will be */
|
||||
/* neither smaller nor faster! */
|
||||
/* */
|
||||
#ifdef FTCALC_USE_LONG_LONG
|
||||
|
||||
#ifdef __STDC__
|
||||
#define FT_LONG64
|
||||
#define FT_INT64 long long
|
||||
|
||||
/* undefine the 64-bit macros in strict ANSI compilation mode */
|
||||
#undef FT_LONG64
|
||||
#undef FT_INT64
|
||||
#endif /* FTCALC_USE_LONG_LONG */
|
||||
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
|
||||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
|
||||
|
@ -223,7 +157,6 @@ FT_BEGIN_HEADER
|
|||
|
||||
#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
|
||||
|
||||
|
||||
#ifndef FT_BASE
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -234,16 +167,15 @@ FT_BEGIN_HEADER
|
|||
|
||||
#endif /* !FT_BASE */
|
||||
|
||||
|
||||
#ifndef FT_BASE_DEF
|
||||
#ifndef BASE_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_BASE_DEF( x ) extern "C" x
|
||||
#define BASE_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_BASE_DEF( x ) extern x
|
||||
#define BASE_DEF( x ) extern x
|
||||
#endif
|
||||
|
||||
#endif /* !FT_BASE_DEF */
|
||||
#endif /* !BASE_DEF */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT
|
||||
|
@ -256,7 +188,6 @@ FT_BEGIN_HEADER
|
|||
|
||||
#endif /* !FT_EXPORT */
|
||||
|
||||
|
||||
#ifndef FT_EXPORT_DEF
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -278,9 +209,6 @@ FT_BEGIN_HEADER
|
|||
|
||||
#endif /* !FT_EXPORT_VAR */
|
||||
|
||||
/* The following macros are needed to compile the library with a */
|
||||
/* C++ compiler and with 16bit compilers. */
|
||||
/* */
|
||||
|
||||
/* This is special. Within C++, you must specify `extern "C"' for */
|
||||
/* functions which are used via function pointers, and you also */
|
||||
|
@ -288,42 +216,23 @@ FT_BEGIN_HEADER
|
|||
/* assure C linkage -- it's not possible to have (local) anonymous */
|
||||
/* functions which are accessed by (global) function pointers. */
|
||||
/* */
|
||||
/* */
|
||||
/* FT_CALLBACK_DEF is used to _define_ a callback function. */
|
||||
/* */
|
||||
/* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
|
||||
/* contains pointers to callback functions. */
|
||||
/* */
|
||||
/* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable */
|
||||
/* that contains pointers to callback functions. */
|
||||
/* */
|
||||
/* */
|
||||
/* Some 16bit compilers have to redefine these macros to insert */
|
||||
/* the infamous `_cdecl' or `__fastcall' declarations. */
|
||||
/* */
|
||||
#ifndef FT_CALLBACK_DEF
|
||||
#ifdef __cplusplus
|
||||
#define FT_CALLBACK_DEF( x ) extern "C" x
|
||||
#else
|
||||
#define FT_CALLBACK_DEF( x ) static x
|
||||
#endif
|
||||
#endif /* FT_CALLBACK_DEF */
|
||||
|
||||
#ifndef FT_CALLBACK_TABLE
|
||||
#ifdef __cplusplus
|
||||
#define FT_CALLBACK_TABLE extern "C"
|
||||
#define FT_CALLBACK_TABLE_DEF extern "C"
|
||||
#else
|
||||
#define FT_CALLBACK_TABLE extern
|
||||
#define FT_CALLBACK_TABLE_DEF /* nothing */
|
||||
#endif
|
||||
#endif /* FT_CALLBACK_TABLE */
|
||||
#define FT_CALLBACK_DEF( x ) extern "C" x
|
||||
#define FT_CALLBACK_TABLE extern "C"
|
||||
#define FT_CALLBACK_TABLE_DEF extern "C"
|
||||
|
||||
#else
|
||||
|
||||
#define FT_CALLBACK_DEF( x ) static x
|
||||
#define FT_CALLBACK_TABLE extern
|
||||
#define FT_CALLBACK_TABLE_DEF
|
||||
|
||||
#endif /* __cplusplus */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCONFIG_H__ */
|
||||
#endif /* FTCONFIG_H */
|
||||
|
||||
|
||||
/* END */
|
||||
|
|
|
@ -19,15 +19,6 @@
|
|||
</pre>
|
||||
</ul>
|
||||
|
||||
<p>Be sure to extract the files with the Windows (CR+LF) line endings.
|
||||
ZIP archives are already stored this way, so no further step is required.
|
||||
If you use some .tar.*z archives, be sure to configure your extracting
|
||||
tool to convert the line endings. For example, with
|
||||
<a href="http://www.winzip.com">WinZip</a>, you should set the "TAR file
|
||||
smart CR/LF Conversion" option on. Alternatively, you may consider using
|
||||
the "unix2dos" or "u2d" utilities that are floating around, which
|
||||
specifically deal with this particular problem.
|
||||
|
||||
<p>Build directories are placed in the top-level "objs" directory</p>
|
||||
|
||||
<p>Enjoy :-)</p>
|
||||
|
|
|
@ -28,14 +28,14 @@
|
|||
* "ftoption.h"), then invoke Jam as usual.
|
||||
*/
|
||||
|
||||
#ifndef __FT2_BUILD_DEVEL_H__
|
||||
#define __FT2_BUILD_DEVEL_H__
|
||||
#ifndef __FT2_BUILD_GENERIC_H__
|
||||
#define __FT2_BUILD_GENERIC_H__
|
||||
|
||||
#define FT_CONFIG_OPTIONS_H <ftoption.h>
|
||||
|
||||
#include <freetype/config/ftheader.h>
|
||||
|
||||
#endif /* __FT2_BUILD_DEVEL_H__ */
|
||||
#endif /* __FT2_BUILD_GENERIC_H__ */
|
||||
|
||||
|
||||
/* END */
|
||||
|
|
|
@ -296,7 +296,7 @@ FT_BEGIN_HEADER
|
|||
/* Do not #undef this macro here since the build system might define */
|
||||
/* it for certain configurations only. */
|
||||
/* */
|
||||
#define FT_DEBUG_MEMORY
|
||||
/* #define FT_DEBUG_MEMORY */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -101,15 +101,15 @@ IV. Overriding default configuration and module headers
|
|||
name the configuration headers. To do so, you need a custom
|
||||
"ft2build.h" whose content can be as simple as:
|
||||
|
||||
#ifndef __FT2_BUILD_MY_PLATFORM_H__
|
||||
#define __FT2_BUILD_MY_PLATFORM_H__
|
||||
#ifndef __FT2_BUILD_GENERIC_H__
|
||||
#define __FT2_BUILD_GENERIC_H__
|
||||
|
||||
#define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
|
||||
#define FT_CONFIG_MODULES_H <custom/my-ftmodule.h>
|
||||
#define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
|
||||
#define FT_CONFIG_MACROS_H <custom/my-ftmodule.h>
|
||||
|
||||
#include <freetype/config/ftheader.h>
|
||||
|
||||
#endif /* __FT2_BUILD_MY_PLATFORM_H__ */
|
||||
#endif /* __FT2_BUILD_GENERIC_H__ */
|
||||
|
||||
Place those files in a separate directory, e.g.:
|
||||
|
||||
|
|
|
@ -51,10 +51,7 @@ libtool number, as well as the shared object number found on _most_
|
|||
systems, but not all of them:
|
||||
|
||||
release libtool so
|
||||
-------------------------------
|
||||
2.1.8 9.6.3 6.3.6
|
||||
2.1.7 9.5.3 6.3.5
|
||||
2.1.6 9.5.3 6.3.5
|
||||
--------------------------------------------------------------------
|
||||
2.1.5 9.4.3 6.3.4
|
||||
2.1.4 9.3.3 6.3.3
|
||||
2.1.3 9.2.3 6.3.2
|
||||
|
@ -63,8 +60,6 @@ systems, but not all of them:
|
|||
2.1.0 8.0.2 ?
|
||||
2.0.9 9.0.3 ?
|
||||
2.0.8 8.0.2 ?
|
||||
2.0.4 7.0.1 ?
|
||||
2.0.1 6.1.0 ?
|
||||
|
||||
The libtool numbers are a bit inconsistent due to the library's history:
|
||||
|
||||
|
@ -91,19 +86,19 @@ other release numbers.
|
|||
old_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS=`freetype-config --cflags`
|
||||
AC_TRY_CPP([
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
#include <freetype/freetype.h>
|
||||
#if (FREETYPE_MAJOR*1000 + FREETYPE_MINOR)*1000 + FREETYPE_PATCH < 2000009
|
||||
#error Freetype version too low.
|
||||
#endif
|
||||
],
|
||||
[AC_MSG_RESULT(yes)
|
||||
FREETYPE_LIBS=`freetype-config --libs`
|
||||
AC_SUBST(FREETYPE_LIBS)
|
||||
AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library])
|
||||
CPPFLAGS="$old_CPPFLAGS"],
|
||||
[AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])])
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
FREETYPE_LIBS=`freetype-config --libs`
|
||||
AC_SUBST(FREETYPE_LIBS)
|
||||
AC_DEFINE(HAVE_FREETYPE,1,[Define if you have the FreeType2 library])
|
||||
CPPFLAGS="$old_CPPFLAGS"
|
||||
],[
|
||||
AC_MSG_ERROR([Need FreeType library version 2.0.9 or higher])
|
||||
])
|
||||
|
||||
|
||||
--- end of VERSION.DLL ---
|
||||
|
|
|
@ -2,27 +2,24 @@
|
|||
The FreeType 2 font engine is copyrighted work and cannot be used
|
||||
legally without a software license. In order to make this project
|
||||
usable to a vast majority of developers, we distribute it under two
|
||||
mutually exclusive open-source licenses.
|
||||
mutually exclusive licenses.
|
||||
|
||||
This means that *you* must choose *one* of the two licenses described
|
||||
This means that *you* must choose *one* license of the two described
|
||||
below, then obey all its terms and conditions when using FreeType 2 in
|
||||
any of your projects or products.
|
||||
|
||||
- The FreeType License, found in the file `FTL.TXT', which is similar
|
||||
to the original BSD license *with* an advertising clause that forces
|
||||
you to explicitly cite the FreeType project in your product's
|
||||
documentation. All details are in the license file. This license
|
||||
is suited to products which don't use the GNU General Public
|
||||
License.
|
||||
- The FreeType License, found in the file "FTL.TXT", which is an
|
||||
BSD-style open-source license *with* an advertising clause that
|
||||
forces you to explicitely cite the FreeType project in your
|
||||
product's documentation. All details are in the license file.
|
||||
|
||||
- The GNU General Public License version 2, found in `GPL.TXT' (any
|
||||
later version can be used also), for programs which already use the
|
||||
GPL. Note that the FTL is incompatible with the GPL due to its
|
||||
advertisement clause.
|
||||
- The GNU General Public License, found in "GPL.TXT", which is the
|
||||
traditionnal and "viral" GPL license that forces you to redistribute
|
||||
the _complete_ sources of all your products that use FreeType 2.
|
||||
|
||||
The contributed PCF driver comes with a license similar to that of the X
|
||||
Window System. It is compatible to the above two licenses (see file
|
||||
src/pcf/readme).
|
||||
Note that the contributed PCF driver comes with a license similar to
|
||||
that of X Window System which is compatible to the above two licenses
|
||||
(see file src/pcf/readme).
|
||||
|
||||
|
||||
--- end of licence.txt ---
|
||||
|
|
|
@ -1,624 +0,0 @@
|
|||
|
||||
How FreeType's rasterizer work
|
||||
|
||||
by David Turner
|
||||
|
||||
Revised 2003-Dec-08
|
||||
|
||||
|
||||
This file is an attempt to explain the internals of the FreeType
|
||||
rasterizer. The rasterizer is of quite general purpose and could
|
||||
easily be integrated into other programs.
|
||||
|
||||
|
||||
I. Introduction
|
||||
|
||||
II. Rendering Technology
|
||||
1. Requirements
|
||||
2. Profiles and Spans
|
||||
a. Sweeping the Shape
|
||||
b. Decomposing Outlines into Profiles
|
||||
c. The Render Pool
|
||||
d. Computing Profiles Extents
|
||||
e. Computing Profiles Coordinates
|
||||
f. Sweeping and Sorting the Spans
|
||||
|
||||
|
||||
I. Introduction
|
||||
===============
|
||||
|
||||
A rasterizer is a library in charge of converting a vectorial
|
||||
representation of a shape into a bitmap. The FreeType rasterizer
|
||||
has been originally developed to render the glyphs found in
|
||||
TrueType files, made up of segments and second-order Béziers.
|
||||
Meanwhile it has been extended to render third-order Bézier curves
|
||||
also. This document is an explanation of its design and
|
||||
implementation.
|
||||
|
||||
While these explanations start from the basics, a knowledge of
|
||||
common rasterization techniques is assumed.
|
||||
|
||||
|
||||
II. Rendering Technology
|
||||
========================
|
||||
|
||||
1. Requirements
|
||||
---------------
|
||||
|
||||
We assume that all scaling, rotating, hinting, etc., has been
|
||||
already done. The glyph is thus described by a list of points in
|
||||
the device space.
|
||||
|
||||
- All point coordinates are in the 26.6 fixed float format. The
|
||||
used orientation is:
|
||||
|
||||
|
||||
^ y
|
||||
| reference orientation
|
||||
|
|
||||
*----> x
|
||||
0
|
||||
|
||||
|
||||
`26.6' means that 26 bits are used for the integer part of a
|
||||
value and 6 bits are used for the fractional part.
|
||||
Consequently, the `distance' between two neighbouring pixels is
|
||||
64 `units' (1 unit = 1/64th of a pixel).
|
||||
|
||||
Note that, for the rasterizer, pixel centers are located at
|
||||
integer coordinates. The TrueType bytecode interpreter,
|
||||
however, assumes that the lower left edge of a pixel (which is
|
||||
taken to be a square with a length of 1 unit) has integer
|
||||
coordinates.
|
||||
|
||||
|
||||
^ y ^ y
|
||||
| |
|
||||
| (1,1) | (0.5,0.5)
|
||||
+-----------+ +-----+-----+
|
||||
| | | | |
|
||||
| | | | |
|
||||
| | | o-----+-----> x
|
||||
| | | (0,0) |
|
||||
| | | |
|
||||
o-----------+-----> x +-----------+
|
||||
(0,0) (-0.5,-0.5)
|
||||
|
||||
TrueType bytecode interpreter FreeType rasterizer
|
||||
|
||||
|
||||
A pixel line in the target bitmap is called a `scanline'.
|
||||
|
||||
- A glyph is usually made of several contours, also called
|
||||
`outlines'. A contour is simply a closed curve that delimits an
|
||||
outer or inner region of the glyph. It is described by a series
|
||||
of successive points of the points table.
|
||||
|
||||
Each point of the glyph has an associated flag that indicates
|
||||
whether it is `on' or `off' the curve. Two successive `on'
|
||||
points indicate a line segment joining the two points.
|
||||
|
||||
One `off' point amidst two `on' points indicates a second-degree
|
||||
(conic) Bézier parametric arc, defined by these three points
|
||||
(the `off' point being the control point, and the `on' ones the
|
||||
start and end points). Similarly, a third-degree (cubic) Bézier
|
||||
curve is described by four points (two `off' control points
|
||||
between two `on' points).
|
||||
|
||||
Finally, for second-order curves only, two successive `off'
|
||||
points forces the rasterizer to create, during rendering, an
|
||||
`on' point amidst them, at their exact middle. This greatly
|
||||
facilitates the definition of successive Bézier arcs.
|
||||
|
||||
The parametric form of a second-order Bézier curve is:
|
||||
|
||||
P(t) = (1-t)^2*P1 + 2*t*(1-t)*P2 + t^2*P3
|
||||
|
||||
(P1 and P3 are the end points, P2 the control point.)
|
||||
|
||||
The parametric form of a third-order Bézier curve is:
|
||||
|
||||
P(t) = (1-t)^3*P1 + 3*t*(1-t)^2*P2 + 3*t^2*(1-t)*P3 + t^3*P4
|
||||
|
||||
(P1 and P4 are the end points, P2 and P3 the control points.)
|
||||
|
||||
For both formulae, t is a real number in the range [0..1].
|
||||
|
||||
Note that the rasterizer does not use these formulae directly.
|
||||
They exhibit, however, one very useful property of Bézier arcs:
|
||||
Each point of the curve is a weighted average of the control
|
||||
points.
|
||||
|
||||
As all weights are positive and always sum up to 1, whatever the
|
||||
value of t, each arc point lies within the triangle (polygon)
|
||||
defined by the arc's three (four) control points.
|
||||
|
||||
In the following, only second-order curves are discussed since
|
||||
rasterization of third-order curves is completely identical.
|
||||
|
||||
Here some samples for second-order curves.
|
||||
|
||||
|
||||
* # on curve
|
||||
* off curve
|
||||
__---__
|
||||
#-__ _-- -_
|
||||
--__ _- -
|
||||
--__ # \
|
||||
--__ #
|
||||
-#
|
||||
Two `on' points
|
||||
Two `on' points and one `off' point
|
||||
between them
|
||||
|
||||
*
|
||||
# __ Two `on' points with two `off'
|
||||
\ - - points between them. The point
|
||||
\ / \ marked `0' is the middle of the
|
||||
- 0 \ `off' points, and is a `virtual
|
||||
-_ _- # on' point where the curve passes.
|
||||
-- It does not appear in the point
|
||||
* list.
|
||||
|
||||
|
||||
2. Profiles and Spans
|
||||
---------------------
|
||||
|
||||
The following is a basic explanation of the _kind_ of computations
|
||||
made by the rasterizer to build a bitmap from a vector
|
||||
representation. Note that the actual implementation is slightly
|
||||
different, due to performance tuning and other factors.
|
||||
|
||||
However, the following ideas remain in the same category, and are
|
||||
more convenient to understand.
|
||||
|
||||
|
||||
a. Sweeping the Shape
|
||||
|
||||
The best way to fill a shape is to decompose it into a number of
|
||||
simple horizontal segments, then turn them on in the target
|
||||
bitmap. These segments are called `spans'.
|
||||
|
||||
__---__
|
||||
_-- -_
|
||||
_- -
|
||||
- \
|
||||
/ \
|
||||
/ \
|
||||
| \
|
||||
|
||||
__---__ Example: filling a shape
|
||||
_----------_ with spans.
|
||||
_--------------
|
||||
----------------\
|
||||
/-----------------\ This is typically done from the top
|
||||
/ \ to the bottom of the shape, in a
|
||||
| | \ movement called a `sweep'.
|
||||
V
|
||||
|
||||
__---__
|
||||
_----------_
|
||||
_--------------
|
||||
----------------\
|
||||
/-----------------\
|
||||
/-------------------\
|
||||
|---------------------\
|
||||
|
||||
|
||||
In order to draw a span, the rasterizer must compute its
|
||||
coordinates, which are simply the x coordinates of the shape's
|
||||
contours, taken on the y scanlines.
|
||||
|
||||
|
||||
/---/ |---| Note that there are usually
|
||||
/---/ |---| several spans per scanline.
|
||||
| /---/ |---|
|
||||
| /---/_______|---| When rendering this shape to the
|
||||
V /----------------| current scanline y, we must
|
||||
/-----------------| compute the x values of the
|
||||
a /----| |---| points a, b, c, and d.
|
||||
- - - * * - - - - * * - - y -
|
||||
/ / b c| |d
|
||||
|
||||
|
||||
/---/ |---|
|
||||
/---/ |---| And then turn on the spans a-b
|
||||
/---/ |---| and c-d.
|
||||
/---/_______|---|
|
||||
/----------------|
|
||||
/-----------------|
|
||||
a /----| |---|
|
||||
- - - ####### - - - - ##### - - y -
|
||||
/ / b c| |d
|
||||
|
||||
|
||||
b. Decomposing Outlines into Profiles
|
||||
|
||||
For each scanline during the sweep, we need the following
|
||||
information:
|
||||
|
||||
o The number of spans on the current scanline, given by the
|
||||
number of shape points intersecting the scanline (these are
|
||||
the points a, b, c, and d in the above example).
|
||||
|
||||
o The x coordinates of these points.
|
||||
|
||||
x coordinates are computed before the sweep, in a phase called
|
||||
`decomposition' which converts the glyph into *profiles*.
|
||||
|
||||
Put it simply, a `profile' is a contour's portion that can only
|
||||
be either ascending or descending, i.e., it is monotonic in the
|
||||
vertical direction (we also say y-monotonic). There is no such
|
||||
thing as a horizontal profile, as we shall see.
|
||||
|
||||
Here are a few examples:
|
||||
|
||||
|
||||
this square
|
||||
1 2
|
||||
---->---- is made of two
|
||||
| | | |
|
||||
| | profiles | |
|
||||
^ v ^ + v
|
||||
| | | |
|
||||
| | | |
|
||||
----<----
|
||||
|
||||
up down
|
||||
|
||||
|
||||
this triangle
|
||||
|
||||
P2 1 2
|
||||
|
||||
|\ is made of two | \
|
||||
^ | \ \ | \
|
||||
| | \ \ profiles | \ |
|
||||
| | \ v ^ | \ |
|
||||
| \ | | + \ v
|
||||
| \ | | \
|
||||
P1 ---___ \ ---___ \
|
||||
---_\ ---_ \
|
||||
<--__ P3 up down
|
||||
|
||||
|
||||
|
||||
A more general contour can be made of more than two profiles:
|
||||
|
||||
__ ^
|
||||
/ | / ___ / |
|
||||
/ | / | / | / |
|
||||
| | / / => | v / /
|
||||
| | | | | | ^ |
|
||||
^ | |___| | | ^ + | + | + v
|
||||
| | | v | |
|
||||
| | | up |
|
||||
|___________| | down |
|
||||
|
||||
<-- up down
|
||||
|
||||
|
||||
Successive profiles are always joined by horizontal segments
|
||||
that are not part of the profiles themselves.
|
||||
|
||||
For the rasterizer, a profile is simply an *array* that
|
||||
associates one horizontal *pixel* coordinate to each bitmap
|
||||
*scanline* crossed by the contour's section containing the
|
||||
profile. Note that profiles are *oriented* up or down along the
|
||||
glyph's original flow orientation.
|
||||
|
||||
In other graphics libraries, profiles are also called `edges' or
|
||||
`edgelists'.
|
||||
|
||||
|
||||
c. The Render Pool
|
||||
|
||||
FreeType has been designed to be able to run well on _very_
|
||||
light systems, including embedded systems with very few memory.
|
||||
|
||||
A render pool will be allocated once; the rasterizer uses this
|
||||
pool for all its needs by managing this memory directly in it.
|
||||
The algorithms that are used for profile computation make it
|
||||
possible to use the pool as a simple growing heap. This means
|
||||
that this memory management is actually quite easy and faster
|
||||
than any kind of malloc()/free() combination.
|
||||
|
||||
Moreover, we'll see later that the rasterizer is able, when
|
||||
dealing with profiles too large and numerous to lie all at once
|
||||
in the render pool, to immediately decompose recursively the
|
||||
rendering process into independent sub-tasks, each taking less
|
||||
memory to be performed (see `sub-banding' below).
|
||||
|
||||
The render pool doesn't need to be large. A 4KByte pool is
|
||||
enough for nearly all renditions, though nearly 100% slower than
|
||||
a more confortable 16KByte or 32KByte pool (that was tested with
|
||||
complex glyphs at sizes over 500 pixels).
|
||||
|
||||
|
||||
d. Computing Profiles Extents
|
||||
|
||||
Remember that a profile is an array, associating a _scanline_ to
|
||||
the x pixel coordinate of its intersection with a contour.
|
||||
|
||||
Though it's not exactly how the FreeType rasterizer works, it is
|
||||
convenient to think that we need a profile's height before
|
||||
allocating it in the pool and computing its coordinates.
|
||||
|
||||
The profile's height is the number of scanlines crossed by the
|
||||
y-monotonic section of a contour. We thus need to compute these
|
||||
sections from the vectorial description. In order to do that,
|
||||
we are obliged to compute all (local and global) y extrema of
|
||||
the glyph (minima and maxima).
|
||||
|
||||
|
||||
P2 For instance, this triangle has only
|
||||
two y-extrema, which are simply
|
||||
|\
|
||||
| \ P2.y as a vertical maximum
|
||||
| \ P3.y as a vertical minimum
|
||||
| \
|
||||
| \ P1.y is not a vertical extremum (though
|
||||
| \ it is a horizontal minimum, which we
|
||||
P1 ---___ \ don't need).
|
||||
---_\
|
||||
P3
|
||||
|
||||
|
||||
Note that the extrema are expressed in pixel units, not in
|
||||
scanlines. The triangle's height is certainly (P3.y-P2.y+1)
|
||||
pixel units, but its profiles' heights are computed in
|
||||
scanlines. The exact conversion is simple:
|
||||
|
||||
- min scanline = FLOOR ( min y )
|
||||
- max scanline = CEILING( max y )
|
||||
|
||||
A problem arises with Bézier Arcs. While a segment is always
|
||||
necessarily y-monotonic (i.e., flat, ascending, or descending),
|
||||
which makes extrema computations easy, the ascent of an arc can
|
||||
vary between its control points.
|
||||
|
||||
|
||||
P2
|
||||
*
|
||||
# on curve
|
||||
* off curve
|
||||
__-x--_
|
||||
_-- -_
|
||||
P1 _- - A non y-monotonic Bézier arc.
|
||||
# \
|
||||
- The arc goes from P1 to P3.
|
||||
\
|
||||
\ P3
|
||||
#
|
||||
|
||||
|
||||
We first need to be able to easily detect non-monotonic arcs,
|
||||
according to their control points. I will state here, without
|
||||
proof, that the monotony condition can be expressed as:
|
||||
|
||||
P1.y <= P2.y <= P3.y for an ever-ascending arc
|
||||
|
||||
P1.y >= P2.y >= P3.y for an ever-descending arc
|
||||
|
||||
with the special case of
|
||||
|
||||
P1.y = P2.y = P3.y where the arc is said to be `flat'.
|
||||
|
||||
As you can see, these conditions can be very easily tested.
|
||||
They are, however, extremely important, as any arc that does not
|
||||
satisfy them necessarily contains an extremum.
|
||||
|
||||
Note also that a monotonic arc can contain an extremum too,
|
||||
which is then one of its `on' points:
|
||||
|
||||
|
||||
P1 P2
|
||||
#---__ * P1P2P3 is ever-descending, but P1
|
||||
-_ is an y-extremum.
|
||||
-
|
||||
---_ \
|
||||
-> \
|
||||
\ P3
|
||||
#
|
||||
|
||||
|
||||
Let's go back to our previous example:
|
||||
|
||||
|
||||
P2
|
||||
*
|
||||
# on curve
|
||||
* off curve
|
||||
__-x--_
|
||||
_-- -_
|
||||
P1 _- - A non-y-monotonic Bézier arc.
|
||||
# \
|
||||
- Here we have
|
||||
\ P2.y >= P1.y &&
|
||||
\ P3 P2.y >= P3.y (!)
|
||||
#
|
||||
|
||||
|
||||
We need to compute the vertical maximum of this arc to be able
|
||||
to compute a profile's height (the point marked by an `x'). The
|
||||
arc's equation indicates that a direct computation is possible,
|
||||
but we rely on a different technique, which use will become
|
||||
apparent soon.
|
||||
|
||||
Bézier arcs have the special property of being very easily
|
||||
decomposed into two sub-arcs, which are themselves Bézier arcs.
|
||||
Moreover, it is easy to prove that there is at most one vertical
|
||||
extremum on each Bézier arc (for second-degree curves; similar
|
||||
conditions can be found for third-order arcs).
|
||||
|
||||
For instance, the following arc P1P2P3 can be decomposed into
|
||||
two sub-arcs Q1Q2Q3 and R1R2R3:
|
||||
|
||||
|
||||
P2
|
||||
*
|
||||
# on curve
|
||||
* off curve
|
||||
|
||||
|
||||
original Bézier arc P1P2P3.
|
||||
__---__
|
||||
_-- --_
|
||||
_- -_
|
||||
- -
|
||||
/ \
|
||||
/ \
|
||||
# #
|
||||
P1 P3
|
||||
|
||||
|
||||
|
||||
P2
|
||||
*
|
||||
|
||||
|
||||
|
||||
Q3 Decomposed into two subarcs
|
||||
Q2 R2 Q1Q2Q3 and R1R2R3
|
||||
* __-#-__ *
|
||||
_-- --_
|
||||
_- R1 -_ Q1 = P1 R3 = P3
|
||||
- - Q2 = (P1+P2)/2 R2 = (P2+P3)/2
|
||||
/ \
|
||||
/ \ Q3 = R1 = (Q2+R2)/2
|
||||
# #
|
||||
Q1 R3 Note that Q2, R2, and Q3=R1
|
||||
are on a single line which is
|
||||
tangent to the curve.
|
||||
|
||||
|
||||
We have then decomposed a non-y-monotonic Bézier curve into two
|
||||
smaller sub-arcs. Note that in the above drawing, both sub-arcs
|
||||
are monotonic, and that the extremum is then Q3=R1. However, in
|
||||
a more general case, only one sub-arc is guaranteed to be
|
||||
monotonic. Getting back to our former example:
|
||||
|
||||
|
||||
Q2
|
||||
*
|
||||
|
||||
__-x--_ R1
|
||||
_-- #_
|
||||
Q1 _- Q3 - R2
|
||||
# \ *
|
||||
-
|
||||
\
|
||||
\ R3
|
||||
#
|
||||
|
||||
|
||||
Here, we see that, though Q1Q2Q3 is still non-monotonic, R1R2R3
|
||||
is ever descending: We thus know that it doesn't contain the
|
||||
extremum. We can then re-subdivide Q1Q2Q3 into two sub-arcs and
|
||||
go on recursively, stopping when we encounter two monotonic
|
||||
subarcs, or when the subarcs become simply too small.
|
||||
|
||||
We will finally find the vertical extremum. Note that the
|
||||
iterative process of finding an extremum is called `flattening'.
|
||||
|
||||
|
||||
e. Computing Profiles Coordinates
|
||||
|
||||
Once we have the height of each profile, we are able to allocate
|
||||
it in the render pool. The next task is to compute coordinates
|
||||
for each scanline.
|
||||
|
||||
In the case of segments, the computation is straightforward,
|
||||
using the Euclidian algorithm (also known as Bresenham).
|
||||
However, for Bézier arcs, the job is a little more complicated.
|
||||
|
||||
We assume that all Béziers that are part of a profile are the
|
||||
result of flattening the curve, which means that they are all
|
||||
y-monotonic (ascending or descending, and never flat). We now
|
||||
have to compute the intersections of arcs with the profile's
|
||||
scanlines. One way is to use a similar scheme to flattening
|
||||
called `stepping'.
|
||||
|
||||
|
||||
Consider this arc, going from P1 to
|
||||
--------------------- P3. Suppose that we need to
|
||||
compute its intersections with the
|
||||
drawn scanlines. As already
|
||||
--------------------- mentioned this can be done
|
||||
directly, but the involed algorithm
|
||||
* P2 _---# P3 is far too slow.
|
||||
------------- _-- --
|
||||
_-
|
||||
_/ Instead, it is still possible to
|
||||
---------/----------- use the decomposition property in
|
||||
/ the same recursive way, i.e.,
|
||||
| subdivide the arc into subarcs
|
||||
------|-------------- until these get too small to cross
|
||||
| more than one scanline!
|
||||
|
|
||||
-----|--------------- This is very easily done using a
|
||||
| rasterizer-managed stack of
|
||||
| subarcs.
|
||||
# P1
|
||||
|
||||
|
||||
f. Sweeping and Sorting the Spans
|
||||
|
||||
Once all our profiles have been computed, we begin the sweep to
|
||||
build (and fill) the spans.
|
||||
|
||||
As both the TrueType and Type 1 specifications use the winding
|
||||
fill rule (but with opposite directions), we place, on each
|
||||
scanline, the present profiles in two separate lists.
|
||||
|
||||
One list, called the `left' one, only contains ascending
|
||||
profiles, while the other `right' list contains the descending
|
||||
profiles.
|
||||
|
||||
As each glyph is made of closed curves, a simple geometric
|
||||
property ensures that the two lists contain the same number of
|
||||
elements.
|
||||
|
||||
Creating spans is thus straightforward:
|
||||
|
||||
1. We sort each list in increasing horizontal order.
|
||||
|
||||
2. We pair each value of the left list with its corresponding
|
||||
value in the right list.
|
||||
|
||||
|
||||
/ / | | For example, we have here
|
||||
/ / | | four profiles. Two of
|
||||
>/ / | | | them are ascending (1 &
|
||||
1// / ^ | | | 2 3), while the two others
|
||||
// // 3| | | v are descending (2 & 4).
|
||||
/ //4 | | | On the given scanline,
|
||||
a / /< | | the left list is (1,3),
|
||||
- - - *-----* - - - - *---* - - y - and the right one is
|
||||
/ / b c| |d (4,2) (sorted).
|
||||
|
||||
There are then two spans, joining
|
||||
1 to 4 (i.e. a-b) and 3 to 2
|
||||
(i.e. c-d)!
|
||||
|
||||
|
||||
Sorting doesn't necessarily take much time, as in 99 cases out
|
||||
of 100, the lists' order is kept from one scanline to the next.
|
||||
We can thus implement it with two simple singly-linked lists,
|
||||
sorted by a classic bubble-sort, which takes a minimum amount of
|
||||
time when the lists are already sorted.
|
||||
|
||||
A previous version of the rasterizer used more elaborate
|
||||
structures, like arrays to perform `faster' sorting. It turned
|
||||
out that this old scheme is not faster than the one described
|
||||
above.
|
||||
|
||||
Once the spans have been `created', we can simply draw them in
|
||||
the target bitmap.
|
||||
|
||||
|
||||
--- end of raster.txt ---
|
||||
|
||||
Local Variables:
|
||||
coding: latin-1
|
||||
End:
|
|
@ -1 +0,0 @@
|
|||
*.html
|
|
@ -7,26 +7,12 @@ How to prepare a new release
|
|||
. builds/unix/configure.ac (version_info): Update according to the libtool
|
||||
rules, then regenerate the configure script.
|
||||
|
||||
. builds/freetype.mk (refdoc): Update the `--title' option.
|
||||
. builds/freetype.mk (refdoc): Update the --title option.
|
||||
|
||||
. docs/CHANGES: Document differences to last release.
|
||||
|
||||
. README: Update.
|
||||
|
||||
. docs/VERSION.DLL: Document changed `version_info'.
|
||||
. docs/VERSION.DLL: Document changed version_info.
|
||||
|
||||
. ChangeLog: Announce new release.
|
||||
|
||||
. Call `make refdoc' to update HTML reference. Copy it to
|
||||
freetype2/docs/reference in the `www' CVS module and update the CVS.
|
||||
Then call `update-www' in ~/cvs/scripts on www.freetype.org to
|
||||
update and distribute everything to sourceforge.
|
||||
|
||||
. Tag the CVS (freetype, ft2demos, www/freetype2/docs).
|
||||
|
||||
. Update `make-release' and `make-current' in ~/cvs/scripts/ on
|
||||
www.freetype.org, then call them.
|
||||
|
||||
. Create an md5 checksum file (with md5sum).
|
||||
|
||||
. Announce new release on announce@freetype.org and to relevant newsgroups.
|
||||
|
|
|
@ -29,7 +29,6 @@ FT_Done_Size
|
|||
FT_FloorFix
|
||||
FT_Free
|
||||
FT_Get_Char_Index
|
||||
FT_Get_CMap_Language_ID
|
||||
FT_Get_First_Char
|
||||
FT_Get_Glyph_Name
|
||||
FT_Get_Kerning
|
||||
|
@ -67,7 +66,6 @@ FT_Load_Char
|
|||
FT_Load_Glyph
|
||||
FT_Load_Sfnt_Table
|
||||
FT_Lookup_Renderer
|
||||
ft_module_get_service
|
||||
FT_MulDiv
|
||||
FT_MulFix
|
||||
FT_MulTo64
|
||||
|
@ -84,7 +82,6 @@ FT_Outline_Done
|
|||
FT_Outline_Done_Internal
|
||||
FT_Outline_Get_Bitmap
|
||||
FT_Outline_Get_CBox
|
||||
FT_Outline_Get_Orientation
|
||||
FT_Outline_New
|
||||
FT_Outline_New_Internal
|
||||
FT_Outline_Render
|
||||
|
@ -97,7 +94,6 @@ FT_Render_Glyph
|
|||
FT_Render_Glyph_Internal
|
||||
FT_RoundFix
|
||||
FT_Select_Charmap
|
||||
ft_service_list_lookup
|
||||
FT_Set_Char_Size
|
||||
FT_Set_Charmap
|
||||
FT_Set_Debug_Hook
|
||||
|
@ -162,23 +158,16 @@ FT_Get_X11_Font_Format
|
|||
FT_Get_PFR_Advance
|
||||
FT_Get_PFR_Kerning
|
||||
FT_Get_PFR_Metrics
|
||||
FT_Glyph_Stroke
|
||||
FT_Glyph_StrokeBorder
|
||||
FT_Outline_GetInsideBorder
|
||||
FT_Outline_GetOutsideBorder
|
||||
FT_Stroker_BeginSubPath
|
||||
FT_Stroker_ConicTo
|
||||
FT_Stroker_CubicTo
|
||||
FT_Stroker_Done
|
||||
FT_Stroker_EndSubPath
|
||||
FT_Stroker_Export
|
||||
FT_Stroker_ExportBorder
|
||||
FT_Stroker_GetBorderCounts
|
||||
FT_Stroker_GetCounts
|
||||
FT_Stroker_LineTo
|
||||
FT_Stroker_New
|
||||
FT_Stroker_ParseOutline
|
||||
FT_Stroker_Rewind
|
||||
FT_Stroker_Set
|
||||
FT_Get_WinFNT_Header
|
||||
FT_Outline_Get_BBox
|
||||
|
@ -187,57 +176,50 @@ autohint_module_class
|
|||
ft_autohinter_service
|
||||
bdf_cmap_class
|
||||
bdf_driver_class
|
||||
FTC_Cache_Clear
|
||||
FTC_Cache_Done
|
||||
FTC_Cache_Init
|
||||
FTC_Cache_Lookup
|
||||
FTC_Cache_NewNode
|
||||
FTC_Cache_RemoveFaceID
|
||||
FT_LruList_Destroy
|
||||
FT_LruList_Lookup
|
||||
FT_LruList_New
|
||||
FT_LruList_Remove
|
||||
FT_LruList_Remove_Selection
|
||||
FT_LruList_Reset
|
||||
ftc_cache_clear
|
||||
ftc_cache_done
|
||||
ftc_cache_init
|
||||
ftc_cache_lookup
|
||||
ftc_cmap_cache_class
|
||||
FTC_CMapCache_Lookup
|
||||
FTC_CMapCache_New
|
||||
FTC_Family_Init
|
||||
FTC_GCache_Done
|
||||
FTC_GCache_Init
|
||||
FTC_GCache_Lookup
|
||||
FTC_GCache_New
|
||||
FTC_GNode_Compare
|
||||
FTC_GNode_Done
|
||||
FTC_GNode_Init
|
||||
FTC_GNode_UnselectFamily
|
||||
ftc_face_list_class
|
||||
ftc_family_done
|
||||
ftc_family_init
|
||||
ftc_family_table_alloc
|
||||
ftc_family_table_free
|
||||
ftc_glyph_family_done
|
||||
ftc_glyph_family_init
|
||||
ftc_glyph_node_compare
|
||||
ftc_glyph_node_done
|
||||
ftc_glyph_node_init
|
||||
ftc_image_cache_class
|
||||
FTC_Image_Cache_Lookup
|
||||
FTC_Image_Cache_New
|
||||
FTC_ImageCache_Lookup
|
||||
FTC_ImageCache_New
|
||||
FTC_INode_Free
|
||||
FTC_INode_New
|
||||
FTC_INode_Weight
|
||||
FTC_Manager_Compress
|
||||
FTC_Manager_Done
|
||||
FTC_Manager_FlushN
|
||||
FTC_Manager_LookupFace
|
||||
FTC_Manager_LookupSize
|
||||
FTC_Manager_Lookup_Face
|
||||
FTC_Manager_Lookup_Size
|
||||
FTC_Manager_New
|
||||
FTC_Manager_RegisterCache
|
||||
FTC_Manager_RemoveFaceID
|
||||
FTC_Manager_Register_Cache
|
||||
FTC_Manager_Reset
|
||||
FTC_MruList_Done
|
||||
FTC_MruList_Find
|
||||
FTC_MruList_Init
|
||||
FTC_MruList_Lookup
|
||||
FTC_MruList_New
|
||||
FTC_MruList_Remove
|
||||
FTC_MruList_RemoveSelection
|
||||
FTC_MruList_Reset
|
||||
FTC_MruNode_Prepend
|
||||
FTC_MruNode_Remove
|
||||
FTC_MruNode_Up
|
||||
ftc_node_destroy
|
||||
ftc_node_done
|
||||
FTC_Node_Unref
|
||||
ftc_sbit_cache_class
|
||||
FTC_SBit_Cache_Lookup
|
||||
FTC_SBit_Cache_New
|
||||
FTC_SBitCache_Lookup
|
||||
FTC_SBitCache_New
|
||||
FTC_SNode_Compare
|
||||
FTC_SNode_Free
|
||||
FTC_SNode_New
|
||||
FTC_SNode_Weight
|
||||
ftc_size_list_class
|
||||
cff_cmap_encoding_class_rec
|
||||
cff_cmap_unicode_class_rec
|
||||
cff_driver_class
|
||||
|
@ -251,7 +233,7 @@ RepadBitmap
|
|||
TwoByteSwap
|
||||
pfr_cmap_class_rec
|
||||
pfr_driver_class
|
||||
pfr_metrics_service_rec
|
||||
pfr_service_rec
|
||||
ps_parser_funcs
|
||||
ps_table_funcs
|
||||
psaux_module_class
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType internal cache interface (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2002, 2003, 2004 by */
|
||||
/* Copyright 2000-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -20,7 +20,9 @@
|
|||
#define __FTCCACHE_H__
|
||||
|
||||
|
||||
#include FT_CACHE_INTERNAL_MRU_H
|
||||
/* define to allow cache lookup inlining */
|
||||
#define FTC_CACHE_USE_INLINE
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
@ -28,7 +30,13 @@ FT_BEGIN_HEADER
|
|||
typedef struct FTC_CacheRec_* FTC_Cache;
|
||||
|
||||
/* handle to cache class */
|
||||
typedef const struct FTC_CacheClassRec_* FTC_CacheClass;
|
||||
typedef const struct FTC_Cache_ClassRec_* FTC_Cache_Class;
|
||||
|
||||
/* handle to cache node family */
|
||||
typedef struct FTC_FamilyRec_* FTC_Family;
|
||||
|
||||
/* handle to cache root query */
|
||||
typedef struct FTC_QueryRec_* FTC_Query;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -54,11 +62,12 @@ FT_BEGIN_HEADER
|
|||
/* structure size should be 20 bytes on 32-bits machines */
|
||||
typedef struct FTC_NodeRec_
|
||||
{
|
||||
FTC_MruNodeRec mru; /* circular mru list pointer */
|
||||
FTC_Node link; /* used for hashing */
|
||||
FT_UInt32 hash; /* used for hashing too */
|
||||
FT_UShort cache_index; /* index of cache the node belongs to */
|
||||
FT_Short ref_count; /* reference count for this node */
|
||||
FTC_Node mru_next; /* circular mru list pointer */
|
||||
FTC_Node mru_prev; /* circular mru list pointer */
|
||||
FTC_Node link; /* used for hashing */
|
||||
FT_UInt32 hash; /* used for hashing too */
|
||||
FT_UShort fam_index; /* index of family the node belongs to */
|
||||
FT_Short ref_count; /* reference count for this node */
|
||||
|
||||
} FTC_NodeRec;
|
||||
|
||||
|
@ -66,9 +75,6 @@ FT_BEGIN_HEADER
|
|||
#define FTC_NODE( x ) ( (FTC_Node)(x) )
|
||||
#define FTC_NODE_P( x ) ( (FTC_Node*)(x) )
|
||||
|
||||
#define FTC_NODE__NEXT(x) FTC_NODE( (x)->mru.next )
|
||||
#define FTC_NODE__PREV(x) FTC_NODE( (x)->mru.prev )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
|
@ -77,12 +83,83 @@ FT_BEGIN_HEADER
|
|||
/* cache sub-system internals. */
|
||||
/* */
|
||||
|
||||
/* can be used as a FTC_Node_DoneFunc */
|
||||
FT_EXPORT( void )
|
||||
ftc_node_done( FTC_Node node,
|
||||
FTC_Cache cache );
|
||||
|
||||
/* reserved for manager's use */
|
||||
FT_EXPORT( void )
|
||||
ftc_node_destroy( FTC_Node node,
|
||||
FTC_Manager manager );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** CACHE QUERY DEFINITIONS *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/* A structure modelling a cache node query. The following fields must */
|
||||
/* all be set by the @FTC_Family_CompareFunc method of a cache's family */
|
||||
/* list. */
|
||||
/* */
|
||||
typedef struct FTC_QueryRec_
|
||||
{
|
||||
FTC_Family family;
|
||||
FT_UFast hash;
|
||||
|
||||
} FTC_QueryRec;
|
||||
|
||||
|
||||
#define FTC_QUERY( x ) ( (FTC_Query)(x) )
|
||||
#define FTC_QUERY_P( x ) ( (FTC_Query*)(x) )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** CACHE FAMILY DEFINITIONS *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
typedef struct FTC_FamilyRec_
|
||||
{
|
||||
FT_LruNodeRec lru;
|
||||
FTC_Cache cache;
|
||||
FT_UInt num_nodes;
|
||||
FT_UInt fam_index;
|
||||
|
||||
} FTC_FamilyRec;
|
||||
|
||||
|
||||
#define FTC_FAMILY( x ) ( (FTC_Family)(x) )
|
||||
#define FTC_FAMILY_P( x ) ( (FTC_Family*)(x) )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* These functions are exported so that they can be called from */
|
||||
/* user-provided cache classes; otherwise, they are really part of the */
|
||||
/* cache sub-system internals. */
|
||||
/* */
|
||||
|
||||
/* must be called by any FTC_Node_InitFunc routine */
|
||||
FT_EXPORT( FT_Error )
|
||||
ftc_family_init( FTC_Family family,
|
||||
FTC_Query query,
|
||||
FTC_Cache cache );
|
||||
|
||||
|
||||
/* can be used as a FTC_Family_DoneFunc; otherwise, must be called */
|
||||
/* by any family finalizer function */
|
||||
FT_EXPORT( void )
|
||||
ftc_family_done( FTC_Family family );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
|
@ -91,12 +168,64 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/* each cache really implements a dynamic hash table to manage its nodes */
|
||||
typedef struct FTC_CacheRec_
|
||||
{
|
||||
FTC_Manager manager;
|
||||
FT_Memory memory;
|
||||
FTC_Cache_Class clazz;
|
||||
|
||||
FT_UInt cache_index; /* in manager's table */
|
||||
FT_Pointer cache_data; /* used by cache node methods */
|
||||
|
||||
FT_UFast p;
|
||||
FT_UFast mask;
|
||||
FT_Long slack;
|
||||
FTC_Node* buckets;
|
||||
|
||||
FT_LruList_ClassRec family_class;
|
||||
FT_LruList families;
|
||||
|
||||
} FTC_CacheRec;
|
||||
|
||||
|
||||
#define FTC_CACHE( x ) ( (FTC_Cache)(x) )
|
||||
#define FTC_CACHE_P( x ) ( (FTC_Cache*)(x) )
|
||||
|
||||
|
||||
/* initialize a given cache */
|
||||
typedef FT_Error
|
||||
(*FTC_Cache_InitFunc)( FTC_Cache cache );
|
||||
|
||||
/* clear a cache */
|
||||
typedef void
|
||||
(*FTC_Cache_ClearFunc)( FTC_Cache cache );
|
||||
|
||||
/* finalize a given cache */
|
||||
typedef void
|
||||
(*FTC_Cache_DoneFunc)( FTC_Cache cache );
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*FTC_Family_InitFunc)( FTC_Family family,
|
||||
FTC_Query query,
|
||||
FTC_Cache cache );
|
||||
|
||||
typedef FT_Int
|
||||
(*FTC_Family_CompareFunc)( FTC_Family family,
|
||||
FTC_Query query );
|
||||
|
||||
typedef void
|
||||
(*FTC_Family_DoneFunc)( FTC_Family family,
|
||||
FTC_Cache cache );
|
||||
|
||||
/* initialize a new cache node */
|
||||
typedef FT_Error
|
||||
(*FTC_Node_NewFunc)( FTC_Node *pnode,
|
||||
FT_Pointer query,
|
||||
FTC_Cache cache );
|
||||
(*FTC_Node_InitFunc)( FTC_Node node,
|
||||
FT_Pointer type,
|
||||
FTC_Cache cache );
|
||||
|
||||
/* compute the weight of a given cache node */
|
||||
typedef FT_ULong
|
||||
(*FTC_Node_WeightFunc)( FTC_Node node,
|
||||
FTC_Cache cache );
|
||||
|
@ -107,159 +236,62 @@ FT_BEGIN_HEADER
|
|||
FT_Pointer key,
|
||||
FTC_Cache cache );
|
||||
|
||||
|
||||
/* finalize a given cache node */
|
||||
typedef void
|
||||
(*FTC_Node_FreeFunc)( FTC_Node node,
|
||||
(*FTC_Node_DoneFunc)( FTC_Node node,
|
||||
FTC_Cache cache );
|
||||
|
||||
typedef FT_Error
|
||||
(*FTC_Cache_InitFunc)( FTC_Cache cache );
|
||||
|
||||
typedef void
|
||||
(*FTC_Cache_DoneFunc)( FTC_Cache cache );
|
||||
|
||||
|
||||
typedef struct FTC_CacheClassRec_
|
||||
typedef struct FTC_Cache_ClassRec_
|
||||
{
|
||||
FTC_Node_NewFunc node_new;
|
||||
FTC_Node_WeightFunc node_weight;
|
||||
FTC_Node_CompareFunc node_compare;
|
||||
FTC_Node_CompareFunc node_remove_faceid;
|
||||
FTC_Node_FreeFunc node_free;
|
||||
FT_UInt cache_size;
|
||||
FTC_Cache_InitFunc cache_init;
|
||||
FTC_Cache_ClearFunc cache_clear;
|
||||
FTC_Cache_DoneFunc cache_done;
|
||||
|
||||
FT_UInt cache_size;
|
||||
FTC_Cache_InitFunc cache_init;
|
||||
FTC_Cache_DoneFunc cache_done;
|
||||
FT_UInt family_size;
|
||||
FTC_Family_InitFunc family_init;
|
||||
FTC_Family_CompareFunc family_compare;
|
||||
FTC_Family_DoneFunc family_done;
|
||||
|
||||
} FTC_CacheClassRec;
|
||||
FT_UInt node_size;
|
||||
FTC_Node_InitFunc node_init;
|
||||
FTC_Node_WeightFunc node_weight;
|
||||
FTC_Node_CompareFunc node_compare;
|
||||
FTC_Node_DoneFunc node_done;
|
||||
|
||||
} FTC_Cache_ClassRec;
|
||||
|
||||
|
||||
/* each cache really implements a dynamic hash table to manage its nodes */
|
||||
typedef struct FTC_CacheRec_
|
||||
{
|
||||
FT_UFast p;
|
||||
FT_UFast mask;
|
||||
FT_Long slack;
|
||||
FTC_Node* buckets;
|
||||
|
||||
FTC_CacheClassRec clazz; /* local copy, for speed */
|
||||
|
||||
FTC_Manager manager;
|
||||
FT_Memory memory;
|
||||
FT_UInt index; /* in manager's table */
|
||||
|
||||
FTC_CacheClass org_class; /* original class pointer */
|
||||
|
||||
} FTC_CacheRec;
|
||||
/* */
|
||||
|
||||
|
||||
#define FTC_CACHE( x ) ( (FTC_Cache)(x) )
|
||||
#define FTC_CACHE_P( x ) ( (FTC_Cache*)(x) )
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* These functions are exported so that they can be called from */
|
||||
/* user-provided cache classes; otherwise, they are really part of the */
|
||||
/* cache sub-system internals. */
|
||||
/* */
|
||||
|
||||
|
||||
/* default cache initialize */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Cache_Init( FTC_Cache cache );
|
||||
|
||||
/* default cache finalizer */
|
||||
/* can be used directly as FTC_Cache_DoneFunc(), or called by custom */
|
||||
/* cache finalizers */
|
||||
FT_EXPORT( void )
|
||||
FTC_Cache_Done( FTC_Cache cache );
|
||||
ftc_cache_done( FTC_Cache cache );
|
||||
|
||||
/* Call this function to lookup the cache. If no corresponding
|
||||
* node is found, a new one is automatically created. This function
|
||||
* is capable of flushing the cache adequately to make room for the
|
||||
* new cache object.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Cache_Lookup( FTC_Cache cache,
|
||||
FT_UInt32 hash,
|
||||
FT_Pointer query,
|
||||
FTC_Node *anode );
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Cache_NewNode( FTC_Cache cache,
|
||||
FT_UInt32 hash,
|
||||
FT_Pointer query,
|
||||
FTC_Node *anode );
|
||||
|
||||
/* Remove all nodes that relate to a given face_id. This is useful
|
||||
* when un-installing fonts. Note that if a cache node relates to
|
||||
* the face_id, but is locked (i.e., has 'ref_count > 0'), the node
|
||||
* will _not_ be destroyed, but its internal face_id reference will
|
||||
* be modified.
|
||||
*
|
||||
* The final result will be that the node will never come back
|
||||
* in further lookup requests, and will be flushed on demand from
|
||||
* the cache normally when its reference count reaches 0.
|
||||
*/
|
||||
/* can be used directly as FTC_Cache_ClearFunc(), or called by custom */
|
||||
/* cache clear routines */
|
||||
FT_EXPORT( void )
|
||||
FTC_Cache_RemoveFaceID( FTC_Cache cache,
|
||||
FTC_FaceID face_id );
|
||||
ftc_cache_clear( FTC_Cache cache );
|
||||
|
||||
/* initalize the hash table within the cache */
|
||||
FT_EXPORT( FT_Error )
|
||||
ftc_cache_init( FTC_Cache cache );
|
||||
|
||||
#ifdef FTC_INLINE
|
||||
|
||||
#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
|
||||
FT_BEGIN_STMNT \
|
||||
FTC_Node *_bucket, *_pnode, _node; \
|
||||
FTC_Cache _cache = FTC_CACHE(cache); \
|
||||
FT_UInt32 _hash = (FT_UInt32)(hash); \
|
||||
FTC_Node_CompareFunc _nodcomp = (FTC_Node_CompareFunc)(nodecmp); \
|
||||
FT_UInt _idx; \
|
||||
\
|
||||
\
|
||||
error = 0; \
|
||||
node = NULL; \
|
||||
_idx = _hash & _cache->mask; \
|
||||
if ( _idx < _cache->p ) \
|
||||
_idx = _hash & ( _cache->mask*2 + 1 ); \
|
||||
\
|
||||
_bucket = _pnode = _cache->buckets + _idx; \
|
||||
for (;;) \
|
||||
{ \
|
||||
_node = *_pnode; \
|
||||
if ( _node == NULL ) \
|
||||
goto _NewNode; \
|
||||
\
|
||||
if ( _node->hash == _hash && _nodcomp( _node, query, _cache ) ) \
|
||||
break; \
|
||||
\
|
||||
_pnode = &_node->link; \
|
||||
} \
|
||||
\
|
||||
if ( _node != *_bucket ) \
|
||||
{ \
|
||||
*_pnode = _node->link; \
|
||||
_node->link = *_bucket; \
|
||||
*_bucket = _node; \
|
||||
} \
|
||||
\
|
||||
{ \
|
||||
FTC_Manager _manager = _cache->manager; \
|
||||
\
|
||||
\
|
||||
if ( _node != _manager->nodes_list ) \
|
||||
FTC_MruNode_Up( (FTC_MruNode*)&_manager->nodes_list, \
|
||||
(FTC_MruNode)_node ); \
|
||||
} \
|
||||
goto _Ok; \
|
||||
\
|
||||
_NewNode: \
|
||||
error = FTC_Cache_NewNode( _cache, _hash, query, &_node ); \
|
||||
\
|
||||
_Ok: \
|
||||
*(FTC_Node*)&(node) = _node; \
|
||||
FT_END_STMNT
|
||||
|
||||
#else /* !FTC_INLINE */
|
||||
|
||||
#define FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ) \
|
||||
FT_BEGIN_STMNT \
|
||||
error = FTC_Cache_Lookup( FTC_CACHE( cache ), hash, query, \
|
||||
(FTC_Node*)&(node) ); \
|
||||
FT_END_STMNT
|
||||
|
||||
#endif /* !FTC_INLINE */
|
||||
/* can be called when the key's hash value has been computed */
|
||||
FT_EXPORT( FT_Error )
|
||||
ftc_cache_lookup( FTC_Cache cache,
|
||||
FTC_Query query,
|
||||
FTC_Node *anode );
|
||||
|
||||
/* */
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType abstract glyph cache (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2003, 2004 by */
|
||||
/* Copyright 2000-2001, 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -16,84 +16,13 @@
|
|||
/***************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* FTC_GCache is an _abstract_ cache object optimized to store glyph
|
||||
* data. It works as follows:
|
||||
*
|
||||
* - It manages FTC_GNode objects. Each one of them can hold one or more
|
||||
* glyph `items'. Item types are not specified in the FTC_GCache but
|
||||
* in classes that extend it.
|
||||
*
|
||||
* - Glyph attributes, like face ID, character size, render mode, etc.,
|
||||
* can be grouped into abstract `glyph families'. This avoids storing
|
||||
* the attributes within the FTC_GCache, since it is likely that many
|
||||
* FTC_GNodes will belong to the same family in typical uses.
|
||||
*
|
||||
* - Each FTC_GNode is thus an FTC_Node with two additional fields:
|
||||
*
|
||||
* * gindex: A glyph index, or the first index in a glyph range.
|
||||
* * family: A pointer to a glyph `family'.
|
||||
*
|
||||
* - Family types are not fully specific in the FTC_Family type, but
|
||||
* by classes that extend it.
|
||||
*
|
||||
* Note that both FTC_ImageCache and FTC_SBitCache extend FTC_GCache.
|
||||
* They share an FTC_Family sub-class called FTC_BasicFamily which is
|
||||
* used to store the following data: face ID, pixel/point sizes, load
|
||||
* flags. For more details see the file `src/cache/ftcbasic.c'.
|
||||
*
|
||||
* Client applications can extend FTC_GNode with their own FTC_GNode
|
||||
* and FTC_Family sub-classes to implement more complex caches (e.g.,
|
||||
* handling automatic synthesis, like obliquing & emboldening, colored
|
||||
* glyphs, etc.).
|
||||
*
|
||||
* See also the FTC_ICache & FTC_SCache classes in `ftcimage.h' and
|
||||
* `ftcsbits.h', which both extend FTC_GCache with additional
|
||||
* optimizations.
|
||||
*
|
||||
* A typical FTC_GCache implementation must provide at least the
|
||||
* following:
|
||||
*
|
||||
* - FTC_GNode sub-class, e.g. MyNode, with relevant methods:
|
||||
* my_node_new (must call FTC_GNode_Init)
|
||||
* my_node_free (must call FTC_GNode_Done)
|
||||
* my_node_compare (must call FTC_GNode_Compare)
|
||||
* my_node_remove_faceid (must call ftc_gnode_unselect in case
|
||||
* of match)
|
||||
*
|
||||
* - FTC_Family sub-class, e.g. MyFamily, with relevant methods:
|
||||
* my_family_compare
|
||||
* my_family_init
|
||||
* my_family_reset (optional)
|
||||
* my_family_done
|
||||
*
|
||||
* - FTC_GQuery sub-class, e.g. MyQuery, to hold cache-specific query
|
||||
* data.
|
||||
*
|
||||
* - Constant structures for a FTC_GNodeClass.
|
||||
*
|
||||
* - MyCacheNew() can be implemented easily as a call to the convenience
|
||||
* function FTC_GCache_New.
|
||||
*
|
||||
* - MyCacheLookup with a call to FTC_GCache_Lookup. This function will
|
||||
* automatically:
|
||||
*
|
||||
* - Search for the corresponding family in the cache, or create
|
||||
* a new one if necessary. Put it in FTC_GQUERY(myquery).family
|
||||
*
|
||||
* - Call FTC_Cache_Lookup.
|
||||
*
|
||||
* If it returns NULL, you should create a new node, then call
|
||||
* ftc_cache_add as usual.
|
||||
*/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Important: The functions defined in this file are only used to */
|
||||
/* implement an abstract glyph cache class. You need to */
|
||||
/* provide additional logic to implement a complete cache. */
|
||||
/* For example, see `ftcimage.h' and `ftcimage.c' which */
|
||||
/* implement a FT_Glyph cache based on this code. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
@ -118,53 +47,99 @@
|
|||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_CACHE_INTERNAL_MANAGER_H
|
||||
#include FT_CACHE_H
|
||||
#include FT_CACHE_MANAGER_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* We can group glyphs into `families'. Each family correspond to a
|
||||
* given face ID, character size, transform, etc.
|
||||
*
|
||||
* Families are implemented as MRU list nodes. They are
|
||||
* reference-counted.
|
||||
*/
|
||||
/* each glyph set is characterized by a "glyph set type" which must be */
|
||||
/* defined by sub-classes */
|
||||
typedef struct FTC_GlyphFamilyRec_* FTC_GlyphFamily;
|
||||
|
||||
typedef struct FTC_FamilyRec_
|
||||
/* handle to a glyph cache node */
|
||||
typedef struct FTC_GlyphNodeRec_* FTC_GlyphNode;
|
||||
|
||||
|
||||
/* size should be 24 + chunk size on 32-bit machines; */
|
||||
/* note that the node's hash is ((gfam->hash << 16) | glyph_index) -- */
|
||||
/* this _must_ be set properly by the glyph node initializer */
|
||||
/* */
|
||||
typedef struct FTC_GlyphNodeRec_
|
||||
{
|
||||
FTC_MruNodeRec mrunode;
|
||||
FT_UInt num_nodes; /* current number of nodes in this family */
|
||||
FTC_Cache cache;
|
||||
FTC_MruListClass clazz;
|
||||
FTC_NodeRec node;
|
||||
FT_UShort item_count;
|
||||
FT_UShort item_start;
|
||||
|
||||
} FTC_FamilyRec, *FTC_Family;
|
||||
|
||||
#define FTC_FAMILY(x) ( (FTC_Family)(x) )
|
||||
#define FTC_FAMILY_P(x) ( (FTC_Family*)(x) )
|
||||
} FTC_GlyphNodeRec;
|
||||
|
||||
|
||||
typedef struct FTC_GNodeRec_
|
||||
#define FTC_GLYPH_NODE( x ) ( (FTC_GlyphNode)(x) )
|
||||
#define FTC_GLYPH_NODE_P( x ) ( (FTC_GlyphNode*)(x) )
|
||||
|
||||
|
||||
typedef struct FTC_GlyphQueryRec_
|
||||
{
|
||||
FTC_NodeRec node;
|
||||
FTC_Family family;
|
||||
FT_UInt gindex;
|
||||
FTC_QueryRec query;
|
||||
FT_UInt gindex;
|
||||
|
||||
} FTC_GNodeRec, *FTC_GNode;
|
||||
|
||||
#define FTC_GNODE( x ) ( (FTC_GNode)(x) )
|
||||
#define FTC_GNODE_P( x ) ( (FTC_GNode*)(x) )
|
||||
} FTC_GlyphQueryRec, *FTC_GlyphQuery;
|
||||
|
||||
|
||||
typedef struct FTC_GQueryRec_
|
||||
#define FTC_GLYPH_QUERY( x ) ( (FTC_GlyphQuery)(x) )
|
||||
|
||||
|
||||
/* a glyph set is used to categorize glyphs of a given type */
|
||||
typedef struct FTC_GlyphFamilyRec_
|
||||
{
|
||||
FT_UInt gindex;
|
||||
FTC_Family family;
|
||||
FTC_FamilyRec family;
|
||||
FT_UInt32 hash;
|
||||
FT_UInt item_total; /* total number of glyphs in family */
|
||||
FT_UInt item_count; /* number of glyph items per node */
|
||||
|
||||
} FTC_GQueryRec, *FTC_GQuery;
|
||||
} FTC_GlyphFamilyRec;
|
||||
|
||||
#define FTC_GQUERY( x ) ( (FTC_GQuery)(x) )
|
||||
|
||||
#define FTC_GLYPH_FAMILY( x ) ( (FTC_GlyphFamily)(x) )
|
||||
#define FTC_GLYPH_FAMILY_P( x ) ( (FTC_GlyphFamily*)(x) )
|
||||
|
||||
#define FTC_GLYPH_FAMILY_MEMORY( x ) FTC_FAMILY(x)->cache->memory
|
||||
|
||||
|
||||
/* each glyph node contains a 'chunk' of glyph items; */
|
||||
/* translate a glyph index into a chunk index */
|
||||
#define FTC_GLYPH_FAMILY_CHUNK( gfam, gindex ) \
|
||||
( ( gindex ) / FTC_GLYPH_FAMILY( gfam )->item_count )
|
||||
|
||||
/* find a glyph index's chunk, and return its start index */
|
||||
#define FTC_GLYPH_FAMILY_START( gfam, gindex ) \
|
||||
( FTC_GLYPH_FAMILY_CHUNK( gfam, gindex ) * \
|
||||
FTC_GLYPH_FAMILY( gfam )->item_count )
|
||||
|
||||
/* compute a glyph request's hash value */
|
||||
#define FTC_GLYPH_FAMILY_HASH( gfam, gindex ) \
|
||||
( (FT_UFast)( \
|
||||
( FTC_GLYPH_FAMILY( gfam )->hash << 16 ) | \
|
||||
( FTC_GLYPH_FAMILY_CHUNK( gfam, gindex ) & 0xFFFFU ) ) )
|
||||
|
||||
/* must be called in an FTC_Family_CompareFunc to update the query */
|
||||
/* whenever a glyph set is matched in the lookup, or when it */
|
||||
/* is created */
|
||||
#define FTC_GLYPH_FAMILY_FOUND( gfam, gquery ) \
|
||||
do \
|
||||
{ \
|
||||
FTC_QUERY( gquery )->family = FTC_FAMILY( gfam ); \
|
||||
FTC_QUERY( gquery )->hash = \
|
||||
FTC_GLYPH_FAMILY_HASH( gfam, \
|
||||
FTC_GLYPH_QUERY( gquery )->gindex ); \
|
||||
} while ( 0 )
|
||||
|
||||
/* retrieve glyph index of glyph node */
|
||||
#define FTC_GLYPH_NODE_GINDEX( x ) \
|
||||
( (FT_UInt)( FTC_GLYPH_NODE( x )->node.hash & 0xFFFFU ) )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -176,116 +151,39 @@ FT_BEGIN_HEADER
|
|||
|
||||
/* must be called by derived FTC_Node_InitFunc routines */
|
||||
FT_EXPORT( void )
|
||||
FTC_GNode_Init( FTC_GNode node,
|
||||
FT_UInt gindex, /* glyph index for node */
|
||||
FTC_Family family );
|
||||
ftc_glyph_node_init( FTC_GlyphNode node,
|
||||
FT_UInt gindex, /* glyph index for node */
|
||||
FTC_GlyphFamily gfam );
|
||||
|
||||
/* returns TRUE iff the query's glyph index correspond to the node; */
|
||||
/* this assumes that the "family" and "hash" fields of the query are */
|
||||
/* already correctly set */
|
||||
FT_EXPORT( FT_Bool )
|
||||
FTC_GNode_Compare( FTC_GNode gnode,
|
||||
FTC_GQuery gquery );
|
||||
|
||||
/* call this function to clear a node's family -- this is necessary */
|
||||
/* to implement the `node_remove_faceid' cache method correctly */
|
||||
FT_EXPORT( void )
|
||||
FTC_GNode_UnselectFamily( FTC_GNode gnode,
|
||||
FTC_Cache cache );
|
||||
ftc_glyph_node_compare( FTC_GlyphNode gnode,
|
||||
FTC_GlyphQuery gquery );
|
||||
|
||||
/* must be called by derived FTC_Node_DoneFunc routines */
|
||||
FT_EXPORT( void )
|
||||
FTC_GNode_Done( FTC_GNode node,
|
||||
FTC_Cache cache );
|
||||
ftc_glyph_node_done( FTC_GlyphNode node,
|
||||
FTC_Cache cache );
|
||||
|
||||
|
||||
/* must be called by derived FTC_Family_InitFunc; */
|
||||
/* calls "ftc_family_init" */
|
||||
FT_EXPORT( FT_Error )
|
||||
ftc_glyph_family_init( FTC_GlyphFamily gfam,
|
||||
FT_UInt32 hash,
|
||||
FT_UInt item_count,
|
||||
FT_UInt item_total,
|
||||
FTC_GlyphQuery gquery,
|
||||
FTC_Cache cache );
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_Family_Init( FTC_Family family,
|
||||
FTC_Cache cache );
|
||||
|
||||
typedef struct FTC_GCacheRec_
|
||||
{
|
||||
FTC_CacheRec cache;
|
||||
FTC_MruListRec families;
|
||||
|
||||
} FTC_GCacheRec, *FTC_GCache;
|
||||
|
||||
#define FTC_GCACHE( x ) ((FTC_GCache)(x))
|
||||
ftc_glyph_family_done( FTC_GlyphFamily gfam );
|
||||
|
||||
|
||||
/* can be used as @FTC_Cache_InitFunc */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_GCache_Init( FTC_GCache cache );
|
||||
|
||||
|
||||
/* can be used as @FTC_Cache_DoneFunc */
|
||||
FT_EXPORT( void )
|
||||
FTC_GCache_Done( FTC_GCache cache );
|
||||
|
||||
|
||||
/* the glyph cache class adds fields for the family implementation */
|
||||
typedef struct FTC_GCacheClassRec_
|
||||
{
|
||||
FTC_CacheClassRec clazz;
|
||||
FTC_MruListClass family_class;
|
||||
|
||||
} FTC_GCacheClassRec;
|
||||
|
||||
typedef const FTC_GCacheClassRec* FTC_GCacheClass;
|
||||
|
||||
#define FTC_GCACHE_CLASS( x ) ((FTC_GCacheClass)(x))
|
||||
|
||||
#define FTC_CACHE__GCACHE_CLASS( x ) \
|
||||
FTC_GCACHE_CLASS( FTC_CACHE(x)->org_class )
|
||||
#define FTC_CACHE__FAMILY_CLASS( x ) \
|
||||
((FTC_MruListClass) FTC_CACHE__GCACHE_CLASS(x)->family_class)
|
||||
|
||||
|
||||
/* convenience function; use it instead of FTC_Manager_Register_Cache */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_GCache_New( FTC_Manager manager,
|
||||
FTC_GCacheClass clazz,
|
||||
FTC_GCache *acache );
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_GCache_Lookup( FTC_GCache cache,
|
||||
FT_UInt32 hash,
|
||||
FT_UInt gindex,
|
||||
FTC_GQuery query,
|
||||
FTC_Node *anode );
|
||||
|
||||
|
||||
#ifdef FTC_INLINE
|
||||
|
||||
#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
|
||||
gindex, query, node, error ) \
|
||||
FT_BEGIN_STMNT \
|
||||
FTC_GCache _gcache = FTC_GCACHE( cache ); \
|
||||
FTC_GQuery _gquery = (FTC_GQuery)( query ); \
|
||||
FTC_MruNode_CompareFunc _fcompare = (FTC_MruNode_CompareFunc)(famcmp); \
|
||||
\
|
||||
\
|
||||
_gquery->gindex = (gindex); \
|
||||
\
|
||||
FTC_MRULIST_LOOKUP_CMP( &_gcache->families, _gquery, _fcompare, \
|
||||
_gquery->family, error ); \
|
||||
if ( !error ) \
|
||||
FTC_CACHE_LOOKUP_CMP( cache, nodecmp, hash, query, node, error ); \
|
||||
FT_END_STMNT
|
||||
/* */
|
||||
|
||||
#else /* !FTC_INLINE */
|
||||
|
||||
#define FTC_GCACHE_LOOKUP_CMP( cache, famcmp, nodecmp, hash, \
|
||||
gindex, query, node, error ) \
|
||||
FT_BEGIN_STMNT \
|
||||
error = FTC_GCache_Lookup( FTC_GCACHE( cache ), hash, gindex, \
|
||||
FTC_GQUERY( query ), (FTC_Node*)&(node) ); \
|
||||
FT_END_STMNT
|
||||
|
||||
#endif /* !FTC_INLINE */
|
||||
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/* */
|
||||
/* ftcimage.h */
|
||||
/* */
|
||||
/* FreeType Generic Image cache (specification) */
|
||||
/* FreeType Image cache (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2002, 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
|
@ -16,15 +16,6 @@
|
|||
/***************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* FTC_ICache is an _abstract_ cache used to store a single FT_Glyph
|
||||
* image per cache node.
|
||||
*
|
||||
* FTC_ICache extends FTC_GCache. For an implementation example,
|
||||
* see FTC_ImageCache in `src/cache/ftbasic.c'.
|
||||
*/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Each image cache really manages FT_Glyph objects. */
|
||||
|
@ -38,66 +29,284 @@
|
|||
|
||||
#include <ft2build.h>
|
||||
#include FT_CACHE_H
|
||||
#include FT_CACHE_INTERNAL_GLYPH_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/* the FT_Glyph image node type - we store only 1 glyph per node */
|
||||
typedef struct FTC_INodeRec_
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Section> */
|
||||
/* cache_subsystem */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** IMAGE CACHE OBJECT *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @struct:
|
||||
* FTC_ImageTypeRec
|
||||
*
|
||||
* @description:
|
||||
* A simple structure used to describe the type of glyph image to be
|
||||
* loaded into the cache.
|
||||
*
|
||||
* @fields:
|
||||
* font :: An @FTC_FontRec used to describe the glyph's face and size.
|
||||
*
|
||||
* flags :: The load flags to be applied when loading the glyph; see
|
||||
* the @FT_LOAD_XXX constants for details.
|
||||
*
|
||||
* @note:
|
||||
* This type completely replaces the @FTC_Image_Desc structure which is
|
||||
* now obsolete.
|
||||
*/
|
||||
typedef struct FTC_ImageTypeRec_
|
||||
{
|
||||
FTC_GNodeRec gnode;
|
||||
FT_Glyph glyph;
|
||||
FTC_FontRec font;
|
||||
FT_Int32 flags;
|
||||
|
||||
} FTC_INodeRec, *FTC_INode;
|
||||
} FTC_ImageTypeRec;
|
||||
|
||||
#define FTC_INODE( x ) ( (FTC_INode)( x ) )
|
||||
#define FTC_INODE_GINDEX( x ) FTC_GNODE(x)->gindex
|
||||
#define FTC_INODE_FAMILY( x ) FTC_GNODE(x)->family
|
||||
typedef struct FTC_ImageTypeRec_* FTC_ImageType;
|
||||
|
||||
typedef FT_Error
|
||||
(*FTC_IFamily_LoadGlyphFunc)( FTC_Family family,
|
||||
FT_UInt gindex,
|
||||
FTC_Cache cache,
|
||||
FT_Glyph *aglyph );
|
||||
/* */
|
||||
|
||||
typedef struct FTC_IFamilyClassRec_
|
||||
{
|
||||
FTC_MruListClassRec clazz;
|
||||
FTC_IFamily_LoadGlyphFunc family_load_glyph;
|
||||
#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \
|
||||
( FTC_FONT_COMPARE( &(d1)->font, &(d2)->font ) && \
|
||||
(d1)->flags == (d2)->flags )
|
||||
|
||||
} FTC_IFamilyClassRec;
|
||||
|
||||
typedef const FTC_IFamilyClassRec* FTC_IFamilyClass;
|
||||
|
||||
#define FTC_IFAMILY_CLASS( x ) ((FTC_IFamilyClass)(x))
|
||||
|
||||
#define FTC_CACHE__IFAMILY_CLASS( x ) \
|
||||
FTC_IFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS(x)->family_class )
|
||||
#define FTC_IMAGE_TYPE_HASH( d ) \
|
||||
(FT_UFast)( FTC_FONT_HASH( &(d)->font ) ^ \
|
||||
( (d)->flags << 4 ) )
|
||||
|
||||
|
||||
/* can be used as a @FTC_Node_FreeFunc */
|
||||
FT_EXPORT( void )
|
||||
FTC_INode_Free( FTC_INode inode,
|
||||
FTC_Cache cache );
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_ImageCache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to an glyph image cache object. They are designed to */
|
||||
/* hold many distinct glyph images while not exceeding a certain */
|
||||
/* memory threshold. */
|
||||
/* */
|
||||
typedef struct FTC_ImageCacheRec_* FTC_ImageCache;
|
||||
|
||||
/* Can be used as @FTC_Node_NewFunc. `gquery.index' and `gquery.family'
|
||||
* must be set correctly. This function will call the `family_load_glyph'
|
||||
* method to load the FT_Glyph into the cache node.
|
||||
*/
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_ImageCache_New */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Creates a new glyph image cache. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: The parent manager for the image cache. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* acache :: A handle to the new glyph image cache object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_INode_New( FTC_INode *pinode,
|
||||
FTC_GQuery gquery,
|
||||
FTC_Cache cache );
|
||||
FTC_ImageCache_New( FTC_Manager manager,
|
||||
FTC_ImageCache *acache );
|
||||
|
||||
/* can be used as @FTC_Node_WeightFunc */
|
||||
FT_EXPORT( FT_ULong )
|
||||
FTC_INode_Weight( FTC_INode inode );
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_ImageCache_Lookup */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieves a given glyph image from a glyph image cache. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* cache :: A handle to the source glyph image cache. */
|
||||
/* */
|
||||
/* type :: A pointer to a glyph image type descriptor. */
|
||||
/* */
|
||||
/* gindex :: The glyph index to retrieve. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* aglyph :: The corresponding @FT_Glyph object. 0 in case of */
|
||||
/* failure. */
|
||||
/* */
|
||||
/* anode :: Used to return the address of of the corresponding cache */
|
||||
/* node after incrementing its reference count (see note */
|
||||
/* below). */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The returned glyph is owned and managed by the glyph image cache. */
|
||||
/* Never try to transform or discard it manually! You can however */
|
||||
/* create a copy with @FT_Glyph_Copy and modify the new one. */
|
||||
/* */
|
||||
/* If "anode" is _not_ NULL, it receives the address of the cache */
|
||||
/* node containing the glyph image, after increasing its reference */
|
||||
/* count. This ensures that the node (as well as the FT_Glyph) will */
|
||||
/* always be kept in the cache until you call @FTC_Node_Unref to */
|
||||
/* "release" it. */
|
||||
/* */
|
||||
/* If "anode" is NULL, the cache node is left unchanged, which means */
|
||||
/* that the FT_Glyph could be flushed out of the cache on the next */
|
||||
/* call to one of the caching sub-system APIs. Don't assume that it */
|
||||
/* is persistent! */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_ImageCache_Lookup( FTC_ImageCache cache,
|
||||
FTC_ImageType type,
|
||||
FT_UInt gindex,
|
||||
FT_Glyph *aglyph,
|
||||
FTC_Node *anode );
|
||||
|
||||
/* */
|
||||
|
||||
#define ftc_image_format( x ) ( (x) & 7 )
|
||||
|
||||
|
||||
#define ftc_image_format_bitmap 0x0000
|
||||
#define ftc_image_format_outline 0x0001
|
||||
|
||||
#define ftc_image_format_mask 0x000F
|
||||
|
||||
#define ftc_image_flag_monochrome 0x0010
|
||||
#define ftc_image_flag_unhinted 0x0020
|
||||
#define ftc_image_flag_autohinted 0x0040
|
||||
#define ftc_image_flag_unscaled 0x0080
|
||||
#define ftc_image_flag_no_sbits 0x0100
|
||||
|
||||
/* monochrome bitmap */
|
||||
#define ftc_image_mono ftc_image_format_bitmap | \
|
||||
ftc_image_flag_monochrome
|
||||
|
||||
/* anti-aliased bitmap */
|
||||
#define ftc_image_grays ftc_image_format_bitmap
|
||||
|
||||
/* scaled outline */
|
||||
#define ftc_image_outline ftc_image_format_outline
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FTC_Image_Desc */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* THIS TYPE IS DEPRECATED. Use @FTC_ImageTypeRec instead. */
|
||||
/* */
|
||||
/* A simple structure used to describe a given glyph image category. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* font :: An @FTC_FontRec used to describe the glyph's face */
|
||||
/* and size. */
|
||||
/* */
|
||||
/* image_type :: The glyph image's type. */
|
||||
/* */
|
||||
typedef struct FTC_Image_Desc_
|
||||
{
|
||||
FTC_FontRec font;
|
||||
FT_UInt image_type;
|
||||
|
||||
} FTC_Image_Desc;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_Image_Cache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* THIS TYPE IS DEPRECATED. Use @FTC_ImageCache instead. */
|
||||
/* */
|
||||
typedef FTC_ImageCache FTC_Image_Cache;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_Image_Cache_New */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* THIS FUNCTION IS DEPRECATED. Use @FTC_ImageCache_New instead. */
|
||||
/* */
|
||||
/* Creates a new glyph image cache. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: The parent manager for the image cache. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* acache :: A handle to the new glyph image cache object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Image_Cache_New( FTC_Manager manager,
|
||||
FTC_Image_Cache *acache );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_Image_Cache_Lookup */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* THIS FUNCTION IS DEPRECATED. Use @FTC_ImageCache_Lookup instead. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* cache :: A handle to the source glyph image cache. */
|
||||
/* */
|
||||
/* desc :: A pointer to a glyph image descriptor. */
|
||||
/* */
|
||||
/* gindex :: The glyph index to retrieve. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* aglyph :: The corresponding @FT_Glyph object. 0 in case of */
|
||||
/* failure. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The returned glyph is owned and managed by the glyph image cache. */
|
||||
/* Never try to transform or discard it manually! You can however */
|
||||
/* create a copy with @FT_Glyph_Copy and modify the new one. */
|
||||
/* */
|
||||
/* Because the glyph image cache limits the total amount of memory */
|
||||
/* taken by the glyphs it holds, the returned glyph might disappear */
|
||||
/* on a later invocation of this function! It is a cache after */
|
||||
/* all... */
|
||||
/* */
|
||||
/* Use this function to "lock" the glyph as long as it is needed. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Image_Cache_Lookup( FTC_Image_Cache cache,
|
||||
FTC_Image_Desc* desc,
|
||||
FT_UInt gindex,
|
||||
FT_Glyph *aglyph );
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCIMAGE_H__ */
|
||||
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType Cache Manager (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2003, 2004 by */
|
||||
/* Copyright 2000-2001 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -65,7 +65,7 @@
|
|||
|
||||
#include <ft2build.h>
|
||||
#include FT_CACHE_H
|
||||
#include FT_CACHE_INTERNAL_MRU_H
|
||||
#include FT_CACHE_INTERNAL_LRU_H
|
||||
#include FT_CACHE_INTERNAL_CACHE_H
|
||||
|
||||
|
||||
|
@ -88,25 +88,91 @@ FT_BEGIN_HEADER
|
|||
#define FTC_MAX_CACHES 16
|
||||
|
||||
|
||||
typedef struct FTC_FamilyEntryRec_
|
||||
{
|
||||
FTC_Family family;
|
||||
FTC_Cache cache;
|
||||
FT_UInt index;
|
||||
FT_UInt link;
|
||||
|
||||
} FTC_FamilyEntryRec, *FTC_FamilyEntry;
|
||||
|
||||
|
||||
#define FTC_FAMILY_ENTRY_NONE ( (FT_UInt)-1 )
|
||||
|
||||
|
||||
typedef struct FTC_FamilyTableRec_
|
||||
{
|
||||
FT_UInt count;
|
||||
FT_UInt size;
|
||||
FTC_FamilyEntry entries;
|
||||
FT_UInt free;
|
||||
|
||||
} FTC_FamilyTableRec, *FTC_FamilyTable;
|
||||
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
ftc_family_table_alloc( FTC_FamilyTable table,
|
||||
FT_Memory memory,
|
||||
FTC_FamilyEntry *aentry );
|
||||
|
||||
FT_EXPORT( void )
|
||||
ftc_family_table_free( FTC_FamilyTable table,
|
||||
FT_UInt idx );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FTC_ManagerRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The cache manager structure. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* library :: A handle to a FreeType library instance. */
|
||||
/* */
|
||||
/* faces_list :: The lru list of @FT_Face objects in the cache. */
|
||||
/* */
|
||||
/* sizes_list :: The lru list of @FT_Size objects in the cache. */
|
||||
/* */
|
||||
/* max_weight :: The maximum cache pool weight. */
|
||||
/* */
|
||||
/* cur_weight :: The current cache pool weight. */
|
||||
/* */
|
||||
/* num_nodes :: The current number of nodes in the manager. */
|
||||
/* */
|
||||
/* nodes_list :: The global lru list of all cache nodes. */
|
||||
/* */
|
||||
/* caches :: A table of installed/registered cache objects. */
|
||||
/* */
|
||||
/* request_data :: User-provided data passed to the requester. */
|
||||
/* */
|
||||
/* request_face :: User-provided function used to implement a mapping */
|
||||
/* between abstract @FTC_FaceID values and real */
|
||||
/* @FT_Face objects. */
|
||||
/* */
|
||||
/* families :: Global table of families. */
|
||||
/* */
|
||||
typedef struct FTC_ManagerRec_
|
||||
{
|
||||
FT_Library library;
|
||||
FT_Memory memory;
|
||||
FT_LruList faces_list;
|
||||
FT_LruList sizes_list;
|
||||
|
||||
FTC_Node nodes_list;
|
||||
FT_ULong max_weight;
|
||||
FT_ULong cur_weight;
|
||||
|
||||
FT_UInt num_nodes;
|
||||
|
||||
FTC_Node nodes_list;
|
||||
|
||||
FTC_Cache caches[FTC_MAX_CACHES];
|
||||
FT_UInt num_caches;
|
||||
|
||||
FTC_MruListRec faces;
|
||||
FTC_MruListRec sizes;
|
||||
|
||||
FT_Pointer request_data;
|
||||
FTC_Face_Requester request_face;
|
||||
|
||||
FTC_FamilyTableRec families;
|
||||
|
||||
} FTC_ManagerRec;
|
||||
|
||||
|
||||
|
@ -135,40 +201,43 @@ FT_BEGIN_HEADER
|
|||
FTC_Manager_Compress( FTC_Manager manager );
|
||||
|
||||
|
||||
/* try to flush `count' old nodes from the cache; return the number
|
||||
* of really flushed nodes
|
||||
*/
|
||||
FT_EXPORT( FT_UInt )
|
||||
FTC_Manager_FlushN( FTC_Manager manager,
|
||||
FT_UInt count );
|
||||
|
||||
|
||||
/* this must be used internally for the moment */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Manager_RegisterCache( FTC_Manager manager,
|
||||
FTC_CacheClass clazz,
|
||||
FTC_Cache *acache );
|
||||
FTC_Manager_Register_Cache( FTC_Manager manager,
|
||||
FTC_Cache_Class clazz,
|
||||
FTC_Cache *acache );
|
||||
|
||||
/* */
|
||||
|
||||
#define FTC_SCALER_COMPARE( a, b ) \
|
||||
( (a)->face_id == (b)->face_id && \
|
||||
(a)->width == (b)->width && \
|
||||
(a)->height == (b)->height && \
|
||||
((a)->pixel != 0) == ((b)->pixel != 0) && \
|
||||
( (a)->pixel || \
|
||||
( (a)->x_res == (b)->x_res && \
|
||||
(a)->y_res == (b)->y_res ) ) )
|
||||
/* can be called to increment a node's reference count */
|
||||
FT_EXPORT( void )
|
||||
FTC_Node_Ref( FTC_Node node,
|
||||
FTC_Manager manager );
|
||||
|
||||
#define FTC_SCALER_HASH( q ) \
|
||||
( FTC_FACE_ID_HASH( (q)->face_id ) + \
|
||||
(q)->width + (q)->height*7 + \
|
||||
( (q)->pixel ? 0 : ( (q)->x_res*33 ^ (q)->y_res*61 ) ) )
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_Node_Unref */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Decrement a cache node's internal reference count. When the count */
|
||||
/* reaches 0, it is not destroyed but becomes eligible for subsequent */
|
||||
/* cache flushes. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* node :: The cache node handle. */
|
||||
/* */
|
||||
/* manager :: The cache manager handle. */
|
||||
/* */
|
||||
FT_EXPORT( void )
|
||||
FTC_Node_Unref( FTC_Node node,
|
||||
FTC_Manager manager );
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCMANAG_H__ */
|
||||
|
||||
|
||||
|
|
246
reactos/lib/freetype/include/freetype/cache/ftcmru.h
vendored
246
reactos/lib/freetype/include/freetype/cache/ftcmru.h
vendored
|
@ -1,246 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftcmru.h */
|
||||
/* */
|
||||
/* Simple MRU list-cache (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2003, 2004 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* An MRU is a list that cannot hold more than a certain number of */
|
||||
/* elements (`max_elements'). All elements in the list are sorted in */
|
||||
/* least-recently-used order, i.e., the `oldest' element is at the tail */
|
||||
/* of the list. */
|
||||
/* */
|
||||
/* When doing a lookup (either through `Lookup()' or `Lookup_Node()'), */
|
||||
/* the list is searched for an element with the corresponding key. If */
|
||||
/* it is found, the element is moved to the head of the list and is */
|
||||
/* returned. */
|
||||
/* */
|
||||
/* If no corresponding element is found, the lookup routine will try to */
|
||||
/* obtain a new element with the relevant key. If the list is already */
|
||||
/* full, the oldest element from the list is discarded and replaced by a */
|
||||
/* new one; a new element is added to the list otherwise. */
|
||||
/* */
|
||||
/* Note that it is possible to pre-allocate the element list nodes. */
|
||||
/* This is handy if `max_elements' is sufficiently small, as it saves */
|
||||
/* allocations/releases during the lookup process. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTCMRU_H__
|
||||
#define __FTCMRU_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
#define xxFT_DEBUG_ERROR
|
||||
#define FTC_INLINE
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
typedef struct FTC_MruNodeRec_* FTC_MruNode;
|
||||
|
||||
typedef struct FTC_MruNodeRec_
|
||||
{
|
||||
FTC_MruNode next;
|
||||
FTC_MruNode prev;
|
||||
|
||||
} FTC_MruNodeRec;
|
||||
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruNode_Prepend( FTC_MruNode *plist,
|
||||
FTC_MruNode node );
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruNode_Up( FTC_MruNode *plist,
|
||||
FTC_MruNode node );
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruNode_Remove( FTC_MruNode *plist,
|
||||
FTC_MruNode node );
|
||||
|
||||
|
||||
typedef struct FTC_MruListRec_* FTC_MruList;
|
||||
|
||||
typedef struct FTC_MruListClassRec_ const * FTC_MruListClass;
|
||||
|
||||
|
||||
typedef FT_Int
|
||||
(*FTC_MruNode_CompareFunc)( FTC_MruNode node,
|
||||
FT_Pointer key );
|
||||
|
||||
typedef FT_Error
|
||||
(*FTC_MruNode_InitFunc)( FTC_MruNode node,
|
||||
FT_Pointer key,
|
||||
FT_Pointer data );
|
||||
|
||||
typedef FT_Error
|
||||
(*FTC_MruNode_ResetFunc)( FTC_MruNode node,
|
||||
FT_Pointer key,
|
||||
FT_Pointer data );
|
||||
|
||||
typedef void
|
||||
(*FTC_MruNode_DoneFunc)( FTC_MruNode node,
|
||||
FT_Pointer data );
|
||||
|
||||
|
||||
typedef struct FTC_MruListClassRec_
|
||||
{
|
||||
FT_UInt node_size;
|
||||
FTC_MruNode_CompareFunc node_compare;
|
||||
FTC_MruNode_InitFunc node_init;
|
||||
FTC_MruNode_ResetFunc node_reset;
|
||||
FTC_MruNode_DoneFunc node_done;
|
||||
|
||||
} FTC_MruListClassRec;
|
||||
|
||||
typedef struct FTC_MruListRec_
|
||||
{
|
||||
FT_UInt num_nodes;
|
||||
FT_UInt max_nodes;
|
||||
FTC_MruNode nodes;
|
||||
FT_Pointer data;
|
||||
FTC_MruListClassRec clazz;
|
||||
FT_Memory memory;
|
||||
|
||||
} FTC_MruListRec;
|
||||
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruList_Init( FTC_MruList list,
|
||||
FTC_MruListClass clazz,
|
||||
FT_UInt max_nodes,
|
||||
FT_Pointer data,
|
||||
FT_Memory memory );
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruList_Reset( FTC_MruList list );
|
||||
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruList_Done( FTC_MruList list );
|
||||
|
||||
FT_EXPORT( FTC_MruNode )
|
||||
FTC_MruList_Find( FTC_MruList list,
|
||||
FT_Pointer key );
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_MruList_New( FTC_MruList list,
|
||||
FT_Pointer key,
|
||||
FTC_MruNode *anode );
|
||||
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_MruList_Lookup( FTC_MruList list,
|
||||
FT_Pointer key,
|
||||
FTC_MruNode *pnode );
|
||||
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruList_Remove( FTC_MruList list,
|
||||
FTC_MruNode node );
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_MruList_RemoveSelection( FTC_MruList list,
|
||||
FTC_MruNode_CompareFunc selection,
|
||||
FT_Pointer key );
|
||||
|
||||
|
||||
#ifdef FTC_INLINE
|
||||
|
||||
#define FTC_MRULIST_LOOKUP_CMP( list, key, compare, node, error ) \
|
||||
FT_BEGIN_STMNT \
|
||||
FTC_MruNode* _pfirst = &(list)->nodes; \
|
||||
FTC_MruNode_CompareFunc _compare = (FTC_MruNode_CompareFunc)(compare); \
|
||||
FTC_MruNode _first, _node; \
|
||||
\
|
||||
\
|
||||
error = 0; \
|
||||
_first = *(_pfirst); \
|
||||
_node = NULL; \
|
||||
\
|
||||
if ( _first ) \
|
||||
{ \
|
||||
_node = _first; \
|
||||
do \
|
||||
{ \
|
||||
if ( _compare( _node, (key) ) ) \
|
||||
{ \
|
||||
if ( _node != _first ) \
|
||||
FTC_MruNode_Up( _pfirst, _node ); \
|
||||
\
|
||||
*(FTC_MruNode*)&(node) = _node; \
|
||||
goto _MruOk; \
|
||||
} \
|
||||
_node = _node->next; \
|
||||
\
|
||||
} while ( _node != _first) ; \
|
||||
} \
|
||||
\
|
||||
error = FTC_MruList_New( (list), (key), (FTC_MruNode*)&(node) ); \
|
||||
_MruOk: \
|
||||
; \
|
||||
FT_END_STMNT
|
||||
|
||||
#define FTC_MRULIST_LOOKUP( list, key, node, error ) \
|
||||
FTC_MRULIST_LOOKUP_CMP( list, key, (list)->clazz.node_compare, node, error )
|
||||
|
||||
#else /* !FTC_INLINE */
|
||||
|
||||
#define FTC_MRULIST_LOOKUP( list, key, node, error ) \
|
||||
error = FTC_MruList_Lookup( (list), (key), (FTC_MruNode*)&(node) )
|
||||
|
||||
#endif /* !FTC_INLINE */
|
||||
|
||||
|
||||
#define FTC_MRULIST_LOOP( list, node ) \
|
||||
FT_BEGIN_STMNT \
|
||||
FTC_MruNode _first = (list)->nodes; \
|
||||
\
|
||||
\
|
||||
if ( _first ) \
|
||||
{ \
|
||||
FTC_MruNode _node = _first; \
|
||||
\
|
||||
\
|
||||
do \
|
||||
{ \
|
||||
*(FTC_MruNode*)&(node) = _node;
|
||||
|
||||
|
||||
#define FTC_MRULIST_LOOP_END() \
|
||||
_node = _node->next; \
|
||||
\
|
||||
} while ( _node != _first ); \
|
||||
} \
|
||||
FT_END_STMNT
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __FTCMRU_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* A small-bitmap cache (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2002, 2003 by */
|
||||
/* Copyright 2000-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -22,72 +22,251 @@
|
|||
|
||||
#include <ft2build.h>
|
||||
#include FT_CACHE_H
|
||||
#include FT_CACHE_INTERNAL_GLYPH_H
|
||||
#include FT_CACHE_IMAGE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
#define FTC_SBIT_ITEMS_PER_NODE 16
|
||||
|
||||
typedef struct FTC_SNodeRec_
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Section> */
|
||||
/* cache_subsystem */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_SBit */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to a small bitmap descriptor. See the @FTC_SBitRec */
|
||||
/* structure for details. */
|
||||
/* */
|
||||
typedef struct FTC_SBitRec_* FTC_SBit;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FTC_SBitRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very compact structure used to describe a small glyph bitmap. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* width :: The bitmap width in pixels. */
|
||||
/* */
|
||||
/* height :: The bitmap height in pixels. */
|
||||
/* */
|
||||
/* left :: The horizontal distance from the pen position to the */
|
||||
/* left bitmap border (a.k.a. `left side bearing', or */
|
||||
/* `lsb'). */
|
||||
/* */
|
||||
/* top :: The vertical distance from the pen position (on the */
|
||||
/* baseline) to the upper bitmap border (a.k.a. `top */
|
||||
/* side bearing'). The distance is positive for upwards */
|
||||
/* Y coordinates. */
|
||||
/* */
|
||||
/* format :: The format of the glyph bitmap (monochrome or gray). */
|
||||
/* */
|
||||
/* max_grays :: Maximum gray level value (in the range 1 to 255). */
|
||||
/* */
|
||||
/* pitch :: The number of bytes per bitmap line. May be positive */
|
||||
/* or negative. */
|
||||
/* */
|
||||
/* xadvance :: The horizontal advance width in pixels. */
|
||||
/* */
|
||||
/* yadvance :: The vertical advance height in pixels. */
|
||||
/* */
|
||||
/* buffer :: A pointer to the bitmap pixels. */
|
||||
/* */
|
||||
typedef struct FTC_SBitRec_
|
||||
{
|
||||
FTC_GNodeRec gnode;
|
||||
FT_UInt count;
|
||||
FTC_SBitRec sbits[FTC_SBIT_ITEMS_PER_NODE];
|
||||
FT_Byte width;
|
||||
FT_Byte height;
|
||||
FT_Char left;
|
||||
FT_Char top;
|
||||
|
||||
} FTC_SNodeRec, *FTC_SNode;
|
||||
FT_Byte format;
|
||||
FT_Byte max_grays;
|
||||
FT_Short pitch;
|
||||
FT_Char xadvance;
|
||||
FT_Char yadvance;
|
||||
|
||||
FT_Byte* buffer;
|
||||
|
||||
} FTC_SBitRec;
|
||||
|
||||
|
||||
#define FTC_SNODE( x ) ( (FTC_SNode)( x ) )
|
||||
#define FTC_SNODE_GINDEX( x ) FTC_GNODE( x )->gindex
|
||||
#define FTC_SNODE_FAMILY( x ) FTC_GNODE( x )->family
|
||||
|
||||
typedef FT_UInt
|
||||
(*FTC_SFamily_GetCountFunc)( FTC_Family family,
|
||||
FTC_Manager manager );
|
||||
|
||||
typedef FT_Error
|
||||
(*FTC_SFamily_LoadGlyphFunc)( FTC_Family family,
|
||||
FT_UInt gindex,
|
||||
FTC_Manager manager,
|
||||
FT_Face *aface );
|
||||
|
||||
typedef struct FTC_SFamilyClassRec_
|
||||
{
|
||||
FTC_MruListClassRec clazz;
|
||||
FTC_SFamily_GetCountFunc family_get_count;
|
||||
FTC_SFamily_LoadGlyphFunc family_load_glyph;
|
||||
|
||||
} FTC_SFamilyClassRec;
|
||||
|
||||
typedef const FTC_SFamilyClassRec* FTC_SFamilyClass;
|
||||
|
||||
#define FTC_SFAMILY_CLASS( x ) ((FTC_SFamilyClass)(x))
|
||||
|
||||
#define FTC_CACHE__SFAMILY_CLASS( x ) \
|
||||
FTC_SFAMILY_CLASS( FTC_CACHE__GCACHE_CLASS( x )->family_class )
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_SBitCache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to a small bitmap cache. These are special cache objects */
|
||||
/* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */
|
||||
/* much more efficient way than the traditional glyph image cache */
|
||||
/* implemented by @FTC_ImageCache. */
|
||||
/* */
|
||||
typedef struct FTC_SBitCacheRec_* FTC_SBitCache;
|
||||
|
||||
|
||||
FT_EXPORT( void )
|
||||
FTC_SNode_Free( FTC_SNode snode,
|
||||
FTC_Cache cache );
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_SBit_Cache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* DEPRECATED. Use @FTC_SBitCache instead. */
|
||||
/* */
|
||||
typedef FTC_SBitCache FTC_SBit_Cache;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_SBitCache_New */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Creates a new cache to store small glyph bitmaps. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: A handle to the source cache manager. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* acache :: A handle to the new sbit cache. NULL in case of error. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_SNode_New( FTC_SNode *psnode,
|
||||
FTC_GQuery gquery,
|
||||
FTC_Cache cache );
|
||||
|
||||
FT_EXPORT( FT_ULong )
|
||||
FTC_SNode_Weight( FTC_SNode inode );
|
||||
FTC_SBitCache_New( FTC_Manager manager,
|
||||
FTC_SBitCache *acache );
|
||||
|
||||
|
||||
FT_EXPORT( FT_Bool )
|
||||
FTC_SNode_Compare( FTC_SNode snode,
|
||||
FTC_GQuery gquery,
|
||||
FTC_Cache cache );
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_SBitCache_Lookup */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Looks up a given small glyph bitmap in a given sbit cache and */
|
||||
/* "lock" it to prevent its flushing from the cache until needed */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* cache :: A handle to the source sbit cache. */
|
||||
/* */
|
||||
/* type :: A pointer to the glyph image type descriptor. */
|
||||
/* */
|
||||
/* gindex :: The glyph index. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* sbit :: A handle to a small bitmap descriptor. */
|
||||
/* */
|
||||
/* anode :: Used to return the address of of the corresponding cache */
|
||||
/* node after incrementing its reference count (see note */
|
||||
/* below). */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The small bitmap descriptor and its bit buffer are owned by the */
|
||||
/* cache and should never be freed by the application. They might */
|
||||
/* as well disappear from memory on the next cache lookup, so don't */
|
||||
/* treat them as persistent data. */
|
||||
/* */
|
||||
/* The descriptor's `buffer' field is set to 0 to indicate a missing */
|
||||
/* glyph bitmap. */
|
||||
/* */
|
||||
/* If "anode" is _not_ NULL, it receives the address of the cache */
|
||||
/* node containing the bitmap, after increasing its reference count. */
|
||||
/* This ensures that the node (as well as the image) will always be */
|
||||
/* kept in the cache until you call @FTC_Node_Unref to "release" it. */
|
||||
/* */
|
||||
/* If "anode" is NULL, the cache node is left unchanged, which means */
|
||||
/* that the bitmap could be flushed out of the cache on the next */
|
||||
/* call to one of the caching sub-system APIs. Don't assume that it */
|
||||
/* is persistent! */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_SBitCache_Lookup( FTC_SBitCache cache,
|
||||
FTC_ImageType type,
|
||||
FT_UInt gindex,
|
||||
FTC_SBit *sbit,
|
||||
FTC_Node *anode );
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_SBit_Cache_New */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* DEPRECATED. Use @FTC_SBitCache_New instead. */
|
||||
/* */
|
||||
/* Creates a new cache to store small glyph bitmaps. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: A handle to the source cache manager. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* acache :: A handle to the new sbit cache. NULL in case of error. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_SBit_Cache_New( FTC_Manager manager,
|
||||
FTC_SBit_Cache *acache );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_SBit_Cache_Lookup */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* DEPRECATED. Use @FTC_SBitCache_Lookup instead. */
|
||||
/* */
|
||||
/* Looks up a given small glyph bitmap in a given sbit cache. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* cache :: A handle to the source sbit cache. */
|
||||
/* */
|
||||
/* desc :: A pointer to the glyph image descriptor. */
|
||||
/* */
|
||||
/* gindex :: The glyph index. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* sbit :: A handle to a small bitmap descriptor. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The small bitmap descriptor and its bit buffer are owned by the */
|
||||
/* cache and should never be freed by the application. They might */
|
||||
/* as well disappear from memory on the next cache lookup, so don't */
|
||||
/* treat them as persistent data. */
|
||||
/* */
|
||||
/* The descriptor's `buffer' field is set to 0 to indicate a missing */
|
||||
/* glyph bitmap. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_SBit_Cache_Lookup( FTC_SBit_Cache cache,
|
||||
FTC_Image_Desc* desc,
|
||||
FT_UInt gindex,
|
||||
FTC_SBit *sbit );
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTCSBITS_H__ */
|
||||
|
|
|
@ -137,7 +137,7 @@ FT_BEGIN_HEADER
|
|||
#error "no 32bit type found -- please check your configuration files"
|
||||
#endif
|
||||
|
||||
/* look up an integer type that is at least 32 bits */
|
||||
/* now, lookup for an integer type that is at least 32 bits */
|
||||
#if FT_SIZEOF_INT >= 4
|
||||
|
||||
typedef int FT_Fast;
|
||||
|
@ -192,11 +192,6 @@ FT_BEGIN_HEADER
|
|||
#endif /* FT_SIZEOF_LONG == 8 */
|
||||
|
||||
|
||||
#define FT_BEGIN_STMNT do {
|
||||
#define FT_END_STMNT } while ( 0 )
|
||||
#define FT_DUMMY_STMNT FT_BEGIN_STMNT FT_END_STMNT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* A 64-bit data type will create compilation problems if you compile */
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* Build macros of the FreeType 2 library. */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -281,7 +281,7 @@
|
|||
/* A macro used in #include statements to name the file containing */
|
||||
/* the module management API of FreeType 2. */
|
||||
/* */
|
||||
#define FT_MODULE_H <freetype/ftmodapi.h>
|
||||
#define FT_MODULE_H <freetype/ftmodule.h>
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -433,10 +433,7 @@
|
|||
/* see the API defined in @FT_CACHE_SMALL_BITMAPS_H if you only need */
|
||||
/* to store small glyph bitmaps, as it will use less memory. */
|
||||
/* */
|
||||
/* This macro is deprecated. Simply include @FT_CACHE_H to have all */
|
||||
/* glyph image-related cache declarations. */
|
||||
/* */
|
||||
#define FT_CACHE_IMAGE_H FT_CACHE_H
|
||||
#define FT_CACHE_IMAGE_H <freetype/cache/ftcimage.h>
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -453,10 +450,7 @@
|
|||
/* in @FT_CACHE_IMAGE_H if you want to cache arbitrary glyph images, */
|
||||
/* including scalable outlines. */
|
||||
/* */
|
||||
/* This macro is deprecated. Simply include @FT_CACHE_H to have all */
|
||||
/* small bitmaps-related cache declarations. */
|
||||
/* */
|
||||
#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H
|
||||
#define FT_CACHE_SMALL_BITMAPS_H <freetype/cache/ftcsbits.h>
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -468,10 +462,7 @@
|
|||
/* A macro used in #include statements to name the file containing */
|
||||
/* the `charmap' API of the FreeType 2 cache sub-system. */
|
||||
/* */
|
||||
/* This macro is deprecated. Simply include @FT_CACHE_H to have all */
|
||||
/* charmap-based cache declarations. */
|
||||
/* */
|
||||
#define FT_CACHE_CHARMAP_H FT_CACHE_H
|
||||
#define FT_CACHE_CHARMAP_H <freetype/cache/ftccmap.h>
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -517,30 +508,26 @@
|
|||
|
||||
/* */
|
||||
|
||||
#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
|
||||
#define FT_STROKER_H <freetype/ftstroke.h>
|
||||
#define FT_SYNTHESIS_H <freetype/ftsynth.h>
|
||||
#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
|
||||
#define FT_TRIGONOMETRY_H <freetype/fttrigon.h>
|
||||
#define FT_STROKER_H <freetype/ftstroke.h>
|
||||
#define FT_SYNTHESIS_H <freetype/ftsynth.h>
|
||||
#define FT_ERROR_DEFINITIONS_H <freetype/fterrdef.h>
|
||||
|
||||
#define FT_CACHE_MANAGER_H <freetype/cache/ftcmanag.h>
|
||||
#define FT_CACHE_MANAGER_H <freetype/cache/ftcmanag.h>
|
||||
|
||||
#define FT_CACHE_INTERNAL_MRU_H <freetype/cache/ftcmru.h>
|
||||
#define FT_CACHE_INTERNAL_MANAGER_H <freetype/cache/ftcmanag.h>
|
||||
#define FT_CACHE_INTERNAL_CACHE_H <freetype/cache/ftccache.h>
|
||||
#define FT_CACHE_INTERNAL_GLYPH_H <freetype/cache/ftcglyph.h>
|
||||
#define FT_CACHE_INTERNAL_IMAGE_H <freetype/cache/ftcimage.h>
|
||||
#define FT_CACHE_INTERNAL_SBITS_H <freetype/cache/ftcsbits.h>
|
||||
#define FT_CACHE_INTERNAL_LRU_H <freetype/cache/ftlru.h>
|
||||
#define FT_CACHE_INTERNAL_GLYPH_H <freetype/cache/ftcglyph.h>
|
||||
#define FT_CACHE_INTERNAL_CACHE_H <freetype/cache/ftccache.h>
|
||||
|
||||
#define FT_XFREE86_H <freetype/ftxf86.h>
|
||||
|
||||
#define FT_XFREE86_H <freetype/ftxf86.h>
|
||||
#define FT_INCREMENTAL_H <freetype/ftincrem.h>
|
||||
|
||||
#define FT_INCREMENTAL_H <freetype/ftincrem.h>
|
||||
|
||||
#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h>
|
||||
#define FT_TRUETYPE_UNPATENTED_H <freetype/ttunpat.h>
|
||||
|
||||
/* now include internal headers definitions from <freetype/internal/...> */
|
||||
|
||||
#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
|
||||
#define FT_INTERNAL_INTERNAL_H <freetype/internal/internal.h>
|
||||
#include FT_INTERNAL_INTERNAL_H
|
||||
|
||||
|
||||
|
|
|
@ -257,7 +257,7 @@ FT_BEGIN_HEADER
|
|||
/* The maximum number of modules that can be registered in a single */
|
||||
/* FreeType library object. 32 is the default. */
|
||||
/* */
|
||||
#define FT_MAX_MODULES 32767
|
||||
#define FT_MAX_MODULES 32
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -399,7 +399,7 @@ FT_BEGIN_HEADER
|
|||
/* Do not #undef this macro here, since the build system might */
|
||||
/* define it for certain configurations only. */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
/* #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -411,7 +411,10 @@ FT_BEGIN_HEADER
|
|||
/* FT_PARAM_TAG_UNPATENTED_HINTING; or when the debug hook */
|
||||
/* FT_DEBUG_HOOK_UNPATENTED_HINTING is globally actived */
|
||||
/* */
|
||||
#define TT_CONFIG_OPTION_UNPATENTED_HINTING
|
||||
/* XXX: WARNING: THIS DOESN'T WORK AS ADVERTISED YET. PLEASE DO NOT */
|
||||
/* DEFINE FOR THE MOMENT.. */
|
||||
/* */
|
||||
/* #define TT_CONFIG_OPTION_UNPATENTED_HINTING */
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/* ANSI-specific library and header configuration file (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 2002, 2003, 2004 by */
|
||||
/* Copyright 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -73,11 +73,10 @@
|
|||
|
||||
#include <ctype.h>
|
||||
|
||||
#define ft_isalnum isalnum
|
||||
#define ft_isupper isupper
|
||||
#define ft_islower islower
|
||||
#define ft_isdigit isdigit
|
||||
#define ft_isxdigit isxdigit
|
||||
#define ft_isalnum isalnum
|
||||
#define ft_isupper isupper
|
||||
#define ft_islower islower
|
||||
#define ft_xdigit isxdigit
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
@ -110,7 +109,7 @@
|
|||
#define ft_qsort qsort
|
||||
#define ft_exit exit /* only used to exit from unhandled exceptions */
|
||||
|
||||
#define ft_atol atol
|
||||
#define ft_atoi atoi
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
|
|
|
@ -16,15 +16,6 @@
|
|||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef FT_FREETYPE_H
|
||||
#error "`ft2build.h' hasn't been included yet!"
|
||||
#error "Please always use macros to include FreeType header files."
|
||||
#error "Example:"
|
||||
#error " #include <ft2build.h>"
|
||||
#error " #include FT_FREETYPE_H"
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __FREETYPE_H__
|
||||
#define __FREETYPE_H__
|
||||
|
||||
|
@ -44,7 +35,7 @@
|
|||
/* */
|
||||
#define FREETYPE_MAJOR 2
|
||||
#define FREETYPE_MINOR 1
|
||||
#define FREETYPE_PATCH 8
|
||||
#define FREETYPE_PATCH 5
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
|
@ -590,37 +581,6 @@ FT_BEGIN_HEADER
|
|||
/* the font file, for the cases when they are needed, with the Adobe */
|
||||
/* values as well. */
|
||||
/* */
|
||||
/* FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap */
|
||||
/* is neither Unicode nor ISO-8859-1 (otherwise it is set to */
|
||||
/* FT_ENCODING_UNICODE). Use `FT_Get_BDF_Charset_ID' to find out */
|
||||
/* which encoding is really present. If, for example, the */
|
||||
/* `cs_registry' field is `KOI8' and the `cs_encoding' field is `R', */
|
||||
/* the font is encoded in KOI8-R. */
|
||||
/* */
|
||||
/* FT_ENCODING_NONE is always set (with a single exception) by the */
|
||||
/* winfonts driver. Use `FT_Get_WinFNT_Header' and examine the */
|
||||
/* `charset' field of the `FT_WinFNT_HeaderRec' structure to find out */
|
||||
/* which encoding is really present. For example, FT_WinFNT_ID_CP1251 */
|
||||
/* (204) means Windows code page 1251 (for Russian). */
|
||||
/* */
|
||||
/* FT_ENCODING_NONE is set if `platform_id' is `TT_PLATFORM_MACINTOSH' */
|
||||
/* and `encoding_id' is not `TT_MAC_ID_ROMAN' (otherwise it is set to */
|
||||
/* FT_ENCODING_APPLE_ROMAN). */
|
||||
/* */
|
||||
/* If `platform_id' is `TT_PLATFORM_MACINTOSH', use the function */
|
||||
/* `FT_Get_CMap_Language_ID' to query the Mac language ID which may be */
|
||||
/* needed to be able to distinguish Apple encoding variants. See */
|
||||
/* */
|
||||
/* http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT */
|
||||
/* */
|
||||
/* to get an idea how to do that. Basically, if the language ID is 0, */
|
||||
/* dont use it, otherwise subtract 1 from the language ID. Then */
|
||||
/* examine `encoding_id'. If, for example, `encoding_id' is */
|
||||
/* `TT_MAC_ID_ROMAN' and the language ID (minus 1) is */
|
||||
/* `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman. */
|
||||
/* `TT_MAC_ID_ARABIC' with `TT_MAC_LANGID_FARSI' means the Farsi */
|
||||
/* variant the Arabic encoding. */
|
||||
/* */
|
||||
typedef enum FT_Encoding_
|
||||
{
|
||||
FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ),
|
||||
|
@ -972,7 +932,7 @@ FT_BEGIN_HEADER
|
|||
/* FT_FACE_FLAG_XXX */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A list of bit flags used in the `face_flags' field of the */
|
||||
/* A list of bit flags used in the 'face_flags' field of the */
|
||||
/* @FT_FaceRec structure. They inform client applications of */
|
||||
/* properties of the corresponding face. */
|
||||
/* */
|
||||
|
@ -2061,9 +2021,7 @@ FT_BEGIN_HEADER
|
|||
/* will be loaded. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* glyph_index :: The index of the glyph in the font file. For */
|
||||
/* CID-keyed fonts (either in PS or in CFF format) */
|
||||
/* this argument specifies the CID value. */
|
||||
/* glyph_index :: The index of the glyph in the font file. */
|
||||
/* */
|
||||
/* load_flags :: A flag indicating what to load for this glyph. The */
|
||||
/* @FT_LOAD_XXX constants can be used to control the */
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType exact bbox computation (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2003 by */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -34,12 +34,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -22,12 +22,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType Cache subsystem (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -63,8 +63,8 @@ FT_BEGIN_HEADER
|
|||
/* FTC_Face_Requester */
|
||||
/* */
|
||||
/* FTC_Manager_New */
|
||||
/* FTC_Manager_LookupFace */
|
||||
/* FTC_Manager_LookupSize */
|
||||
/* FTC_Manager_Lookup_Face */
|
||||
/* FTC_Manager_Lookup_Size */
|
||||
/* */
|
||||
/* FTC_Node */
|
||||
/* FTC_Node_Ref */
|
||||
|
@ -108,10 +108,10 @@ FT_BEGIN_HEADER
|
|||
/* FTC_FaceID */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* An opaque pointer type that is used to identity face objects. The */
|
||||
/* A generic pointer type that is used to identity face objects. The */
|
||||
/* contents of such objects is application-dependent. */
|
||||
/* */
|
||||
typedef struct FTC_FaceIDRec_* FTC_FaceID;
|
||||
typedef FT_Pointer FTC_FaceID;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
@ -257,16 +257,22 @@ FT_BEGIN_HEADER
|
|||
/* Creates a new cache manager. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* library :: The parent FreeType library handle to use. */
|
||||
/* library :: The parent FreeType library handle to use. */
|
||||
/* */
|
||||
/* max_bytes :: Maximum number of bytes to use for cached data. */
|
||||
/* Use 0 for defaults. */
|
||||
/* max_faces :: Maximum number of faces to keep alive in manager. */
|
||||
/* Use 0 for defaults. */
|
||||
/* */
|
||||
/* requester :: An application-provided callback used to translate */
|
||||
/* face IDs into real @FT_Face objects. */
|
||||
/* max_sizes :: Maximum number of sizes to keep alive in manager. */
|
||||
/* Use 0 for defaults. */
|
||||
/* */
|
||||
/* req_data :: A generic pointer that is passed to the requester */
|
||||
/* each time it is called (see @FTC_Face_Requester). */
|
||||
/* max_bytes :: Maximum number of bytes to use for cached data. */
|
||||
/* Use 0 for defaults. */
|
||||
/* */
|
||||
/* requester :: An application-provided callback used to translate */
|
||||
/* face IDs into real @FT_Face objects. */
|
||||
/* */
|
||||
/* req_data :: A generic pointer that is passed to the requester */
|
||||
/* each time it is called (see @FTC_Face_Requester). */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* amanager :: A handle to a new manager object. 0 in case of */
|
||||
|
@ -319,7 +325,7 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_Manager_LookupFace */
|
||||
/* FTC_Manager_Lookup_Face */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieves the @FT_Face object that corresponds to a given face ID */
|
||||
|
@ -342,480 +348,64 @@ FT_BEGIN_HEADER
|
|||
/* */
|
||||
/* The @FT_Face object doesn't necessarily have a current size object */
|
||||
/* (i.e., face->size can be 0). If you need a specific `font size', */
|
||||
/* use @FTC_Manager_LookupSize instead. */
|
||||
/* use @FTC_Manager_Lookup_Size instead. */
|
||||
/* */
|
||||
/* Never change the face's transformation matrix (i.e., never call */
|
||||
/* the @FT_Set_Transform function) on a returned face! If you need */
|
||||
/* to transform glyphs, do it yourself after glyph loading. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Manager_LookupFace( FTC_Manager manager,
|
||||
FTC_FaceID face_id,
|
||||
FT_Face *aface );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FTC_ScalerRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A structure used to describe a given character size in either */
|
||||
/* pixels or points to the cache manager. See */
|
||||
/* @FTC_Manager_LookupSize. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* face_id :: The source face ID. */
|
||||
/* */
|
||||
/* width :: The character width. */
|
||||
/* */
|
||||
/* height :: The character height. */
|
||||
/* */
|
||||
/* pixel :: A Boolean. If TRUE, the `width' and `height' fields */
|
||||
/* are interpreted as integer pixel character sizes. */
|
||||
/* Otherwise, they are expressed as 1/64th of points. */
|
||||
/* */
|
||||
/* x_res :: Only used when `pixel' is FALSE to indicate the */
|
||||
/* horizontal resolution in dpi. */
|
||||
/* */
|
||||
/* y_res :: Only used when `pixel' is FALSE to indicate the */
|
||||
/* vertical resolution in dpi. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* This type is mainly used to retrieve @FT_Size objects through the */
|
||||
/* cache manager. */
|
||||
/* */
|
||||
typedef struct FTC_ScalerRec_
|
||||
{
|
||||
FTC_FaceID face_id;
|
||||
FT_UInt width;
|
||||
FT_UInt height;
|
||||
FT_Int pixel;
|
||||
FT_UInt x_res;
|
||||
FT_UInt y_res;
|
||||
|
||||
} FTC_ScalerRec, *FTC_Scaler;
|
||||
FTC_Manager_Lookup_Face( FTC_Manager manager,
|
||||
FTC_FaceID face_id,
|
||||
FT_Face *aface );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_Manager_LookupSize */
|
||||
/* FTC_Manager_Lookup_Size */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieve the @FT_Size object that corresponds to a given */
|
||||
/* @FTC_Scaler through a cache manager. */
|
||||
/* Retrieves the @FT_Face and @FT_Size objects that correspond to a */
|
||||
/* given font. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: A handle to the cache manager. */
|
||||
/* */
|
||||
/* scaler :: A scaler handle. */
|
||||
/* font :: The font to use. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* asize :: A handle to the size object. */
|
||||
/* aface :: A pointer to the handle of the face object. Set it to */
|
||||
/* zero if you don't need it. */
|
||||
/* */
|
||||
/* asize :: A pointer to the handle of the size object. Set it to */
|
||||
/* zero if you don't need it. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The returned @FT_Size object is always owned by the manager. You */
|
||||
/* should never try to discard it by yourself. */
|
||||
/* The returned @FT_Face object is always owned by the manager. You */
|
||||
/* should never try to discard it yourself. */
|
||||
/* */
|
||||
/* You can access the parent @FT_Face object simply as `size->face' */
|
||||
/* if you need it. Note that this object is also owned by the */
|
||||
/* manager. */
|
||||
/* Never change the face's transformation matrix (i.e., never call */
|
||||
/* the @FT_Set_Transform function) on a returned face! If you need */
|
||||
/* to transform glyphs, do it yourself after glyph loading. */
|
||||
/* */
|
||||
/* Similarly, the returned @FT_Size object is always owned by the */
|
||||
/* manager. You should never try to discard it, and never change its */
|
||||
/* settings with @FT_Set_Pixel_Sizes or @FT_Set_Char_Size! */
|
||||
/* */
|
||||
/* The returned size object is the face's current size, which means */
|
||||
/* that you can call @FT_Load_Glyph with the face if you need to. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_Manager_LookupSize( FTC_Manager manager,
|
||||
FTC_Scaler scaler,
|
||||
FT_Size *asize );
|
||||
FTC_Manager_Lookup_Size( FTC_Manager manager,
|
||||
FTC_Font font,
|
||||
FT_Face *aface,
|
||||
FT_Size *asize );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_Node_Unref */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Decrement a cache node's internal reference count. When the count */
|
||||
/* reaches 0, it is not destroyed but becomes eligible for subsequent */
|
||||
/* cache flushes. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* node :: The cache node handle. */
|
||||
/* */
|
||||
/* manager :: The cache manager handle. */
|
||||
/* */
|
||||
FT_EXPORT( void )
|
||||
FTC_Node_Unref( FTC_Node node,
|
||||
FTC_Manager manager );
|
||||
|
||||
|
||||
/* remove all nodes belonging to a given face_id */
|
||||
FT_EXPORT( void )
|
||||
FTC_Manager_RemoveFaceID( FTC_Manager manager,
|
||||
FTC_FaceID face_id );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Section> */
|
||||
/* cache_subsystem */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
/************************************************************************
|
||||
*
|
||||
* @type:
|
||||
* FTC_CMapCache
|
||||
*
|
||||
* @description:
|
||||
* An opaque handle used to manager a charmap cache. This cache is
|
||||
* to hold character codes -> glyph indices mappings.
|
||||
*/
|
||||
typedef struct FTC_CMapCacheRec_* FTC_CMapCache;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* @function: */
|
||||
/* FTC_CMapCache_New */
|
||||
/* */
|
||||
/* @description: */
|
||||
/* Create a new charmap cache. */
|
||||
/* */
|
||||
/* @input: */
|
||||
/* manager :: A handle to the cache manager. */
|
||||
/* */
|
||||
/* @output: */
|
||||
/* acache :: A new cache handle. NULL in case of error. */
|
||||
/* */
|
||||
/* @return: */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* @note: */
|
||||
/* Like all other caches, this one will be destroyed with the cache */
|
||||
/* manager. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_CMapCache_New( FTC_Manager manager,
|
||||
FTC_CMapCache *acache );
|
||||
|
||||
|
||||
/* retrieve the index of a given charmap */
|
||||
FT_EXPORT( FT_Int )
|
||||
FT_Get_CharMap_Index( FT_CharMap charmap );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* @function: */
|
||||
/* FTC_CMapCache_Lookup */
|
||||
/* */
|
||||
/* @description: */
|
||||
/* Translate a character code into a glyph index, using the charmap */
|
||||
/* cache. */
|
||||
/* */
|
||||
/* @input: */
|
||||
/* cache :: A charmap cache handle. */
|
||||
/* */
|
||||
/* face_id :: source face id */
|
||||
/* */
|
||||
/* cmap_index :: index of charmap in source face */
|
||||
/* */
|
||||
/* char_code :: The character code (in the corresponding charmap). */
|
||||
/* */
|
||||
/* @return: */
|
||||
/* Glyph index. 0 means `no glyph'. */
|
||||
/* */
|
||||
FT_EXPORT( FT_UInt )
|
||||
FTC_CMapCache_Lookup( FTC_CMapCache cache,
|
||||
FTC_FaceID face_id,
|
||||
FT_Int cmap_index,
|
||||
FT_UInt32 char_code );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Section> */
|
||||
/* cache_subsystem */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** IMAGE CACHE OBJECT *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
typedef struct FTC_ImageTypeRec_
|
||||
{
|
||||
FTC_FaceID face_id;
|
||||
FT_Int width;
|
||||
FT_Int height;
|
||||
FT_Int32 flags;
|
||||
|
||||
} FTC_ImageTypeRec;
|
||||
|
||||
typedef struct FTC_ImageTypeRec_* FTC_ImageType;
|
||||
|
||||
/* */
|
||||
|
||||
#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \
|
||||
( FTC_FONT_COMPARE( &(d1)->font, &(d2)->font ) && \
|
||||
(d1)->flags == (d2)->flags )
|
||||
|
||||
#define FTC_IMAGE_TYPE_HASH( d ) \
|
||||
(FT_UFast)( FTC_FONT_HASH( &(d)->font ) ^ \
|
||||
( (d)->flags << 4 ) )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_ImageCache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to an glyph image cache object. They are designed to */
|
||||
/* hold many distinct glyph images while not exceeding a certain */
|
||||
/* memory threshold. */
|
||||
/* */
|
||||
typedef struct FTC_ImageCacheRec_* FTC_ImageCache;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_ImageCache_New */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Creates a new glyph image cache. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: The parent manager for the image cache. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* acache :: A handle to the new glyph image cache object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_ImageCache_New( FTC_Manager manager,
|
||||
FTC_ImageCache *acache );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_ImageCache_Lookup */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Retrieves a given glyph image from a glyph image cache. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* cache :: A handle to the source glyph image cache. */
|
||||
/* */
|
||||
/* type :: A pointer to a glyph image type descriptor. */
|
||||
/* */
|
||||
/* gindex :: The glyph index to retrieve. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* aglyph :: The corresponding @FT_Glyph object. 0 in case of */
|
||||
/* failure. */
|
||||
/* */
|
||||
/* anode :: Used to return the address of of the corresponding cache */
|
||||
/* node after incrementing its reference count (see note */
|
||||
/* below). */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The returned glyph is owned and managed by the glyph image cache. */
|
||||
/* Never try to transform or discard it manually! You can however */
|
||||
/* create a copy with @FT_Glyph_Copy and modify the new one. */
|
||||
/* */
|
||||
/* If `anode' is _not_ NULL, it receives the address of the cache */
|
||||
/* node containing the glyph image, after increasing its reference */
|
||||
/* count. This ensures that the node (as well as the FT_Glyph) will */
|
||||
/* always be kept in the cache until you call @FTC_Node_Unref to */
|
||||
/* `release' it. */
|
||||
/* */
|
||||
/* If `anode' is NULL, the cache node is left unchanged, which means */
|
||||
/* that the FT_Glyph could be flushed out of the cache on the next */
|
||||
/* call to one of the caching sub-system APIs. Don't assume that it */
|
||||
/* is persistent! */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_ImageCache_Lookup( FTC_ImageCache cache,
|
||||
FTC_ImageType type,
|
||||
FT_UInt gindex,
|
||||
FT_Glyph *aglyph,
|
||||
FTC_Node *anode );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_SBit */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to a small bitmap descriptor. See the @FTC_SBitRec */
|
||||
/* structure for details. */
|
||||
/* */
|
||||
typedef struct FTC_SBitRec_* FTC_SBit;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FTC_SBitRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very compact structure used to describe a small glyph bitmap. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* width :: The bitmap width in pixels. */
|
||||
/* */
|
||||
/* height :: The bitmap height in pixels. */
|
||||
/* */
|
||||
/* left :: The horizontal distance from the pen position to the */
|
||||
/* left bitmap border (a.k.a. `left side bearing', or */
|
||||
/* `lsb'). */
|
||||
/* */
|
||||
/* top :: The vertical distance from the pen position (on the */
|
||||
/* baseline) to the upper bitmap border (a.k.a. `top */
|
||||
/* side bearing'). The distance is positive for upwards */
|
||||
/* Y coordinates. */
|
||||
/* */
|
||||
/* format :: The format of the glyph bitmap (monochrome or gray). */
|
||||
/* */
|
||||
/* max_grays :: Maximum gray level value (in the range 1 to 255). */
|
||||
/* */
|
||||
/* pitch :: The number of bytes per bitmap line. May be positive */
|
||||
/* or negative. */
|
||||
/* */
|
||||
/* xadvance :: The horizontal advance width in pixels. */
|
||||
/* */
|
||||
/* yadvance :: The vertical advance height in pixels. */
|
||||
/* */
|
||||
/* buffer :: A pointer to the bitmap pixels. */
|
||||
/* */
|
||||
typedef struct FTC_SBitRec_
|
||||
{
|
||||
FT_Byte width;
|
||||
FT_Byte height;
|
||||
FT_Char left;
|
||||
FT_Char top;
|
||||
|
||||
FT_Byte format;
|
||||
FT_Byte max_grays;
|
||||
FT_Short pitch;
|
||||
FT_Char xadvance;
|
||||
FT_Char yadvance;
|
||||
|
||||
FT_Byte* buffer;
|
||||
|
||||
} FTC_SBitRec;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* FTC_SBitCache */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to a small bitmap cache. These are special cache objects */
|
||||
/* used to store small glyph bitmaps (and anti-aliased pixmaps) in a */
|
||||
/* much more efficient way than the traditional glyph image cache */
|
||||
/* implemented by @FTC_ImageCache. */
|
||||
/* */
|
||||
typedef struct FTC_SBitCacheRec_* FTC_SBitCache;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_SBitCache_New */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Creates a new cache to store small glyph bitmaps. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* manager :: A handle to the source cache manager. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* acache :: A handle to the new sbit cache. NULL in case of error. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_SBitCache_New( FTC_Manager manager,
|
||||
FTC_SBitCache *acache );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FTC_SBitCache_Lookup */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Looks up a given small glyph bitmap in a given sbit cache and */
|
||||
/* `lock' it to prevent its flushing from the cache until needed. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* cache :: A handle to the source sbit cache. */
|
||||
/* */
|
||||
/* type :: A pointer to the glyph image type descriptor. */
|
||||
/* */
|
||||
/* gindex :: The glyph index. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* sbit :: A handle to a small bitmap descriptor. */
|
||||
/* */
|
||||
/* anode :: Used to return the address of of the corresponding cache */
|
||||
/* node after incrementing its reference count (see note */
|
||||
/* below). */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The small bitmap descriptor and its bit buffer are owned by the */
|
||||
/* cache and should never be freed by the application. They might */
|
||||
/* as well disappear from memory on the next cache lookup, so don't */
|
||||
/* treat them as persistent data. */
|
||||
/* */
|
||||
/* The descriptor's `buffer' field is set to 0 to indicate a missing */
|
||||
/* glyph bitmap. */
|
||||
/* */
|
||||
/* If `anode' is _not_ NULL, it receives the address of the cache */
|
||||
/* node containing the bitmap, after increasing its reference count. */
|
||||
/* This ensures that the node (as well as the image) will always be */
|
||||
/* kept in the cache until you call @FTC_Node_Unref to `release' it. */
|
||||
/* */
|
||||
/* If `anode' is NULL, the cache node is left unchanged, which means */
|
||||
/* that the bitmap could be flushed out of the cache on the next */
|
||||
/* call to one of the caching sub-system APIs. Don't assume that it */
|
||||
/* is persistent! */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FTC_SBitCache_Lookup( FTC_SBitCache cache,
|
||||
FTC_ImageType type,
|
||||
FT_UInt gindex,
|
||||
FTC_SBit *sbit,
|
||||
FTC_Node *anode );
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTCACHE_H__ */
|
||||
|
|
|
@ -36,12 +36,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
@ -241,8 +235,7 @@ FT_BEGIN_HEADER
|
|||
/* FT_Glyph_Copy */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A function used to copy a glyph image. Note that the created */
|
||||
/* @FT_Glyph object must be released with @FT_Done_Glyph. */
|
||||
/* A function used to copy a glyph image. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* source :: A handle to the source glyph object. */
|
||||
|
@ -479,7 +472,8 @@ FT_BEGIN_HEADER
|
|||
/* } */
|
||||
/* */
|
||||
/* */
|
||||
/* This function does nothing if the glyph format isn't scalable. */
|
||||
/* This function will always fail if the glyph's format isn't */
|
||||
/* scalable. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Glyph_To_Bitmap( FT_Glyph* the_glyph,
|
||||
|
|
|
@ -22,13 +22,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*************************************************************************/
|
||||
|
|
|
@ -53,8 +53,8 @@ FT_BEGIN_HEADER
|
|||
/* <Description> */
|
||||
/* The type FT_Pos is a 32-bit integer used to store vectorial */
|
||||
/* coordinates. Depending on the context, these can represent */
|
||||
/* distances in integer font units, or 16,16, or 26.6 fixed float */
|
||||
/* pixel coordinates. */
|
||||
/* distances in integer font units, or 26.6 fixed float pixel */
|
||||
/* coordinates. */
|
||||
/* */
|
||||
typedef signed long FT_Pos;
|
||||
|
||||
|
|
|
@ -22,12 +22,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* Generic list support for FreeType (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2003 by */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -31,12 +31,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -100,6 +100,21 @@ FT_BEGIN_HEADER
|
|||
|
||||
/* */
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Get_MM_Func)( FT_Face face,
|
||||
FT_Multi_Master* master );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_MM_Design_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Long* coords );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_MM_Blend_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Long* coords );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
|
|
|
@ -1,314 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftmodule.h */
|
||||
/* */
|
||||
/* FreeType modules public interface (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTMODULE_H__
|
||||
#define __FTMODULE_H__
|
||||
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Section> */
|
||||
/* module_management */
|
||||
/* */
|
||||
/* <Title> */
|
||||
/* Module Management */
|
||||
/* */
|
||||
/* <Abstract> */
|
||||
/* How to add, upgrade, and remove modules from FreeType. */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The definitions below are used to manage modules within FreeType. */
|
||||
/* Modules can be added, upgraded, and removed at runtime. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/* module bit flags */
|
||||
#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */
|
||||
#define FT_MODULE_RENDERER 2 /* this module is a renderer */
|
||||
#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */
|
||||
#define FT_MODULE_STYLER 8 /* this module is a styler */
|
||||
|
||||
#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */
|
||||
/* scalable fonts */
|
||||
#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */
|
||||
/* support vector outlines */
|
||||
#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */
|
||||
/* own hinter */
|
||||
|
||||
|
||||
/* deprecated values */
|
||||
#define ft_module_font_driver FT_MODULE_FONT_DRIVER
|
||||
#define ft_module_renderer FT_MODULE_RENDERER
|
||||
#define ft_module_hinter FT_MODULE_HINTER
|
||||
#define ft_module_styler FT_MODULE_STYLER
|
||||
|
||||
#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE
|
||||
#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES
|
||||
#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER
|
||||
|
||||
|
||||
typedef void
|
||||
(*FT_Module_Interface)( void );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Module_Constructor)( FT_Module module );
|
||||
|
||||
typedef void
|
||||
(*FT_Module_Destructor)( FT_Module module );
|
||||
|
||||
typedef FT_Module_Interface
|
||||
(*FT_Module_Requester)( FT_Module module,
|
||||
const char* name );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FT_Module_Class */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The module class descriptor. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* module_flags :: Bit flags describing the module. */
|
||||
/* */
|
||||
/* module_size :: The size of one module object/instance in */
|
||||
/* bytes. */
|
||||
/* */
|
||||
/* module_name :: The name of the module. */
|
||||
/* */
|
||||
/* module_version :: The version, as a 16.16 fixed number */
|
||||
/* (major.minor). */
|
||||
/* */
|
||||
/* module_requires :: The version of FreeType this module requires */
|
||||
/* (starts at version 2.0, i.e 0x20000) */
|
||||
/* */
|
||||
/* module_init :: A function used to initialize (not create) a */
|
||||
/* new module object. */
|
||||
/* */
|
||||
/* module_done :: A function used to finalize (not destroy) a */
|
||||
/* given module object */
|
||||
/* */
|
||||
/* get_interface :: Queries a given module for a specific */
|
||||
/* interface by name. */
|
||||
/* */
|
||||
typedef struct FT_Module_Class_
|
||||
{
|
||||
FT_ULong module_flags;
|
||||
FT_Long module_size;
|
||||
const FT_String* module_name;
|
||||
FT_Fixed module_version;
|
||||
FT_Fixed module_requires;
|
||||
|
||||
const void* module_interface;
|
||||
|
||||
FT_Module_Constructor module_init;
|
||||
FT_Module_Destructor module_done;
|
||||
FT_Module_Requester get_interface;
|
||||
|
||||
} FT_Module_Class;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Add_Module */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Adds a new module to a given library instance. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* library :: A handle to the library object. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* clazz :: A pointer to class descriptor for the module. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* An error will be returned if a module already exists by that name, */
|
||||
/* or if the module requires a version of FreeType that is too great. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Add_Module( FT_Library library,
|
||||
const FT_Module_Class* clazz );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Get_Module */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Finds a module by its name. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* library :: A handle to the library object. */
|
||||
/* */
|
||||
/* module_name :: The module's name (as an ASCII string). */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* A module handle. 0 if none was found. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* You should better be familiar with FreeType internals to know */
|
||||
/* which module to look for :-) */
|
||||
/* */
|
||||
FT_EXPORT( FT_Module )
|
||||
FT_Get_Module( FT_Library library,
|
||||
const char* module_name );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Remove_Module */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Removes a given module from a library instance. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* library :: A handle to a library object. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* module :: A handle to a module object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The module object is destroyed by the function in case of success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Remove_Module( FT_Library library,
|
||||
FT_Module module );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_New_Library */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This function is used to create a new FreeType library instance */
|
||||
/* from a given memory object. It is thus possible to use libraries */
|
||||
/* with distinct memory allocators within the same program. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* memory :: A handle to the original memory object. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* alibrary :: A pointer to handle of a new library object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_New_Library( FT_Memory memory,
|
||||
FT_Library *alibrary );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Done_Library */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Discards a given library object. This closes all drivers and */
|
||||
/* discards all resource objects. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* library :: A handle to the target library. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Done_Library( FT_Library library );
|
||||
|
||||
|
||||
|
||||
typedef void
|
||||
(*FT_DebugHook_Func)( void* arg );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Set_Debug_Hook */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Sets a debug hook function for debugging the interpreter of a font */
|
||||
/* format. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* library :: A handle to the library object. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* hook_index :: The index of the debug hook. You should use the */
|
||||
/* values defined in ftobjs.h, e.g. */
|
||||
/* FT_DEBUG_HOOK_TRUETYPE. */
|
||||
/* */
|
||||
/* debug_hook :: The function used to debug the interpreter. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* Currently, four debug hook slots are available, but only two (for */
|
||||
/* the TrueType and the Type 1 interpreter) are defined. */
|
||||
/* */
|
||||
FT_EXPORT( void )
|
||||
FT_Set_Debug_Hook( FT_Library library,
|
||||
FT_UInt hook_index,
|
||||
FT_DebugHook_Func debug_hook );
|
||||
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Add_Default_Modules */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Adds the set of default drivers to a given library object. */
|
||||
/* This is only useful when you create a library object with */
|
||||
/* FT_New_Library() (usually to plug a custom memory manager). */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* library :: A handle to a new library object. */
|
||||
/* */
|
||||
FT_EXPORT( void )
|
||||
FT_Add_Default_Modules( FT_Library library );
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTMODULE_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -5,7 +5,7 @@
|
|||
/* Support for the FT_Outline type used to store glyph shapes of */
|
||||
/* most scalable font formats (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -24,12 +24,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
@ -395,72 +389,6 @@ FT_BEGIN_HEADER
|
|||
FT_Raster_Params* params );
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @enum:
|
||||
* FT_Orientation
|
||||
*
|
||||
* @description:
|
||||
* A list of values used to describe an outline's contour orientation.
|
||||
*
|
||||
* The TrueType and Postscript specifications use different conventions
|
||||
* to determine whether outline contours should be filled or unfilled.
|
||||
*
|
||||
* @values:
|
||||
* FT_ORIENTATION_TRUETYPE ::
|
||||
* According to the TrueType specification, clockwise contours must
|
||||
* be filled, and counter-clockwise ones must be unfilled.
|
||||
*
|
||||
* FT_ORIENTATION_POSTSCRIPT ::
|
||||
* According to the Postscript specification, counter-clockwise contours
|
||||
* must be filled, and clockwise ones must be unfilled.
|
||||
*
|
||||
* FT_ORIENTATION_FILL_RIGHT ::
|
||||
* This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
|
||||
* remember that in TrueType, everything that is to the right of
|
||||
* the drawing direction of a contour must be filled.
|
||||
*
|
||||
* FT_ORIENTATION_FILL_LEFT ::
|
||||
* This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
|
||||
* remember that in Postscript, everything that is to the left of
|
||||
* the drawing direction of a contour must be filled.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
FT_ORIENTATION_TRUETYPE = 0,
|
||||
FT_ORIENTATION_POSTSCRIPT = 1,
|
||||
FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE,
|
||||
FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT
|
||||
|
||||
} FT_Orientation;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Outline_Get_Orientation
|
||||
*
|
||||
* @description:
|
||||
* This function analyzes a glyph outline and tries to compute its
|
||||
* fill orientation (see @FT_Orientation). This is done by computing
|
||||
* the direction of each global horizontal and/or vertical extrema
|
||||
* within the outline.
|
||||
*
|
||||
* Note that this will return @FT_ORIENTATION_TRUETYPE for empty
|
||||
* outlines.
|
||||
*
|
||||
* @input:
|
||||
* outline ::
|
||||
* A handle to the source outline.
|
||||
*
|
||||
* @return:
|
||||
* The orientation.
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( FT_Orientation )
|
||||
FT_Outline_Get_Orientation( FT_Outline* outline );
|
||||
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
|
|
|
@ -22,12 +22,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType size objects management (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2003 by */
|
||||
/* Copyright 1996-2001 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -32,12 +32,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
@ -107,9 +101,7 @@ FT_BEGIN_HEADER
|
|||
/* FT_Done_Size */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Discards a given size object. Note that @FT_Done_Face */
|
||||
/* automatically discards all size objects allocated with */
|
||||
/* @FT_New_Size. */
|
||||
/* Discards a given size object. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* size :: A handle to a target size object. */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* This is _not_ used to retrieve glyph names! */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -26,12 +26,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* FreeType path stroker (specification). */
|
||||
/* */
|
||||
/* Copyright 2002, 2003, 2004 by */
|
||||
/* Copyright 2002, 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -21,45 +21,42 @@
|
|||
|
||||
#include <ft2build.h>
|
||||
#include FT_OUTLINE_H
|
||||
#include FT_GLYPH_H
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*@*************************************************************
|
||||
*
|
||||
* @type:
|
||||
* FT_Stroker
|
||||
*
|
||||
* @description:
|
||||
* Opaque handler to a path stroker object.
|
||||
*/
|
||||
typedef struct FT_StrokerRec_* FT_Stroker;
|
||||
/*@*************************************************************
|
||||
*
|
||||
* @type: FT_Stroker
|
||||
*
|
||||
* @description:
|
||||
* opaque handler to a path stroker object
|
||||
*/
|
||||
typedef struct FT_StrokerRec_* FT_Stroker;
|
||||
|
||||
|
||||
/*@*************************************************************
|
||||
*
|
||||
* @enum:
|
||||
* FT_Stroker_LineJoin
|
||||
*
|
||||
* @description:
|
||||
* These values determine how two joining lines are rendered
|
||||
* in a stroker.
|
||||
*
|
||||
* @values:
|
||||
* FT_STROKER_LINEJOIN_ROUND ::
|
||||
* Used to render rounded line joins. Circular arcs are used
|
||||
* to join two lines smoothly.
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_BEVEL ::
|
||||
* Used to render beveled line joins; i.e., the two joining lines
|
||||
* are extended until they intersect.
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_MITER ::
|
||||
* Same as beveled rendering, except that an additional line
|
||||
* break is added if the angle between the two joining lines
|
||||
* is too closed (this is useful to avoid unpleasant spikes
|
||||
* in beveled rendering).
|
||||
*/
|
||||
/*@*************************************************************
|
||||
*
|
||||
* @enum: FT_Stroker_LineJoin
|
||||
*
|
||||
* @description:
|
||||
* these values determine how two joining lines are rendered
|
||||
* in a stroker.
|
||||
*
|
||||
* @values:
|
||||
* FT_STROKER_LINEJOIN_ROUND ::
|
||||
* used to render rounded line joins. circular arcs are used
|
||||
* to join two lines smoothly
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_BEVEL ::
|
||||
* used to render beveled line joins; i.e. the two joining lines
|
||||
* are extended until they intersect
|
||||
*
|
||||
* FT_STROKER_LINEJOIN_MITER ::
|
||||
* same as beveled rendering, except that an additional line
|
||||
* break is added if the angle between the two joining lines
|
||||
* is too closed (this is useful to avoid unpleasant spikes
|
||||
* in beveled rendering).
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
FT_STROKER_LINEJOIN_ROUND = 0,
|
||||
|
@ -69,28 +66,27 @@ FT_BEGIN_HEADER
|
|||
} FT_Stroker_LineJoin;
|
||||
|
||||
|
||||
/*@*************************************************************
|
||||
*
|
||||
* @enum:
|
||||
* FT_Stroker_LineCap
|
||||
*
|
||||
* @description:
|
||||
* These values determine how the end of opened sub-paths are
|
||||
* rendered in a stroke.
|
||||
*
|
||||
* @values:
|
||||
* FT_STROKER_LINECAP_BUTT ::
|
||||
* The end of lines is rendered as a full stop on the last
|
||||
* point itself.
|
||||
*
|
||||
* FT_STROKER_LINECAP_ROUND ::
|
||||
* The end of lines is rendered as a half-circle around the
|
||||
* last point.
|
||||
*
|
||||
* FT_STROKER_LINECAP_SQUARE ::
|
||||
* The end of lines is rendered as a square around the
|
||||
* last point.
|
||||
*/
|
||||
/*@*************************************************************
|
||||
*
|
||||
* @enum: FT_Stroker_LineCap
|
||||
*
|
||||
* @description:
|
||||
* these values determine how the end of opened sub-paths are
|
||||
* rendered in a stroke
|
||||
*
|
||||
* @values:
|
||||
* FT_STROKER_LINECAP_BUTT ::
|
||||
* the end of lines is rendered as a full stop on the last
|
||||
* point itself
|
||||
*
|
||||
* FT_STROKER_LINECAP_ROUND ::
|
||||
* the end of lines is rendered as a half-circle around the
|
||||
* last point
|
||||
*
|
||||
* FT_STROKER_LINECAP_SQUARE ::
|
||||
* the end of lines is rendered as a square around the
|
||||
* last point
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
FT_STROKER_LINECAP_BUTT = 0,
|
||||
|
@ -99,134 +95,12 @@ FT_BEGIN_HEADER
|
|||
|
||||
} FT_Stroker_LineCap;
|
||||
|
||||
/* */
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @enum:
|
||||
* FT_StrokerBorder
|
||||
*
|
||||
* @description:
|
||||
* These values are used to select a given stroke border
|
||||
* in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
|
||||
*
|
||||
* @values:
|
||||
* FT_STROKER_BORDER_LEFT ::
|
||||
* Select the left border, relative to the drawing direction.
|
||||
*
|
||||
* FT_STROKER_BORDER_RIGHT ::
|
||||
* Select the right border, relative to the drawing direction.
|
||||
*
|
||||
* @note:
|
||||
* Applications are generally interested in the `inside' and `outside'
|
||||
* borders. However, there is no direct mapping between these and
|
||||
* the `left' / `right' ones, since this really depends on the glyph's
|
||||
* drawing orientation, which varies between font formats.
|
||||
*
|
||||
* You can however use @FT_Outline_GetInsideBorder and
|
||||
* @FT_Outline_GetOutsideBorder to get these.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
FT_STROKER_BORDER_LEFT = 0,
|
||||
FT_STROKER_BORDER_RIGHT
|
||||
|
||||
} FT_StrokerBorder;
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Outline_GetInsideBorder
|
||||
*
|
||||
* @description:
|
||||
* Retrieve the @FT_StrokerBorder value corresponding to the
|
||||
* `inside' borders of a given outline.
|
||||
*
|
||||
* @input:
|
||||
* outline ::
|
||||
* The source outline handle.
|
||||
*
|
||||
* @return:
|
||||
* The border index. @FT_STROKER_BORDER_LEFT for empty or invalid
|
||||
* outlines.
|
||||
*/
|
||||
FT_EXPORT( FT_StrokerBorder )
|
||||
FT_Outline_GetInsideBorder( FT_Outline* outline );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Outline_GetOutsideBorder
|
||||
*
|
||||
* @description:
|
||||
* Retrieve the @FT_StrokerBorder value corresponding to the
|
||||
* `outside' borders of a given outline.
|
||||
*
|
||||
* @input:
|
||||
* outline ::
|
||||
* The source outline handle.
|
||||
*
|
||||
* @return:
|
||||
* The border index. @FT_STROKER_BORDER_LEFT for empty or invalid
|
||||
* outlines.
|
||||
*/
|
||||
FT_EXPORT( FT_StrokerBorder )
|
||||
FT_Outline_GetOutsideBorder( FT_Outline* outline );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_New
|
||||
*
|
||||
* @description:
|
||||
* Create a new stroker object.
|
||||
*
|
||||
* @input:
|
||||
* memory ::
|
||||
* The memory manager handle.
|
||||
*
|
||||
* @output:
|
||||
* A new stroker object handle. NULL in case of error.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_New( FT_Memory memory,
|
||||
FT_Stroker *astroker );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_Set
|
||||
*
|
||||
* @description:
|
||||
* Reset a stroker object's attributes.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* radius ::
|
||||
* The border radius.
|
||||
*
|
||||
* line_cap ::
|
||||
* The line cap style.
|
||||
*
|
||||
* line_join ::
|
||||
* The line join style.
|
||||
*
|
||||
* miter_limit ::
|
||||
* The miter limit for the FT_STROKER_LINEJOIN_MITER style,
|
||||
* expressed as 16.16 fixed point value.
|
||||
*
|
||||
* @note:
|
||||
* The radius is expressed in the same units that the outline
|
||||
* coordinates.
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Stroker_Set( FT_Stroker stroker,
|
||||
FT_Fixed radius,
|
||||
|
@ -235,208 +109,29 @@ FT_BEGIN_HEADER
|
|||
FT_Fixed miter_limit );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_Rewind
|
||||
*
|
||||
* @description:
|
||||
* Reset a stroker object without changing its attributes.
|
||||
* You should call this function before beginning a new
|
||||
* series of calls to @FT_Stroker_BeginSubPath or
|
||||
* @FT_Stroker_EndSubPath.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Stroker_Rewind( FT_Stroker stroker );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_ParseOutline
|
||||
*
|
||||
* @description:
|
||||
* A convenience function used to parse a whole outline with
|
||||
* the stroker. The resulting outline(s) can be retrieved
|
||||
* later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* outline ::
|
||||
* The source outline.
|
||||
*
|
||||
* opened ::
|
||||
* A boolean. If TRUE, the outline is treated as an open path
|
||||
* instead of a closed one.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* If `opened' is 0 (the default), the outline is treated as a closed
|
||||
* path, and the stroker will generate two distinct `border' outlines.
|
||||
*
|
||||
* If `opened' is 1, the outline is processed as an open path, and the
|
||||
* stroker will generate a single `stroke' outline.
|
||||
*
|
||||
* This function calls @FT_Stroker_Rewind automatically.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_ParseOutline( FT_Stroker stroker,
|
||||
FT_Outline* outline,
|
||||
FT_Bool opened );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_BeginSubPath
|
||||
*
|
||||
* @description:
|
||||
* Start a new sub-path in the stroker.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* to ::
|
||||
* A pointer to the start vector.
|
||||
*
|
||||
* open ::
|
||||
* A boolean. If TRUE, the sub-path is treated as an open one.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* This function is useful when you need to stroke a path that is
|
||||
* not stored as a @FT_Outline object.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_BeginSubPath( FT_Stroker stroker,
|
||||
FT_Vector* to,
|
||||
FT_Bool open );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_EndSubPath
|
||||
*
|
||||
* @description:
|
||||
* Close the current sub-path in the stroker.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* You should call this function after @FT_Stroker_BeginSubPath.
|
||||
* If the subpath was not `opened', this function will `draw' a
|
||||
* single line segment to the start position when needed.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_EndSubPath( FT_Stroker stroker );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_LineTo
|
||||
*
|
||||
* @description:
|
||||
* `Draw' a single line segment in the stroker's current sub-path,
|
||||
* from the last position.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* to ::
|
||||
* A pointer to the destination point.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* You should call this function between @FT_Stroker_BeginSubPath and
|
||||
* @FT_Stroker_EndSubPath.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_LineTo( FT_Stroker stroker,
|
||||
FT_Vector* to );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_ConicTo
|
||||
*
|
||||
* @description:
|
||||
* `Draw; a single quadratic bezier in the stroker's current sub-path,
|
||||
* from the last position.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* control ::
|
||||
* A pointer to a Bézier control point.
|
||||
*
|
||||
* to ::
|
||||
* A pointer to the destination point.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* You should call this function between @FT_Stroker_BeginSubPath and
|
||||
* @FT_Stroker_EndSubPath.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_ConicTo( FT_Stroker stroker,
|
||||
FT_Vector* control,
|
||||
FT_Vector* to );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_CubicTo
|
||||
*
|
||||
* @description:
|
||||
* `Draw' a single cubic Bézier in the stroker's current sub-path,
|
||||
* from the last position.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* control1 ::
|
||||
* A pointer to the first Bézier control point.
|
||||
*
|
||||
* control2 ::
|
||||
* A pointer to second Bézier control point.
|
||||
*
|
||||
* to ::
|
||||
* A pointer to the destination point.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* You should call this function between @FT_Stroker_BeginSubPath and
|
||||
* @FT_Stroker_EndSubPath.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_CubicTo( FT_Stroker stroker,
|
||||
FT_Vector* control1,
|
||||
|
@ -444,240 +139,19 @@ FT_BEGIN_HEADER
|
|||
FT_Vector* to );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_GetBorderCounts
|
||||
*
|
||||
* @description:
|
||||
* Vall this function once you have finished parsing your paths
|
||||
* with the stroker. It will return the number of points and
|
||||
* contours necessary to export one of the `border' or `stroke'
|
||||
* outlines generated by the stroker.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* border ::
|
||||
* The border index.
|
||||
*
|
||||
* @output:
|
||||
* anum_points ::
|
||||
* The number of points.
|
||||
*
|
||||
* anum_contours ::
|
||||
* The number of contours.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* When an outline, or a sub-path, is `closed', the stroker generates
|
||||
* two independent `border' outlines, named `left' and `right'.
|
||||
*
|
||||
* When the outline, or a sub-path, is `opened', the stroker merges
|
||||
* the `border' outlines with caps. The `left' border receives all
|
||||
* points, while the `right' border becomes empty.
|
||||
*
|
||||
* Use the function @FT_Stroker_GetCounts instead if you want to
|
||||
* retrieve the counts associated to both borders.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_GetBorderCounts( FT_Stroker stroker,
|
||||
FT_StrokerBorder border,
|
||||
FT_UInt *anum_points,
|
||||
FT_UInt *anum_contours );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_ExportBorder
|
||||
*
|
||||
* @description:
|
||||
* Call this function after @FT_Stroker_GetBorderCounts to
|
||||
* export the corresponding border to your own @FT_Outline
|
||||
* structure.
|
||||
*
|
||||
* Note that this function will append the border points and
|
||||
* contours to your outline, but will not try to resize its
|
||||
* arrays.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* border ::
|
||||
* The border index.
|
||||
*
|
||||
* outline ::
|
||||
* The target outline handle.
|
||||
*
|
||||
* @note:
|
||||
* Always call this function after @FT_Stroker_GetBorderCounts to
|
||||
* get sure that there is enough room in your @FT_Outline object to
|
||||
* receive all new data.
|
||||
*
|
||||
* When an outline, or a sub-path, is `closed', the stroker generates
|
||||
* two independent `border' outlines, named `left' and `right'
|
||||
*
|
||||
* When the outline, or a sub-path, is `opened', the stroker merges
|
||||
* the `border' outlines with caps. The `left' border receives all
|
||||
* points, while the `right' border becomes empty.
|
||||
*
|
||||
* Use the function @FT_Stroker_Export instead if you want to
|
||||
* retrieve all borders at once.
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Stroker_ExportBorder( FT_Stroker stroker,
|
||||
FT_StrokerBorder border,
|
||||
FT_Outline* outline );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_GetCounts
|
||||
*
|
||||
* @description:
|
||||
* Call this function once you have finished parsing your paths
|
||||
* with the stroker. It returns the number of points and
|
||||
* contours necessary to export all points/borders from the stroked
|
||||
* outline/path.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* @output:
|
||||
* anum_points ::
|
||||
* The number of points.
|
||||
*
|
||||
* anum_contours ::
|
||||
* The number of contours.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Stroker_GetCounts( FT_Stroker stroker,
|
||||
FT_UInt *anum_points,
|
||||
FT_UInt *anum_contours );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_Export
|
||||
*
|
||||
* @description:
|
||||
* Call this function after @FT_Stroker_GetBorderCounts to
|
||||
* export the all borders to your own @FT_Outline structure.
|
||||
*
|
||||
* Note that this function will append the border points and
|
||||
* contours to your outline, but will not try to resize its
|
||||
* arrays.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* The target stroker handle.
|
||||
*
|
||||
* outline ::
|
||||
* The target outline handle.
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Stroker_Export( FT_Stroker stroker,
|
||||
FT_Outline* outline );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Stroker_Done
|
||||
*
|
||||
* @description:
|
||||
* Destroy a stroker object.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* A stroker handle. Can be NULL.
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Stroker_Done( FT_Stroker stroker );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Glyph_Stroke
|
||||
*
|
||||
* @description:
|
||||
* Stroke a given outline glyph object with a given stroker.
|
||||
*
|
||||
* @inout:
|
||||
* pglyph :: Source glyph handle on input, new glyph handle
|
||||
* on output.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* A stroker handle.
|
||||
*
|
||||
* destroy ::
|
||||
* A Boolean. If TRUE, the source glyph object is destroyed
|
||||
* on success.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* The source glyph is untouched in case of error.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Glyph_Stroke( FT_Glyph *pglyph,
|
||||
FT_Stroker stroker,
|
||||
FT_Bool destroy );
|
||||
|
||||
|
||||
/**************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Glyph_StrokeBorder
|
||||
*
|
||||
* @description:
|
||||
* Stroke a given outline glyph object with a given stroker, but
|
||||
* only return either its inside or outside border.
|
||||
*
|
||||
* @inout:
|
||||
* pglyph ::
|
||||
* Source glyph handle on input, new glyph handle on output.
|
||||
*
|
||||
* @input:
|
||||
* stroker ::
|
||||
* A stroker handle.
|
||||
*
|
||||
* inside ::
|
||||
* A Boolean. If TRUE, return the inside border, otherwise
|
||||
* the outside border.
|
||||
*
|
||||
* destroy ::
|
||||
* A Boolean. If TRUE, the source glyph object is destroyed
|
||||
* on success.
|
||||
*
|
||||
* @return:
|
||||
* FreeType error code. 0 means success.
|
||||
*
|
||||
* @note:
|
||||
* The source glyph is untouched in case of error.
|
||||
*/
|
||||
FT_EXPORT( FT_Error )
|
||||
FT_Glyph_StrokeBorder( FT_Glyph *pglyph,
|
||||
FT_Stroker stroker,
|
||||
FT_Bool inside,
|
||||
FT_Bool destroy );
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FT_STROKE_H__ */
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/* FreeType synthesizing code for emboldening and slanting */
|
||||
/* (specification). */
|
||||
/* */
|
||||
/* Copyright 2000-2001, 2003 by */
|
||||
/* Copyright 2000-2001 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -41,12 +41,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -21,12 +21,6 @@
|
|||
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -22,12 +22,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
@ -49,132 +43,10 @@ FT_BEGIN_HEADER
|
|||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
*
|
||||
* @enum:
|
||||
* FT_WinFNT_ID_XXX
|
||||
*
|
||||
* @description:
|
||||
* A list of valid values for the `charset' byte in
|
||||
* @FT_WinFNT_HeaderRec. Exact mapping tables for the various cpXXXX
|
||||
* encodings (except for cp1361) can be found at ftp://ftp.unicode.org
|
||||
* in the MAPPINGS/VENDORS/MICSFT/WINDOWS subdirectory. cp1361 is
|
||||
* roughly a superset of MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
|
||||
*
|
||||
* @values:
|
||||
* FT_WinFNT_ID_DEFAULT ::
|
||||
* This is used for font enumeration and font creation as a
|
||||
* `don't care' value. Valid font files don't contain this value.
|
||||
* When querying for information about the character set of the font
|
||||
* that is currently selected into a specified device context, this
|
||||
* return value (of the related Windows API) simply denotes failure.
|
||||
*
|
||||
* FT_WinFNT_ID_SYMBOL ::
|
||||
* There is no known mapping table available.
|
||||
*
|
||||
* FT_WinFNT_ID_MAC ::
|
||||
* Mac Roman encoding.
|
||||
*
|
||||
* FT_WinFNT_ID_OEM ::
|
||||
* From Michael Pöttgen <michael@poettgen.de>:
|
||||
* The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
|
||||
* is used for the charset of vector fonts, like `modern.fon',
|
||||
* `roman.fon', and `script.fon' on Windows.
|
||||
*
|
||||
* The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
|
||||
* specifies a character set that is operating-system dependent.
|
||||
*
|
||||
* The `IFIMETRICS' documentation from the `Windows Driver
|
||||
* Development Kit' says: This font supports an OEM-specific
|
||||
* character set. The OEM character set is system dependent.
|
||||
*
|
||||
* In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
|
||||
* second default codepage that most international versions of
|
||||
* Windows have. It is one of the OEM codepages from
|
||||
*
|
||||
* http://www.microsoft.com/globaldev/reference/cphome.mspx,
|
||||
*
|
||||
* and is used for the `DOS boxes', to support legacy applications.
|
||||
* A German Windows version for example usually uses ANSI codepage
|
||||
* 1252 and OEM codepage 850.
|
||||
*
|
||||
* FT_WinFNT_ID_CP874 ::
|
||||
* A superset of Thai TIS 620 and ISO 8859-11.
|
||||
*
|
||||
* FT_WinFNT_ID_CP932 ::
|
||||
* A superset of Japanese Shift-JIS (with minor deviations).
|
||||
*
|
||||
* FT_WinFNT_ID_CP936 ::
|
||||
* A superset of simplified Chinese GB 2312-1980 (with different
|
||||
* ordering and minor deviations).
|
||||
*
|
||||
* FT_WinFNT_ID_CP949 ::
|
||||
* A superset of Korean Hangul KS C 5601-1987 (with different
|
||||
* ordering and minor deviations).
|
||||
*
|
||||
* FT_WinFNT_ID_CP950 ::
|
||||
* A superset of traditional Chinese Big 5 ETen (with different
|
||||
* ordering and minor deviations).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1250 ::
|
||||
* A superset of East European ISO 8859-2 (with slightly different
|
||||
* ordering).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1251 ::
|
||||
* A superset of Russian ISO 8859-5 (with different ordering).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1252 ::
|
||||
* ANSI encoding. A superset of ISO 8859-1.
|
||||
*
|
||||
* FT_WinFNT_ID_CP1253 ::
|
||||
* A superset of Greek ISO 8859-7 (with minor modifications).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1254 ::
|
||||
* A superset of Turkish ISO 8859-9.
|
||||
*
|
||||
* FT_WinFNT_ID_CP1255 ::
|
||||
* A superset of Hebrew ISO 8859-8 (with some modifications).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1256 ::
|
||||
* A superset of Arabic ISO 8859-6 (with different ordering).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1257 ::
|
||||
* A superset of Baltic ISO 8859-13 (with some deviations).
|
||||
*
|
||||
* FT_WinFNT_ID_CP1258 ::
|
||||
* For Vietnamese. This encoding doesn't cover all necessary
|
||||
* characters.
|
||||
*
|
||||
* FT_WinFNT_ID_CP1361 ::
|
||||
* Korean (Johab).
|
||||
*/
|
||||
|
||||
#define FT_WinFNT_ID_CP1252 0
|
||||
#define FT_WinFNT_ID_DEFAULT 1
|
||||
#define FT_WinFNT_ID_SYMBOL 2
|
||||
#define FT_WinFNT_ID_MAC 77
|
||||
#define FT_WinFNT_ID_CP932 128
|
||||
#define FT_WinFNT_ID_CP949 129
|
||||
#define FT_WinFNT_ID_CP1361 130
|
||||
#define FT_WinFNT_ID_CP936 134
|
||||
#define FT_WinFNT_ID_CP950 136
|
||||
#define FT_WinFNT_ID_CP1253 161
|
||||
#define FT_WinFNT_ID_CP1254 162
|
||||
#define FT_WinFNT_ID_CP1258 163
|
||||
#define FT_WinFNT_ID_CP1255 177
|
||||
#define FT_WinFNT_ID_CP1256 178
|
||||
#define FT_WinFNT_ID_CP1257 186
|
||||
#define FT_WinFNT_ID_CP1251 204
|
||||
#define FT_WinFNT_ID_CP874 222
|
||||
#define FT_WinFNT_ID_CP1250 238
|
||||
#define FT_WinFNT_ID_OEM 255
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* FT_WinFNT_HeaderRec */
|
||||
/* FT_WinFNT_HeaderRec_ */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Windows FNT Header info. */
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* Support functions for X11. */
|
||||
/* */
|
||||
/* Copyright 2002, 2003 by */
|
||||
/* Copyright 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -22,13 +22,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/* this comment is intentionally disabled for now, to prevent this */
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* Arithmetic computations (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -27,8 +27,7 @@
|
|||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
FT_EXPORT( FT_Int32 )
|
||||
FT_SqrtFixed( FT_Int32 x );
|
||||
FT_EXPORT( FT_Int32 ) FT_SqrtFixed( FT_Int32 x );
|
||||
|
||||
|
||||
#define SQRT_32( x ) FT_Sqrt32( x )
|
||||
|
@ -60,39 +59,6 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_MulDiv_No_Round */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A very simple function used to perform the computation `(a*b)/c' */
|
||||
/* (without rounding) with maximal accuracy (it uses a 64-bit */
|
||||
/* intermediate integer whenever necessary). */
|
||||
/* */
|
||||
/* This function isn't necessarily as fast as some processor specific */
|
||||
/* operations, but is at least completely portable. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* a :: The first multiplier. */
|
||||
/* b :: The second multiplier. */
|
||||
/* c :: The divisor. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* The result of `(a*b)/c'. This function never traps when trying to */
|
||||
/* divide by zero; it simply returns `MaxInt' or `MinInt' depending */
|
||||
/* on the signs of `a' and `b'. */
|
||||
/* */
|
||||
FT_BASE( FT_Long )
|
||||
FT_MulDiv_No_Round( FT_Long a,
|
||||
FT_Long b,
|
||||
FT_Long c );
|
||||
|
||||
#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
|
||||
|
||||
|
||||
#define INT_TO_F26DOT6( x ) ( (FT_Long)(x) << 6 )
|
||||
#define INT_TO_F2DOT14( x ) ( (FT_Long)(x) << 14 )
|
||||
#define INT_TO_FIXED( x ) ( (FT_Long)(x) << 16 )
|
||||
|
|
|
@ -155,15 +155,11 @@ FT_BEGIN_HEADER
|
|||
/* add data from AFM or PFM files on a Type 1 */
|
||||
/* face, or a CIDMap on a CID-keyed face. */
|
||||
/* */
|
||||
/* get_advances :: A function handle used to return advance */
|
||||
/* widths of 'count' glyphs (in font units), */
|
||||
/* starting at `first'. The `vertical' flag must */
|
||||
/* be set to get vertical advance heights. The */
|
||||
/* `advances' buffer is caller-allocated. */
|
||||
/* Currently not implemented. The idea of this */
|
||||
/* function is to be able to perform */
|
||||
/* device-independent text layout without loading */
|
||||
/* a single glyph image. */
|
||||
/* get_advances :: A function handle used to return the advances */
|
||||
/* of 'count' glyphs, starting at `index'. the */
|
||||
/* `vertical' flags must be set when vertical */
|
||||
/* advances are queried. The advances buffer is */
|
||||
/* caller-allocated. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* Most function pointers, with the exception of `load_glyph' and */
|
||||
|
|
|
@ -110,15 +110,15 @@ FT_BEGIN_HEADER
|
|||
FT_BASE( void )
|
||||
FT_GlyphLoader_Rewind( FT_GlyphLoader loader );
|
||||
|
||||
/* check that there is enough space to add `n_points' and `n_contours' */
|
||||
/* to the glyph loader */
|
||||
/* check that there is enough room to add 'n_points' and 'n_contours' */
|
||||
/* to the glyph loader */
|
||||
FT_BASE( FT_Error )
|
||||
FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader,
|
||||
FT_UInt n_points,
|
||||
FT_UInt n_contours );
|
||||
|
||||
/* check that there is enough space to add `n_subs' sub-glyphs to */
|
||||
/* a glyph loader */
|
||||
/* check that there is enough room to add 'n_subs' sub-glyphs to */
|
||||
/* a glyph loader */
|
||||
FT_BASE( FT_Error )
|
||||
FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader,
|
||||
FT_UInt n_subs );
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* The FreeType memory management macros (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004 by */
|
||||
/* Copyright 1996-2001, 2002 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -180,12 +180,6 @@ FT_BEGIN_HEADER
|
|||
|
||||
#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
|
||||
|
||||
#define FT_ARRAY_COPY( dest, source, count ) \
|
||||
FT_MEM_COPY( dest, source, (count) * sizeof( *(dest) ) )
|
||||
|
||||
#define FT_ARRAY_MOVE( dest, source, count ) \
|
||||
FT_MEM_MOVE( dest, source, (count) * sizeof( *(dest) ) )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include FT_INTERNAL_GLYPH_LOADER_H
|
||||
#include FT_INTERNAL_DRIVER_H
|
||||
#include FT_INTERNAL_AUTOHINT_H
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
#include FT_INTERNAL_OBJECT_H
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_INCREMENTAL
|
||||
#include FT_INCREMENTAL_H
|
||||
|
@ -79,15 +79,6 @@ FT_BEGIN_HEADER
|
|||
#endif
|
||||
|
||||
|
||||
#define FT_PAD_FLOOR( x, n ) ( (x) & ~((n)-1) )
|
||||
#define FT_PAD_ROUND( x, n ) FT_PAD_FLOOR( (x) + ((n)/2), n )
|
||||
#define FT_PAD_CEIL( x, n ) FT_PAD_FLOOR( (x) + ((n)-1), n )
|
||||
|
||||
#define FT_PIX_FLOOR( x ) ( (x) & ~63 )
|
||||
#define FT_PIX_ROUND( x ) FT_PIX_FLOOR( (x) + 32 )
|
||||
#define FT_PIX_CEIL( x ) FT_PIX_FLOOR( (x) + 63 )
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
@ -280,52 +271,51 @@ FT_BEGIN_HEADER
|
|||
/* FreeType. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* max_points :: */
|
||||
/* The maximal number of points used to store the vectorial outline */
|
||||
/* of any glyph in this face. If this value cannot be known in */
|
||||
/* advance, or if the face isn't scalable, this should be set to 0. */
|
||||
/* Only relevant for scalable formats. */
|
||||
/* max_points :: The maximal number of points used to store the */
|
||||
/* vectorial outline of any glyph in this face. */
|
||||
/* If this value cannot be known in advance, or */
|
||||
/* if the face isn't scalable, this should be set */
|
||||
/* to 0. Only relevant for scalable formats. */
|
||||
/* */
|
||||
/* max_contours :: */
|
||||
/* The maximal number of contours used to store the vectorial */
|
||||
/* outline of any glyph in this face. If this value cannot be */
|
||||
/* known in advance, or if the face isn't scalable, this should be */
|
||||
/* set to 0. Only relevant for scalable formats. */
|
||||
/* max_contours :: The maximal number of contours used to store */
|
||||
/* the vectorial outline of any glyph in this */
|
||||
/* face. If this value cannot be known in */
|
||||
/* advance, or if the face isn't scalable, this */
|
||||
/* should be set to 0. Only relevant for */
|
||||
/* scalable formats. */
|
||||
/* */
|
||||
/* transform_matrix :: */
|
||||
/* A 2x2 matrix of 16.16 coefficients used to transform glyph */
|
||||
/* outlines after they are loaded from the font. Only used by the */
|
||||
/* convenience functions. */
|
||||
/* transform_matrix :: A 2x2 matrix of 16.16 coefficients used to */
|
||||
/* transform glyph outlines after they are loaded */
|
||||
/* from the font. Only used by the convenience */
|
||||
/* functions. */
|
||||
/* */
|
||||
/* transform_delta :: */
|
||||
/* A translation vector used to transform glyph outlines after they */
|
||||
/* are loaded from the font. Only used by the convenience */
|
||||
/* functions. */
|
||||
/* transform_delta :: A translation vector used to transform glyph */
|
||||
/* outlines after they are loaded from the font. */
|
||||
/* Only used by the convenience functions. */
|
||||
/* */
|
||||
/* transform_flags :: */
|
||||
/* Some flags used to classify the transform. Only used by the */
|
||||
/* convenience functions. */
|
||||
/* transform_flags :: Some flags used to classify the transform. */
|
||||
/* Only used by the convenience functions. */
|
||||
/* */
|
||||
/* services :: */
|
||||
/* A cache for frequently used services. It should be only */
|
||||
/* accessed with the macro `FT_FACE_LOOKUP_SERVICE'. */
|
||||
/* postscript_name :: Postscript font name for this face. */
|
||||
/* */
|
||||
/* incremental_interface :: */
|
||||
/* If non-null, the interface through which glyph data and metrics */
|
||||
/* are loaded incrementally for faces that do not provide all of */
|
||||
/* this data when first opened. This field exists only if */
|
||||
/* @FT_CONFIG_OPTION_INCREMENTAL is defined. */
|
||||
/* If non-null, the interface through */
|
||||
/* which glyph data and metrics are loaded */
|
||||
/* incrementally for faces that do not provide */
|
||||
/* all of this data when first opened. */
|
||||
/* This field exists only if */
|
||||
/* @FT_CONFIG_OPTION_INCREMENTAL is defined. */
|
||||
/* */
|
||||
typedef struct FT_Face_InternalRec_
|
||||
{
|
||||
FT_UShort max_points;
|
||||
FT_Short max_contours;
|
||||
FT_UShort max_points;
|
||||
FT_Short max_contours;
|
||||
|
||||
FT_Matrix transform_matrix;
|
||||
FT_Vector transform_delta;
|
||||
FT_Int transform_flags;
|
||||
FT_Matrix transform_matrix;
|
||||
FT_Vector transform_delta;
|
||||
FT_Int transform_flags;
|
||||
|
||||
FT_ServiceCacheRec services;
|
||||
const char* postscript_name;
|
||||
|
||||
#ifdef FT_CONFIG_OPTION_INCREMENTAL
|
||||
FT_Incremental_InterfaceRec* incremental_interface;
|
||||
|
@ -476,10 +466,6 @@ FT_BEGIN_HEADER
|
|||
FT_Get_Module_Interface( FT_Library library,
|
||||
const char* mod_name );
|
||||
|
||||
FT_BASE( FT_Pointer )
|
||||
ft_module_get_service( FT_Module module,
|
||||
const char* service_id );
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
|
@ -718,12 +704,6 @@ FT_BEGIN_HEADER
|
|||
/* generic :: Client data variable. Used to extend the */
|
||||
/* Library class by higher levels and clients. */
|
||||
/* */
|
||||
/* version_major :: The major version number of the library. */
|
||||
/* */
|
||||
/* version_minor :: The minor version number of the library. */
|
||||
/* */
|
||||
/* version_patch :: The current patch level of the library. */
|
||||
/* */
|
||||
/* num_modules :: The number of modules currently registered */
|
||||
/* within this library. This is set to 0 for new */
|
||||
/* libraries. New modules are added through the */
|
||||
|
@ -774,6 +754,8 @@ FT_BEGIN_HEADER
|
|||
|
||||
FT_DebugHook_Func debug_hooks[4];
|
||||
|
||||
FT_MetaClassRec meta_class;
|
||||
|
||||
} FT_LibraryRec;
|
||||
|
||||
|
||||
|
|
|
@ -1,260 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* ftserv.h */
|
||||
/* */
|
||||
/* The FreeType services (specification only). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* Each module can export one or more `services'. Each service is */
|
||||
/* identified by a constant string and modeled by a pointer; the latter */
|
||||
/* generally corresponds to a structure containing function pointers. */
|
||||
/* */
|
||||
/* Note that a service's data cannot be a mere function pointer because */
|
||||
/* in C it is possible that function pointers might be implemented */
|
||||
/* differently than data pointers (e.g. 48 bits instead of 32). */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
#ifndef __FTSERV_H__
|
||||
#define __FTSERV_H__
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* @macro:
|
||||
* FT_FACE_FIND_SERVICE
|
||||
*
|
||||
* @description:
|
||||
* This macro is used to look up a service from a face's driver module.
|
||||
*
|
||||
* @input:
|
||||
* face ::
|
||||
* The source face handle.
|
||||
*
|
||||
* id ::
|
||||
* A string describing the service as defined in the service's
|
||||
* header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
|
||||
* `multi-masters'). It is automatically prefixed with
|
||||
* `FT_SERVICE_ID_'.
|
||||
*
|
||||
* @output:
|
||||
* ptr ::
|
||||
* A variable that receives the service pointer. Will be NULL
|
||||
* if not found.
|
||||
*/
|
||||
#define FT_FACE_FIND_SERVICE( face, ptr, id ) \
|
||||
FT_BEGIN_STMNT \
|
||||
FT_Module module = FT_MODULE( FT_FACE(face)->driver ); \
|
||||
/* the strange cast is to allow C++ compilation */ \
|
||||
FT_Pointer* Pptr = (FT_Pointer*) &(ptr); \
|
||||
\
|
||||
\
|
||||
*Pptr = NULL; \
|
||||
if ( module->clazz->get_interface ) \
|
||||
*Pptr = module->clazz->get_interface( module, FT_SERVICE_ID_ ## id ); \
|
||||
FT_END_STMNT
|
||||
|
||||
|
||||
/*
|
||||
* @macro:
|
||||
* FT_FACE_FIND_GLOBAL_SERVICE
|
||||
*
|
||||
* @description:
|
||||
* This macro is used to look up a service from all modules.
|
||||
*
|
||||
* @input:
|
||||
* face ::
|
||||
* The source face handle.
|
||||
*
|
||||
* id ::
|
||||
* A string describing the service as defined in the service's
|
||||
* header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
|
||||
* `multi-masters'). It is automatically prefixed with
|
||||
* `FT_SERVICE_ID_'.
|
||||
*
|
||||
* @output:
|
||||
* ptr ::
|
||||
* A variable that receives the service pointer. Will be NULL
|
||||
* if not found.
|
||||
*/
|
||||
#define FT_FACE_FIND_GLOBAL_SERVICE( face, ptr, id ) \
|
||||
FT_BEGIN_STMNT \
|
||||
FT_Module module = FT_MODULE( FT_FACE(face)->driver ); \
|
||||
/* the strange cast is to allow C++ compilation */ \
|
||||
FT_Pointer* Pptr = (FT_Pointer*) &(ptr); \
|
||||
\
|
||||
\
|
||||
*Pptr = ft_module_get_service( module, FT_SERVICE_ID_ ## id ); \
|
||||
FT_END_STMNT
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** S E R V I C E D E S C R I P T O R S *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* The following structure is used to _describe_ a given service
|
||||
* to the library. This is useful to build simple static service lists.
|
||||
*/
|
||||
typedef struct FT_ServiceDescRec_
|
||||
{
|
||||
const char* serv_id; /* service name */
|
||||
const void* serv_data; /* service pointer/data */
|
||||
|
||||
} FT_ServiceDescRec;
|
||||
|
||||
typedef const FT_ServiceDescRec* FT_ServiceDesc;
|
||||
|
||||
|
||||
/*
|
||||
* Parse a list of FT_ServiceDescRec descriptors and look for
|
||||
* a specific service by ID. Note that the last element in the
|
||||
* array must be { NULL, NULL }, and that the function should
|
||||
* return NULL if the service isn't available.
|
||||
*
|
||||
* This function can be used by modules to implement their
|
||||
* `get_service' method.
|
||||
*/
|
||||
FT_BASE( FT_Pointer )
|
||||
ft_service_list_lookup( FT_ServiceDesc service_descriptors,
|
||||
const char* service_id );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/***** *****/
|
||||
/***** S E R V I C E S C A C H E *****/
|
||||
/***** *****/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
/*
|
||||
* This structure is used to store a cache for several frequently used
|
||||
* services. It is the type of `face->internal->services'. You
|
||||
* should only use FT_FACE_LOOKUP_SERVICE to access it.
|
||||
*
|
||||
* All fields should have the type FT_Pointer to relax compilation
|
||||
* dependencies. We assume the developer isn't completely stupid.
|
||||
*
|
||||
* Each field must be named `service_XXXX' where `XXX' corresponds to
|
||||
* the correct FT_SERVICE_ID_XXXX macro. See the definition of
|
||||
* FT_FACE_LOOKUP_SERVICE below how this is implemented.
|
||||
*
|
||||
*/
|
||||
typedef struct FT_ServiceCacheRec_
|
||||
{
|
||||
FT_Pointer service_POSTSCRIPT_FONT_NAME;
|
||||
FT_Pointer service_MULTI_MASTERS;
|
||||
FT_Pointer service_GLYPH_DICT;
|
||||
FT_Pointer service_PFR_METRICS;
|
||||
FT_Pointer service_WINFNT;
|
||||
|
||||
} FT_ServiceCacheRec, *FT_ServiceCache;
|
||||
|
||||
|
||||
/*
|
||||
* A magic number used within the services cache.
|
||||
*/
|
||||
#define FT_SERVICE_UNAVAILABLE ((FT_Pointer)-2) /* magic number */
|
||||
|
||||
|
||||
/*
|
||||
* @macro:
|
||||
* FT_FACE_LOOKUP_SERVICE
|
||||
*
|
||||
* @description:
|
||||
* This macro is used to lookup a service from a face's driver module
|
||||
* using its cache.
|
||||
*
|
||||
* @input:
|
||||
* face::
|
||||
* The source face handle containing the cache.
|
||||
*
|
||||
* field ::
|
||||
* The field name in the cache.
|
||||
*
|
||||
* id ::
|
||||
* The service ID.
|
||||
*
|
||||
* @output:
|
||||
* ptr ::
|
||||
* A variable receiving the service data. NULL if not available.
|
||||
*/
|
||||
#define FT_FACE_LOOKUP_SERVICE( face, ptr, id ) \
|
||||
FT_BEGIN_STMNT \
|
||||
/* the strange cast is to allow C++ compilation */ \
|
||||
FT_Pointer* pptr = (FT_Pointer*)&(ptr); \
|
||||
FT_Pointer svc; \
|
||||
\
|
||||
\
|
||||
svc = FT_FACE(face)->internal->services. service_ ## id ; \
|
||||
if ( svc == FT_SERVICE_UNAVAILABLE ) \
|
||||
svc = NULL; \
|
||||
else if ( svc == NULL ) \
|
||||
{ \
|
||||
FT_FACE_FIND_SERVICE( face, svc, id ); \
|
||||
\
|
||||
FT_FACE(face)->internal->services. service_ ## id = \
|
||||
(FT_Pointer)( svc != NULL ? svc \
|
||||
: FT_SERVICE_UNAVAILABLE ); \
|
||||
} \
|
||||
*pptr = svc; \
|
||||
FT_END_STMNT
|
||||
|
||||
|
||||
/*
|
||||
* A macro used to define new service structure types.
|
||||
*/
|
||||
|
||||
#define FT_DEFINE_SERVICE( name ) \
|
||||
typedef struct FT_Service_ ## name ## Rec_ \
|
||||
FT_Service_ ## name ## Rec ; \
|
||||
typedef struct FT_Service_ ## name ## Rec_ \
|
||||
const * FT_Service_ ## name ; \
|
||||
struct FT_Service_ ## name ## Rec_
|
||||
|
||||
/* */
|
||||
|
||||
/*
|
||||
* The header files containing the services.
|
||||
*/
|
||||
|
||||
#define FT_SERVICE_MULTIPLE_MASTERS_H <freetype/internal/services/svmm.h>
|
||||
#define FT_SERVICE_POSTSCRIPT_NAME_H <freetype/internal/services/svpostnm.h>
|
||||
#define FT_SERVICE_POSTSCRIPT_CMAPS_H <freetype/internal/services/svpscmap.h>
|
||||
#define FT_SERVICE_POSTSCRIPT_INFO_H <freetype/internal/services/svpsinfo.h>
|
||||
#define FT_SERVICE_GLYPH_DICT_H <freetype/internal/services/svgldict.h>
|
||||
#define FT_SERVICE_BDF_H <freetype/internal/services/svbdf.h>
|
||||
#define FT_SERVICE_XFREE86_NAME_H <freetype/internal/services/svxf86nm.h>
|
||||
#define FT_SERVICE_SFNT_H <freetype/internal/services/svsfnt.h>
|
||||
#define FT_SERVICE_PFR_H <freetype/internal/services/svpfr.h>
|
||||
#define FT_SERVICE_WINFNT_H <freetype/internal/services/svwinfnt.h>
|
||||
#define FT_SERVICE_TT_CMAP_H <freetype/internal/services/svttcmap.h>
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __FTSERV_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -27,17 +27,26 @@
|
|||
#define FT_INTERNAL_OBJECTS_H <freetype/internal/ftobjs.h>
|
||||
#define FT_INTERNAL_STREAM_H <freetype/internal/ftstream.h>
|
||||
#define FT_INTERNAL_MEMORY_H <freetype/internal/ftmemory.h>
|
||||
#define FT_INTERNAL_EXTENSION_H <freetype/internal/ftextend.h>
|
||||
#define FT_INTERNAL_DEBUG_H <freetype/internal/ftdebug.h>
|
||||
#define FT_INTERNAL_CALC_H <freetype/internal/ftcalc.h>
|
||||
#define FT_INTERNAL_DRIVER_H <freetype/internal/ftdriver.h>
|
||||
#define FT_INTERNAL_EXTEND_H <freetype/internal/ftextend.h>
|
||||
#define FT_INTERNAL_TRACE_H <freetype/internal/fttrace.h>
|
||||
#define FT_INTERNAL_GLYPH_LOADER_H <freetype/internal/ftgloadr.h>
|
||||
#define FT_INTERNAL_SFNT_H <freetype/internal/sfnt.h>
|
||||
#define FT_INTERNAL_SERVICE_H <freetype/internal/ftserv.h>
|
||||
#define FT_INTERNAL_HASH_H <freetype/internal/fthash.h>
|
||||
#define FT_INTERNAL_OBJECT_H <freetype/internal/ftobject.h>
|
||||
|
||||
#define FT_INTERNAL_TRUETYPE_TYPES_H <freetype/internal/tttypes.h>
|
||||
#define FT_INTERNAL_TYPE1_TYPES_H <freetype/internal/t1types.h>
|
||||
#define FT_INTERNAL_TYPE42_TYPES_H <freetype/internal/t42types.h>
|
||||
#define FT_INTERNAL_CFF_TYPES_H <freetype/internal/cfftypes.h>
|
||||
#define FT_INTERNAL_FNT_TYPES_H <freetype/internal/fnttypes.h>
|
||||
#define FT_INTERNAL_BDF_TYPES_H <freetype/internal/bdftypes.h>
|
||||
#define FT_INTERNAL_PFR_H <freetype/internal/pfr.h>
|
||||
|
||||
#define FT_INTERNAL_POSTSCRIPT_NAMES_H <freetype/internal/psnames.h>
|
||||
#define FT_INTERNAL_POSTSCRIPT_AUX_H <freetype/internal/psaux.h>
|
||||
#define FT_INTERNAL_POSTSCRIPT_HINTS_H <freetype/internal/pshints.h>
|
||||
#define FT_INTERNAL_POSTSCRIPT_GLOBALS_H <freetype/internal/psglobal.h>
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_INTERNAL_OBJECTS_H
|
||||
#include FT_INTERNAL_TYPE1_TYPES_H
|
||||
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
@ -124,7 +123,7 @@ FT_BEGIN_HEADER
|
|||
FT_Int max_elems;
|
||||
FT_Int num_elems;
|
||||
FT_Byte** elements; /* addresses of table elements */
|
||||
FT_PtrDist* lengths; /* lengths of table elements */
|
||||
FT_Int* lengths; /* lengths of table elements */
|
||||
|
||||
FT_Memory memory;
|
||||
PS_Table_FuncsRec funcs;
|
||||
|
@ -330,20 +329,18 @@ FT_BEGIN_HEADER
|
|||
void
|
||||
(*skip_spaces)( PS_Parser parser );
|
||||
void
|
||||
(*skip_PS_token)( PS_Parser parser );
|
||||
(*skip_alpha)( PS_Parser parser );
|
||||
|
||||
FT_Long
|
||||
(*to_int)( PS_Parser parser );
|
||||
FT_Fixed
|
||||
(*to_fixed)( PS_Parser parser,
|
||||
FT_Int power_ten );
|
||||
|
||||
FT_Error
|
||||
(*to_bytes)( PS_Parser parser,
|
||||
FT_Byte* bytes,
|
||||
FT_Long max_bytes,
|
||||
FT_Long* pnum_bytes,
|
||||
FT_Bool delimiters );
|
||||
FT_Int max_bytes,
|
||||
FT_Int* pnum_bytes );
|
||||
|
||||
FT_Int
|
||||
(*to_coord_array)( PS_Parser parser,
|
||||
|
@ -651,14 +648,14 @@ FT_BEGIN_HEADER
|
|||
T1_Decoder_ZoneRec zones[T1_MAX_SUBRS_CALLS + 1];
|
||||
T1_Decoder_Zone zone;
|
||||
|
||||
FT_Service_PsCMaps psnames; /* for seac */
|
||||
PSNames_Service psnames; /* for seac */
|
||||
FT_UInt num_glyphs;
|
||||
FT_Byte** glyph_names;
|
||||
|
||||
FT_Int lenIV; /* internal for sub routine calls */
|
||||
FT_UInt num_subrs;
|
||||
FT_Byte** subrs;
|
||||
FT_PtrDist* subrs_len; /* array of subrs length (optional) */
|
||||
FT_Int* subrs_len; /* array of subrs length (optional) */
|
||||
|
||||
FT_Matrix font_matrix;
|
||||
FT_Vector font_offset;
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svbdf.h */
|
||||
/* */
|
||||
/* The FreeType BDF services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVBDF_H__
|
||||
#define __SVBDF_H__
|
||||
|
||||
#include FT_BDF_H
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_BDF "bdf"
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_BDF_GetCharsetIdFunc)( FT_Face face,
|
||||
const char* *acharset_encoding,
|
||||
const char* *acharset_registry );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_BDF_GetPropertyFunc)( FT_Face face,
|
||||
const char* prop_name,
|
||||
BDF_PropertyRec *aproperty );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( BDF )
|
||||
{
|
||||
FT_BDF_GetCharsetIdFunc get_charset_id;
|
||||
FT_BDF_GetPropertyFunc get_property;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVBDF_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,60 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svgldict.h */
|
||||
/* */
|
||||
/* The FreeType glyph dictionary services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVGLDICT_H__
|
||||
#define __SVGLDICT_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* A service used to retrieve glyph names, as well as to find the
|
||||
* index of a given glyph name in a font.
|
||||
*
|
||||
*/
|
||||
|
||||
#define FT_SERVICE_ID_GLYPH_DICT "glyph-dict"
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_GlyphDict_GetNameFunc)( FT_Face face,
|
||||
FT_UInt glyph_index,
|
||||
FT_Pointer buffer,
|
||||
FT_UInt buffer_max );
|
||||
|
||||
typedef FT_UInt
|
||||
(*FT_GlyphDict_NameIndexFunc)( FT_Face face,
|
||||
FT_String* glyph_name );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( GlyphDict )
|
||||
{
|
||||
FT_GlyphDict_GetNameFunc get_name;
|
||||
FT_GlyphDict_NameIndexFunc name_index; /* optional */
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVGLDICT_H__ */
|
|
@ -1,68 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svmm.h */
|
||||
/* */
|
||||
/* The FreeType Multiple Masters services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVMM_H__
|
||||
#define __SVMM_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* A service used to manage multiple-masters data in a given face.
|
||||
*
|
||||
* See the related APIs in `ftmm.h' (FT_MULTIPLE_MASTERS_H).
|
||||
*
|
||||
*/
|
||||
|
||||
#define FT_SERVICE_ID_MULTI_MASTERS "multi-masters"
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Get_MM_Func)( FT_Face face,
|
||||
FT_Multi_Master* master );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_MM_Design_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Long* coords );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_Set_MM_Blend_Func)( FT_Face face,
|
||||
FT_UInt num_coords,
|
||||
FT_Long* coords );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( MultiMasters )
|
||||
{
|
||||
FT_Get_MM_Func get_mm;
|
||||
FT_Set_MM_Design_Func set_mm_design;
|
||||
FT_Set_MM_Blend_Func set_mm_blend;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __SVMM_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,65 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svpfr.h */
|
||||
/* */
|
||||
/* Internal PFR service functions (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVPFR_H__
|
||||
#define __SVPFR_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_PFR_METRICS "pfr-metrics"
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_PFR_GetMetricsFunc)( FT_Face face,
|
||||
FT_UInt *aoutline,
|
||||
FT_UInt *ametrics,
|
||||
FT_Fixed *ax_scale,
|
||||
FT_Fixed *ay_scale );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_PFR_GetKerningFunc)( FT_Face face,
|
||||
FT_UInt left,
|
||||
FT_UInt right,
|
||||
FT_Vector *avector );
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_PFR_GetAdvanceFunc)( FT_Face face,
|
||||
FT_UInt gindex,
|
||||
FT_Pos *aadvance );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( PfrMetrics )
|
||||
{
|
||||
FT_PFR_GetMetricsFunc get_metrics;
|
||||
FT_PFR_GetKerningFunc get_kerning;
|
||||
FT_PFR_GetAdvanceFunc get_advance;
|
||||
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __SVPFR_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,58 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svpostnm.h */
|
||||
/* */
|
||||
/* The FreeType PostScript name services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVPOSTNM_H__
|
||||
#define __SVPOSTNM_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*
|
||||
* A trivial service used to retrieve the PostScript name of a given
|
||||
* font when available. The `get_name' field should never be NULL.
|
||||
*
|
||||
* The correponding function can return NULL to indicate that the
|
||||
* PostScript name is not available.
|
||||
*
|
||||
* The name is owned by the face and will be destroyed with it.
|
||||
*/
|
||||
|
||||
#define FT_SERVICE_ID_POSTSCRIPT_FONT_NAME "postscript-font-name"
|
||||
|
||||
|
||||
typedef const char*
|
||||
(*FT_PsName_GetFunc)( FT_Face face );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( PsFontName )
|
||||
{
|
||||
FT_PsName_GetFunc get_ps_font_name;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVPOSTNM_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,113 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svpscmap.h */
|
||||
/* */
|
||||
/* The FreeType PostScript charmap service (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVPSCMAP_H__
|
||||
#define __SVPSCMAP_H__
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_POSTSCRIPT_CMAPS "postscript-cmaps"
|
||||
|
||||
|
||||
/*
|
||||
* Adobe glyph name to unicode value
|
||||
*/
|
||||
typedef FT_UInt32
|
||||
(*PS_Unicode_ValueFunc)( const char* glyph_name );
|
||||
|
||||
/*
|
||||
* Unicode value to Adobe glyph name index. 0xFFFF if not found.
|
||||
*/
|
||||
typedef FT_UInt
|
||||
(*PS_Unicode_Index_Func)( FT_UInt num_glyphs,
|
||||
const char** glyph_names,
|
||||
FT_ULong unicode );
|
||||
|
||||
/*
|
||||
* Macintosh name id to glyph name. NULL if invalid index.
|
||||
*/
|
||||
typedef const char*
|
||||
(*PS_Macintosh_Name_Func)( FT_UInt name_index );
|
||||
|
||||
/*
|
||||
* Adobe standard string ID to glyph name. NULL if invalid index.
|
||||
*/
|
||||
typedef const char*
|
||||
(*PS_Adobe_Std_Strings_Func)( FT_UInt string_index );
|
||||
|
||||
/*
|
||||
* Simple unicode -> glyph index charmap built from font glyph names
|
||||
* table.
|
||||
*/
|
||||
typedef struct PS_UniMap_
|
||||
{
|
||||
FT_UInt unicode;
|
||||
FT_UInt glyph_index;
|
||||
|
||||
} PS_UniMap;
|
||||
|
||||
|
||||
typedef struct PS_Unicodes_
|
||||
{
|
||||
FT_UInt num_maps;
|
||||
PS_UniMap* maps;
|
||||
|
||||
} PS_Unicodes;
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*PS_Unicodes_InitFunc)( FT_Memory memory,
|
||||
FT_UInt num_glyphs,
|
||||
const char** glyph_names,
|
||||
PS_Unicodes* unicodes );
|
||||
|
||||
typedef FT_UInt
|
||||
(*PS_Unicodes_CharIndexFunc)( PS_Unicodes* unicodes,
|
||||
FT_UInt unicode );
|
||||
|
||||
typedef FT_ULong
|
||||
(*PS_Unicodes_CharNextFunc)( PS_Unicodes* unicodes,
|
||||
FT_ULong unicode );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( PsCMaps )
|
||||
{
|
||||
PS_Unicode_ValueFunc unicode_value;
|
||||
|
||||
PS_Unicodes_InitFunc unicodes_init;
|
||||
PS_Unicodes_CharIndexFunc unicodes_char_index;
|
||||
PS_Unicodes_CharNextFunc unicodes_char_next;
|
||||
|
||||
PS_Macintosh_Name_Func macintosh_name;
|
||||
PS_Adobe_Std_Strings_Func adobe_std_strings;
|
||||
const unsigned short* adobe_std_encoding;
|
||||
const unsigned short* adobe_expert_encoding;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVPSCMAP_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,55 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svpsinfo.h */
|
||||
/* */
|
||||
/* The FreeType PostScript info service (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVPSINFO_H__
|
||||
#define __SVPSINFO_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
#include FT_INTERNAL_TYPE1_TYPES_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_POSTSCRIPT_INFO "postscript-info"
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*PS_GetFontInfoFunc)( FT_Face face,
|
||||
PS_FontInfoRec* afont_info );
|
||||
|
||||
typedef FT_Int
|
||||
(*PS_HasGlyphNamesFunc)( FT_Face face );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( PsInfo )
|
||||
{
|
||||
PS_GetFontInfoFunc ps_get_font_info;
|
||||
PS_HasGlyphNamesFunc ps_has_glyph_names;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVPSINFO_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,69 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svsfnt.h */
|
||||
/* */
|
||||
/* The FreeType PostScript name services (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVSFNT_H__
|
||||
#define __SVSFNT_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
#include FT_TRUETYPE_TABLES_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* SFNT table loading service.
|
||||
*/
|
||||
|
||||
#define FT_SERVICE_ID_SFNT_TABLE "sfnt-table"
|
||||
|
||||
|
||||
/*
|
||||
* Used to implement FT_Load_Sfnt_Table().
|
||||
*/
|
||||
typedef FT_Error
|
||||
(*FT_SFNT_TableLoadFunc)( FT_Face face,
|
||||
FT_ULong tag,
|
||||
FT_Long offset,
|
||||
FT_Byte* buffer,
|
||||
FT_ULong* length );
|
||||
|
||||
/*
|
||||
* Used to implement FT_Get_Sfnt_Table().
|
||||
*/
|
||||
typedef void*
|
||||
(*FT_SFNT_TableGetFunc)( FT_Face face,
|
||||
FT_Sfnt_Tag tag );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( SFNT_Table )
|
||||
{
|
||||
FT_SFNT_TableLoadFunc load_table;
|
||||
FT_SFNT_TableGetFunc get_table;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVSFNT_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,77 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svsttcmap.h */
|
||||
/* */
|
||||
/* The FreeType TrueType/sfnt cmap extra information service. */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* Masatake YAMATO, Redhat K.K. */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
/* Development of this service is support of
|
||||
Information-technology Promotion Agency, Japan. */
|
||||
|
||||
#ifndef __SVTTCMAP_H__
|
||||
#define __SVTTCMAP_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
#include FT_TRUETYPE_TABLES_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_TT_CMAP "tt-cmaps"
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_CMapInfo */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A structure used to store TrueType/sfnt specific cmap information */
|
||||
/* which is not covered by the generic @FT_CharMap structure. This */
|
||||
/* structure can be accessed with the @FT_Get_TT_CMap_Info function. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* language :: */
|
||||
/* The language ID used in Mac fonts. Definitions of values are in */
|
||||
/* freetype/ttnameid.h. */
|
||||
/* */
|
||||
typedef struct TT_CMapInfo_
|
||||
{
|
||||
FT_ULong language;
|
||||
|
||||
} TT_CMapInfo;
|
||||
|
||||
|
||||
typedef FT_Error
|
||||
(*TT_CMap_Info_GetFunc)( FT_CharMap charmap,
|
||||
TT_CMapInfo *cmap_info );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( TTCMaps )
|
||||
{
|
||||
TT_CMap_Info_GetFunc get_cmap_info;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __SVTTCMAP_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,50 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svwinfnt.h */
|
||||
/* */
|
||||
/* The FreeType Windows FNT/FONT service (specification). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVWINFNT_H__
|
||||
#define __SVWINFNT_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
#include FT_WINFONTS_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
#define FT_SERVICE_ID_WINFNT "winfonts"
|
||||
|
||||
typedef FT_Error
|
||||
(*FT_WinFnt_GetHeaderFunc)( FT_Face face,
|
||||
FT_WinFNT_HeaderRec *aheader );
|
||||
|
||||
|
||||
FT_DEFINE_SERVICE( WinFnt )
|
||||
{
|
||||
FT_WinFnt_GetHeaderFunc get_header;
|
||||
};
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVWINFNT_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -1,55 +0,0 @@
|
|||
/***************************************************************************/
|
||||
/* */
|
||||
/* svxf86nm.h */
|
||||
/* */
|
||||
/* The FreeType XFree86 services (specification only). */
|
||||
/* */
|
||||
/* Copyright 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
/* modified, and distributed under the terms of the FreeType project */
|
||||
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||
/* this file you indicate that you have read the license and */
|
||||
/* understand and accept it fully. */
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
|
||||
#ifndef __SVXF86NM_H__
|
||||
#define __SVXF86NM_H__
|
||||
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
||||
/*
|
||||
* A trivial service used to return the name of a face's font driver,
|
||||
* according to the XFree86 nomenclature. Note that the service data
|
||||
* is a simple constant string pointer.
|
||||
*/
|
||||
|
||||
#define FT_SERVICE_ID_XF86_NAME "xf86-driver-name"
|
||||
|
||||
#define FT_XF86_FORMAT_TRUETYPE "TrueType"
|
||||
#define FT_XF86_FORMAT_TYPE_1 "Type 1"
|
||||
#define FT_XF86_FORMAT_BDF "BDF"
|
||||
#define FT_XF86_FORMAT_PCF "PCF"
|
||||
#define FT_XF86_FORMAT_TYPE_42 "Type 42"
|
||||
#define FT_XF86_FORMAT_CID "CID Type 1"
|
||||
#define FT_XF86_FORMAT_CFF "CFF"
|
||||
#define FT_XF86_FORMAT_PFR "PFR"
|
||||
#define FT_XF86_FORMAT_WINFNT "Windows FNT"
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
|
||||
#endif /* __SVXF86NM_H__ */
|
||||
|
||||
|
||||
/* END */
|
|
@ -125,6 +125,11 @@ FT_BEGIN_HEADER
|
|||
(*TT_Done_Face_Func)( TT_Face face );
|
||||
|
||||
|
||||
typedef FT_Module_Interface
|
||||
(*SFNT_Get_Interface_Func)( FT_Module module,
|
||||
const char* func_interface );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
|
@ -250,27 +255,20 @@ FT_BEGIN_HEADER
|
|||
/* returns its metrics. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: */
|
||||
/* The target face object. */
|
||||
/* face :: The target face object. */
|
||||
/* */
|
||||
/* strike_index :: */
|
||||
/* The strike index. */
|
||||
/* x_ppem :: The horizontal resolution in points per EM. */
|
||||
/* */
|
||||
/* glyph_index :: */
|
||||
/* The current glyph index. */
|
||||
/* y_ppem :: The vertical resolution in points per EM. */
|
||||
/* */
|
||||
/* load_flags :: */
|
||||
/* The current load flags. */
|
||||
/* glyph_index :: The current glyph index. */
|
||||
/* */
|
||||
/* stream :: */
|
||||
/* The input stream. */
|
||||
/* stream :: The input stream. */
|
||||
/* */
|
||||
/* <Output> */
|
||||
/* amap :: */
|
||||
/* The target pixmap. */
|
||||
/* amap :: The target pixmap. */
|
||||
/* */
|
||||
/* ametrics :: */
|
||||
/* A big sbit metrics structure for the glyph image. */
|
||||
/* ametrics :: A big sbit metrics structure for the glyph image. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. Returns an error if no */
|
||||
|
@ -314,8 +312,8 @@ FT_BEGIN_HEADER
|
|||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_Set_SBit_Strike_Func)( TT_Face face,
|
||||
FT_UInt x_ppem,
|
||||
FT_UInt y_ppem,
|
||||
FT_Int x_ppem,
|
||||
FT_Int y_ppem,
|
||||
FT_ULong *astrike_index );
|
||||
|
||||
|
||||
|
@ -368,6 +366,57 @@ FT_BEGIN_HEADER
|
|||
FT_Bool vertical );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_CharMap_Load_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Loads a given TrueType character map into memory. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the parent face object. */
|
||||
/* */
|
||||
/* stream :: A handle to the current stream object. */
|
||||
/* */
|
||||
/* <InOut> */
|
||||
/* cmap :: A pointer to a cmap object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* The function assumes that the stream is already in use (i.e., */
|
||||
/* opened). In case of error, all partially allocated tables are */
|
||||
/* released. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_CharMap_Load_Func)( TT_Face face,
|
||||
TT_CMapTable cmap,
|
||||
FT_Stream input );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* TT_CharMap_Free_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Destroys a character mapping table. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* face :: A handle to the parent face object. */
|
||||
/* */
|
||||
/* cmap :: A handle to a cmap object. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* FreeType error code. 0 means success. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*TT_CharMap_Free_Func)( TT_Face face,
|
||||
TT_CMapTable cmap );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
|
@ -408,6 +457,22 @@ FT_BEGIN_HEADER
|
|||
(*TT_Free_Table_Func)( TT_Face face );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <FuncType> */
|
||||
/* SFNT_Load_Table_Func */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Loads a given SFNT table into memory. */
|
||||
/* */
|
||||
typedef FT_Error
|
||||
(*SFNT_Load_Table_Func)( FT_Face face,
|
||||
FT_ULong tag,
|
||||
FT_Long offset,
|
||||
FT_Byte* buffer,
|
||||
FT_ULong* length );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
|
@ -427,7 +492,7 @@ FT_BEGIN_HEADER
|
|||
TT_Init_Face_Func init_face;
|
||||
TT_Load_Face_Func load_face;
|
||||
TT_Done_Face_Func done_face;
|
||||
FT_Module_Requester get_interface;
|
||||
SFNT_Get_Interface_Func get_interface;
|
||||
|
||||
TT_Load_Any_Func load_any;
|
||||
TT_Load_SFNT_HeaderRec_Func load_sfnt_header;
|
||||
|
@ -466,6 +531,10 @@ FT_BEGIN_HEADER
|
|||
TT_Get_PS_Name_Func get_psname;
|
||||
TT_Free_Table_Func free_psnames;
|
||||
|
||||
/* see `ttcmap.h' */
|
||||
TT_CharMap_Load_Func load_charmap;
|
||||
TT_CharMap_Free_Func free_charmap;
|
||||
|
||||
} SFNT_Interface;
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/* Basic Type1/Type2 type definitions and interface (specification */
|
||||
/* only). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2003, 2004 by */
|
||||
/* Copyright 1996-2001, 2002, 2003 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -23,9 +23,8 @@
|
|||
|
||||
#include <ft2build.h>
|
||||
#include FT_TYPE1_TABLES_H
|
||||
#include FT_INTERNAL_POSTSCRIPT_NAMES_H
|
||||
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
|
||||
#include FT_INTERNAL_SERVICE_H
|
||||
#include FT_SERVICE_POSTSCRIPT_CMAPS_H
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
@ -102,21 +101,21 @@ FT_BEGIN_HEADER
|
|||
|
||||
FT_Int num_subrs;
|
||||
FT_Byte** subrs;
|
||||
FT_PtrDist* subrs_len;
|
||||
FT_Int* subrs_len;
|
||||
|
||||
FT_Int num_glyphs;
|
||||
FT_String** glyph_names; /* array of glyph names */
|
||||
FT_Byte** charstrings; /* array of glyph charstrings */
|
||||
FT_PtrDist* charstrings_len;
|
||||
FT_Int* charstrings_len;
|
||||
|
||||
FT_Byte paint_type;
|
||||
FT_Byte* paint_type;
|
||||
FT_Byte font_type;
|
||||
FT_Matrix font_matrix;
|
||||
FT_Vector font_offset;
|
||||
FT_BBox font_bbox;
|
||||
FT_Long font_id;
|
||||
|
||||
FT_Fixed stroke_width;
|
||||
FT_Fixed* stroke_width;
|
||||
|
||||
} T1_FontRec, *T1_Font;
|
||||
|
||||
|
@ -142,6 +141,17 @@ FT_BEGIN_HEADER
|
|||
/*************************************************************************/
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* This structure/class is defined here because it is common to the */
|
||||
/* following formats: TTF, OpenType-TT, and OpenType-CFF. */
|
||||
/* */
|
||||
/* Note, however, that the classes TT_Size, TT_GlyphSlot, and TT_CharMap */
|
||||
/* are not shared between font drivers, and are thus defined normally in */
|
||||
/* `ttobjs.h'. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
typedef struct T1_FaceRec_* T1_Face;
|
||||
typedef struct CID_FaceRec_* CID_Face;
|
||||
|
||||
|
@ -159,7 +169,7 @@ FT_BEGIN_HEADER
|
|||
|
||||
/* support for Multiple Masters fonts */
|
||||
PS_Blend blend;
|
||||
|
||||
|
||||
/* since FT 2.1 - interface to PostScript hinter */
|
||||
const void* pshinter;
|
||||
|
||||
|
@ -173,10 +183,8 @@ FT_BEGIN_HEADER
|
|||
void* psaux;
|
||||
CID_FaceInfoRec cid;
|
||||
void* afm_data;
|
||||
FT_Byte* binary_data; /* used if hex data has been converted */
|
||||
FT_Stream cid_stream;
|
||||
CID_Subrs subrs;
|
||||
|
||||
|
||||
/* since FT 2.1 - interface to PostScript hinter */
|
||||
void* pshinter;
|
||||
|
||||
|
|
|
@ -105,6 +105,41 @@ FT_BEGIN_HEADER
|
|||
} SFNT_HeaderRec, *SFNT_Header;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_TableDirRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This structure models a TrueType table directory. It is used to */
|
||||
/* access the various tables of the font face. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* version :: The version number; starts with 0x00010000. */
|
||||
/* */
|
||||
/* numTables :: The number of tables. */
|
||||
/* */
|
||||
/* searchRange :: Unused. */
|
||||
/* */
|
||||
/* entrySelector :: Unused. */
|
||||
/* */
|
||||
/* rangeShift :: Unused. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* This structure is only used during font opening. */
|
||||
/* */
|
||||
typedef struct TT_TableDirRec_
|
||||
{
|
||||
FT_Fixed version; /* should be 0x10000 */
|
||||
FT_UShort numTables; /* number of tables */
|
||||
|
||||
FT_UShort searchRange; /* These parameters are only used */
|
||||
FT_UShort entrySelector; /* for a dichotomy search in the */
|
||||
FT_UShort rangeShift; /* directory. We ignore them. */
|
||||
|
||||
} TT_TableDirRec;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
|
@ -133,6 +168,61 @@ FT_BEGIN_HEADER
|
|||
} TT_TableRec, *TT_Table;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_CMapDirRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This structure describes the directory of the `cmap' table, */
|
||||
/* containing the font's character mappings table. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* tableVersionNumber :: The version number. */
|
||||
/* */
|
||||
/* numCMaps :: The number of charmaps in the font. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* This structure is only used during font loading. */
|
||||
/* */
|
||||
typedef struct TT_CMapDirRec_
|
||||
{
|
||||
FT_UShort tableVersionNumber;
|
||||
FT_UShort numCMaps;
|
||||
|
||||
} TT_CMapDirRec, *TT_CMapDir;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_CMapDirEntryRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* This structure describes a charmap in a TrueType font. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* platformID :: An ID used to specify for which platform this */
|
||||
/* charmap is defined (FreeType manages all platforms). */
|
||||
/* */
|
||||
/* encodingID :: A platform-specific ID used to indicate which source */
|
||||
/* encoding is used in this charmap. */
|
||||
/* */
|
||||
/* offset :: The offset of the charmap relative to the start of */
|
||||
/* the `cmap' table. */
|
||||
/* */
|
||||
/* <Note> */
|
||||
/* This structure is only used during font loading. */
|
||||
/* */
|
||||
typedef struct TT_CMapDirEntryRec_
|
||||
{
|
||||
FT_UShort platformID;
|
||||
FT_UShort platformEncodingID;
|
||||
FT_Long offset;
|
||||
|
||||
} TT_CMapDirEntryRec, *TT_CMapDirEntry;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
|
@ -818,6 +908,201 @@ FT_BEGIN_HEADER
|
|||
} TT_Post_NamesRec, *TT_Post_Names;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*** ***/
|
||||
/*** ***/
|
||||
/*** TRUETYPE CHARMAPS SUPPORT ***/
|
||||
/*** ***/
|
||||
/*** ***/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
||||
|
||||
/* format 0 */
|
||||
|
||||
typedef struct TT_CMap0_
|
||||
{
|
||||
FT_ULong language; /* for Mac fonts (originally ushort) */
|
||||
|
||||
FT_Byte* glyphIdArray;
|
||||
|
||||
} TT_CMap0Rec, *TT_CMap0;
|
||||
|
||||
|
||||
/* format 2 */
|
||||
|
||||
typedef struct TT_CMap2SubHeaderRec_
|
||||
{
|
||||
FT_UShort firstCode; /* first valid low byte */
|
||||
FT_UShort entryCount; /* number of valid low bytes */
|
||||
FT_Short idDelta; /* delta value to glyphIndex */
|
||||
FT_UShort idRangeOffset; /* offset from here to 1st code */
|
||||
|
||||
} TT_CMap2SubHeaderRec, *TT_CMap2SubHeader;
|
||||
|
||||
|
||||
typedef struct TT_CMap2Rec_
|
||||
{
|
||||
FT_ULong language; /* for Mac fonts (originally ushort) */
|
||||
|
||||
FT_UShort* subHeaderKeys; /* high byte mapping table */
|
||||
/* value = subHeader index * 8 */
|
||||
TT_CMap2SubHeader subHeaders;
|
||||
FT_UShort* glyphIdArray;
|
||||
FT_UShort numGlyphId; /* control value */
|
||||
|
||||
} TT_CMap2Rec, *TT_CMap2;
|
||||
|
||||
|
||||
/* format 4 */
|
||||
|
||||
typedef struct TT_CMap4Segment_
|
||||
{
|
||||
FT_UShort endCount;
|
||||
FT_UShort startCount;
|
||||
FT_Short idDelta;
|
||||
FT_UShort idRangeOffset;
|
||||
|
||||
} TT_CMap4SegmentRec, *TT_CMap4Segment;
|
||||
|
||||
|
||||
typedef struct TT_CMap4Rec_
|
||||
{
|
||||
FT_ULong language; /* for Mac fonts (originally ushort) */
|
||||
|
||||
FT_UShort segCountX2; /* number of segments * 2 */
|
||||
FT_UShort searchRange; /* these parameters can be used */
|
||||
FT_UShort entrySelector; /* for a binary search */
|
||||
FT_UShort rangeShift;
|
||||
|
||||
TT_CMap4Segment segments;
|
||||
FT_UShort* glyphIdArray;
|
||||
FT_UShort numGlyphId; /* control value */
|
||||
|
||||
TT_CMap4Segment last_segment; /* last used segment; this is a small */
|
||||
/* cache to potentially increase speed */
|
||||
} TT_CMap4Rec, *TT_CMap4;
|
||||
|
||||
|
||||
/* format 6 */
|
||||
|
||||
typedef struct TT_CMap6_
|
||||
{
|
||||
FT_ULong language; /* for Mac fonts (originally ushort) */
|
||||
|
||||
FT_UShort firstCode; /* first character code of subrange */
|
||||
FT_UShort entryCount; /* number of character codes in subrange */
|
||||
|
||||
FT_UShort* glyphIdArray;
|
||||
|
||||
} TT_CMap6Rec, *TT_CMap6;
|
||||
|
||||
|
||||
/* auxiliary table for format 8 and 12 */
|
||||
|
||||
typedef struct TT_CMapGroupRec_
|
||||
{
|
||||
FT_ULong startCharCode;
|
||||
FT_ULong endCharCode;
|
||||
FT_ULong startGlyphID;
|
||||
|
||||
} TT_CMapGroupRec, *TT_CMapGroup;
|
||||
|
||||
|
||||
/* FreeType handles format 8 and 12 identically. It is not necessary to
|
||||
cover mixed 16bit and 32bit codes since FreeType always uses FT_ULong
|
||||
for input character codes -- converting Unicode surrogates to 32bit
|
||||
character codes must be done by the application. */
|
||||
|
||||
typedef struct TT_CMap8_12Rec_
|
||||
{
|
||||
FT_ULong language; /* for Mac fonts */
|
||||
|
||||
FT_ULong nGroups;
|
||||
TT_CMapGroup groups;
|
||||
|
||||
TT_CMapGroup last_group; /* last used group; this is a small */
|
||||
/* cache to potentially increase speed */
|
||||
} TT_CMap8_12Rec, *TT_CMap8_12;
|
||||
|
||||
|
||||
/* format 10 */
|
||||
|
||||
typedef struct TT_CMap10Rec_
|
||||
{
|
||||
FT_ULong language; /* for Mac fonts */
|
||||
|
||||
FT_ULong startCharCode; /* first character covered */
|
||||
FT_ULong numChars; /* number of characters covered */
|
||||
|
||||
FT_UShort* glyphs;
|
||||
|
||||
} TT_CMap10Rec, *TT_CMap10;
|
||||
|
||||
|
||||
typedef struct TT_CMapTableRec_* TT_CMapTable;
|
||||
|
||||
|
||||
typedef FT_UInt
|
||||
(*TT_CharMap_Func)( TT_CMapTable charmap,
|
||||
FT_ULong char_code );
|
||||
|
||||
typedef FT_ULong
|
||||
(*TT_CharNext_Func)( TT_CMapTable charmap,
|
||||
FT_ULong char_code );
|
||||
|
||||
|
||||
/* charmap table */
|
||||
typedef struct TT_CMapTableRec_
|
||||
{
|
||||
FT_UShort platformID;
|
||||
FT_UShort platformEncodingID;
|
||||
FT_UShort format;
|
||||
FT_ULong length; /* must be ulong for formats 8, 10, and 12 */
|
||||
|
||||
FT_Bool loaded;
|
||||
FT_ULong offset;
|
||||
|
||||
union
|
||||
{
|
||||
TT_CMap0Rec cmap0;
|
||||
TT_CMap2Rec cmap2;
|
||||
TT_CMap4Rec cmap4;
|
||||
TT_CMap6Rec cmap6;
|
||||
TT_CMap8_12Rec cmap8_12;
|
||||
TT_CMap10Rec cmap10;
|
||||
} c;
|
||||
|
||||
TT_CharMap_Func get_index;
|
||||
TT_CharNext_Func get_next_char;
|
||||
|
||||
} TT_CMapTableRec;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Struct> */
|
||||
/* TT_CharMapRec */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* The TrueType character map object type. */
|
||||
/* */
|
||||
/* <Fields> */
|
||||
/* root :: The parent character map structure. */
|
||||
/* */
|
||||
/* cmap :: The used character map. */
|
||||
/* */
|
||||
typedef struct TT_CharMapRec_
|
||||
{
|
||||
FT_CharMapRec root;
|
||||
TT_CMapTableRec cmap;
|
||||
|
||||
} TT_CharMapRec;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
/*************************************************************************/
|
||||
|
@ -836,8 +1121,9 @@ FT_BEGIN_HEADER
|
|||
/* This structure/class is defined here because it is common to the */
|
||||
/* following formats: TTF, OpenType-TT, and OpenType-CFF. */
|
||||
/* */
|
||||
/* Note, however, that the classes TT_Size and TT_GlyphSlot are not */
|
||||
/* shared between font drivers, and are thus defined in `ttobjs.h'. */
|
||||
/* Note, however, that the classes TT_Size, TT_GlyphSlot, and TT_CharMap */
|
||||
/* are not shared between font drivers, and are thus defined in */
|
||||
/* `ttobjs.h'. */
|
||||
/* */
|
||||
/*************************************************************************/
|
||||
|
||||
|
@ -859,6 +1145,17 @@ FT_BEGIN_HEADER
|
|||
typedef struct TT_FaceRec_* TT_Face;
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Type> */
|
||||
/* TT_CharMap */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* A handle to a TrueType character mapping object. */
|
||||
/* */
|
||||
typedef struct TT_CharMapRec_* TT_CharMap;
|
||||
|
||||
|
||||
/* a function type used for the truetype bytecode interpreter hooks */
|
||||
typedef FT_Error
|
||||
(*TT_Interpreter)( void* exec_context );
|
||||
|
@ -1044,6 +1341,15 @@ FT_BEGIN_HEADER
|
|||
/* cmap_size :: The size in bytes of the `cmap_table' */
|
||||
/* described above. */
|
||||
/* */
|
||||
/* num_charmaps :: The number of character mappings in the */
|
||||
/* font. */
|
||||
/* */
|
||||
/* charmaps :: The array of charmap objects for this font */
|
||||
/* file. Note that this field is a typeless */
|
||||
/* pointer. The Reason is that the format of */
|
||||
/* charmaps varies with the underlying font */
|
||||
/* format and cannot be determined here. */
|
||||
/* */
|
||||
/* goto_table :: A function called by each TrueType table */
|
||||
/* loader to position a stream's cursor to */
|
||||
/* the start of a given table according to */
|
||||
|
@ -1069,9 +1375,10 @@ FT_BEGIN_HEADER
|
|||
/* It must be called after the header was */
|
||||
/* read, and before the `forget'. */
|
||||
/* */
|
||||
/* sfnt :: A pointer to the SFNT service. */
|
||||
/* sfnt :: A pointer to the SFNT `driver' interface. */
|
||||
/* */
|
||||
/* psnames :: A pointer to the PostScript names service. */
|
||||
/* psnames :: A pointer to the `PSNames' module */
|
||||
/* interface. */
|
||||
/* */
|
||||
/* hdmx :: The face's horizontal device metrics */
|
||||
/* (`hdmx' table). This table is optional in */
|
||||
|
@ -1190,15 +1497,14 @@ FT_BEGIN_HEADER
|
|||
TT_Loader_ReadGlyphFunc read_simple_glyph;
|
||||
TT_Loader_ReadGlyphFunc read_composite_glyph;
|
||||
|
||||
/* a typeless pointer to the SFNT_Interface table used to load */
|
||||
/* the basic TrueType tables in the face object */
|
||||
/* a typeless pointer to the SFNT_Interface table used to load */
|
||||
/* the basic TrueType tables in the face object */
|
||||
void* sfnt;
|
||||
|
||||
/* a typeless pointer to the FT_Service_PsCMapsRec table used to */
|
||||
/* handle glyph names <-> unicode & Mac values */
|
||||
/* a typeless pointer to the PSNames_Interface table used to */
|
||||
/* handle glyph names <-> unicode & Mac values */
|
||||
void* psnames;
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/* */
|
||||
/* Optional TrueType/OpenType tables */
|
||||
|
@ -1270,8 +1576,6 @@ FT_BEGIN_HEADER
|
|||
|
||||
FT_Generic extra;
|
||||
|
||||
const char* postscript_name;
|
||||
|
||||
} TT_FaceRec;
|
||||
|
||||
|
||||
|
|
|
@ -24,12 +24,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -291,7 +291,6 @@ FT_BEGIN_HEADER
|
|||
#define TT_ADOBE_ID_STANDARD 0
|
||||
#define TT_ADOBE_ID_EXPERT 1
|
||||
#define TT_ADOBE_ID_CUSTOM 2
|
||||
#define TT_ADOBE_ID_LATIN_1 3
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
|
|
|
@ -24,12 +24,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
@ -572,6 +566,11 @@ FT_BEGIN_HEADER
|
|||
|
||||
/* */
|
||||
|
||||
/* internal use only */
|
||||
typedef void*
|
||||
(*FT_Get_Sfnt_Table_Func)( FT_Face face,
|
||||
FT_Sfnt_Tag tag );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
|
@ -663,27 +662,6 @@ FT_BEGIN_HEADER
|
|||
FT_Byte* buffer,
|
||||
FT_ULong* length );
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
/* */
|
||||
/* <Function> */
|
||||
/* FT_Get_CMap_Language_ID */
|
||||
/* */
|
||||
/* <Description> */
|
||||
/* Return TrueType/sfnt specific cmap language ID. Definitions of */
|
||||
/* language ID values are in freetype/ttnameid.h. */
|
||||
/* */
|
||||
/* <Input> */
|
||||
/* charmap :: */
|
||||
/* The target charmap. */
|
||||
/* */
|
||||
/* <Return> */
|
||||
/* The language ID of `charmap'. If `charmap' doesn't belong to a */
|
||||
/* TrueType/sfnt face, just return 0 as the default value. */
|
||||
/* */
|
||||
FT_EXPORT( FT_ULong )
|
||||
FT_Get_CMap_Language_ID( FT_CharMap charmap );
|
||||
|
||||
/* */
|
||||
|
||||
|
||||
|
|
|
@ -23,12 +23,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -25,12 +25,6 @@
|
|||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
#ifdef FREETYPE_H
|
||||
#error "freetype.h of FreeType 1 has been loaded!"
|
||||
#error "Please fix the directory search order for header files"
|
||||
#error "so that freetype.h of FreeType 2 is found first."
|
||||
#endif
|
||||
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
SubDir FT2_TOP src autofit ;
|
||||
|
||||
{
|
||||
local _sources ;
|
||||
|
||||
if $(FT2_MULTI)
|
||||
{
|
||||
_sources = afangles afglobal afhints aflatin afloader afmodule ;
|
||||
}
|
||||
else
|
||||
{
|
||||
_sources = autofit ;
|
||||
}
|
||||
|
||||
Library $(FT2_LIB) : $(_sources).c ;
|
||||
}
|
||||
|
||||
# end of src/autofir Jamfile
|
|
@ -1,214 +0,0 @@
|
|||
#include "aftypes.h"
|
||||
|
||||
/* this table was generated for AF_ANGLE_PI = 256 */
|
||||
#define AF_ANGLE_MAX_ITERS 8
|
||||
#define AF_TRIG_MAX_ITERS 9
|
||||
|
||||
static const FT_Fixed
|
||||
af_angle_arctan_table[9] =
|
||||
{
|
||||
90, 64, 38, 20, 10, 5, 3, 1, 1
|
||||
};
|
||||
|
||||
|
||||
static FT_Int
|
||||
af_angle_prenorm( FT_Vector* vec )
|
||||
{
|
||||
FT_Fixed x, y, z;
|
||||
FT_Int shift;
|
||||
|
||||
|
||||
x = vec->x;
|
||||
y = vec->y;
|
||||
|
||||
z = ( ( x >= 0 ) ? x : - x ) | ( (y >= 0) ? y : -y );
|
||||
shift = 0;
|
||||
|
||||
if ( z < ( 1L << 27 ) )
|
||||
{
|
||||
do
|
||||
{
|
||||
shift++;
|
||||
z <<= 1;
|
||||
} while ( z < ( 1L << 27 ) );
|
||||
|
||||
vec->x = x << shift;
|
||||
vec->y = y << shift;
|
||||
}
|
||||
else if ( z > ( 1L << 28 ) )
|
||||
{
|
||||
do
|
||||
{
|
||||
shift++;
|
||||
z >>= 1;
|
||||
} while ( z > ( 1L << 28 ) );
|
||||
|
||||
vec->x = x >> shift;
|
||||
vec->y = y >> shift;
|
||||
shift = -shift;
|
||||
}
|
||||
return shift;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
af_angle_pseudo_polarize( FT_Vector* vec )
|
||||
{
|
||||
FT_Fixed theta;
|
||||
FT_Fixed yi, i;
|
||||
FT_Fixed x, y;
|
||||
const FT_Fixed *arctanptr;
|
||||
|
||||
|
||||
x = vec->x;
|
||||
y = vec->y;
|
||||
|
||||
/* Get the vector into the right half plane */
|
||||
theta = 0;
|
||||
if ( x < 0 )
|
||||
{
|
||||
x = -x;
|
||||
y = -y;
|
||||
theta = 2 * AF_ANGLE_PI2;
|
||||
}
|
||||
|
||||
if ( y > 0 )
|
||||
theta = - theta;
|
||||
|
||||
arctanptr = af_angle_arctan_table;
|
||||
|
||||
if ( y < 0 )
|
||||
{
|
||||
/* Rotate positive */
|
||||
yi = y + ( x << 1 );
|
||||
x = x - ( y << 1 );
|
||||
y = yi;
|
||||
theta -= *arctanptr++; /* Subtract angle */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Rotate negative */
|
||||
yi = y - ( x << 1 );
|
||||
x = x + ( y << 1 );
|
||||
y = yi;
|
||||
theta += *arctanptr++; /* Add angle */
|
||||
}
|
||||
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
if ( y < 0 )
|
||||
{
|
||||
/* Rotate positive */
|
||||
yi = y + ( x >> i );
|
||||
x = x - ( y >> i );
|
||||
y = yi;
|
||||
theta -= *arctanptr++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Rotate negative */
|
||||
yi = y - ( x >> i );
|
||||
x = x + ( y >> i );
|
||||
y = yi;
|
||||
theta += *arctanptr++;
|
||||
}
|
||||
} while ( ++i < AF_TRIG_MAX_ITERS );
|
||||
|
||||
/* round theta */
|
||||
if ( theta >= 0 )
|
||||
theta = FT_PAD_ROUND( theta, 4 );
|
||||
else
|
||||
theta = - FT_PAD_ROUND( theta, 4 );
|
||||
|
||||
vec->x = x;
|
||||
vec->y = theta;
|
||||
}
|
||||
|
||||
|
||||
/* documentation is in fttrigon.h */
|
||||
|
||||
FT_LOCAL_DEF( AF_Angle )
|
||||
af_angle_atan( FT_Fixed dx,
|
||||
FT_Fixed dy )
|
||||
{
|
||||
FT_Vector v;
|
||||
|
||||
|
||||
if ( dx == 0 && dy == 0 )
|
||||
return 0;
|
||||
|
||||
v.x = dx;
|
||||
v.y = dy;
|
||||
af_angle_prenorm( &v );
|
||||
af_angle_pseudo_polarize( &v );
|
||||
|
||||
return v.y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
FT_LOCAL_DEF( AF_Angle )
|
||||
af_angle_diff( AF_Angle angle1,
|
||||
AF_Angle angle2 )
|
||||
{
|
||||
AF_Angle delta = angle2 - angle1;
|
||||
|
||||
delta %= AF_ANGLE_2PI;
|
||||
if ( delta < 0 )
|
||||
delta += AF_ANGLE_2PI;
|
||||
|
||||
if ( delta > AF_ANGLE_PI )
|
||||
delta -= AF_ANGLE_2PI;
|
||||
|
||||
return delta;
|
||||
}
|
||||
|
||||
|
||||
/* well, this needs to be somewhere, right :-)
|
||||
*/
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_sort_pos( FT_UInt count,
|
||||
FT_Pos* table )
|
||||
{
|
||||
FT_UInt i, j;
|
||||
FT_Pos swap;
|
||||
|
||||
|
||||
for ( i = 1; i < count; i++ )
|
||||
{
|
||||
for ( j = i; j > 0; j-- )
|
||||
{
|
||||
if ( table[j] > table[j - 1] )
|
||||
break;
|
||||
|
||||
swap = table[j];
|
||||
table[j] = table[j - 1];
|
||||
table[j - 1] = swap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_sort_widths( FT_UInt count,
|
||||
AF_Width table )
|
||||
{
|
||||
FT_UInt i, j;
|
||||
AF_WidthRec swap;
|
||||
|
||||
|
||||
for ( i = 1; i < count; i++ )
|
||||
{
|
||||
for ( j = i; j > 0; j-- )
|
||||
{
|
||||
if ( table[j].org > table[j - 1].org )
|
||||
break;
|
||||
|
||||
swap = table[j];
|
||||
table[j] = table[j - 1];
|
||||
table[j - 1] = swap;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,231 +0,0 @@
|
|||
#include "afglobal.h"
|
||||
#include "aflatin.h"
|
||||
|
||||
/* populate this list when you add new scripts
|
||||
*/
|
||||
static AF_ScriptClass const af_script_classes[] =
|
||||
{
|
||||
& af_latin_script_class,
|
||||
|
||||
NULL /* do not remove */
|
||||
};
|
||||
|
||||
#define AF_SCRIPT_LIST_DEFAULT 0 /* index of default script in 'af_script_classes' */
|
||||
#define AF_SCRIPT_LIST_NONE 255 /* indicates an uncovered glyph */
|
||||
|
||||
/*
|
||||
* note that glyph_scripts[] is used to map each glyph into
|
||||
* an index into the 'af_script_classes' array.
|
||||
*
|
||||
*/
|
||||
typedef struct AF_FaceGlobalsRec_
|
||||
{
|
||||
FT_Face face;
|
||||
FT_UInt glyph_count; /* same as face->num_glyphs */
|
||||
FT_Byte* glyph_scripts;
|
||||
|
||||
AF_ScriptMetrics metrics[ AF_SCRIPT_MAX ];
|
||||
|
||||
} AF_FaceGlobalsRec;
|
||||
|
||||
|
||||
|
||||
|
||||
/* this function is used to compute the script index of each glyph
|
||||
* within a given face
|
||||
*/
|
||||
static FT_Error
|
||||
af_face_globals_compute_script_coverage( AF_FaceGlobals globals )
|
||||
{
|
||||
FT_Error error = 0;
|
||||
FT_Face face = globals->face;
|
||||
FT_CharMap old_charmap = face->charmap;
|
||||
FT_Byte* gscripts = globals->glyph_scripts;
|
||||
FT_UInt ss;
|
||||
|
||||
/* the value 255 means "uncovered glyph"
|
||||
*/
|
||||
FT_MEM_SET( globals->glyph_scripts,
|
||||
AF_SCRIPT_LIST_NONE,
|
||||
globals->glyph_count );
|
||||
|
||||
error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
|
||||
if ( error )
|
||||
{
|
||||
/* ignore this error, we'll simply use Latin as the standard
|
||||
* script. XXX: Shouldn't we rather disable hinting ??
|
||||
*/
|
||||
error = 0;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* scan each script in a Unicode charmap
|
||||
*/
|
||||
for ( ss = 0; af_script_classes[ss]; ss++ )
|
||||
{
|
||||
AF_ScriptClass clazz = af_script_classes[ss];
|
||||
AF_Script_UniRange range;
|
||||
|
||||
/* scan all unicode points in the range, and set the corresponding
|
||||
* glyph script index
|
||||
*/
|
||||
for ( range = clazz->script_uni_ranges; range->first != 0; range++ )
|
||||
{
|
||||
FT_ULong charcode = range->first;
|
||||
FT_UInt gindex;
|
||||
|
||||
gindex = FT_Get_Char_Index( face, charcode );
|
||||
|
||||
if ( gindex != 0 &&
|
||||
gindex < globals->glyph_count &&
|
||||
gscripts[ gindex ] == AF_SCRIPT_LIST_NONE )
|
||||
{
|
||||
gscripts[ gindex ] = (FT_Byte) ss;
|
||||
}
|
||||
for (;;)
|
||||
{
|
||||
charcode = FT_Get_Next_Char( face, charcode, &gindex );
|
||||
|
||||
if ( gindex == 0 || charcode > range->last )
|
||||
break;
|
||||
|
||||
if ( gindex < globals->glyph_count &&
|
||||
gscripts[ gindex ] == AF_SCRIPT_LIST_NONE )
|
||||
{
|
||||
gscripts[ gindex ] = (FT_Byte) ss;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Exit:
|
||||
/* by default, all uncovered glyphs are set to the latin script
|
||||
* XXX: shouldnt' we disable hinting or do something similar ?
|
||||
*/
|
||||
{
|
||||
FT_UInt nn;
|
||||
|
||||
for ( nn = 0; nn < globals->glyph_count; nn++ )
|
||||
{
|
||||
if ( gscripts[ nn ] == AF_SCRIPT_LIST_NONE )
|
||||
gscripts[ nn ] = AF_SCRIPT_LIST_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
FT_Set_Charmap( face, old_charmap );
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_face_globals_new( FT_Face face,
|
||||
AF_FaceGlobals *aglobals )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Memory memory;
|
||||
AF_FaceGlobals globals;
|
||||
|
||||
memory = face->memory;
|
||||
|
||||
if ( !FT_ALLOC( globals, sizeof(*globals) +
|
||||
face->num_glyphs*sizeof(FT_Byte) ) )
|
||||
{
|
||||
globals->face = face;
|
||||
globals->glyph_count = face->num_glyphs;
|
||||
globals->glyph_scripts = (FT_Byte*)( globals+1 );
|
||||
|
||||
error = af_face_globals_compute_script_coverage( globals );
|
||||
if ( error )
|
||||
{
|
||||
af_face_globals_free( globals );
|
||||
globals = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
*aglobals = globals;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_face_globals_free( AF_FaceGlobals globals )
|
||||
{
|
||||
if ( globals )
|
||||
{
|
||||
FT_Memory memory = globals->face->memory;
|
||||
FT_UInt nn;
|
||||
|
||||
for ( nn = 0; nn < AF_SCRIPT_MAX; nn++ )
|
||||
{
|
||||
if ( globals->metrics[nn] )
|
||||
{
|
||||
AF_ScriptClass clazz = af_script_classes[nn];
|
||||
|
||||
FT_ASSERT( globals->metrics[nn]->clazz == clazz );
|
||||
|
||||
if ( clazz->script_metrics_done )
|
||||
clazz->script_metrics_done( globals->metrics[nn] );
|
||||
|
||||
FT_FREE( globals->metrics[nn] );
|
||||
}
|
||||
}
|
||||
|
||||
globals->glyph_count = 0;
|
||||
globals->glyph_scripts = NULL; /* no need to free this one !! */
|
||||
globals->face = NULL;
|
||||
FT_FREE( globals );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_face_globals_get_metrics( AF_FaceGlobals globals,
|
||||
FT_UInt gindex,
|
||||
AF_ScriptMetrics *ametrics )
|
||||
{
|
||||
AF_ScriptMetrics metrics = NULL;
|
||||
FT_UInt index;
|
||||
AF_ScriptClass clazz;
|
||||
FT_Error error = 0;
|
||||
|
||||
if ( gindex >= globals->glyph_count )
|
||||
{
|
||||
error = FT_Err_Invalid_Argument;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
index = globals->glyph_scripts[ gindex ];
|
||||
clazz = af_script_classes[ index ];
|
||||
metrics = globals->metrics[ clazz->script ];
|
||||
if ( metrics == NULL )
|
||||
{
|
||||
/* create the global metrics object when needed
|
||||
*/
|
||||
FT_Memory memory = globals->face->memory;
|
||||
|
||||
if ( FT_ALLOC( metrics, clazz->script_metrics_size ) )
|
||||
goto Exit;
|
||||
|
||||
metrics->clazz = clazz;
|
||||
|
||||
if ( clazz->script_metrics_init )
|
||||
{
|
||||
error = clazz->script_metrics_init( metrics, globals->face );
|
||||
if ( error )
|
||||
{
|
||||
if ( clazz->script_metrics_done )
|
||||
clazz->script_metrics_done( metrics );
|
||||
|
||||
FT_FREE( metrics );
|
||||
goto Exit;
|
||||
}
|
||||
}
|
||||
|
||||
globals->metrics[ clazz->script ] = metrics;
|
||||
}
|
||||
|
||||
Exit:
|
||||
*ametrics = metrics;
|
||||
return error;
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
#ifndef __AF_GLOBAL_H__
|
||||
#define __AF_GLOBAL_H__
|
||||
|
||||
#include "aftypes.h"
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
/***** *****/
|
||||
/***** F A C E G L O B A L S *****/
|
||||
/***** *****/
|
||||
/**************************************************************************/
|
||||
/**************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* models the global hints data for a given face, decomposed into
|
||||
* script-specific items..
|
||||
*
|
||||
*/
|
||||
typedef struct AF_FaceGlobalsRec_* AF_FaceGlobals;
|
||||
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_face_globals_new( FT_Face face,
|
||||
AF_FaceGlobals *aglobals );
|
||||
|
||||
FT_LOCAL( FT_Error )
|
||||
af_face_globals_get_metrics( AF_FaceGlobals globals,
|
||||
FT_UInt gindex,
|
||||
AF_ScriptMetrics *ametrics );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_face_globals_free( AF_FaceGlobals globals );
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __AF_GLOBALS_H__ */
|
|
@ -1,934 +0,0 @@
|
|||
#include "afhints.h"
|
||||
|
||||
#ifdef AF_DEBUG
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
void
|
||||
af_glyph_hints_dump_edges( AF_GlyphHints hints )
|
||||
{
|
||||
AF_Edge edges;
|
||||
AF_Edge edge_limit;
|
||||
AF_Segment segments;
|
||||
FT_Int dimension;
|
||||
|
||||
|
||||
edges = hints->horz_edges;
|
||||
edge_limit = edges + hints->num_hedges;
|
||||
segments = hints->horz_segments;
|
||||
|
||||
for ( dimension = 1; dimension >= 0; dimension-- )
|
||||
{
|
||||
AF_Edge edge;
|
||||
|
||||
|
||||
printf ( "Table of %s edges:\n",
|
||||
!dimension ? "vertical" : "horizontal" );
|
||||
printf ( " [ index | pos | dir | link |"
|
||||
" serif | blue | opos | pos ]\n" );
|
||||
|
||||
for ( edge = edges; edge < edge_limit; edge++ )
|
||||
{
|
||||
printf ( " [ %5d | %4d | %5s | %4d | %5d | %c | %5.2f | %5.2f ]\n",
|
||||
edge - edges,
|
||||
(int)edge->fpos,
|
||||
edge->dir == AF_DIR_UP
|
||||
? "up"
|
||||
: ( edge->dir == AF_DIR_DOWN
|
||||
? "down"
|
||||
: ( edge->dir == AF_DIR_LEFT
|
||||
? "left"
|
||||
: ( edge->dir == AF_DIR_RIGHT
|
||||
? "right"
|
||||
: "none" ) ) ),
|
||||
edge->link ? ( edge->link - edges ) : -1,
|
||||
edge->serif ? ( edge->serif - edges ) : -1,
|
||||
edge->blue_edge ? 'y' : 'n',
|
||||
edge->opos / 64.0,
|
||||
edge->pos / 64.0 );
|
||||
}
|
||||
|
||||
edges = hints->vert_edges;
|
||||
edge_limit = edges + hints->num_vedges;
|
||||
segments = hints->vert_segments;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* A function used to dump the array of linked segments */
|
||||
void
|
||||
af_glyph_hints_dump_segments( AF_GlyphHints hints )
|
||||
{
|
||||
AF_Segment segments;
|
||||
AF_Segment segment_limit;
|
||||
AF_Point points;
|
||||
FT_Int dimension;
|
||||
|
||||
|
||||
points = hints->points;
|
||||
segments = hints->horz_segments;
|
||||
segment_limit = segments + hints->num_hsegments;
|
||||
|
||||
for ( dimension = 1; dimension >= 0; dimension-- )
|
||||
{
|
||||
AF_Segment seg;
|
||||
|
||||
|
||||
printf ( "Table of %s segments:\n",
|
||||
!dimension ? "vertical" : "horizontal" );
|
||||
printf ( " [ index | pos | dir | link | serif |"
|
||||
" numl | first | start ]\n" );
|
||||
|
||||
for ( seg = segments; seg < segment_limit; seg++ )
|
||||
{
|
||||
printf ( " [ %5d | %4d | %5s | %4d | %5d | %4d | %5d | %5d ]\n",
|
||||
seg - segments,
|
||||
(int)seg->pos,
|
||||
seg->dir == AF_DIR_UP
|
||||
? "up"
|
||||
: ( seg->dir == AF_DIR_DOWN
|
||||
? "down"
|
||||
: ( seg->dir == AF_DIR_LEFT
|
||||
? "left"
|
||||
: ( seg->dir == AF_DIR_RIGHT
|
||||
? "right"
|
||||
: "none" ) ) ),
|
||||
seg->link ? ( seg->link - segments ) : -1,
|
||||
seg->serif ? ( seg->serif - segments ) : -1,
|
||||
(int)seg->num_linked,
|
||||
seg->first - points,
|
||||
seg->last - points );
|
||||
}
|
||||
|
||||
segments = hints->vert_segments;
|
||||
segment_limit = segments + hints->num_vsegments;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* AF_DEBUG */
|
||||
|
||||
|
||||
/* compute the direction value of a given vector */
|
||||
FT_LOCAL_DEF( AF_Direction )
|
||||
af_direction_compute( FT_Pos dx,
|
||||
FT_Pos dy )
|
||||
{
|
||||
AF_Direction dir;
|
||||
FT_Pos ax = ABS( dx );
|
||||
FT_Pos ay = ABS( dy );
|
||||
|
||||
|
||||
dir = AF_DIR_NONE;
|
||||
|
||||
/* atan(1/12) == 4.7 degrees */
|
||||
|
||||
/* test for vertical direction */
|
||||
if ( ax * 12 < ay )
|
||||
{
|
||||
dir = dy > 0 ? AF_DIR_UP : AF_DIR_DOWN;
|
||||
}
|
||||
/* test for horizontal direction */
|
||||
else if ( ay * 12 < ax )
|
||||
{
|
||||
dir = dx > 0 ? AF_DIR_RIGHT : AF_DIR_LEFT;
|
||||
}
|
||||
|
||||
return dir;
|
||||
}
|
||||
|
||||
|
||||
/* compute all inflex points in a given glyph */
|
||||
static void
|
||||
af_glyph_hints_compute_inflections( AF_GlyphHints hints )
|
||||
{
|
||||
AF_Point* contour = hints->contours;
|
||||
AF_Point* contour_limit = contour + hints->num_contours;
|
||||
|
||||
|
||||
/* do each contour separately */
|
||||
for ( ; contour < contour_limit; contour++ )
|
||||
{
|
||||
AF_Point point = contour[0];
|
||||
AF_Point first = point;
|
||||
AF_Point start = point;
|
||||
AF_Point end = point;
|
||||
AF_Point before;
|
||||
AF_Point after;
|
||||
AF_Angle angle_in, angle_seg, angle_out;
|
||||
AF_Angle diff_in, diff_out;
|
||||
FT_Int finished = 0;
|
||||
|
||||
|
||||
/* compute first segment in contour */
|
||||
first = point;
|
||||
|
||||
start = end = first;
|
||||
do
|
||||
{
|
||||
end = end->next;
|
||||
if ( end == first )
|
||||
goto Skip;
|
||||
|
||||
} while ( end->fx == first->fx && end->fy == first->fy );
|
||||
|
||||
angle_seg = af_angle_atan( end->fx - start->fx,
|
||||
end->fy - start->fy );
|
||||
|
||||
/* extend the segment start whenever possible */
|
||||
before = start;
|
||||
do
|
||||
{
|
||||
do
|
||||
{
|
||||
start = before;
|
||||
before = before->prev;
|
||||
if ( before == first )
|
||||
goto Skip;
|
||||
|
||||
} while ( before->fx == start->fx && before->fy == start->fy );
|
||||
|
||||
angle_in = af_angle_atan( start->fx - before->fx,
|
||||
start->fy - before->fy );
|
||||
|
||||
} while ( angle_in == angle_seg );
|
||||
|
||||
first = start;
|
||||
diff_in = af_angle_diff( angle_in, angle_seg );
|
||||
|
||||
/* now, process all segments in the contour */
|
||||
do
|
||||
{
|
||||
/* first, extend current segment's end whenever possible */
|
||||
after = end;
|
||||
do
|
||||
{
|
||||
do
|
||||
{
|
||||
end = after;
|
||||
after = after->next;
|
||||
if ( after == first )
|
||||
finished = 1;
|
||||
|
||||
} while ( end->fx == after->fx && end->fy == after->fy );
|
||||
|
||||
angle_out = af_angle_atan( after->fx - end->fx,
|
||||
after->fy - end->fy );
|
||||
|
||||
} while ( angle_out == angle_seg );
|
||||
|
||||
diff_out = af_angle_diff( angle_seg, angle_out );
|
||||
|
||||
if ( ( diff_in ^ diff_out ) < 0 )
|
||||
{
|
||||
/* diff_in and diff_out have different signs, we have */
|
||||
/* inflection points here... */
|
||||
do
|
||||
{
|
||||
start->flags |= AF_FLAG_INFLECTION;
|
||||
start = start->next;
|
||||
|
||||
} while ( start != end );
|
||||
|
||||
start->flags |= AF_FLAG_INFLECTION;
|
||||
}
|
||||
|
||||
start = end;
|
||||
end = after;
|
||||
angle_seg = angle_out;
|
||||
diff_in = diff_out;
|
||||
|
||||
} while ( !finished );
|
||||
|
||||
Skip:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_init( AF_GlyphHints hints,
|
||||
FT_Memory memory )
|
||||
{
|
||||
FT_ZERO( hints );
|
||||
hints->memory = memory;
|
||||
}
|
||||
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_done( AF_GlyphHints hints )
|
||||
{
|
||||
if ( hints && hints->memory )
|
||||
{
|
||||
FT_Memory memory = hints->memory;
|
||||
AF_Dimension dim;
|
||||
|
||||
/* note that we don't need to free the segment and edge
|
||||
* buffers, since they're really within the hints->points array
|
||||
*/
|
||||
for ( dim = 0; dim < 2; dim++ )
|
||||
{
|
||||
AF_AxisHints axis = &hints->axis[ dim ];
|
||||
|
||||
axis->num_segments = 0;
|
||||
axis->num_edges = 0;
|
||||
axis->segments = NULL;
|
||||
axis->edges = NULL;
|
||||
}
|
||||
|
||||
FT_FREE( hints->contours );
|
||||
hints->max_contours = 0;
|
||||
hints->num_contours = 0;
|
||||
|
||||
FT_FREE( hints->points );
|
||||
hints->num_points = 0;
|
||||
hints->max_points = 0;
|
||||
|
||||
hints->memory = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
FT_LOCAL_DEF( FT_Error )
|
||||
af_glyph_hints_reset( AF_GlyphHints hints,
|
||||
AF_Scaler scaler,
|
||||
FT_Outline* outline )
|
||||
{
|
||||
FT_Error error = FT_Err_Ok;
|
||||
AF_Point points;
|
||||
FT_UInt old_max, new_max;
|
||||
FT_Fixed x_scale = scaler->x_scale;
|
||||
FT_Fixed y_scale = scaler->y_scale;
|
||||
FT_Pos x_delta = scaler->x_delta;
|
||||
FT_Pos y_delta = scaler->y_delta;
|
||||
FT_Memory memory = hints->memory;
|
||||
|
||||
hints->scaler_flags = scaler->flags;
|
||||
hints->other_flags = 0;
|
||||
|
||||
hints->num_points = 0;
|
||||
hints->num_contours = 0;
|
||||
|
||||
hints->axis[0].num_segments = 0;
|
||||
hints->axis[0].num_edges = 0;
|
||||
hints->axis[1].num_segments = 0;
|
||||
hints->axis[1].num_edges = 0;
|
||||
|
||||
/* first of all, reallocate the contours array when necessary
|
||||
*/
|
||||
new_max = (FT_UInt) outline->n_contours;
|
||||
old_max = hints->max_contours;
|
||||
if ( new_max > old_max )
|
||||
{
|
||||
new_max = (new_max + 3) & ~3;
|
||||
|
||||
if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) )
|
||||
goto Exit;
|
||||
|
||||
hints->max_contours = new_max;
|
||||
}
|
||||
|
||||
/* then, reallocate the points, segments & edges arrays if needed --
|
||||
* note that we reserved two additional point positions, used to
|
||||
* hint metrics appropriately
|
||||
*/
|
||||
new_max = (FT_UInt)( outline->n_points + 2 );
|
||||
old_max = hints->max_points;
|
||||
if ( new_max > old_max )
|
||||
{
|
||||
FT_Byte* items;
|
||||
FT_ULong off1, off2, off3;
|
||||
|
||||
/* we store in a single buffer the following arrays:
|
||||
*
|
||||
* - an array of N AF_PointRec items
|
||||
* - an array of 2*N AF_SegmentRec items
|
||||
* - an array of 2*N AF_EdgeRec items
|
||||
*
|
||||
*/
|
||||
|
||||
new_max = ( new_max + 2 + 7 ) & ~7;
|
||||
|
||||
#undef OFF_INCREMENT
|
||||
#define OFF_INCREMENT( _off, _type, _count ) \
|
||||
( FT_PAD_CEIL( _off, sizeof(_type) ) + (_count)*sizeof(_type))
|
||||
|
||||
off1 = OFF_INCREMENT( 0, AF_PointRec, new_max );
|
||||
off2 = OFF_INCREMENT( off1, AF_SegmentRec, new_max );
|
||||
off3 = OFF_INCREMENT( off2, AF_EdgeRec, new_max*2 );
|
||||
|
||||
FT_FREE( hints->points );
|
||||
|
||||
if ( FT_ALLOC( items, off3 ) )
|
||||
{
|
||||
hints->max_points = 0;
|
||||
hints->axis[0].segments = NULL;
|
||||
hints->axis[0].edges = NULL;
|
||||
hints->axis[1].segments = NULL;
|
||||
hints->axis[1].edges = NULL;
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* readjust some pointers
|
||||
*/
|
||||
hints->max_points = new_max;
|
||||
hints->points = (AF_Point) items;
|
||||
|
||||
hints->axis[0].segments = (AF_Segment)( items + off1 );
|
||||
hints->axis[1].segments = hints->axis[0].segments + new_max;
|
||||
|
||||
hints->axis[0].edges = (AF_Edge) ( items + off2 );
|
||||
hints->axis[1].edges = hints->axis[0].edges + new_max;
|
||||
}
|
||||
|
||||
hints->num_points = outline->n_points;
|
||||
hints->num_contours = outline->n_contours;
|
||||
|
||||
|
||||
/* We can't rely on the value of `FT_Outline.flags' to know the fill */
|
||||
/* direction used for a glyph, given that some fonts are broken (e.g. */
|
||||
/* the Arphic ones). We thus recompute it each time we need to. */
|
||||
/* */
|
||||
hints->axis[ AF_DIMENSION_HORZ ].major_dir = AF_DIR_UP;
|
||||
hints->axis[ AF_DIMENSION_VERT ].major_dir = AF_DIR_LEFT;
|
||||
|
||||
if ( FT_Outline_Get_Orientation( outline ) == FT_ORIENTATION_POSTSCRIPT )
|
||||
{
|
||||
hints->axis[ AF_DIMENSION_HORZ ].major_dir = AF_DIR_DOWN;
|
||||
hints->axis[ AF_DIMENSION_VERT ].major_dir = AF_DIR_RIGHT;
|
||||
}
|
||||
|
||||
hints->x_scale = x_scale;
|
||||
hints->y_scale = y_scale;
|
||||
hints->x_delta = x_delta;
|
||||
hints->y_delta = y_delta;
|
||||
|
||||
points = hints->points;
|
||||
if ( hints->num_points == 0 )
|
||||
goto Exit;
|
||||
|
||||
{
|
||||
AF_Point point;
|
||||
AF_Point point_limit = points + hints->num_points;
|
||||
|
||||
|
||||
/* compute coordinates & bezier flags */
|
||||
{
|
||||
FT_Vector* vec = outline->points;
|
||||
char* tag = outline->tags;
|
||||
|
||||
|
||||
for ( point = points; point < point_limit; point++, vec++, tag++ )
|
||||
{
|
||||
point->fx = vec->x;
|
||||
point->fy = vec->y;
|
||||
point->ox = point->x = FT_MulFix( vec->x, x_scale ) + x_delta;
|
||||
point->oy = point->y = FT_MulFix( vec->y, y_scale ) + y_delta;
|
||||
|
||||
switch ( FT_CURVE_TAG( *tag ) )
|
||||
{
|
||||
case FT_CURVE_TAG_CONIC:
|
||||
point->flags = AF_FLAG_CONIC;
|
||||
break;
|
||||
case FT_CURVE_TAG_CUBIC:
|
||||
point->flags = AF_FLAG_CUBIC;
|
||||
break;
|
||||
default:
|
||||
point->flags = 0;
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* compute `next' and `prev' */
|
||||
{
|
||||
FT_Int contour_index;
|
||||
AF_Point prev;
|
||||
AF_Point first;
|
||||
AF_Point end;
|
||||
|
||||
|
||||
contour_index = 0;
|
||||
|
||||
first = points;
|
||||
end = points + outline->contours[0];
|
||||
prev = end;
|
||||
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
{
|
||||
point->prev = prev;
|
||||
if ( point < end )
|
||||
{
|
||||
point->next = point + 1;
|
||||
prev = point;
|
||||
}
|
||||
else
|
||||
{
|
||||
point->next = first;
|
||||
contour_index++;
|
||||
if ( point + 1 < point_limit )
|
||||
{
|
||||
end = points + outline->contours[contour_index];
|
||||
first = point + 1;
|
||||
prev = end;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* set-up the contours array */
|
||||
{
|
||||
AF_Point* contour = hints->contours;
|
||||
AF_Point* contour_limit = contour + hints->num_contours;
|
||||
short* end = outline->contours;
|
||||
short idx = 0;
|
||||
|
||||
|
||||
for ( ; contour < contour_limit; contour++, end++ )
|
||||
{
|
||||
contour[0] = points + idx;
|
||||
idx = (short)( end[0] + 1 );
|
||||
}
|
||||
}
|
||||
|
||||
/* compute directions of in & out vectors */
|
||||
{
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
{
|
||||
AF_Point prev;
|
||||
AF_Point next;
|
||||
FT_Pos in_x, in_y, out_x, out_y;
|
||||
|
||||
|
||||
prev = point->prev;
|
||||
in_x = point->fx - prev->fx;
|
||||
in_y = point->fy - prev->fy;
|
||||
|
||||
point->in_dir = af_direction_compute( in_x, in_y );
|
||||
|
||||
next = point->next;
|
||||
out_x = next->fx - point->fx;
|
||||
out_y = next->fy - point->fy;
|
||||
|
||||
point->out_dir = af_direction_compute( out_x, out_y );
|
||||
|
||||
if ( point->flags & ( AF_FLAG_CONIC | AF_FLAG_CUBIC ) )
|
||||
{
|
||||
Is_Weak_Point:
|
||||
point->flags |= AF_FLAG_WEAK_INTERPOLATION;
|
||||
}
|
||||
else if ( point->out_dir == point->in_dir )
|
||||
{
|
||||
AF_Angle angle_in, angle_out, delta;
|
||||
|
||||
|
||||
if ( point->out_dir != AF_DIR_NONE )
|
||||
goto Is_Weak_Point;
|
||||
|
||||
angle_in = af_angle_atan( in_x, in_y );
|
||||
angle_out = af_angle_atan( out_x, out_y );
|
||||
delta = af_angle_diff( angle_in, angle_out );
|
||||
|
||||
if ( delta < 2 && delta > -2 )
|
||||
goto Is_Weak_Point;
|
||||
}
|
||||
else if ( point->in_dir == -point->out_dir )
|
||||
goto Is_Weak_Point;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* compute inflection points
|
||||
*/
|
||||
af_glyph_hints_compute_inflections( hints );
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* E D G E P O I N T G R I D - F I T T I N G
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_align_edge_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_AxisHints axis = & hints->axis[ dim ];
|
||||
AF_Edge edges = axis->edges;
|
||||
AF_Edge edge_limit = edges + axis->num_edges;
|
||||
AF_Edge edge;
|
||||
|
||||
for ( edge = edges; edge < edge_limit; edge++ )
|
||||
{
|
||||
/* move the points of each segment */
|
||||
/* in each edge to the edge's position */
|
||||
AF_Segment seg = edge->first;
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
AF_Point point = seg->first;
|
||||
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if ( dim == AF_DIMENSION_HORZ )
|
||||
{
|
||||
point->x = edge->pos;
|
||||
point->flags |= AF_FLAG_TOUCH_X;
|
||||
}
|
||||
else
|
||||
{
|
||||
point->y = edge->pos;
|
||||
point->flags |= AF_FLAG_TOUCH_Y;
|
||||
}
|
||||
|
||||
if ( point == seg->last )
|
||||
break;
|
||||
|
||||
point = point->next;
|
||||
}
|
||||
|
||||
seg = seg->edge_next;
|
||||
|
||||
} while ( seg != edge->first );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* S T R O N G P O I N T I N T E R P O L A T I O N
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* hint the strong points -- this is equivalent to the TrueType `IP' */
|
||||
/* hinting instruction */
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_align_strong_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_Point points = hints->points;
|
||||
AF_Point point_limit = points + hints->num_points;
|
||||
AF_AxisHints axis = &hints->axis[dim];
|
||||
AF_Edge edges = axis->edges;
|
||||
AF_Edge edge_limit = edges + axis->num_edges;
|
||||
AF_Flags touch_flag;
|
||||
|
||||
|
||||
if ( dim == AF_DIMENSION_HORZ )
|
||||
touch_flag = AF_FLAG_TOUCH_X;
|
||||
else
|
||||
touch_flag = AF_FLAG_TOUCH_Y;
|
||||
|
||||
if ( edges < edge_limit )
|
||||
{
|
||||
AF_Point point;
|
||||
AF_Edge edge;
|
||||
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
{
|
||||
FT_Pos u, ou, fu; /* point position */
|
||||
FT_Pos delta;
|
||||
|
||||
|
||||
if ( point->flags & touch_flag )
|
||||
continue;
|
||||
|
||||
/* if this point is candidate to weak interpolation, we will */
|
||||
/* interpolate it after all strong points have been processed */
|
||||
if ( ( point->flags & AF_FLAG_WEAK_INTERPOLATION ) &&
|
||||
!( point->flags & AF_FLAG_INFLECTION ) )
|
||||
continue;
|
||||
|
||||
if ( dim == AF_DIMENSION_VERT )
|
||||
{
|
||||
u = point->fy;
|
||||
ou = point->oy;
|
||||
}
|
||||
else
|
||||
{
|
||||
u = point->fx;
|
||||
ou = point->ox;
|
||||
}
|
||||
|
||||
fu = u;
|
||||
|
||||
/* is the point before the first edge? */
|
||||
edge = edges;
|
||||
delta = edge->fpos - u;
|
||||
if ( delta >= 0 )
|
||||
{
|
||||
u = edge->pos - ( edge->opos - ou );
|
||||
goto Store_Point;
|
||||
}
|
||||
|
||||
/* is the point after the last edge? */
|
||||
edge = edge_limit - 1;
|
||||
delta = u - edge->fpos;
|
||||
if ( delta >= 0 )
|
||||
{
|
||||
u = edge->pos + ( ou - edge->opos );
|
||||
goto Store_Point;
|
||||
}
|
||||
|
||||
{
|
||||
FT_UInt min, max, mid;
|
||||
FT_Pos fpos;
|
||||
|
||||
|
||||
/* find enclosing edges */
|
||||
min = 0;
|
||||
max = edge_limit - edges;
|
||||
|
||||
while ( min < max )
|
||||
{
|
||||
mid = ( max + min ) >> 1;
|
||||
edge = edges + mid;
|
||||
fpos = edge->fpos;
|
||||
|
||||
if ( u < fpos )
|
||||
max = mid;
|
||||
else if ( u > fpos )
|
||||
min = mid + 1;
|
||||
else
|
||||
{
|
||||
/* we are on the edge */
|
||||
u = edge->pos;
|
||||
goto Store_Point;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
AF_Edge before = edges + min - 1;
|
||||
AF_Edge after = edges + min + 0;
|
||||
|
||||
|
||||
/* assert( before && after && before != after ) */
|
||||
if ( before->scale == 0 )
|
||||
before->scale = FT_DivFix( after->pos - before->pos,
|
||||
after->fpos - before->fpos );
|
||||
|
||||
u = before->pos + FT_MulFix( fu - before->fpos,
|
||||
before->scale );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Store_Point:
|
||||
|
||||
/* save the point position */
|
||||
if ( dim == AF_DIMENSION_HORZ )
|
||||
point->x = u;
|
||||
else
|
||||
point->y = u;
|
||||
|
||||
point->flags |= touch_flag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* W E A K P O I N T I N T E R P O L A T I O N
|
||||
*
|
||||
*/
|
||||
|
||||
static void
|
||||
af_iup_shift( AF_Point p1,
|
||||
AF_Point p2,
|
||||
AF_Point ref )
|
||||
{
|
||||
AF_Point p;
|
||||
FT_Pos delta = ref->u - ref->v;
|
||||
|
||||
|
||||
for ( p = p1; p < ref; p++ )
|
||||
p->u = p->v + delta;
|
||||
|
||||
for ( p = ref + 1; p <= p2; p++ )
|
||||
p->u = p->v + delta;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
af_iup_interp( AF_Point p1,
|
||||
AF_Point p2,
|
||||
AF_Point ref1,
|
||||
AF_Point ref2 )
|
||||
{
|
||||
AF_Point p;
|
||||
FT_Pos u;
|
||||
FT_Pos v1 = ref1->v;
|
||||
FT_Pos v2 = ref2->v;
|
||||
FT_Pos d1 = ref1->u - v1;
|
||||
FT_Pos d2 = ref2->u - v2;
|
||||
|
||||
|
||||
if ( p1 > p2 )
|
||||
return;
|
||||
|
||||
if ( v1 == v2 )
|
||||
{
|
||||
for ( p = p1; p <= p2; p++ )
|
||||
{
|
||||
u = p->v;
|
||||
|
||||
if ( u <= v1 )
|
||||
u += d1;
|
||||
else
|
||||
u += d2;
|
||||
|
||||
p->u = u;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ( v1 < v2 )
|
||||
{
|
||||
for ( p = p1; p <= p2; p++ )
|
||||
{
|
||||
u = p->v;
|
||||
|
||||
if ( u <= v1 )
|
||||
u += d1;
|
||||
else if ( u >= v2 )
|
||||
u += d2;
|
||||
else
|
||||
u = ref1->u + FT_MulDiv( u - v1, ref2->u - ref1->u, v2 - v1 );
|
||||
|
||||
p->u = u;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( p = p1; p <= p2; p++ )
|
||||
{
|
||||
u = p->v;
|
||||
|
||||
if ( u <= v2 )
|
||||
u += d2;
|
||||
else if ( u >= v1 )
|
||||
u += d1;
|
||||
else
|
||||
u = ref1->u + FT_MulDiv( u - v1, ref2->u - ref1->u, v2 - v1 );
|
||||
|
||||
p->u = u;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FT_LOCAL_DEF( void )
|
||||
af_glyph_hints_align_weak_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim )
|
||||
{
|
||||
AF_Point points = hints->points;
|
||||
AF_Point point_limit = points + hints->num_points;
|
||||
AF_Point* contour = hints->contours;
|
||||
AF_Point* contour_limit = contour + hints->num_contours;
|
||||
AF_Flags touch_flag;
|
||||
AF_Point point;
|
||||
AF_Point end_point;
|
||||
AF_Point first_point;
|
||||
|
||||
|
||||
/* PASS 1: Move segment points to edge positions */
|
||||
|
||||
if ( dim == AF_DIMENSION_HORZ )
|
||||
{
|
||||
touch_flag = AF_FLAG_TOUCH_X;
|
||||
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
{
|
||||
point->u = point->x;
|
||||
point->v = point->ox;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
touch_flag = AF_FLAG_TOUCH_Y;
|
||||
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
{
|
||||
point->u = point->y;
|
||||
point->v = point->oy;
|
||||
}
|
||||
}
|
||||
|
||||
point = points;
|
||||
|
||||
for ( ; contour < contour_limit; contour++ )
|
||||
{
|
||||
point = *contour;
|
||||
end_point = point->prev;
|
||||
first_point = point;
|
||||
|
||||
while ( point <= end_point && !( point->flags & touch_flag ) )
|
||||
point++;
|
||||
|
||||
if ( point <= end_point )
|
||||
{
|
||||
AF_Point first_touched = point;
|
||||
AF_Point cur_touched = point;
|
||||
|
||||
|
||||
point++;
|
||||
while ( point <= end_point )
|
||||
{
|
||||
if ( point->flags & touch_flag )
|
||||
{
|
||||
/* we found two successive touched points; we interpolate */
|
||||
/* all contour points between them */
|
||||
af_iup_interp( cur_touched + 1, point - 1,
|
||||
cur_touched, point );
|
||||
cur_touched = point;
|
||||
}
|
||||
point++;
|
||||
}
|
||||
|
||||
if ( cur_touched == first_touched )
|
||||
{
|
||||
/* this is a special case: only one point was touched in the */
|
||||
/* contour; we thus simply shift the whole contour */
|
||||
af_iup_shift( first_point, end_point, cur_touched );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* now interpolate after the last touched point to the end */
|
||||
/* of the contour */
|
||||
af_iup_interp( cur_touched + 1, end_point,
|
||||
cur_touched, first_touched );
|
||||
|
||||
/* if the first contour point isn't touched, interpolate */
|
||||
/* from the contour start to the first touched point */
|
||||
if ( first_touched > points )
|
||||
af_iup_interp( first_point, first_touched - 1,
|
||||
cur_touched, first_touched );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* now save the interpolated values back to x/y */
|
||||
if ( dim == AF_DIMENSION_HORZ )
|
||||
{
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
point->x = point->u;
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( point = points; point < point_limit; point++ )
|
||||
point->y = point->u;
|
||||
}
|
||||
}
|
|
@ -1,241 +0,0 @@
|
|||
#ifndef __AFHINTS_H__
|
||||
#define __AFHINTS_H__
|
||||
|
||||
#include "aftypes.h"
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/*
|
||||
* The definition of outline glyph hints. These are shared by all
|
||||
* script analysis routines (until now)
|
||||
*
|
||||
*/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AF_DIMENSION_HORZ = 0, /* x coordinates, i.e. vertical segments & edges */
|
||||
AF_DIMENSION_VERT = 1, /* y coordinates, i.e. horizontal segments & edges */
|
||||
|
||||
AF_DIMENSION_MAX /* do not remove */
|
||||
|
||||
} AF_Dimension;
|
||||
|
||||
|
||||
/* hint directions -- the values are computed so that two vectors are */
|
||||
/* in opposite directions iff `dir1+dir2 == 0' */
|
||||
typedef enum
|
||||
{
|
||||
AF_DIR_NONE = 4,
|
||||
AF_DIR_RIGHT = 1,
|
||||
AF_DIR_LEFT = -1,
|
||||
AF_DIR_UP = 2,
|
||||
AF_DIR_DOWN = -2
|
||||
|
||||
} AF_Direction;
|
||||
|
||||
|
||||
/* point hint flags */
|
||||
typedef enum
|
||||
{
|
||||
AF_FLAG_NONE = 0,
|
||||
|
||||
/* point type flags */
|
||||
AF_FLAG_CONIC = (1 << 0),
|
||||
AF_FLAG_CUBIC = (1 << 1),
|
||||
AF_FLAG_CONTROL = AF_FLAG_CONIC | AF_FLAG_CUBIC,
|
||||
|
||||
/* point extremum flags */
|
||||
AF_FLAG_EXTREMA_X = (1 << 2),
|
||||
AF_FLAG_EXTREMA_Y = (1 << 3),
|
||||
|
||||
/* point roundness flags */
|
||||
AF_FLAG_ROUND_X = (1 << 4),
|
||||
AF_FLAG_ROUND_Y = (1 << 5),
|
||||
|
||||
/* point touch flags */
|
||||
AF_FLAG_TOUCH_X = (1 << 6),
|
||||
AF_FLAG_TOUCH_Y = (1 << 7),
|
||||
|
||||
/* candidates for weak interpolation have this flag set */
|
||||
AF_FLAG_WEAK_INTERPOLATION = (1 << 8),
|
||||
|
||||
/* all inflection points in the outline have this flag set */
|
||||
AF_FLAG_INFLECTION = (1 << 9)
|
||||
|
||||
} AF_Flags;
|
||||
|
||||
|
||||
/* edge hint flags */
|
||||
typedef enum
|
||||
{
|
||||
AF_EDGE_NORMAL = 0,
|
||||
AF_EDGE_ROUND = (1 << 0),
|
||||
AF_EDGE_SERIF = (1 << 1),
|
||||
AF_EDGE_DONE = (1 << 2)
|
||||
|
||||
} AF_Edge_Flags;
|
||||
|
||||
|
||||
|
||||
typedef struct AF_PointRec_* AF_Point;
|
||||
typedef struct AF_SegmentRec_* AF_Segment;
|
||||
typedef struct AF_EdgeRec_* AF_Edge;
|
||||
|
||||
|
||||
typedef struct AF_PointRec_
|
||||
{
|
||||
AF_Flags flags; /* point flags used by hinter */
|
||||
FT_Pos ox, oy; /* original, scaled position */
|
||||
FT_Pos fx, fy; /* original, unscaled position (font units) */
|
||||
FT_Pos x, y; /* current position */
|
||||
FT_Pos u, v; /* current (x,y) or (y,x) depending on context */
|
||||
|
||||
AF_Direction in_dir; /* direction of inwards vector */
|
||||
AF_Direction out_dir; /* direction of outwards vector */
|
||||
|
||||
AF_Point next; /* next point in contour */
|
||||
AF_Point prev; /* previous point in contour */
|
||||
|
||||
} AF_PointRec;
|
||||
|
||||
|
||||
typedef struct AF_SegmentRec_
|
||||
{
|
||||
AF_Edge_Flags flags; /* edge/segment flags for this segment */
|
||||
AF_Direction dir; /* segment direction */
|
||||
FT_Pos pos; /* position of segment */
|
||||
FT_Pos min_coord; /* minimum coordinate of segment */
|
||||
FT_Pos max_coord; /* maximum coordinate of segment */
|
||||
|
||||
AF_Edge edge; /* the segment's parent edge */
|
||||
AF_Segment edge_next; /* link to next segment in parent edge */
|
||||
|
||||
AF_Segment link; /* (stem) link segment */
|
||||
AF_Segment serif; /* primary segment for serifs */
|
||||
FT_Pos num_linked; /* number of linked segments */
|
||||
FT_Pos score; /* used during stem matching */
|
||||
|
||||
AF_Point first; /* first point in edge segment */
|
||||
AF_Point last; /* last point in edge segment */
|
||||
AF_Point* contour; /* ptr to first point of segment's contour */
|
||||
|
||||
} AF_SegmentRec;
|
||||
|
||||
|
||||
typedef struct AF_EdgeRec_
|
||||
{
|
||||
FT_Pos fpos; /* original, unscaled position (font units) */
|
||||
FT_Pos opos; /* original, scaled position */
|
||||
FT_Pos pos; /* current position */
|
||||
|
||||
AF_Edge_Flags flags; /* edge flags */
|
||||
AF_Direction dir; /* edge direction */
|
||||
FT_Fixed scale; /* used to speed up interpolation between edges */
|
||||
AF_Width blue_edge; /* non-NULL if this is a blue edge */
|
||||
|
||||
AF_Edge link;
|
||||
AF_Edge serif;
|
||||
FT_Int num_linked;
|
||||
|
||||
FT_Int score;
|
||||
|
||||
AF_Segment first;
|
||||
AF_Segment last;
|
||||
|
||||
} AF_EdgeRec;
|
||||
|
||||
|
||||
typedef struct AF_AxisHintsRec_
|
||||
{
|
||||
FT_Int num_segments;
|
||||
AF_Segment segments;
|
||||
|
||||
FT_Int num_edges;
|
||||
AF_Edge edges;
|
||||
|
||||
AF_Direction major_dir;
|
||||
|
||||
} AF_AxisHintsRec, *AF_AxisHints;
|
||||
|
||||
|
||||
typedef struct AF_GlyphHintsRec_
|
||||
{
|
||||
FT_Memory memory;
|
||||
|
||||
FT_Fixed x_scale;
|
||||
FT_Pos x_delta;
|
||||
|
||||
FT_Fixed y_scale;
|
||||
FT_Pos y_delta;
|
||||
|
||||
FT_Pos edge_distance_threshold;
|
||||
|
||||
FT_Int max_points;
|
||||
FT_Int num_points;
|
||||
AF_Point points;
|
||||
|
||||
FT_Int max_contours;
|
||||
FT_Int num_contours;
|
||||
AF_Point* contours;
|
||||
|
||||
AF_AxisHintsRec axis[ AF_DIMENSION_MAX ];
|
||||
|
||||
FT_UInt32 scaler_flags; /* copy of scaler flags */
|
||||
FT_UInt32 other_flags; /* free for script-specific implementations */
|
||||
AF_ScriptMetrics metrics;
|
||||
|
||||
} AF_GlyphHintsRec;
|
||||
|
||||
|
||||
#define AF_HINTS_TEST_SCALER(h,f) ( (h)->scaler_flags & (f) )
|
||||
#define AF_HINTS_TEST_OTHER(h,f) ( (h)->other_flags & (f) )
|
||||
|
||||
#define AF_HINTS_DO_HORIZONTAL(h) \
|
||||
!AF_HINTS_TEST_SCALER(h,AF_SCALER_FLAG_NO_HORIZONTAL)
|
||||
|
||||
#define AF_HINTS_DO_VERTICAL(h) \
|
||||
!AF_HINTS_TEST_SCALER(h,AF_SCALER_FLAG_NO_VERTICAL)
|
||||
|
||||
#define AF_HINTS_DO_ADVANCE(h) \
|
||||
!AF_HINTS_TEST_SCALER(h,AF_SCALER_FLAG_NO_ADVANCE)
|
||||
|
||||
|
||||
FT_LOCAL( AF_Direction )
|
||||
af_direction_compute( FT_Pos dx,
|
||||
FT_Pos dy );
|
||||
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_init( AF_GlyphHints hints,
|
||||
FT_Memory memory );
|
||||
|
||||
|
||||
|
||||
/* recomputes all AF_Point in a AF_GlyphHints from the definitions
|
||||
* in a source outline
|
||||
*/
|
||||
FT_LOCAL( FT_Error )
|
||||
af_glyph_hints_reset( AF_GlyphHints hints,
|
||||
AF_Scaler scaler,
|
||||
FT_Outline* outline );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_align_edge_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_align_strong_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_align_weak_points( AF_GlyphHints hints,
|
||||
AF_Dimension dim );
|
||||
|
||||
FT_LOCAL( void )
|
||||
af_glyph_hints_done( AF_GlyphHints hints );
|
||||
|
||||
/* */
|
||||
|
||||
FT_END_HEADER
|
||||
|
||||
#endif /* __AFHINTS_H__ */
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue