* *.mk: Implemented `platform' target to disable auto-detection.
Added support for clipped direct rendering in the smooth renderer.
This should not break binary compatibility of existing applications.
* include/freetype/fttypes.h, include/freetype/ftimage.h: Move
definition of the FT_BBox structure from the former to the latter.
* include/freetype/ftimage.h: Add `ft_raster_flag_clip' value to
FT_Raster_Flag enumeration.
Add `clip_box' element to FT_Raster_Params structure.
* src/smooth/ftgrays.c (grays_convert_glyph): Implement it.
* src/raster/ftraster.c (ft_black_render): Test for unsupported
direct rendering before testing arguments.
to use direct definitions. This is the only way to do these things
in a portable way :-( The rest of the code should follow shortly
though everything compiles now.
* builds/compiler/intelc.mk, builds/compiler/watcom.mk: New files.
* builds/win32/detect.mk: Added support for the Intel C/C++
compiler, as well as _preliminary_ (read: doesn't work!) support for
Watcom. Also added a new setup target. Type "make setup list" for
a list of supported command-line compilers on Win32.
* src/base/ftdebug.c: Added dummy symbol to avoid empty file if
conditionals are off.
include/freetype/internal/internal.h: fixed header inclusion macros
to use direct definitions. This is the only way to do these things
in a portable way :-( The rest of the code should follow shortly
though everything compiles now..
* builds/compiler/intelc.mk, builds/compiler/watcom.mk,
builds/win32/detect.mk: added support for the Intel C/C++ compiler,
as well as _preliminary_ (read: doesn't work !!) support for Watcom.
Also added a new setup target. Type "make setup list" for a list
of supported command-line compilers on Win32..
Removed. ANSI C doesn't (explicitly) allow macro expansion in
arguments using `##'.
(FT2_PUBLIC_FILE, FT2_CONFIG_FILE, FT2_INTERNAL_FILE): Use directory
names directly. Make them configurable. Use `##' to strip leading
and trailing spaces from arguments.
* builds/unix/ft2unix.h: Adapted.
* src/base/ftsystem.c (ft_alloc, ft_realloc, ft_free, ft_io_stream,
ft_close_stream): Use FT_CALLBACK_DEF.
* builds/unix/ftsystem.c: Use new header scheme.
(FT_Done_Memory): Use free() from FT_Memory structure.
* src/base/ftinit.c, src/base/ftmac.c: Header scheme fixes.
* include/freetype/config/ft2build.h (FT2_CONFIG_ROOT,
FT2_PUBLIC_FILE, FT2_CONFIG_FILE, FT2_INTERNAL_FILE,
FT_SOURCE_FILE): Use `##' operator to be really ANSI C compliant.
`__' (those which haven't converted yet). Fixed minor conversion
issues.
* src/winfonts/winfnt.c: Updated to new header inclusion scheme.
* */*.[ch]: Changed source files to adhere to the new
* src/cff/cff.c, src/cff/rules.mk: Updated.
* */*.[ch]: Now using <ft2build.h> as the default build and setup
* builds/os2/detekt.mk, builds/win32/detekt.mk: Moved comment to
avoid trailing spaces in variable.
* builds/freetype.mk: Use $(D) instead of $D to make statement more
readable.
* docs/docmaker.py: Formatting.
* src/psaux/psauxmod.c: Fixed a broken inclusion of component
header files (an FT_FLAT_COMPILE test was missing).
* src/cache/ftcmanag.c (FTC_Manager_Done): Fixed a bug that caused
an occasional crash when the function was called (due to a dangling
pointer).
* src/base/ftsystem.c (FT_Done_Memory): Fixed an obvious bug:
The ANSI "free()" function was called instead of "memory->free()".
* docs/docmaker.py: Added section filtering, multi-page generation
(index page generation is still missing though).
* builds/unix/install.mk, builds/unix/ft2unix.h: The file "ft2unix.h"
is now installed as <ft2build.h> for Unix systems. Note that we
still use the "freetype2/freetype" installation path for now.
* many files: Now using <ft2build.h> as the default build and setup
configuration file in all public headers. Internal source files
still need some changes though.
* builds/devel/ft2build.h, builds/devel/ftoption.h: Created a new
Win32 developer builds.
builds/win32/w32-dev.mk: Changed the developer build targets to
"devel-gcc" and "devel-bcc" in order to be able to develop with the
Borland C++ compiler.
default..
- created "builds/devel" to hold developer builds options
for both Win32 and Unix
- fixed a bug in the winfonts driver, where the glyph image format
wasn't set correctly..
in the "builds" directory
- modified a few files because BCC32 didn't like certain comparisons
(UInt compared with a UShort, apparently the UShort is promoted to
an Int)
- updated the INSTALL file to include IDE compilation, prevent against
BSD Make, and clarify the use of "make setup" (instead of "make")
for build configuration
conditionally.
* src/truetype/ttdriver.c (Set_Char_Sizes, Set_Pixel_Sizes): Set
`size->strike_index' only conditionally.
* src/type1/t1driver.c, src/type1/t1objs.c: Include t1afm.h only
conditionally.
* src/winfonts/winfnt.h: Move all type definitions to...
* src/include/freetype/internal/fnttypes.h: New file.
* src/winfonts/winfnt.c: Use it.
* include/freetype/internal/ftdebug.h: Replaced FT_CAT and FT_XCAT
with a direct solution (which also satifies picky compilers).
to be more robust. The code now takes into account glyphs that
1. have the width given as it is, rather than as a difference against
`nominal_width', and
2. have the width operand specified before one of the h/r/vmoveto
commands or the endchar command.
function from PSAux module.
* src/type1/t1parse.c (T1_Done_Parse): Renamed to...
(T1_Finalize_Parser): New function (to avoid name clash with a
function in the PSAux module).
(T1_Decrypt): Removed since it it duplicated in the PSAux module.
(T1_Get_Private_Dict): Added `psaux' as new parameter; use decrypt
function from PSAux module.
* src/type1/t1parse.h: Adapted.
if a `bhed' or `head' table is being read.
In function TT_LookUp_Table, change tracing output to indicate success
or failure of table loading, and place output on one line.
I've made a few modifications:
- there is no new field named "driver" in "FT_SizeRec"
- the new fields in "TT_SizeRec" are:
strike_index :: value 0xFFFF means "no sbit strike selected"
strike_metrics :: the FT_Size_Metrics structure corresponding to
the currently selected strike
- the code in "ttload.c" has been somewhat cleaned up too
thanks a lot, Y-U !!
- David
the concrete "FTC_Image_Cache" and "FTC_SBit_Cache" to the abstract
"FTC_Glyph_Cache" and "FTC_Chunk_Cache", respectively..
note: this is not the end of changes to the cache sub-system
objects:
FT_Face_Internal, FT_Size_Internal, FT_Slot_Internal
these contain some fields that may change between releases
of FreeType, without affecting the size of FT_FaceRec,
FT_SizeRec, FT_GlyphSlotRec, etc.., which means that
drivers wouldn't need to be recompiled if we only add new
fields to an internal structure..
I plan to hack a few things related to the auto-hinter and
I need this move to ensure that we will not break binary
compatibility between 2.0 and 2.1 :-)
- David
- reworked slightly the cache manager to better
differentiate between the abstract class in "ftcglyph.h"
and the FT_Glyph sub-class in "ftcimage.h", and
slightly reduced the size of FTC_GlyphNodeRec, saving
8 bytes on a 32-bit system. Yes, I'm crazy ;-)
- added build files to compile with LCC on Unix too
(compile speeds _are_ insane with it). There is unfortunately
a bug in the version I'm using (LCC 4.1) that prevents it
to compile FT_MulTo64 correctly (in src/base/ftcalc.c)
the generated assembly is incorrect, I don't know what
to do ?? the build files are ok, though..
you should invoke "make setup lcc" to select them..
Fixed some data types/added header files to remove compiler warnings.
Added trivial input data check to FT_Outline_Get_BBox().
Fixed type1z -> type1 file inclusions.
"type1z" -> "type1"
"raster1" -> "raster"
note that I didn't rename all files. We'll have to endure
the "z1..." crazyness unless we perform a _big_ sed on
the sources :-)
.notdef in each entry.
In function parse_charstrings, place the .notdef glyph in index 0, and
add a .notdef glyph if it is missing.
In function Z1_Open_Face, only change min/max encoded char if it is not
.notdef.
- one bug in the auto-hinter that could cause some program
crashes with certain fonts
- fixed the loading of the font matrix "offset" parameters
in Type 1 and CID-keyed fonts..
Adding a new error, FT_Err_Invalid_Pixel_Size (used in winfnt.c)
Fixing FT_Read_Fields() which failed for ft_frame_{bytes,skip}. This bug
disabled the Winfont driver.
Minor formatting issues.
in monochrome mode..
actually, when outline.num_points == 0, it is legal
to have outline.points == 0 too. The code did return
a FT_Err_Invalid_Outline error incorrectly then because
the checks were not performed in the correct order
16.16 square root of a 16.16 number (this could come handy
in a later version of the auto-hinter)
- small fixes to the smooth renderer. It used to use way too
much line segments when drawing beziers !!
its API to enable many kinds of glyph images..
(note that the "ftview" program has been changed to
use the caching sub-system, "ftmulti" and "ftstring"
should come soon).
baseline-to-baseline distance).
Unfortunately, we cannot rely on the OS/2 fields, like
sTypoAscender or usWinAscent to compute it. Rather,
we only look at the horizontal header's content. In case
the "line gap" is set to 0, we compute the text height as
115% of the ascender+descender value..
(this percentage is based on the values found in many
Windows fonts).
The Type 1 driver now completely relies on "psaux". I
now need to change the CID driver accordingly, then
finally move the Type 2 parsing routines to "psaux"
when appropriate..
Werner, please do not start re-formatting my experimental
code until I declare it "finished", because I still make big
changes to it that create lots of CVS conflicts..
thanks for your work, anyway :-)
More C++ fixes: Introducing LOCAL_FUNC_X for local functions used in
function pointers (there are no local anonymous functions in C++) and
FT_CPLUSPLUS (instead of FT_EXPORT_VAR) to define linkage of structures
which contain function pointers.
Instead, define BASE_DEF() and BASE_FUNC() similarly to FT_EXPORT_DEF() and
FT_EXPORT_FUNC(), respectively, allowing the programmer to define proper
types and/or export lists for multiple DLLs if necessary (e.g. ftbase.dll --
standalone, fttype1.dll -- needs ftbase.dll, etc.).
The library is finally compiling and linking natively with a C++ compiler!
you should #define FT_STRUCTURE to the structure which will be filled.
Replaced FT_FIELD_REF with FT_FIELD_SIZE, FT_FIELD_SIZE_DELTA, and
FT_FIELD_OFFSET to make the code more readable; additionally, it should be
more portable because we no longer cast a pointer to an FT_UShort (which
e.g. fails with Sun's C++ compiler) but computes the difference between two
pointers which is guaranteed to work.
Fixing warnings (and C++ errors) while using Sun's latest cc and CC
incarnations. Most of them are related to variable shadowing.
the filling direction of each glyph is now re-computed on the
fly, given that we cannot rely on the "flags" field of the
source outline..
this fixes problems with many fonts, including the Arphic ones
(not to say that CJK fonts are handled better for now though..)
Now unix.in uses absolute paths also to overcome problems with libtool.
To do that in a consistent way I had to modify the rules how to handle
$OBJ_DIR (and consequently $LIB_DIR): You should set $OBJ_DIR explicitly
on the command line (or environment).
- disabled the TrueType interpreter by default
- disabled the "type1" driver, "type1z" is now used
by default (the internal driver name is "type1" now !!)
Formatting.
Replacing many enums with #defines since we do arithmetics (especially
ORing which would produce undefined enum values). The ideal thing instead
of #defines is `const int' as provided in C++...
Adding header files to rules.mk
- removed a stupid memory leak
- fixed the weird metrics hinting (the horizontal edges were used,
instead of the vertical one, to compute the metrics adjustments,
silly, silly, silly).
there is still some bugs that I'm looking at though, but we're
very near the release..
to access individual glyph names. Changed some
drivers to support it through a new interface named
"glyph_name".
- introduced FT_Get_Sfnt_Name (see ftnames.h)
to access the SFNT name table in a TrueType/OpenType
file..
Moving some internal structures and constants from freetype.h to ftobjs.h.
Finally removing FT_LOAD_ANTI_ALIAS.
Cleaning up all error codes. Only the used ones have survived :-)
Removed unused FT_MAX_GLYPH_FORMATS constant.
T2 error codes are now in the range 0x500-0x5FF (instead of `TrueDoc').
Some minor improvements of error return values.
Finally fixing error code values in ftraster and ftgrays to be compliant
with all other FT error codes.
compiler behaviour on DEC Unix
also preliminary support for CEF fonts. I can
see the glyphs in "ftview" but need to complete
the Unicode charmap support..
C++ programs easier:
Renamed FT_WordXX to FT_UIntXX.
Changed a lot of void* to FT_Byte* if related to i/o streams -- FreeType
always accesses streams byte-wise, so this makes sense IMHO.
Added a lot of #ifdef __cplusplus to header files (and removed a few).
Other minor syntax fixes (mostly casts).
Replaced the variable `private' with `private_dict' -- `private' is
reserved in C++.
- using FT_UNUSED instead of UNUSED
- using FT_LONG64 and FT_INT64 instead of LONG64 & INT64
- using FT_SIZEOF_INT & FT_SIZEOF_LONG instead of...
- removed the #ifdefs that used SIZEOF_INT, instead we now
use FT_Int32 and FT_UInt32 when needed to support
32-bits quantity correctly on 64-bits systems..
Adding trivial argument checking to some functions.
Added dynamic driver interface to cidriver.
Minor `version' fixes for macfont and psnames modules.
Removed unnecessary files
It is now really the "glyph factory" that Stefan was probably
dreaming about..
fixed some recent formatting errors from Werner ;-)
cleaned up the demonstration programs from most of the
rust that they had, though I'm sure someone is going to
re-format them really soon !!
"ftstring" now uses the new ftglyph.h API, and is now
faster and smaller.. yep..
the lenIV field is set to -1 to indicate unencoded charstrings
fixed some source code to prevent a compiler bug on IRIX
fixed the module version's in the "type1z" driver
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
rid of most of the basic types redefinitions (i.e. FT_Int instead
of "FT_Int", etc..)
The format-specific prefixs like "TT_", "T1_", "T2_" & 'CID_"
are now only used in relevant structures..
fixed Werner's fix to t2gload.c :-)
other small bug fixes
Tons of unnecessary stuff have been removed; only the essential rules
have been retained.
The source files now depend on all header files in include/freetype,
include/freetype/config, and include/freetype/internal. This is not
optimal, I know, and I'll try to improve this, but it is better than
before (namely no dependencies on `internal').
FTDEBUG_SRC has been added (similar to FTSYS_SRC) -- I don't know
exactly whether this is really useful, but it doesn't harm.
There is now more documentation in the makefiles itself.
io-frames.html: Use of <th>, <code>, and <var> for better tagging.
Reactivating of FT_DEBUG_LEVEL_xxx macros.
Added a lot of #include directives to make `multi' builds possible -- note
that currently the modules cid, t1, and t1z have clashing structures and
functions which means that you can only use one of these three modules for a
multi build.
Added some missing function declarations to (local) header files.
Renamed some T1_Open_Face() to CID_Open_Face() in the cid module -- a lot
of other functions should be renamed also...
Replaced many FT_xxx stuff with T1_xxx in t1z driver -- this isn't finished
yet...
Fixed FT_Free() to allow a NULL pointer without an assertion (this has
always been a valid assumption in FreeType, at least in FT 1.x).
A lot of other, minor fixes (mostly documentation).
Added a lot of \n to tracing messages.
Fixed a serious bug in loading SBit offsets (missing parentheses around a
xxx ? yyy : zzz construct).
Replaced most GET_xxx() functions with calls to READ_Frame() in ttsbit.c
trace level.
Since FT2 is still beta, I've activated the FT_DEBUG_xxx macros by default.
To make reasonable output, I've changed some TRACEx macros to other levels.
checking based on the "search_rang", etc.., fields of
the sfnt header..
This avoids problems (like certain Type 1 multiple masters
incorrectly recognized as trueType files)..
now working, but there is no way currently to change the default
weight vector (tested with custom vectors though).
Note that you should remove the "type1" driver from the
module list to be able to test it..
limit on the number of subglyphs in a TrueType font..
changed the default number of gray levels used by the
smooth renderer to 256 (instead of 128). Of course, the
human eye can't tell a difference ;-)
compiler warnings with GCC + "-ansi -pedantic -Wall -W"
and LCC.
Also fixed the compilation of "type1z" with Win32-LCC
(its pre-processor is broken !!)
Updated the BUILD document too
EXPORT_FUNC, BASE_DEF and BASE_FUNC macros to
let them take an argument..
This is needed to compile the library as a DLL on some platforms
that have different compiler conventions..
- there is now a "convenience" API to manage glyphs in
"include/ftglyph.h". See the demo program "ftstring" for
an example..
- the raster interface has been changed in order to allow
direct composition through user-provided callbacks. This
has been tested but isn't demonstrated for now in "demos"
- the FT_LOAD_NO_RECURSE flag is supported, as this is
required by some new code in the auto-hinting engine
- some bug fixed in FT_MulFix which made FT_xxx_Transform
return incorrect results..
- ft_done_stream: remove the FREE(pathname) call, which wasn't
kosher
- FT_Open_Face: after calling open_face, don't assume driver is
the same as face->driver, use face->driver instead
fixed:
. Removing unused variables.
. detect.mk files now must provide $(CONFIG_FILE) and not $(CONFIG_RULE).
. ansi.mk will now be really used as a fallback if the detect mechanism
fails.
. ANSIFLAGS will now be really used (fixing a typo).
. `make clean' now works (again two typos).
. Detection of gcc on Unix has been fixed (using the `-v' option instead of
`--version').
. `make devel' now works (on Unix).
. Fixing *again* a bug in demos/graph/x11/rules.mk to allow multiple use
of `-L' compiler options.
. $(BASE_H) now contains a few more header files.
As usual, a lot of formatting (not finished yet).
sources. This is not a port of the OTL extension
of FT 1.x, as it uses a very different design.
These sources are placed here for comments
and peer-review