Commit Graph

3695 Commits

Author SHA1 Message Date
Werner Lemberg
b7fc0c7461 [autofit] Slight simplifications.
* src/autofit/aflatin.c (af_latin_hints_link_segments): Remove
test which always returns false.
(af_latin_hints_compute_blue_edges): Remove redundant assignment.
2011-02-26 18:36:21 +01:00
Werner Lemberg
6cfbb23ca3 [autofit] Some comments. Whitespace. 2011-02-26 17:32:38 +01:00
Werner Lemberg
e7d1fb3142 * docs/PROBLEMS: Mention rendering differences on different
platforms.
Suggested and worded by Jason Owen <jason.a.owen@gmail.com>.
2011-02-24 20:01:00 +01:00
Werner Lemberg
6c28689691 [autofit] Comment out unused code.
* src/autofit/aflatin.c, src/autofit/aflatin2.c
(af_latin_hints_compute_edges): Do it.
2011-02-24 05:52:14 +01:00
Werner Lemberg
f42cc539e0 * src/autofit/afhints.h (AF_GlyphHints): Remove unused field. 2011-02-24 05:18:46 +01:00
Werner Lemberg
6af024231b [autofit] Add ASCII drawing for better explanation. 2011-02-22 10:29:30 +01:00
suzuki toshiya
ae6d1d7b98 [cache] Fix an off-by-one bug in FTC_Manager_RemoveFaceID().
Found by <ychen1392001@yahoo.com.cn>, see detail in

  http://lists.gnu.org/archive/html/freetype/2011-01/msg00023.html

* src/cache/ftccache.c (FTC_Cache_RemoveFaceID): Check the node
buckets[cache->p + cache->mask] too.
2011-02-20 19:14:25 +09:00
Werner Lemberg
7ad15d5926 [autofit] Document warper. 2011-02-20 07:30:46 +01:00
Kevin Kofler
ff8095077c Fall back to autohinting if a TTF/OTF doesn't contain any bytecode.
This is Savannah patch #7471.

* src/base/ftobjs.c (FT_Load_Glyph): Implement it.
2011-02-19 23:09:26 +01:00
John Tytgat
18fffa456e [cff] Fix subset prefix removal.
* src/cff/cffobjs.c (remove_subset_prefix): Update length after
subset prefix removal.
2011-02-19 07:11:17 +01:00
Werner Lemberg
c5bda503b9 [autofit] Add a lot of comments and do some minor formatting. 2011-02-16 21:59:44 +01:00
Werner Lemberg
dd6c38fac7 Convert to CRLF. 2011-02-14 08:37:30 +01:00
Bradley Grainger
70f7db113e Add inline assembly version of FT_MulFix for MSVC.
* include/freetype/config/ftconfig.h: Ported the FT_MulFix_i386
function from GNU inline assembly syntax (see #ifdef __GNUC__ block
above) to MASM syntax for Microsoft Visual C++.
2011-02-14 08:32:24 +01:00
Bradley Grainger
d2731e104c Add project and solution files in Visual Studio 2010 format.
* builds/win32/.gitignore: Ignore user-specific cache files.
* builds/win32/vc2010/: Add VS2010 project & solution files, created
by upgrading builds/win32/vc2008/freetype.vcproj.
* objs/.gitignore: Ignore Visual Studio output files.
2011-02-14 08:32:24 +01:00
Werner Lemberg
713faece86 * src/autofit/afdummy.c: Include `aferrors.h'.
Problem reported by Chris Liddel <chris.liddell@artifex.com>.
2011-02-03 19:47:13 +01:00
Werner Lemberg
75df70600f [cff] Ignore unknown operators in charstrings.
Patch suggested by Miles.Lau <sunliang_liu@foxitsoftware.com>.

* src/cff/cffgload.c (cff_decoder_parse_charstrings): Emit tracing
message for unknown operators and continue instead of exiting with a
syntax error.
2011-02-01 07:36:27 +01:00
Werner Lemberg
18931a5a5d [truetype] FT_LOAD_PEDANTIC now affects prep' and fpgm' also.
* src/truetype/ttgload.c (tt_loader_init): Handle
`FT_LOAD_PEDANTIC'.
* src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep,
tt_size_init_bytecode, tt_size_ready_bytecode): New argument to
handle pedantic mode.
* src/truetype/ttobjs.h: Updated.
2011-02-01 07:08:43 +01:00
Werner Lemberg
f1a981b5ce [truetype] Protect jump instructions against endless loops.
* src/truetype/interp.c (DO_JROT, DO_JMPR, DO_JROF): Exit with error
if offset is zero.
2011-01-31 22:26:53 +01:00
Werner Lemberg
d6a213f8ea [truetype] Improve handling of invalid references.
* src/truetype/interp.c: Set even more TT_Err_Invalid_Reference
error codes only if pedantic hinting is active.  At the same time,
try to provide sane values which hopefully allow useful
continuation.  Exception to this is CALL and LOOPCALL – due to
possible stack corruption it is necessary to bail out.
2011-01-31 18:51:07 +01:00
Werner Lemberg
96f0456483 [truetype] Improve handling of stack underflow.
* src/truetype/ttinterp.c (TT_RunIns, Ins_FLIPPT, Ins_DELTAP,
Ins_DELTAC): Exit with error only if `pedantic_hinting' is set.
Otherwise, try to do something sane.
2011-01-31 10:24:32 +01:00
Werner Lemberg
91a97164ca Whitespace. 2011-01-30 20:12:54 +01:00
Werner Lemberg
0682251e9f * src/sfnt/ttmtx.c (tt_face_load_hmtx): Fix tracing message. 2011-01-30 16:38:09 +01:00
LIU Sun-Liang
c61b3596d4 [truetype]: Fix behaviour of MIAP for invalid arguments.
* src/truetype/ttinterp.c (Ins_MIAP): Set reference points even in
case of error.
2011-01-30 16:29:45 +01:00
Werner Lemberg
332da87d99 [autofit] Some formatting and clean-ups. 2011-01-23 12:42:23 +01:00
Werner Lemberg
dcdb3167dc [truetype] Fix handling of MIRP instruction.
Thanks to Greg Hitchcock who explained the issue.

* src/truetype/ttinterp.c (Ins_MIRP): Replace a `>=' operator with
`>' since the description in the specification is incorrect.
This fixes, for example, glyph `two' in font `Helvetica Neue LT Com
65 medium' at 15ppem.
2011-01-18 07:35:26 +01:00
suzuki toshiya
17f54bc66c Fix ARM assembly code in include/freetype/config/ftconfig.h.
* include/freetype/config/ftconfig.h (FT_MulFix_arm):
Copy the maintained code from builds/unix/ftconfig.in.
Old GNU binutils could not accept the reduced syntax
`orr %0, %2, lsl #16'.  Un-omitted syntax like RVCT,
`orr %0, %0, %2, lsl #16' is better.  Reported by
Johnson Y. Yan.  The bug report by Qt developers is
considered too.

