Commit Graph

1373 Commits

Author SHA1 Message Date
Werner Lemberg bfa83bdc27 Comments. 2016-09-29 19:51:28 +02:00
Werner Lemberg 2067c6985a [truetype] Disallow bitmap strokes for non-default instances.
Also speed up access of default instances if GX variations are
active.

* include/freetype/internal/tttypes.h (TT_FaceRec): Add
`is_default_instance' member.

* src/sfnt/sfobjs.c (sfnt_init_face): Initialize
`is_default_instance'.

* src/truetype/ttgload.c (TT_Process_Simple_Glyph,
load_truetype_glyph): Add test for default instance.
(TT_Load_Glyph): Load embedded bitmaps for default instance only.

* src/truetype/ttgxvar.c (TT_Set_MM_Blend): Compute
`is_default_instance'.
2016-09-29 19:49:07 +02:00
Werner Lemberg bf90239ca5 [truetype] Clean up `TT_Face' structure.
* include/freetype/internal/tttypes.h (TT_FaceRec): Remove unused
fields `horz_metrics' and `vert_metrics'.
Update documentation.

* src/sfnt/sfobjs.c (sfnt_done_face): Updated.
2016-09-29 13:04:46 +02:00
Werner Lemberg e27b8a5598 [truetype] Speed up `TT_Load_Glyph'.
This avoids additional calls to `tt_face_lookup_table' for the
`glyf' table, which can be expensive.

* include/freetype/internal/tttypes.h (TT_LoaderRec): Move
`glyf_offset' field to ...
(TT_FaceRec): ... this structure.
* src/truetype/ttgload.c (load_truetype_glyph): Updated.
(tt_loader_init): Move initialization of `glyf_offset' to ...
* src/truetype/ttpload.c (tt_face_load_loca): .. this function.
2016-09-27 21:21:01 +02:00
Werner Lemberg c95b7652d8 s/0/NULL/ for function pointers; comments, formatting. 2016-09-17 17:12:50 +02:00
Werner Lemberg d609b7c158 [sfnt] Don't provide (completely) broken strike data.
FreeType tries to sanitize strike header data; we now reject
completely broken ones.

* include/freetype/internal/tttypes.h (TT_FaceRec): New
`sbit_strike_map' array pointer.

* src/base/ftobjs.c (FT_Match_Size): Reject matches where either
width or height would be zero.
Add tracing message in case of error.

* src/sfnt/sfobjs.c (sfnt_load_face): Populate `sbit_strike_map',
only using (more or less) valid strike header data for
FT_Face's `available_sizes' array.
(sfnt_done_face): Updated.

* src/sfnt/ttsbit.c (tt_face_set_sbit_strike): Use
`sbit_strike_map'.
(tt_face_load_strike_metrics): Improve tracing.

* src/truetype/ttdriver.c (tt_size_select): Use `sbit_strike_map'.
2016-09-09 22:11:07 +02:00
Werner Lemberg d2d5968aed * Version 2.7 released.
=======================

Tag sources with `VER-2-7'.

* docs/VERSION.TXT: Add entry for version 2.7.

* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualc/index.html,
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.6.5/2.7/, s/265/27/.

* include/freetype/freetype.h (FREETYPE_MINOR): Set to 7.
(FREETYPE_PATCH): Set to 0.

* builds/unix/configure.raw (version_info): Set to 18:6:12.
* CMakeLists.txt (VERSION_MINOR): Set to 7.
(VERSION_PATCH): Set to 0.

* docs/CHANGES: Updated.
2016-09-08 09:04:32 +02:00
Werner Lemberg ebbb8b2e19 [type1] MM fonts support exactly zero named instances (#48748).
* src/type1/t1load.c (T1_Get_MM_Var): Set `num_namedstyles' to zero.
2016-09-06 16:28:57 +02:00
Werner Lemberg 1656752ee5 Minor documentation improvements. 2016-09-06 12:29:18 +02:00
Werner Lemberg 77e4d1b22e Improve documentation of `FT_Outline_Decompose'. 2016-09-02 12:16:29 +02:00
Werner Lemberg 7a13dc008b Some preparations for the next release.
* include/freetype/config/ftoption.h
(TT_CONFIG_OPTION_SUBPIXEL_HINTING): Enable.

* docs/CHANGES: Updated.
2016-09-02 08:24:01 +02:00
Werner Lemberg a6ee6fe67b s/PIC/FT_CONFIG_OPTION_PIC/ to avoid confusion. 2016-08-28 18:51:50 +02:00
Werner Lemberg 516283130c Clarify usage of FT_CONFIG_OPTION_PIC. 2016-08-28 12:38:25 +02:00
Werner Lemberg 3ec64654c4 Explain how to build a PIC-enabled version of FreeType. 2016-08-28 11:02:00 +02:00
Werner Lemberg f3e71bab9e [sfnt] Cache offset and size to bitmap data table.
This commit avoids `EBDT' and friends being looked up again and
again while loading a single embedded bitmap.

* include/freetype/internal/tttypes.h (TT_FaceRec)
[TT_CONFIG_OPTION_EMBEDDED_BITMAPS]: New fields `ebdt_start' and
`ebdt_size'.

* src/sfnt/ttsbit.c (tt_sbit_decoder_init): Move table lookup to ...
(tt_face_load_sbit): ... this function; also store the table size
and offset.
2016-08-26 10:31:30 +02:00
Werner Lemberg 327f2e3e55 * include/freetype/internal/ftdriver.h: Remove unused typedefs. 2016-08-25 12:46:08 +02:00
Alexei Podtelezhnikov cb4388783c [smooth] Simplify span rendering.
This removes unnecessary complexity of span merging and buffering.
Instead, the spans are rendered as they come, speeding up the
rendering by about 5% percents as a result.

* src/smooth/ftgrays.c [FT_MAX_GRAY_SPANS]: Macro removed.
(gray_TWorker): Remove span buffer and related fields.
(gray_sweep, gray_hline): Updated.

* include/freetype/ftimage.h: Remove documentation note about
`FT_MAX_GRAY_SPANS', which was never in `ftoption.h' and is now gone.
2016-08-22 23:06:45 -04:00
Werner Lemberg 4927953f6c MInor. 2016-08-22 07:30:38 +02:00
Werner Lemberg 6432b8c490 Update documentation of size requests. 2016-08-21 10:50:46 +02:00
Werner Lemberg ff655437e3 * include/freetype/freetype.h (FT_IS_NAMED_INSTANCE): New macro. 2016-07-14 15:01:55 +02:00
Werner Lemberg 17fa9f714f Merge branch '2.6.5'. 2016-07-12 08:06:23 +02:00
Werner Lemberg f9b1871ded * Version 2.6.5 released.
=========================

Tag sources with `VER-2-6-5'.

* include/freetype/config/ftoption.h
(TT_CONFIG_OPTION_SUBPIXEL_HINTING): Comment out.

* docs/VERSION.TXT: Add entry for version 2.6.5.

* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualc/index.html,
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.6.4/2.6.5/, s/264/265/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 5.

* builds/unix/configure.raw (version_info): Set to 18:5:12.
* CMakeLists.txt (VERSION_PATCH): Set to 5.

* docs/CHANGES: Updated.
2016-07-12 06:18:49 +02:00
Werner Lemberg 605946af6d Conditionally compile environment support.
* include/freetype/internal/ftobjs.h, src/autofit/afmodule.c,
src/base/ftobjs.c, src/cff/cffdrivr.c, src/truetype/ttdriver.c:
Decorate with `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' where
necessary.
2016-07-11 16:14:36 +02:00
Werner Lemberg 8f8ae8c52d Handle properties in `FREETYPE_PROPERTIES' environment variable.
This commit covers the most important one.

* src/autofit/afmodule.c (af_property_set): Handle `warping',
`darkening-parameters', and `no-stem-darkening'.

* src/cff/cffdrivr.c (cff_property_set): Handle
`darkening-parameters', `hinting-engine', and `no-stem-darkening'.

* src/truetype/ttdriver.c (tt_property_set): Handle
`interpreter-version'.
2016-07-11 15:11:38 +02:00
Werner Lemberg c3e83b4662 Replace calls to `atol' with `strtol'.
We later on need strtol's `endptr' feature.

* include/freetype/config/ftstdlib.h (ft_atol): Replace with...
(ft_strtol): ... this.