http://bugreports.qt.nokia.com/browse/QTBUG-6521
2011-01-15 21:53:32 +09:00
Werner Lemberg
21bdca7907 [raster] Make bbox handling the same as with Microsoft's rasterizer.
Right before B/W rasterizing, the bbox gets simply rounded to
integers.  This fixes, for example, glyph `three' in font `Helvetica
Neue LT Com 65 Medium' at 11ppem.

Thanks to Greg Hitchcock who explained this behaviour.

* src/raster/ftrend1.c (ft_raster1_render): Implement it.
2011-01-15 09:46:13 +01:00
suzuki toshiya
a2ef6647ae Copy -mcpu=* & -march=* options from CFLAGS to LDFLAGS.
* builds/unix/configure.raw: Consider recent gcc-standard
flags to specify architecture in CFLAGS & LDFLAGS
harmonization.  Requested by Savannah bug #32114, to
support multilib feature of BuildRoot SDK correctly.
2011-01-15 13:33:28 +09:00
suzuki toshiya
c68a82d8fc Fix off-by-one bug in CFLAGS & LDFLAGS harmonizer.
* builds/unix/configure.raw: Some important options that
included in CFLAGS but not in LDFLAGS are copied to
LDFLAGS, but the last option in CFLAGS was not checked.
2011-01-15 13:21:32 +09:00
Werner Lemberg
0039d0120e [raster] Add undocumented drop-out rule to the other bbox side also.
* src/raster/ftraster.c (Vertical_Sweep_Drop,
Horizontal_Sweep_Drop): Implement it.
2011-01-14 19:44:29 +01:00
Werner Lemberg
c02485cb72 [raster] Reduce jitter value.
This catches a rendering problem with glyph `x' from Tahoma at
10ppem.  It seems that the increase of the precision in the change
from 2009-06-11 makes a larger jitter value unnecessary.

* src/raster/ftraster.c (Set_High_Precision): Implement it.
2011-01-13 21:55:08 +01:00
Werner Lemberg
29bc310563 [raster] Handle drop-outs at glyph borders according to Microsoft.
If a drop-out rule would switch on a pixel outside of the glyph's
bounding box, use the right (or top) pixel instead.  This is an
undocumented feature, but some fonts like `Helvetica Neue LT Com 65
Medium' heavily rely on it.

Thanks to Greg Hitchcock who explained this behaviour.

* src/raster/ftraster.c (Vertical_Sweep_Drop,
Horizontal_Sweep_Drop): Implement it.
2011-01-13 12:22:55 +01:00
Werner Lemberg
3757b1e1c1 Cleanup/formatting. 2011-01-13 10:33:04 +01:00
suzuki toshiya
6b3bef2b20 Correct wrong years about recent commits in ChangeLog. 2011-01-09 23:11:18 +09:00
suzuki toshiya
5e7ad208e3 [cache] Fix Savannah bug #31923, patch drafted by Harsha.
When a node comparator changes the cached nodes during the
search of a node matching with queried properties, the
pointers obtained before the functon should be updated to
prevent the dereference to freed or reallocated nodes.
To minimize the rescan of the linked list, the update is
executed when the comparator notifies the change of cached
nodes. This change depends previous change:
38b272ffbb

* src/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP): Rescan the
top node if the cached nodes are changed.
* src/cache/ftccache.c (FTC_Cache_Lookup): Ditto.
2011-01-09 23:09:36 +09:00
suzuki toshiya
38b272ffbb [cache] Notice if a cache query induced the node list change.
Some node comparators (comparing the cache node content and
the properties specified by the query) can flush the cache
node to prevent the cache inflation.  The change may
invalidate the pointers to the node obtained before the node
comparison, so the change should be noticed to the caller.
The problem caused by the cache node changing is reported by
Harsha, see Savannah bug #31923.

* src/cache/ftccache.h (FTC_Node_CompareFunc): Add new
argument `FT_Bool* list_changed' to indicate the change of
the cached nodes to the caller.
(FTC_CACHE_LOOKUP_CMP): Watch the change of the cached nodes
by `_list_changed'.
(FTC_CACHE_TRYLOOP_END): Take new macro argument `_list_changed'
and update it when FTC_Manager_FlushN() flushes any nodes.

* src/cache/ftccback.h (ftc_snode_compare): Updated to fit
with new FTC_Node_CompareFunc type.  (ftc_gnode_compare): Ditto.

* src/cache/ftcbasic.c: Include FT_INTERNAL_OBJECTS_H to
use TRUE/FALSE macros.  (ftc_basic_gnode_compare_faceid):
New argument `FT_Bool* list_changed' to indicate the change
of the cache nodes, anyway, it is always FALSE.

* src/cache/ftccmap.c: Include FT_INTERNAL_OBJECTS_H to
use TRUE/FALSE macros.  (ftc_cmap_node_compare):
New argument `FT_Bool* list_changed' to indicate the change
of the cache nodes, anyway, it is always FALSE.
(ftc_cmap_node_remove_faceid): Ditto.

* src/cache/ftccache.c (FTC_Cache_NewNode): Pass a NULL
pointer to FTC_CACHE_TRYLOOP_END(), because the result is
not needed.  (FTC_Cache_Lookup): Watch the change of the cache
nodes by `list_changed'.  (FTC_Cache_RemoveFaceID): Ditto.

* src/cache/ftcglyph.c: Include FT_INTERNAL_OBJECTS_H to
use TRUE/FALSE macros.  (ftc_gnode_compare): New argument
`FT_Bool* list_changed' to indicate the change of the cache
nodes, anyway, it is always FALSE.  (FTC_GNode_Compare):
New argument `FT_Bool* list_changed' to be passed to
ftc_gnode_compare().
* src/cache/ftcglyph.h (FTC_GNode_Compare): Ditto.

* src/cache/ftcsbits.c (ftc_snode_compare): New argument
`FT_Bool* list_changed' to indicate the change of the cache
nodes, anyway. It is updated by FTC_CACHE_TRYLOOP().
(FTC_SNode_Compare): New argument `FT_Bool* list_changed'
to be passed to ftc_snode_compare().
* src/cache/ftcsbits.h (FTC_SNode_Compare): Ditto.
2011-01-09 22:52:24 +09:00
suzuki toshiya
62d116f8d6 [cache] Fit FTC_GNode_Compare() to FTC_Node_CompareFunc.
* src/cache/ftcglyph.h (FTC_GNode_Compare): Add the 3rd
argument `FTC_Cache  cache' to fit FTC_Node_CompareFunc
prototype.
* src/cache/ftcglyph.c (FTC_GNode_Compare): Ditto. Anyway,
`cache' is not used by its child ftc_gnode_compare().
2011-01-09 22:38:10 +09:00
suzuki toshiya
9a2e255b23 [cache] Deduplicate the code to get the top node by a hash.
There are several duplicated codes getting the top node
from a cache by a given hash, like:

    idx = hash & cache->mask;
    if ( idx < cache->p )
      idx = hash & ( cache->mask * 2 + 1 );
    pnode = cache->buckets + idx;

To deduplicate them, a cpp-macro to do same work
FTC_NODE__TOP_FOR_HASH( cache, hash ) is introduced.
For non-inlined config, non-ftc_get_top_node_for_hash() is
also introduced.