* src/base/ftdbgmem.c (ft_mem_debug_init): Updated.
* src/cid/cidparse.c (cid_parser_new): Ditto.
* src/type42/t42drivr.c (t42_get_name_index), src/type42/t42objs.c
(T42_GlyphSlot_Load): Ditto.
2016-07-11 05:56:26 +02:00
Werner Lemberg 84d3df7501 Implement handling of `FREETYPE_PROPERTIES' environment variable.
Recognizing properties follows in another commit.

* devel/ftoption.h, include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES): New macro.

* include/freetype/config/ftstdlib.h (ft_getenv): New macro.

* src/base/ftinit.c (ft_set_default_properties): New function to
parse `FREETYPE_PROPERTIES' and calling `ft_property_string_set'.
(FT_Init_FreeType): Updated.
2016-07-11 00:12:11 +02:00
Werner Lemberg c3beb30a21 Add function `ft_property_string_set'.
This is a preparation for handling an `FREETYPE_PROPERTIES'
environment variable to control (some) driver properties.

No change in functionality.

* src/base/ftobjs.c (ft_property_do): Add `value_is_string'
parameter.
(ft_property_string_set): New function.
(FT_Property_Set, FT_Property_Get): Updated.

* include/freetype/internal/ftobjs.h: Updated.

* include/freetype/internal/services/svprop.h
(FT_Properties_SetFunc): Add `value_is_string' parameter.

* src/autofit/afmodule.c (af_property_set), src/cff/cffdrivr.c
(cff_property_set), src/truetype/ttdriver.c (tt_property_set):
Updated, emitting an error currently if `value_is_string' is set.
2016-07-10 07:11:45 +02:00
Werner Lemberg 109d1662d4 Revert "Formatting."
This reverts commit a0f3a1f25a.
2016-07-08 06:58:46 +02:00
Werner Lemberg a0f3a1f25a Formatting. 2016-07-08 06:53:46 +02:00
Werner Lemberg d80fe69651 * Version 2.6.4 released.
=========================

Tag sources with `VER-2-6-4'.

* docs/VERSION.TXT: Update documentation and bump version number to
2.6.4.

* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualc/index.html,
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.6.3/2.6.4/, s/263/264/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 4.

* builds/unix/configure.raw (version_info): Set to 18:4:12.
* CMakeLists.txt (VERSION_PATCH): Set to 4.

* docs/CHANGES: Updated.
2016-07-05 15:40:19 +02:00
Werner Lemberg d89f64627b More info on `FT_Err_Glyph_Too_Big'. 2016-06-25 08:14:36 +02:00
Werner Lemberg 6e80a098e7 Work around a bug of the C 8.0.0.1 compiler on AIX 5.3 (#47955).
* include/freetype/internal/ftmemory.h (cplusplus_typeof): Use
braces for `extern "C++"'.
2016-05-21 10:58:40 +02:00
Alexei Podtelezhnikov 2a4c823f89 Parentheses. 2016-05-20 22:04:01 -04:00
Nikolaus Waxweiler 596157365a [truetype] New implementation of v38 bytecode interpreter [1/3].
This patch prepares data structures and the like.

See added comments in `ttinterp.h' for more information on this and
the following commits in the series.

* devel/ftoption.h, include/freetype/config/ftoption.h
(TT_CONFIG_OPTION_SUBPIXEL_HINTING): Assign values to differentiate
between subpixel versions.
(TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY,
TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL): New macros.

* include/freetype/ftttdrv.h (TT_INTERPRETER_VERSION_40): New macro.

* include/freetype/internal/tttypes.h (TT_FaceRec): Updated.

* src/truetype/ttinterp.h (TT_ExecContextRec): Define new fields
`subpixel_hinting_lean', `vertical_lcd_lean',
`backwards_compatibility', `iupx_called', iupy_called', and
`grayscale_cleartype' for new hinting mode.

* src/truetype/ttdriver.c (tt_property_set): Handle v38 and v40
interpreters conditionally.

* src/truetype/ttgload.c (TT_Hint_Glyph): Save phantom points unless
in v38 backwards compatibility mode.
Updated.
(compute_glyph_metrics): Add v38 backwards compatibility mode
constraint for adjusting advance widths.
Updated.
(tt_loader_init): Handle new flags `subpixel_hinting_lean',
`grayscale_cleartype', and `vertical_lcd_lean'.
Updated.
(tt_get_metrics, TT_Process_Simple_Glyph, TT_LOADER_SET_PP):
Updated.

* src/truetype/ttobjs.c (tt_driver_init): Conditionally set
default interpreter version number.