* src/cache/ftccache.h (FTC_NODE__TOP_FOR_HASH): Declare
and implement inlined version.
(FTC_CACHE_LOOKUP_CMP): Use FTC_NODE__TOP_FOR_HASH().
* src/cache/ftccache.c (ftc_get_top_node_for_hash): Non-
inlined version.
(ftc_node_hash_unlink): Use FTC_NODE__TOP_FOR_HASH().
(ftc_node_hash_link): Ditto.
(FTC_Cache_Lookup): Ditto.
2011-01-09 21:09:58 +09:00
suzuki toshiya
52a1e47a5c [cache] inline-specific functions are conditionalized.
* src/cache/ftcglyph.c (FTC_GNode_Compare): Conditionalized
for inlined config.  This function is a thin wrapper of
ftc_gnode_compare() for inlined FTC_CACHE_LOOKUP_CMP()
(see `nodecmp' argument).  Under non-inlined config,
ftc_gnode_compare() is invoked by FTC_Cache_Lookup(),
via FTC_Cache->clazz.node_compare().

* src/cache/ftcglyph.h (FTC_GNode_Compare): Ditto.
* src/cache/ftcsbits.c (FTC_SNode_Compare): Ditto,
for ftc_snode_compare().
* src/cache/ftcsbits.h (FTC_SNode_Compare): Ditto.
2011-01-09 20:49:21 +09:00
suzuki toshiya
0de5b376d7 [cache] Correct a type mismatch under non-inlined config.
* src/cache/ftcglyph.h (FTC_GCACHE_LOOKUP_CMP):
FTC_GCache_Lookup() takes the node via a pointer `FTC_Node*',
differently from cpp-macro FTC_CACHE_LOOKUP_CMP().
2011-01-09 20:31:22 +09:00
suzuki toshiya
34f4b20a15 Update Jamfile to include Bzip2 support.
* Jamfile: Include src/bzip2 to project.
Comments for lzw, gzip, bzip2 are changed to clarify that
they are for compressed PCF fonts, not others.
(e.g. compressed BDF fonts are not supported yet)
2011-01-06 11:19:50 +09:00
Werner Lemberg
a399588ae2 Improve `gasp' table documentation. 2011-01-05 22:21:33 +01:00
suzuki toshiya
55e6a6fadf Update Symbian project files to include Bzip2 support.
Currently, it provides FT_Stream_OpenBzip2() that returns
unimplemented error always, to prevent unresolved symbol
error for the applications designed for Unix systems.

* builds/symbian/bld.inf: Include ftbzip2.h.
* builds/symbian/freetype.mmp: Include ftbzip2.c.
2011-01-06 02:56:33 +09:00
suzuki toshiya
29cb6a6c31 Fix ChangeLog. 2011-01-06 02:53:21 +09:00
suzuki toshiya
017b4d5e7f Update classic MacOS makefiles to include Bzip2 support.
Currently, it provides FT_Stream_OpenBzip2() that returns
unimplemented error always, to prevent unresolved symbol
error for the applications designed for Unix systems.

* builds/mac/FreeType.m68k_cfm.make.txt: Include ftbzip2.c.o.
* builds/mac/FreeType.m68k_far.make.txt: Ditto.
* builds/mac/FreeType.ppc_carbon.make.txt: Include ftbzip2.c.x.
* builds/mac/FreeType.ppc_classic.make.txt: Ditto.
2011-01-06 02:49:52 +09:00
suzuki toshiya
be683e7597 Update Amiga makefiles to include Bzip2 support.
Currently, it provides FT_Stream_OpenBzip2() that returns
unimplemented error always, to prevent unresolved symbol
error for the applications designed for Unix systems.

* builds/amiga/makefile: Include bzip2.ppc.o built from ftbzip2.c.
* builds/amiga/makefile.os4: Include bzip2.o built from ftbzip2.c.
* builds/amiga/smakefile: Ditto.
2011-01-06 02:44:53 +09:00
suzuki toshiya
41d7e4a6ed Update pkg-config tools to reflect Bzip2 support.
* builds/unix/freetype-config.in: Include `-lbz2' to
--libs output, if built with Bzip2 support.
* builds/unix/freetype2.in: Ditto.
2011-01-06 02:36:50 +09:00
suzuki toshiya
1909959973 * builds/unix/configure.raw: Remove `SYSTEM_BZ2LIB' macro.
SYSTEM_ZLIB is used to switch the builtin zlib source
or system zlib source out of FreeType2.  But ftbzip2
module has no builtin bzip2 library and always requires
system bzip2 library.  Thus SYSTEM_BZ2LIB is always yes,
it is not used.
2011-01-06 02:09:23 +09:00
Werner Lemberg
f3ce237027 */rules.mk: Handle `*pic.c' files. 2011-01-03 07:11:54 +01:00
Werner Lemberg
fa1e6b35b4 Formatting. 2011-01-03 06:50:36 +01:00