* src/truetype/ttsubpix.c, src/truetype/ttsubpix.h: Updated.
2016-05-18 06:57:59 +02:00
Werner Lemberg 119e8e41ef [cff] Fix matrix scaling (#47848).
* include/freetype/config/ftstdlib.h (FT_LONG_MIN): New macro.

* src/cff/cffparse.c (cff_parse_font_matrix): Use largest scaling
value of all matrix coefficients to scale matrix.

* src/cff/cffobjs.c (cff_face_init): Use `matrix->yx' member for
matrix normalization if `matrix->yy' is zero.
2016-05-17 19:54:09 +02:00
Alexei Podtelezhnikov cdc8f4d933 Duplicates. 2016-05-07 23:17:57 -04:00
Alexei Podtelezhnikov 500bcbdded Duplicates. 2016-05-07 22:28:43 -04:00
Werner Lemberg d9fb2175c4 Minor.
* include/freetype/freetype.h (FT_HAS_*, FT_IS_*): Protect macro
argument with parentheses.
2016-04-24 15:27:32 +02:00
Alexei Podtelezhnikov 213f0ca3e3 Remove forgotten macro.
* include/freetype/internal/internal.h
[FT_INTERNAL_POSTSCRIPT_GLOBALS_H]: Remove.
2016-04-13 00:19:54 -04:00
Alexei Podtelezhnikov bbcb97793e Typos. 2016-04-13 00:11:52 -04:00
Alexei Podtelezhnikov f46b282d4d Typos. 2016-04-11 23:22:57 -04:00
Alexei Podtelezhnikov e85422606d Typos. 2016-04-08 23:21:34 -04:00
Alexei Podtelezhnikov 34207080c6 Typos. 2016-04-08 00:38:49 -04:00
Alexei Podtelezhnikov bbb60965f9 Typos. 2016-04-07 01:29:44 -04:00
Werner Lemberg 44accb9e2e Version 2.6.3 released. 2016-02-08 19:51:40 +01:00
Nikolaus Waxweiler 1d8d0b4ef9 Remove unpatented hinter (3/3).
* include/freetype/config/ftoption.h
(TT_CONFIG_OPTION_UNPATENTED_HINTING): Remove.

* include/freetype/internal/ftobjs.h (FT_Face_InternalRec): Remove
`ignore_unpatented_hinter' field.
Update users.
(FT_DEBUG_HOOK_UNPATENTED_HINTING): Remove.
Update users.

* include/freetype/internal/tttypes.h (TT_FaceRec): Remove
`unpatented_hinting' field.
Update users.

* src/base/ftpatent.c (_tt_check_patents_in_range,
_tt_check_patents_in_table, _tt_face_check_patents): Remove.
(FT_Face_CheckTrueTypePatents, FT_Face_SetUnpatentedHinting):
Replace code with dummies.

* src/truetype/ttobjs.c (tt_face_init): Remove now defunct code.
* src/truetype/ttobjs.h (TT_GraphicsState): Remove `both_x_axis'
field.
2016-01-28 14:11:14 +01:00
Alexei Podtelezhnikov c272070381 Typo. 2016-01-22 23:36:47 -05:00
Alexei Podtelezhnikov e4c69d226c Better access to 64-bit integers for C99 compilers.
* include/freetype/config/ftconfig.h [FT_LONG64]: Use
__STDC_VERSION__ to define 64-bit integers.
* builds/unix/ftconfig.in [FT_LONG64]: Ditto.
* builds/vms/ftconfig.h [FT_LONG64]: Ditto.
2016-01-22 23:35:49 -05:00
Werner Lemberg 24fbed052f Still handle `__FTERRORS_H__'.
We need this for backwards compatibility.

Problem reported by John Emmas <johne53@tiscali.co.uk>.

* include/freetype/fterrors.h: Fix inclusion guard so that
undefining either `FTERRORS_H_' or `__FTERRORS_H__' works as
expected.
2016-01-20 21:10:41 +01:00
Alexei Podtelezhnikov 1409b3e0aa * include/freetype/ftlcdfil.h: Documentation tweak. 2016-01-19 22:54:59 -05:00
Derek B. Noonburg 4cdfefd4bd [truetype] Add another tricky font.
* src/truetype/ttobjs.c (TRICK_SFNT_IDS_NUM_FACES): Increase.
(sfnt_id): Add variant of `DFKaiShu'.
2016-01-19 07:12:44 +01:00
Alexei Podtelezhnikov 32760d33d0 [base] Empower `FT_Library_SetLcdFilterWeights'.
* src/base/ftlcdfil.c (FT_Library_SetLcdFilterWeights): Enable filter
in addition to setting weights.
(FT_Library_SetLcdFilter): Clean out FT_FORCE_LIGHT_LCD_FILTER and
FT_FORCE_LEGACY_LCD_FILTER.
* include/freetype/ftlcdfil.h: Documentation update.
2016-01-14 23:31:08 -05:00
Alexei Podtelezhnikov 441506656f * include/freetype/ftlcdfil.h: Documentation tweak. 2016-01-14 22:55:36 -05:00
Alexei Podtelezhnikov 21eb64ebeb * include/freetype/ftlcdfil.h: Documentation tweak. 2016-01-14 00:05:53 -05:00
Werner Lemberg 9adeab6452 Update copyright year. 2016-01-13 11:54:10 +01:00
Werner Lemberg 9d0b76d7f6 Don't use macro names that start with `_[A-Z]' [2/3].
Such macro names are reserved for both C and C++.

* include/freetype/ftimage.h, src/raster/ftraster.c,
src/smooth/ftgrays.c, src/smooth/ftgrays.h:
s/_STANDALONE_/STANDALONE_/.
2016-01-12 22:27:29 +01:00
Werner Lemberg 37412ff9f4 Don't use macro names that contain `__' [1/2].
Such macro names are reserved for both C and C++.

*/*: Replace macros of the form `__XXX_H__' with `XXX_H_'.
2016-01-12 21:37:13 +01:00
Werner Lemberg 7ce6c43c3e [base] Make hash interface symmetric.
Use `num' and `str' infixes everywhere.

* src/base/fthash.c (ft_hash_init): Renamed to...
(hash_init): ... This.
(ft_hash_str_init, ft_hash_num_init): New functions.
(ft_hash_free): Renamed to...
(ft_hash_str_free): ... This.

* include/freetype/internal/fthash.h: Updated.

* src/bdf/bdflib.c, src/type1/t1load.c, src/type1/t1objs.c: Updated.
2015-12-22 05:39:58 +01:00
Werner Lemberg bd4b8976a3 [type1, psaux] Handle large values of num_subrs correctly (#46692).
We now use a hash to map from subr indices to array elements holding
the subroutines, if necessary.

* include/freetype/internal/t1types.h: Include FT_INTERNAL_HASH_H.
(T1_FontRec): Add `subrs_hash' field.

* include/freetype/internal/psaux.h: Include FT_INTERNAL_HASH_H.
(T1_DecoderRec): Add `subrs_hash' field.

* src/type1/t1load.h (T1_LoaderRec): Add `subrs_hash' field.

* src/type1/t1driver.c: Include FT_INTERNAL_HASH_H.
(t1_ps_get_font_value) [PS_DICT_SUBR]: Look up hash if necessary.

* src/type1/t1load.c: Include FT_INTERNAL_HASH_H.
(parse_subrs): Use hash for subr indices that exceed the allocated
number of subr slots.
(t1_init_loader): Remove unnecessary code.
(t1_done_loader, T1_Open_Face): Updated.

* src/type1/t1gload.c (T1_Compute_Max_Advance, T1_Get_Advances,
T1_Load_Glyph): Updated.

* src/type1/t1objs.c (T1_Face_Done): Updated.

* src/psaux/t1decode.c: Include FT_INTERNAL_HASH_H.
(t1_decoder_parse_charstrings) [op_callsubr]: Look up hash if
necessary.

* src/cid/cidgload.c (cid_load_glyph): Updated.
2015-12-20 19:36:04 +01:00
Werner Lemberg 1caf629eef [base] Thinko: Remove free function pointer.
We don't copy keys or values while hashing.

* include/freetype/internal/fthash.h (FT_Hash_FreeFunc): Removed.
(FT_HashRec): Remove `free' field.

* src/base/fthash.c (hash_str_free): Removed.
(ft_hash_init, ft_hash_free): Updated.
2015-12-20 19:00:35 +01:00
Werner Lemberg 76e79ec9a5 [base, bdf] Don't expose `FT_Hashnode' in hash functions.
* src/base/fthash.c (hash_lookup, ft_hash_str_lookup,
ft_hash_num_lookup): Return pointer to `size_t' instead of
`FT_Hashnode'.

* include/freetype/internal/fthash.h: Updated.

* src/bdf/bdflib.c (bdf_get_property, _bdf_add_property,
bdf_get_font_property): Updated.
2015-12-20 09:03:15 +01:00
Werner Lemberg ad306eaa5e [base, bdf] Add number hashing.
* src/base/fthash.c (hash_num_lookup, hash_num_compare): New
functions.
(ft_hash_init): Add argument to select between number and string
hashing.
(ft_hash_num_insert, ft_hash_num_lookup): New functions.

* include/freetype/internal/fthash.h: Updated.

* src/bdf/bdflib.c (_bdf_parse_start): Updated.
2015-12-20 08:33:21 +01:00
Werner Lemberg 1b7549ccc7 [base] Introduce hash lookup, compare, and free function pointers.
* include/freetype/internal/fthash.c (FT_Hash_LookupFunc,
FT_Hash_CompareFunc, FT_Hash_FreeFunc): New typedefs.
(FT_HashRec): Add `lookup', `compare', and `free' fields.

* src/base/fthash.c (hash_str_lookup, hash_str_compare,
hash_str_free): New functions.
(ft_hash_init): Set function pointers.
(hash_bucket, ft_hash_free): Use them.
2015-12-20 08:00:33 +01:00
Werner Lemberg 609546c4b8 [base, bdf] Use a union as a hash key.
We want to support both an integer and a string key later on.

* include/freetype/internal/fthash.h (FT_Hashkey): New union.
(FT_HashnodeRec): Updated.
(ft_hash_insert, ft_hash_lookup): Renamed to ...
(ft_hash_str_insert, ft_hash_str_lookup): ... this.

* src/base/fthash.c (hash_bucket): Updated.
(ft_hash_insert, ft_hash_lookup): Renamed to ...
(hash_insert, hash_lookup): ... this.
(ft_hash_str_insert, ft_hash_str_lookup): New wrapper functions.

* src/bdf/bdflib.c: Updated.
2015-12-20 07:17:29 +01:00
Werner Lemberg 762b23281d Minor clean-ups. 2015-12-20 06:39:38 +01:00
Werner Lemberg c98a40f99d [bdf, base] Lift hash functions from bdf driver to base module.
* src/base/fthash.c, include/freetype/internal/fthash.h: New files,
containing (massaged) code from `bdflib.c' and `bdf.h'.

* include/freetype/internal/internal.h (FT_INTERNAL_HASH_H): New
macro.

* src/base/ftbase.c: Include `fthash.c'.

* src/base/Jamfile (_sources): Add `fthash'.

* src/base/rules.mk (BASE_SRC): Add `fthash.c'.

* docs/LICENSE.TXT: Updated.
2015-12-19 16:59:40 +01:00
Werner Lemberg 24aa9c665e [autofit] Rewrite HarfBuzz interface to support character clusters.
Scripts like Khmer have blue zones that can't be directly
represented by Unicode characters.  Instead, it is necessary to let
HarfBuzz convert character clusters into proper glyph representation
forms, then deriving the blue zone information from the resulting
glyphs.

* src/autofit/hbshim.c, src/autofit/hbshim.h: Replaced by...
* src/autofit/afshaper.c, src/autofit/afshaper.h: ... these two new
files, providing a new API to access HarfBuzz.

The new API manages a HarfBuzz buffer with `af_shaper_buf_create'
and `af_shaper_buf_destroy'.  The buffer receives a UTF8 encoded
string with function `af_shaper_get_cluster', and the resulting
glyph data (indices, advance widths, vertical offsets) can be
iteratively accessed with function `af_shaper_get_elem'.

* src/autofit/afcjk.c (af_cjk_metrics_init_widths,
af_cjk_metrics_init_blues, af_cjk_metrics_check_digits): Updated.

* src/autofit/aflatin.c (af_latin_metrics_init_widths,
af_latin_metrics_init_blues, af_latin_metrics_check_digits):
Updated.

* include/freetype/internal/fttrace.h: s/afharfbuzz/afshaper/.

* src/autofit/afglobal.c: s/hbshim.h/afshaper.h/.
(af_face_globals_compute_style_coverage): Updated.

* src/autofit/afglocal.h: s/hbshim.h/afshaper.h/.

* src/autofit/autofit.c: s/hbshim.c/afshaper.c/.

* src/autofit/Jamfile, src/autofit/rules.mk (AUTOF_DRV_SRC):
Updated.
2015-12-06 18:52:41 +01:00
Alexei Podtelezhnikov 1b740a0076 Minor rearrangement. 2015-12-02 00:30:57 -05:00
Alexei Podtelezhnikov f8c2057789 * include/freetype/ftlcdfil.h: Documentation tweak. 2015-11-28 22:43:33 -05:00
Werner Lemberg 66cf29b1bc * Version 2.6.2 released.
=========================

Tag sources with `VER-2-6-2'.

* docs/VERSION.DLL: Update documentation and bump version number to
2.6.2.

* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualc/index.html,
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.6.1/2.6.2/, s/261/262/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 2.

* builds/unix/configure.raw (version_info): Set to 18:2:12.
* CMakeLists.txt (VERSION_PATCH): Set to 2.

* docs/CHANGES: Updated.
2015-11-28 19:08:05 +01:00
Nikolaus Waxweiler 25b1330a4d Minor documentation improvements. 2015-11-28 18:07:53 +01:00
Nikolaus Waxweiler 01ce1c6a99 Change default LCD filter to be normalized and color-balanced.
Update documentation.

* src/base/ftlcdfil.c (FT_Library_SetLcdFilter): Update
`default_filter'.
2015-11-28 12:04:28 +01:00
Werner Lemberg 7696e337ee Use new docmaker syntax for identifiers with identical names. 2015-11-26 14:31:08 +01:00
Werner Lemberg 663f2d7a23 * include/freetype/internal/ftcalc.h: Don't use `register' keyword.
This fixes compiler warnings.

Reported by Behdad.
2015-11-21 06:30:43 +01:00
Werner Lemberg b96af12eb6 Add `FT_LCD_FILTER_LEGACY1' enum value.
This does the same as `FT_LCD_FILTER_LEGACY'.

See

  https://bugs.freedesktop.org/show_bug.cgi?id=92981

for the reasoning.

* include/freetype/ftlcdfil.h (FT_LcdFilter): New value
`FT_LCD_FILTER_LEGACY1'.

* src/base/ftlcdfil.c (FT_Library_SetLcdFilter): Use it.
2015-11-20 16:03:09 +01:00
Werner Lemberg 49984c9bc0 Documentation typo. 2015-11-12 22:48:51 +01:00
Jan Alexander Steffens (heftig) ccd3188af1 Allow native CFF hinter in FT_RENDER_MODE_LIGHT.
Both the native CFF hinter and the auto-hinter now have a very
similar rendering style.

* include/freetype/freetype.h: Mention that FT_LOAD_TARGET_LIGHT no
longer implies FT_LOAD_FORCE_AUTOHINT.

* include/freetype/ftmodapi.h (FT_MODULE_DRIVER_HINTS_LIGHTLY): New
macro.

* include/freetype/internal/ftobjs.h (FT_DRIVER_HINTS_LIGHTLY): New
macro.

* src/cff/cffdrivr.c (cff_driver_class): Use it.

* src/base/ftobjs.c (FT_Load_Glyph): Update auto-hinter selection
logic.
2015-11-10 22:33:45 +01:00
Werner Lemberg 758d55e522 [truetype] Catch infinite recursion in subglyphs (#46372).
* include/freetype/internal/tttypes.h (TT_LoaderRec): New field
`composites'.

* src/truetype/ttgload.c: Include FT_LIST_H.
(load_truetype_glyph): Add composite subglyph index to a list;
abort if index is already in list.
(tt_loader_init): Updated.
(tt_loader_done): New function.
(TT_Load_Glyph): Call `tt_loader_done'.
2015-11-04 11:44:47 +01:00
Nikolaus Waxweiler d682e51062 [autofit] Add stem-darkening properties.
Actual code follows in a later commit.

* include/freetype/ftautoh.h: Document `no-stem-darkening' and
`darkening-parameters'.

* src/autofit/afmodule.h: New fields `no_stem_darkening' and
`darken_params'.

* src/autofit/afmodule.c (af_property_set, af_property_get):
Handle them.
(af_autofitter_init): Initialize them.
2015-11-02 09:06:36 +01:00
Werner Lemberg 5dedbc048f Improve documentation of `FT_Get_MM_Var' and `FT_MM_Var'. 2015-10-22 07:22:55 +02:00
Werner Lemberg 2961b66c70 Typo. 2015-10-19 23:17:25 +02:00
Werner Lemberg 14213b5409 [truetype] Improve TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES (#46223).
* devel/ftoption.h, include/freetype/config/ftoption.h: Surround it
with #ifndef ... #endif, as suggested in the tracker issue.
2015-10-18 18:15:04 +02:00
Werner Lemberg 24a1fcdfce [truetype] Add TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES (#46208).
* devel/ftoption.h, include/freetype/config/ftoption.h
(TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES): New configuration macro.

* src/truetype/ttinterp.c (MAX_RUNNABLE_OPCODES): Removed.
(TT_RunIns): Updated.
2015-10-15 21:50:15 +02:00
Werner Lemberg 8cabd919ca * Version 2.6.1 released.
=========================

Tag sources with `VER-2-6-1'.

* docs/VERSION.DLL: Update documentation and bump version number to
2.6.1.

* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
builds/windows/vc2005/index.html,
builds/windows/vc2008/freetype.vcproj,
builds/windows/vc2008/index.html,
builds/windows/vc2010/freetype.vcxproj,
builds/windows/vc2010/index.html,
builds/windows/visualc/freetype.dsp,
builds/windows/visualc/freetype.vcproj,
builds/windows/visualc/index.html,
builds/windows/visualce/freetype.dsp,
builds/windows/visualce/freetype.vcproj,
builds/windows/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.6/2.6.1/, s/26/261/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.

* builds/unix/configure.raw (version_info): Set to 18:1:12.
* CMakeLists.txt (VERSION_PATCH): Set to 1.

* src/autofit/afmodule.c [AF_DEBUG_AUTOFIT]: Ensure C linking for
dumping functions.
2015-10-04 08:18:01 +02:00
Hin-Tak Leung 265ade8e80 Add new FT_LOAD_COMPUTE_METRICS load flag.
* include/freetype/freetype.h (FT_LOAD_COMPUTE_METRICS): New macro.
* src/truetype/ttgload.c (compute_glyph_metrics): Usage.
2015-09-26 14:51:30 +02:00
Werner Lemberg 5339c75ee6 [sfnt] Better checks for invalid cmaps (2/2) (#46019).
While the current code in `FT_Get_Next_Char' correctly rejects
out-of-bounds glyph indices, it can be extremely slow for malformed
cmaps that use 32bit values.  This commit tries to improve that.

* src/sfnt/ttcmap.c (tt_cmap8_char_next, tt_cmap12_next,
tt_cmap12_char_map_binary, tt_cmap13_next,
tt_cmap13_char_map_binary): Reject glyph indices larger than or
equal to the number of glyphs.
2015-09-24 13:39:44 +02:00
Werner Lemberg b6eef5ae7b Better document various TrueType hinting modes.
Text based on private communication with Greg Hitchcock and added to the
repository with his permission.
2015-09-10 07:44:48 +02:00
Wojciech Mamrak 822acb0252 * src/base/ftcalc.c (FT_CeilFix, FT_FloorFix): Normalize.
This commit makes the functions behave as expected, this is,
rounding towards plus or minus infinity.
2015-09-09 07:59:10 +02:00
Wojciech Mamrak 5578199a68 Minor documentation corrections. 2015-09-09 07:52:17 +02:00
Werner Lemberg 87c81f0460 [autofit] Make glyph style array use 16bit values.
* include/freetype/ftautoh.h (FT_Prop_GlyphToScriptMap): Use
`FT_UShort' for `map' field.

* src/autofit/afglobal.c (af_face_globals_compute_style_coverage,
af_face_globals_new), src/autofit/hbshim.c, src/autofit/hbshim.h
(af_get_coverage): Use FT_UShort for `glyph_styles' array.

* src/autofit/afglobal.h (AF_STYLE_UNASSIGNED, AF_DIGIT): Extend to
16 bits.
(AF_FaceGlobalsRec): Use `FT_UShort' for `glyph_styles' field.
2015-09-02 05:59:35 +02:00
Werner Lemberg 78b014031d [base] Improve kerning tracing and documentation.
* src/base/ftobjs.c (FT_Get_Kerning): Emit tracing message if
scaled-down kerning values differ.
2015-08-25 07:23:01 +02:00
Nikolaus Waxweiler f4b61a6a5d Minor documentation fix. 2015-08-19 06:51:06 +02:00
Werner Lemberg 91d59169a8 [raster] Remove last remnants of `raster5' driver.
* src/raster/ftrend1.h (ft_raster5_renderer_class): Removed.

* src/raster/rastpic.c, src/raster/rastpic.h
(ft_raster5_renderer_class_pic_init,
ft_raster5_renderer_class_pic_free): Removed.
2015-08-18 06:04:36 +02:00
Werner Lemberg 14d6b5d748 [truetype] Introduce named instance access to GX fonts.
For functions querying a face, bits 16-30 of the face index can hold
the named instance index if we have a GX font.  The indices start
with value 1; value 0 indicates font access without GX variation
data.

* include/freetype/freetype.h (FT_FaceRec): Update documentation.
* include/freetype/internal/sfnt.h: Ditto.

* src/sfnt/sfobjs.c (sfnt_init_face)
[TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Get number of named instances and
do argument checks.
(sfnt_load_face): Updated.

* src/truetype/ttobjs.c (tt_face_init)
[TT_CONFIG_OPTION_GX_VAR_SUPPORT]: Use named instance, overwriting
the style name.

* src/base/ftobjs.c (open_face_from_buffer,
open_face_PS_from_sfnt_stream): Updated.
* src/bdf/bdfdrivr.c (BDF_Face_Init): Updated.
* src/cff/cffload.c (cff_font_load): Updated.

* src/cff/cffobjs.c (cff_face_init): Make function exit early for
pure CFF fonts if `font_index < 0'.
Updated.

* src/cid/cidobjs.c (cid_face_init): Updated.
* src/pcf/pcfdrivr.c (PCF_Face_Init): Updated.
* src/pfr/pfrobjs.c (pfr_face_init): Updated.
* src/type1/t1objs.c (T1_Face_Init): Updated.
* src/type42/t42objs.c (T42_Face_Init): Updated.
* src/winfonts/winfnt.c (fnt_face_get_dll_font, FNT_Face_Init):
Updated.

* docs/CHANGES: Updated.
2015-08-13 15:22:17 +02:00
Alexei Podtelezhnikov 98e8e99986 [truetype] Clean up types.
* src/truetype/ttobjs.c (TT_Size): Move declaration from here.
* include/freetype/internal/tttypes.h (TT_Size): ... to here.
(TT_LoaderRec): Switch to appropriate types for `face' and `size'.
* src/truetype/ttgload.c: Remove corresponding type casts.
* src/truetype/ttsubpix.c: Ditto.
2015-08-06 00:06:14 -04:00
Werner Lemberg 5d1b8ab4d0 Define FT_LONG_MAX.
* include/freetype/config/ftstdlib.h (FT_LONG_MAX): New macro.
* src/cff/cf2arrst.c (cf2_arrstack_setNumElements): Use it.
2015-07-31 21:49:07 +02:00
Werner Lemberg b3fce59d52 Describe error values and strings in the documentation. 2015-07-23 13:35:07 +02:00
Werner Lemberg 1cdac10d3a [sfnt] Make `tt_face_get_name' member of the SFNT interface.
* include/freetype/internal/sfnt.h (TT_Get_Name_Func): New
prototype.
(SFNT_Interface, FT_DEFINE_SFNT_INTERFACE): New member `get_name'.

* src/sfnt/sfdriver.c (sfnt_interface): Updated.

* src/sfnt/sfobjs.c (tt_face_get_name): Tag it with `LOCAL_DEF'.
* src/sfnt/sfobjs.h: Add prototype for it.
2015-07-07 14:04:44 +02:00
Werner Lemberg eb1bba9be4 Fix some clang compiler warnings.
* src/base/ftoutln.c (FT_Outline_EmboldenXY), src/cff/cf2intrp.c
(cf2_interpT2CharString), src/truetype/ttgload.c
(load_truetype_glyph), src/truetype/ttgxvar.c (tt_handle_deltas),
src/truetype/ttinterp.c (Ins_INSTCTRL): Fix signedness issues.
2015-06-30 09:46:39 +02:00
Alexei Podtelezhnikov 884e4e67ee [base] Implement fast vector normalization.
The function uses Newton's iterations instead of dividing vector
components by its length, which needs a square root. This is,
literally, a bit less accurate but a lot faster.

* src/base/ftcalc.c (FT_Vector_NormLen): New function.
2015-06-29 22:32:05 -04:00
Werner Lemberg 392cf22f8a Another adjustment to header locations.
This change is a result of a discussion thread on freetype-devel

  http://lists.nongnu.org/archive/html/freetype-devel/2015-06/msg00041.html

Re-introduce the `freetype2' subdirectory for all FreeType header
files after installation, and rename the `freetype2' subdirectory in
the git repository to `freetype'.

* include/freetype2: Renamed to...
* include/freetype: This.

* CMakeLists.txt (PUBLIC_HEADERS, PUBLIC_CONFIG_HEADERS,
PRIVATE_HEADERS): Updated.
Update creation of `ftconfig.h'.
Install generated `ftconfig.h'.

* Jamfile (HDRMACRO, RefDoc), autogen.sh: Updated.

* builds/amiga/include/config/ftconfig.h, builds/freetype.mk
(PUBLIC_DIR), builds/symbian/bld.inf, builds/toplevel.mk (work),
builds/unix/freetype2.in: Updated.

* builds/unix/freetype-config.in: Updated.
* builds/unix/configure.raw: Don't check for `rmdir'.
* builds/unix/unix-def.in (DELDIR): Use `rm -rf', which is portable
according to the autoconf info manual.
* builds/unix/install.mk (install, uninstall,
distclean_project_unix): Update and simplify.

* builds/wince/*, builds/windows/*: Updated.

* devel/ft2build.h, include/ft2build.h: Updated.

* include/freetype2/config/ftheader.h,
include/freetype2/internal/ftserv.h,
include/freetype2/internal/internal.h: Update all header file
macros.

* src/tools/chktrcmp.py (TRACE_DEF_FILES): Updated.

* docs/*: Updated.
2015-06-26 06:48:00 +02:00
Werner Lemberg fae3820764 Simplify header file hierarchy.
This large patch changes the header file directory layout from
`include/freetype/...' to `include/...', effectively removing one
level.  Since the file `ft2build.h' is also located in `include'
(and it stays there even after installation), all FreeType header
files are now in a single directory.

Applications that use (a) `freetype-config' or FreeType's
`pkg-config' file to get the include directory for the compiler, and
(b) the documented way for header inclusion like

  #include <ft2build.h>
  #include FT_FREETYPE_H
  ...

don't need any change to the source code.

* include/freetype/*: Move up to...
* include/*: ... this directory.

* builds/amiga/include/freetype/*: Move up to...
* builds/amiga/include/*: ... this directory.

*/*: Essentially do `s@/freetype/@/@' where appropriate.

* CMakeList.txt: Simplify.
* builds/unix/freetype-config.in, builds/unix/freetype2.in: For
`--cflags', return a single directory.
* builds/unix/install.mk (install): No longer try to remove `cache'
and `internal' subdirectories; instead, remove the `freetype'
subdirectory.
2013-11-13 08:55:46 +01:00
Werner Lemberg b1d97810c9 Improve comment. 2013-11-06 06:52:13 +01:00
Werner Lemberg 29bca65dda Improve documentation of `FT_Load_Sfnt_Table'. 2013-11-05 23:46:25 +01:00
Werner Lemberg 35b0818986 Fix Savannah bug #40451.
Simply apply the patch from the bug report.

* builds/unix/ftconfig.in, builds/vms/ftconfig.h,
include/freetype/config/ftconfig.h: The used #pragma directives only
work with gcc versions 4.6 and higher.
2013-11-02 08:28:41 +01:00
Werner Lemberg 0c61c096b8 Comment fixes. 2013-10-28 05:09:21 +01:00
Werner Lemberg ee5105107b [sfnt] Implement support for `OS/2' table version 5.
See

  http://typedrawers.com/discussion/470/new-microsoft-size-specific-design-selection-mechanism

for the announcement.

* include/freetype/tttables.h (TT_OS2): Add fields
`usLowerPointSize' and `usUpperPointSize'.  Since FreeType returns
this structure only as a pointer through `FT_Get_Sfnt_Table', there
shouldn't be any ABI problems.

* src/sfnt/ttload.c (tt_face_load_os2): Implement it.

* docs/CHANGES: Updated.
2013-10-27 07:25:35 +01:00
Dave Arnold 4cfa8fc5be Comment on no-stem-darkening & darkening-parameters 2013-10-23 21:31:00 +02:00
Werner Lemberg 1eb06e67a0 Minor doc improvement. 2013-10-22 10:42:38 +02:00
Chongyu Zhu 41632b58ef [arm] Fix thumb2 inline assembly under LLVM.
When using `ADD' with an immediate operand, the instruction is
actually `ADD Rd, Rn, #<imm12>', that is, the maximum of the
immediate operand cannot exceed 4095.  It will fail to compile with
LLVM.

However, in GCC, due to some legacy compatibility considerations,
`ADD.W' will be automatically emitted when the immediate operand is
larger than 4095.

* builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
(FT_MulFix_arm) [__GNUC__]: Support clang compiler.

* src/truetype/ttinterp.c (TT_MulFix14_arm) [__GNUC__]: Ditto.
2013-10-15 11:40:34 +02:00
Alexei Podtelezhnikov 52381c14e3 * include/freetype/ftoutln.h: Correct FT_Outline_Get_Orientation
algorithm description.
2013-09-11 23:25:56 -04:00
Werner Lemberg 00ea2a133b [doc] s/which/that/ where appropriate.
Note that this is a try by a non-native English speaker whose mother
language (German) doesn't have this distinction at all...
2013-09-03 11:33:10 +02:00
Werner Lemberg 504f5b4a8d Fix Savannah bug #39905 (documentation only). 2013-09-02 22:08:12 +02:00
Werner Lemberg 85a7fdf3c6 [sfnt] Fix frame access while reading WOFF table directory.
* src/sfnt/sfobjs.c (woff_open_font): Using single memory frame
while reading the directory entries for the whole loop.
2013-08-29 21:03:05 +02:00
Werner Lemberg d689d1cf78 Implement support for WOFF containers.
We simply synthesize a SFNT from the WOFF, create a memory stream
for the new data, and load the SFNT as usual.

Does NOT add any API to access WOFF metadata or private blocks.

* include/freetype/internal/tttypes.h (WOFF_HeaderRec,
WOFF_TableRec): New structures.

* include/freetype/tttags.h (TTAG_wOFF): New macro.

* src/base/ftobjs.c (FT_Open_Face): Set `stream' after calling
`open_face'.

* src/sfnt/sfobjs.c [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Include
`FT_GZIP_H'.
(WRITE_BYTE, WRITE_USHORT, WRITE_ULONG): New temporary macros for
writing to a stream.
(sfnt_stream_close, compare_offsets, woff_open_font): New functions.
(sfnt_open_font): Handle `TTAG_wOFF'.
(sfnt_init_face): Set `stream' after calling `sfnt_open_font'.

* src/truetype/ttobjs.c (tt_face_init): Set `stream' after calling
`sfnt->init_face'.

* src/base/ftobjs.c (open_face): Use a pointer to FT_Stream as an
argument so that a changed stream survives.
Update callers.
2013-08-29 17:53:40 +02:00
Werner Lemberg dc240524ff [gzip] New function `FT_Gzip_Uncompress'.
This is modeled after zlib's `uncompress' function.  We need this
for WOFF support.

* include/freetype/ftgzip.h, src/gzip/ftgzip.c (FT_Gzip_Uncompress):
New function.

* src/gzip/rules.mk: Rewrite to better reflect dependencies.
2013-08-29 17:53:24 +02:00
Werner Lemberg bcd8c0b0eb Remove `FT_SqrtFixed' function.
It's no longer used.

* include/freetype/internal/ftcalc.h, src/base/ftcalc.c: Do it.
2013-08-27 21:36:03 +02:00
Werner Lemberg 0d28a7d6a6 * include/freetype/ftcffdrv.h: Improve documentation.
This is based on blog entries from David Lemon and Dave Arnold (both
from Adobe) with kind permission.  Dave also helped in
proof-reading.
2013-08-02 22:59:43 +02:00
Werner Lemberg 89a529f317 [autofit] Fix `make multi'.
* include/freetype/config/ftconfig.h (FT_LOCAL_ARRAY,
FT_LOCAL_ARRAY_DEF): New macros.

* src/autofit/afglobal.c (af_writing_system_classes,
af_script_classes): Use FT_LOCAL_ARRAY_DEF.
* src/autofit/afglobal.h: Declare `af_writing_system_classes' and
`af_script_classes'.
* src/autofit/afloader.c: Include `afpic.h'.
2013-08-02 14:50:23 +02:00
Behdad Esfahbod 21c32b08d5 Add FT_FACE_FLAG_COLOR and FT_HAS_COLOR.
Also disambiguate Google's color bitmap tables.

* include/freetype/freetype.h (FT_FACE_FLAG_COLOR, FT_HAS_COLOR):
New macros.

* include/freetype/internal/tttypes.h (TT_SbitTableType): Add
TT_SBIT_TABLE_TYPE_CBLC.

* src/sfnt/sfobjs.c (sfnt_load_face): Handle FT_FACE_FLAG_COLOR.

* src/sfnt/ttsbit.c (tt_face_load_sbit,
tt_face_load_strike_metrics, tt_face_load_sbit_image): Handle
TT_SBIT_TABLE_TYPE_CBLC.
2013-07-25 21:53:18 +02:00
Werner Lemberg 01705395b0 [sfnt] Add support for Apple's `sbix' color bitmap table.
* include/freetype/internal/tttypes.h (TT_SBit_MetricsRec): Widen
fields to FT_Short and FT_UShort, respectively.
(TT_SBitTableType): New enumeration.
(TT_FaceRec): Add `sbit_table_type' field.

* include/freetype/tttags.h (TTAG_sbix): New macro.

* src/sfnt/pngshim.c (Load_SBit_Png): Pass a more generic
FT_GlyphSlot argument instead FT_Bitmap.
Add flag to control map and metrics handling.
Update all users.

* src/sfnt/ttsbit.c: Include `ttmtx.h'.
(tt_face_load_eblc): Renamed to...
(tt_face_load_sbit): This.
Handlic `sbix' bitmaps.
(tt_face_free_eblc): Renamed to...
(tt_face_load_sbit): This.
Updated.
(tt_face_load_strike_metrics): Handle `sbix' bitmaps.
(tt_face_load_sbix_image): New function.
(tt_sbit_decoder_alloc_bitmap, tt_sbit_decoder_load_image,
tt_sbit_decoder_load_byte_aligned, tt_sbit_decoder_load_bit_aligned,
tt_sbit_decoder_load_compound, tt_sbit_decoder_load_png,
tt_sbit_decoder_load_image, tt_sbit_decoder_load_bitmap): Don't pass
and handle load flags.
(tt_sbit_decoder_load_bitmap) [!FT_CONFIG_OPTION_USE_PNG]: Better
handle formats 17-19.
Move color to grayscale conversion to...
(tt_face_load_sbit_image): Here.
Handle `sbix' bitmaps.

* src/sfnt/pngshim.h: Updated.
* src/sfnt/ttsbit.h: Updated.
* src/sfnt/sfdriver.c: Updated.
2013-07-18 13:13:12 +02:00
David Turner b28908860d Optimize FT_MulFix for x86_64 GCC builds.
This patch provides an optimized `FT_MulFix' implementation for
x86_64 machines when FreeType is built with GCC, or compatible
compilers like Clang.

Example:
  bin/ftbench -p -t 5 -s 14 -f 0008 Arial.ttf

Before:

  Load                       4.863 us/op
  Load_Advances (Normal)     4.816 us/op
  Load_Advances (Fast)       0.028 us/op
  Render                     2.753 us/op
  Get_Glyph                  0.463 us/op
  Get_CBox                   0.077 us/op
  Get_Char_Index             0.023 us/op
  Iterate CMap              13.898 us/op
  New_Face                  12.368 us/op
  Embolden                   0.028 us/op
  Get_BBox                   0.302 us/op

After:

  Load                       4.617 us/op
  Load_Advances (Normal)     4.645 us/op
  Load_Advances (Fast)       0.027 us/op
  Render                     2.789 us/op
  Get_Glyph                  0.460 us/op
  Get_CBox                   0.077 us/op
  Get_Char_Index             0.024 us/op
  Iterate CMap              13.403 us/op
  New_Face                  12.278 us/op
  Embolden                   0.028 us/op
  Get_BBox                   0.301 us/op

* builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
(FT_MulFix_x86_64): New function.
2013-07-16 13:19:32 +02:00
David Turner a5f33eeb8a Speed up ARMv7 support.
When building for ARMv7 with thumb2 instructions, the optimized
`FT_MulFix_arm' assembly routine was not being used.

The reason for this is in the `ftconfig.h' header, namely:

- The assembly routine uses the `smull' instruction which is not
  available when generating Thumb-1 machine code.  It is available
  in Thumb-2 mode, though.

- The header was written a long time ago before Thumb-2 became
  widely popular (e.g. with Android).  So it simply doesn't use the
  assembly routine if the `__thumb__' built-in macro is defined.

- When compiling in Thumb-2 mode, the compiler will define both
  `__thumb__' and `__thumb2__'.

By checking for `(__thumb2__ || !__thumb__)', we ensure that the
assembly routine is only avoided when generating Thumb-1 code.

Given that this is performance-sensitive function, this improves
`ftbench' as follows on a Galaxy Nexus:

                           Before (us/op)   After (us/op)

  - loading Arial.ttf glyphs at 14 ppem [1]

      Load                   34.285          33.098

  - same operation with the light auto-hinter [2]

      Load                   31.317          29.590

  - same operation without hinting [3]

      Load                    6.143           5.376

  - loading Arial.ttf advances at 14 ppem [4]

      Load_Advances (normal) 34.216          33.016
      Load_Advances (fast)    0.176           0.176

  [1] ftbench -t 5 -p -s 14 -b a -f 0008 Arial.ttf
  [2] ftbench -t 5 -p -s 14 -b a -r 1 -f 0028 Arial.ttf
  [3] ftbench -t 5 -p -s 14 -b a -f 000a Arial.ttf
  [4] ftbench -t 5 -p -s 14 -b b -f 0008 Arial.ttf

* builds/unix/ftconfig.in, include/freetype/config/ftconfig.h
(FT_MULFIX_ASSEMBLER): Fix handling for ARMv7.
2013-07-16 13:19:32 +02:00
Werner Lemberg b8850fc1fd [cff] Add darkening limit to `darkening-parameters'.
* src/cff/cffdrivr.c (cff_property_set): Add check.
2013-06-26 12:22:10 +02:00
Werner Lemberg 89ca1fd6d7 [cff] Add `darkening-parameters' property.
* include/freetype/ftcffdrv.h: Document it.

* src/cff/cffdrivr.c (cff_property_set, cff_property_get): Handle
`darkening-parameters' property.

* src/cff/cf2font.h (CF2_FontRec): Add `darkenParams' array.

* src/cff/cf2font.c (cf2_computeDarkening): Add `darkenParams'
argument and use it.
Update all callers.

* src/cff/cf2ft.c (cf2_decoder_parse_charstrings): Copy
`darken_params' values.

* src/cff/cffobjs.h (CFF_DriverRec): Add `darken_params' array.

* src/cff/cffobjs.c (cff_driver_init): Set default values for
`darken_params'.
2013-06-25 23:28:02 +02:00
Werner Lemberg 979c5c50fb [doc] Fix hyperlinks. 2013-06-25 07:48:38 +02:00
Werner Lemberg fe4f571f99 * Version 2.5.0.1 released.
===========================

Tag sources with `VER-2-5-0-1'.

* include/freetype/config/ftoption.h: Undefine
CFF_CONFIG_OPTION_OLD_ENGINE.
* devel/ftoption.h: Define CFF_CONFIG_OPTION_OLD_ENGINE.
2013-06-19 23:27:47 +02:00
Werner Lemberg 25b7da5348 * Version 2.5.0 released.
=========================

Tag sources with `VER-2-5-0'.

* docs/VERSION.DLL: Update documentation and bump version number to
2.5.0.

* README, Jamfile (RefDoc),
builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj,
builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
builds/win32/visualce/freetype.vcproj,
builds/win32/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.4.12/2.5.0/, s/2412/250/.

* include/freetype/freetype.h (FREETYPE_MINOR): Set to 5.
(FREETYPE_PATCH): Set to 0.

* builds/unix/configure.raw (version_info): Set to 16:2:10.

* src/base/ftobjs.c (FT_Open_Face): Pacify compiler.
* src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIRP): Ditto.
2013-06-19 10:23:36 +02:00
Werner Lemberg 841e49a7e1 Update CHANGES; tag some auto-hinter properties as still experimental. 2013-06-19 00:25:06 +02:00
Andrew Church 67cf7a8841 Fix Savannah bug #39266.
If memory allocations fail at certain points while opening a font,
FreeType can either crash due to a NULL dereference or leak memory.

* include/freetype/internal/ftobjs.c (FT_Face_InternalRec,
FT_LibraryRec): Make `refcount' a signed integer.  If, for example,
FT_Open_Face() fails in a memory allocation before the face's
reference count is set to 1, a subsequent `FT_Done_Library' call
would otherwise loop over `FT_Done_Face' 2^32 times before freeing
the face.

* src/base/ftobjs.c (open_face): Initialize `stream' and friends
earlier.
(FT_Open_Face) <Fail>: Behave correctly if `node' is NULL.
(FT_Destroy_Module) <Fail>: Check that `renderer_clazz' is valid.
2013-06-18 09:35:34 +02:00
Werner Lemberg 9d043dae27 Minor doc improvement.
Suggested by Ulrich Eckhardt <ulrich.eckhardt@dominolaser.com>.
2013-06-13 10:45:56 +02:00
Werner Lemberg 294ce11b00 Another try on pragmas.
* include/freetype/internal/ftdebug.h: Move pragmas to...
* include/freetype/internal/internal.h: ... this file since it gets
included by all source files.
* include/freetype/internal/ftserv.h: Remove pragma which has no
effect.
2013-06-12 23:33:11 +02:00
Werner Lemberg 25b6e600c1 * include/freetype/internal/ftdebug.h: Disable MSVC warning C4127.
This partially undoes commit 3f6e0e0c.
2013-06-12 11:06:34 +02:00
Werner Lemberg 2d9caa0606 Minor documentation issues. 2013-06-11 16:24:13 +02:00
Werner Lemberg e2d73df77d Documentation improvements. 2013-06-09 08:48:01 +02:00
Werner Lemberg 3f6e0e0c6b Add and improve pragmas for MSVC compiler.
* include/freetype/internal/ftdebug.h: Remove pragmas.
* include/freetype/internal/ftserv.h: Use push and pop for pragmas.
* include/freetype/internal/ftvalid.h: Handle warning C4324.
* src/base/ftobjs.c: Use push and pop for pragmas.
* src/gzip/ftgzip.c: Handle warning C4244.
2013-06-07 18:10:40 +02:00
Werner Lemberg badf317840 Next round of compiler fixes.
* builds/win32/ftdebug.c, builds/wince/ftdebug.c (ft_debug_init):
Add proper cast.

* include/freetype/internal/ftserv.h (FT_SERVICE_UNAVAILABLE): Fix
cast.
* include/freetype/internal/ftstream.h: Decorate stream and frame
macros with `FT_Long' and `FT_ULong' as appropriate.

* src/base/ftrfork.c (raccess_guess_darwin_hfsplus,
raccess_guess_darwin_newvfs): Use cast.

* src/bdf/bdflib.c (_bdf_set_default_spacing): Use cast.

* src/cache/ftcmanag.c (FTC_Manager_Check): Fix cast.
* src/cache/ftcmanag.h (FTC_ManagerRec): Ditto.

* src/cff/cf2arrst.c (cf2_arrstack_setNum_Elements): Use cast.
* src/cff/cf2ft.c (cf2_freeSeacComponent): Ditto.
* src/cff/cffobjs.c (remove_subset_prefix, remove_style): Ditto.

* src/cid/cidparse.c (cid_parser_new): Use cast.

* src/pcf/pcfdrivr.c (PCF_Glyph_Load): Use cast.

* src/psaux/psobjs.c (reallocate_t1_table): Fix argument type.

* src/raster/ftraster.c (ft_black_reset): Use cast.

* src/truetype/ttgxvar.c (FT_Stream_FTell): Use cast.
(ALL_POINTS): Fix cast.

* src/type1/t1driver.c (t1_ps_get_font_value): Add casts.
* src/type1/t1parse.c (T1_Get_Private_Dict): Add cast.
2013-06-06 09:16:38 +02:00
Werner Lemberg 45392b77a8 Fix compiler warnings.
* include/freetype/internal/ftmemory.h: Decorate memory allocation
macros with `FT_Long' where appropriate.
Remove duplicate of FT_MEM_QRENEW_ARRAY definition.

* src/base/ftbitmap.c (ft_gray_for_premultiplied_srgb_bgra): Use
cast.

* src/base/ftobjs.c: Add warning disabling pragma for MSVC while
including `md5.c'.

* src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdESC>: Add
cast.

* src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Fix casts.
(tt_sbit_decoder_load_bitmap): Beautification.

* src/smooth/ftsmooth.c (ft_smooth_render_generic): Initialize
variables (earlier).

* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Pacify compiler.

* src/truetype/ttgxvar.c (TT_Get_MM_Var): Use unsigned constants
where appropriate.

* src/type1/t1load.c (T1_Get_MM_Var): Ditto.
2013-06-05 13:43:20 +02:00
Werner Lemberg eeb8320445 Documentation fix.
Based on suggestions by Gregor Mückl <GregorMueckl@gmx.de>.
2013-06-04 07:14:55 +02:00
Werner Lemberg 2429dc3d7c Add CFF_CONFIG_OPTION_OLD_ENGINE configuration option.
This controls whether the old FreeType CFF engine gets compiled into
FreeType.  It is now disabled by default.

* devel/ftoption.h, include/freetype/config/ftoption.h
(CFF_CONFIG_OPTION_OLD_ENGINE): New macro.

* src/cff/cffdrivr.c (cff_property_set), src/cff/cffgload.c
(CFF_Operator, cff_argument_counts, cff_builder_add_point,
cff_operator_seac, cff_decoder_parse_charstrings, cff_slot_load),
src/cff/cffgload.h, src/cff/cffobjs.c (cff_driver_init): Use
CFF_CONFIG_OPTION_OLD_ENGINE to guard the affected code.

* docs/CHANGES: Updated.
2013-06-03 12:41:58 +02:00
Behdad Esfahbod 760d342d37 Add support for color embedded bitmaps (eg. color emoji).
A new load flag, FT_LOAD_COLOR, makes FreeType load color
embedded-bitmaps, following this draft specification

  https://color-emoji.googlecode.com/git/specification/v1.html

which defines two new SFNT tables, `CBDT' and `CBLC' (named and
modeled after `EBDT' and `EBLC', respectively).  The color bitmaps
are stored in the new FT_PIXEL_MODE_BGRA format to represent BGRA
pre-multiplied sRGB images.  If PNG support is available, PNG color
images as defined in the same proposed specification are supported
also.

Note that color bitmaps are converted to grayscale if client didn't
ask for color.

* builds/unix/configure.raw: Search for libpng.
Add `--without-png' option.

* devel/ftoption.h, include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_USE_PNG): New macro.

* include/freetype/freetype.h (FT_LOAD_COLOR): New load flag.

* include/freetype/ftimage.h (FT_Pixel_Mode): Add
`FT_PIXEL_MODE_BGRA'.

* include/freetype/tttags.h (TTAG_CBDT, TTAG_CBLC): New tags.

* src/base/ftbitmap.c (FT_Bitmap_Embolden): Updated.
(ft_gray_for_premultiplied_srgb_bgra): New function.
(FT_Bitmap_Convert): Handle FT_PIXEL_MODE_BGRA.

* src/sfnt/pngshim.c, src/sfnt/pngshim.h: New files.

* src/sfnt/sfnt.c: Include `pngshim.c'.

* src/sfnt/ttsbit.c: Include FT_BITMAP_H and `pngshim.h'
(tt_face_load_eblc): Load `CBLC'.
(tt_sbit_decoder_init): Load `CBDT'.
(tt_sbit_decoder_alloc_bitmap): Pass load flags to select between
color and grayscale bitmaps.
Set `num_grays'.  This is used by `ftview' to choose the blending
algorithm.
(tt_sbit_decoder_load_byte_aligned,
tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_compound,
tt_sbit_decoder_load_image): Pass load flag.
s/write/pwrite/.
Don't call `tt_sbit_decoder_alloc_bitmap'.
Updated.
(tt_sbit_decoder_load_png) [FT_CONFIG_OPTION_USE_PNG]: New function.
(tt_sbit_decoder_load_bitmap): Pass load flag.
Handle new glyph formats 17, 18, and 19.
Call `tt_sbit_decoder_alloc_bitmap'.
Flatten color bitmaps if necessary.
(tt_face_load_sbit_image): Updated.

* src/sfnt/rules.mk (SFNT_DRV_SRC): Add `pngshim.c'.

* docs/CHANGES: Updated.
2013-05-29 11:36:18 +02:00
Werner Lemberg 713ea8e87c Minor doc improvements. 2013-05-28 22:37:10 +02:00
Werner Lemberg f04951af8d [truetype] Add `interpreter-version' property.
This makes the option TT_CONFIG_OPTION_SUBPIXEL_HINTING controllable
at runtime.

* src/truetype/ttdriver.c: Include FT_TRUETYPE_DRIVER_H.
(tt_property_set, tt_property_get): Fill templates.

* src/truetype/ttobjs.h (TT_DriverRec): Add `interpreter_version'
member.
Remove unused `extension_component' member.

* src/truetype/ttgload.c: Include FT_TRUETYPE_DRIVER_H.
(tt_get_metrics, TT_Hint_Glyph, TT_Process_Simple_Glyph,
compute_glyph_metrics, tt_loader_init): Use `interpreter_version'.

* src/truetype/ttinterp.c: Include FT_TRUETYPE_DRIVER_H.
(SUBPIXEL_HINTING): New macro to check `interpreter_version' flag.
Update all affected functions to use it.
Use TT_INTERPRETER_VERSION_XXX where appropriate.

* src/truetype/ttobjs.c: Include FT_TRUETYPE_DRIVER_H.
(tt_driver_init): Initialize `interpreter_version'.

* src/truetype/ttsubpix.c: Include FT_TRUETYPE_DRIVER_H.
Use TT_INTERPRETER_VERSION_XXX where appropriate.
2013-05-17 13:51:07 +02:00
Werner Lemberg cbcf33d1d9 Introduce unsigned 64bit type (if available).
* include/freetype/config/ftconfig.h: Define FT_UINT64 if available.
[FT_LONG64]: Provide FT_UInt64.

* builds/unix/ftconfig.in: Synchronized.
2013-05-12 07:27:48 +02:00
Werner Lemberg d51ac9c7c6 Fix Savannah bug #38968.
* include/freetype/ftmodapi.h: Add `FT_EXPORT' to
FT_Property_{Set,Get}.
* src/base/ftobjs.c: Add `FT_EXPORT_DEF' to
FT_Property_{Set,Get}.
2013-05-12 06:00:27 +02:00
Werner Lemberg f6aa089f12 */* [FT_CONFIG_OPTION_OLD_INTERNALS]: Remove macro and guarded code. 2013-05-10 07:58:47 +02:00
Werner Lemberg cecf93ef90 * Version 2.4.12 released.
==========================

Tag sources with `VER-2-4-12'.

* docs/VERSION.DLL: Update documentation and bump version number to
2.4.12.

* README, Jamfile (RefDoc),
builds/win32/vc2005/freetype.vcproj, builds/win32/vc2005/index.html,
builds/win32/vc2008/freetype.vcproj, builds/win32/vc2008/index.html,
builds/win32/vc2010/freetype.vcxproj, builds/win32/vc2010/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj,
builds/win32/visualc/index.html, builds/win32/visualce/freetype.dsp,
builds/win32/visualce/freetype.vcproj,
builds/win32/visualce/index.html,
builds/wince/vc2005-ce/freetype.vcproj,
builds/wince/vc2005-ce/index.html,
builds/wince/vc2008-ce/freetype.vcproj,
builds/wince/vc2008-ce/index.html: s/2.4.11/2.4.12/, s/2411/2412/.

* include/freetype/freetype.h (FREETYPE_PATCH): Set to 12.

* builds/unix/configure.raw (version_info): Set to 16:1:10.
2013-05-08 11:39:16 +02:00
Werner Lemberg 2656861118 Synchronize `ftconfig.h'.
* builds/unix/ftconfig.in: Updated.
2013-05-05 17:50:22 +02:00
Werner Lemberg d135e27c23 Fix 64bit compilation issues.
* include/freetype/config/ftconfig.h [FT_LONG64]: Typedef
`FT_Int64' here.

* src/base/ftcalc.c: Remove typedef of `FT_Int64'.
(FT_DivFix): Fix cast.
* src/base/fttrigon.c: Remove typedef of `FT_Int64'.
2013-05-05 10:44:21 +02:00
Werner Lemberg afaeeee9a0 Fix errors reported by clang's `sanitize' feature.
* include/freetype/internal/ftstream.h: Simplify and fix integer
extraction macros.
(FT_INT8_, FT_BYTE_I16, FT_BYTE_I32, FT_INT8_I16, FT_INT8_I32,
FT_INT8_I32, FT_INT8_U32): Removed.
(FT_PEEK_SHORT, FT_PEEK_LONG, FT_PEEK_OFF3, FT_PEEK_SHORT_LE,
FT_PEEK_LONG_LE, FT_PEEK_OFF3_LE): Use unsigned values for
computations and convert to signed as the last step.

* src/cff/cf2fixed.h (cf2_intToFixed, cf2_fixedToInt,
cf2_fracToFixed): Avoid shifts of negative values.
(cf2_intToFrac, cf2_fixedToFrac, cf2_fixedTo26Dot6): Removed,
unused.

* src/cff/cf2intrp.c (cf2_interpT2CharString) <cf2_cmdEXTENDEDNMBR,
default>: Use unsigned values for computations and convert to signed
as the last step.
Use proper types in tracing messages.

* src/cff/cffgload.c (cff_decoder_parse_charstrings): Use unsigned
values for computation of operands and convert to signed as the last
step.
Use proper type in tracing message.
2013-05-04 14:05:24 +02:00