Commit Graph

4253 Commits

Author SHA1 Message Date
Alexei Podtelezhnikov
2ba18ba1ce [base] Fix commit ab02d9e8.
* src/base/ftbbox.c (BBox_Cubic_Check): Change scaling to msb of 22.
2013-02-22 23:58:57 -05:00
Alexei Podtelezhnikov
f9434dba81 [base] New bisecting BBox_Cubic_Check (disabled).
* src/base/ftbbox.c (BBox_Cubic_Check): New bisecting algorithm
for extremum search built around simple condition that defines
which half contains the extremum.
2013-02-19 21:27:18 -05:00
Alexei Podtelezhnikov
0e536676ba [tools] Update BBox testing tool.
* src/tools/test_bbox.c: Add another cubic outline with exact BBox.
(REPEAT): Increase the number of benchmarking cycles.
(profile_outline): Tweak output formatting.
2013-02-18 20:41:56 -05:00
Werner Lemberg
bcca86af30 Fix Savannah bug #38235.
* builds/unix/configure.raw: Don't generate `freetype-config' and
`freetype.pc'.

* builds/unix/unix-def.in (FT2_EXTRA_LIBS, LIBBZ2, LIBZ,
build_libtool_libs, ft_version): New variables to be substituted.
(freetype-config, freetype.pc): New rules to generate those files.

* builds/unix/freetype-config.in: Remove code for handling `rpath'.
The use of $rpath has been accidentally removed in a patch from
2009-12-22, and apparently noone has missed it since.
Use `%' instead of `@' as a variable substitution marker.
Use quotes.

* builds/unix/freetype.in: Use `%' instead of `@' as a variable
substitution marker.
Use quotes.
2013-02-08 12:49:41 +01:00
Werner Lemberg
a2c7eb1888 * src/truetype/ttobjs.c (tt_size_run_prep): Reset more GS variables.
BTW, Greg agrees that the OpenType specification is missing the list
of GS variables which will always be reset to the default values
after the `prep' table has been executed.
2013-02-07 19:49:12 +01:00
Werner Lemberg
bfcc375b06 * src/truetype/ttobjs.c (tt_size_run_prep): Reset reference points.
Up to now, we simply took a snapshot of the Graphics State after the
`prep' table has been executed, and right before a glyph's bytecode
was run it got reloaded.  However, as Greg Hitchcock has told us in
private communication, reference points get reset to zero in the MS
rasterizer and we follow in due course.  While reasonable, this is
undocumented behaviour.

Most notably, this fixes the rendering of Arial's `x' glyph in
subpixel hinting mode.
2013-02-06 08:47:29 +01:00
Werner Lemberg
00dfa3304e [truetype] A better fix for Savannah bug #38211.
* src/truetype/ttinterp.c (Ins_IP): Implement identical behaviour to
MS rasterizer if rp1 == rp2 (confirmed by Greg Hitchcock).
2013-02-05 19:23:16 +01:00
Alexei Podtelezhnikov
0eb6316fde [pcf] Streamline parsing of PCF encoding table.
* src/pcf/pcfread.c (pcf_get_encodings): Use simpler double for-loop.
Reallocate array instead of using temporary storage.
2013-02-01 20:24:00 -05:00
Werner Lemberg
3b1f206b04 Fix Savannah bug #38227.
* builds/unix/freetype-config.in: Set LC_ALL.
2013-02-01 23:45:04 +01:00
Werner Lemberg
30f1e6ca45 Fix Savannah bug #38221.
This complements commit 83c0ebab.

* src/base/ftcalc.c (FT_MulDiv_No_Round): Don't enclose with
`TT_USE_BYTECODE_INTERPRETER'.
2013-02-01 14:50:08 +01:00
Werner Lemberg
4063320528 [truetype] Fix Savannah bug #38211.
* src/truetype/ttinterp.c (Ins_IP): Make FreeType behave identical
to other interpreters if rp1 == rp2 (which is invalid).
2013-02-01 12:55:44 +01:00
Alexei Podtelezhnikov
fba917d0e7 Improve comments. 2013-01-30 20:14:18 -05:00
Alexei Podtelezhnikov
d56e544d65 Add an important comment.
Thanks to Hin-Tak Leung for the analysis.
2013-01-28 22:29:51 -05:00
Werner Lemberg
6b9034f0fd Formatting, comment improvements. 2013-01-28 13:56:23 +01:00
Alexei Podtelezhnikov
ab02d9e8e7 [base] Small optimization of BBox calculation.
* src/base/ftbbox.c (BBox_Cubic_Check): Use FT_MSB function in
scaling algorithm.
2013-01-28 06:35:19 -05:00
Infinality
c574d72ca8 [truetype] Minor formatting fix. 2013-01-26 17:40:44 -06:00
Infinality
97ba5109bd [truetype] Fix rasterizer_version logic in sph. 2013-01-26 17:05:40 -06:00
Infinality
a5fe359596 [truetype] Align more to ClearType whitepaper for sph. 2013-01-26 12:29:52 -06:00
Alexei Podtelezhnikov
610ee58e07 [base] Fix broken emboldening at small sizes.
* src/base/ftoutln.c (FT_Outline_EmboldenXY): Do not attempt to
normalize zero-length vectors.
2013-01-25 23:33:00 -05:00
Werner Lemberg
f41ee05475 Fix Savannah bug #38167.
This fixes commit 83c0ebab from 2012-06-27.

* src/truetype/ttinterp.h:
s/TT_CONFIG_OPTION_BYTECODE_INTERPRETER/TT_USE_BYTECODE_INTERPRETER/.
2013-01-25 16:41:24 +01:00
Xi Wang
ba931be2af [sfnt] Fix broken pointer overflow checks.
Many compilers such as gcc and clang optimize away pointer overflow
checks `p + n < p', because pointer overflow is undefined behavior.
Use a safe form `n > p_limit - p' instead.

Also avoid possible integer overflow issues, for example, using
`num_glyphs > ( p_limit - p ) / 2' rather than `num_glyphs * 2'
given a large `num_glyphs'.

* src/sfnt/ttsbit0.c (tt_sbit_decoder_load_image): Implement it.
2013-01-25 00:57:09 +01:00
Werner Lemberg
817caa9f4f Fix `make multi'
* src/base/ftoutln.c, src/base/fttrigon.c: Include
FT_INTERNAL_CALC_H.
2013-01-25 00:40:56 +01:00
David 'Digit' Turner
72447195ce [truetype] Fix C++ compilation.
* src/truetype/ttsubpix.h: Updated.
(SPH_X_SCALING_RULES_SIZE): Moved and renamed to...
* src/truetype/ttsubpix.c (X_SCALING_RULES_SIZE): This.
(sph_X_SCALING_Rules): Removed.
(scale_test_tweak): Make function static.
(sph_test_tweak_x_scaling): New function.

* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Updated.
2013-01-25 00:36:35 +01:00
Werner Lemberg
4cd5fd463e Remove trailing whitespace. 2013-01-24 13:33:06 +01:00
Werner Lemberg
e9f330adf6 [base] Make `FT_Hypot' really internal.
* include/freetype/fttrigon.h (FT_Hypot): Move to...
* include/freetype/internal/ftcalc.h: This file.

* src/base/fttrigon.c (FT_Hypot): Move to...
* src/base/ftcalc.c: This file.
Include FT_TRIGONOMETRY_H.

* src/truetype/ttgload.c: Don't include FT_TRIGONOMETRY_H.
2013-01-24 09:12:56 +01:00
Werner Lemberg
a56f95b268 Minor. 2013-01-24 08:45:29 +01:00
Werner Lemberg
87dc86d68c [truetype] Revert change from 2013-01-22.
FreeType's `height' value is the baseline-to-baseline distance...

* src/truetype/ttobjs.c (tt_size_reset): Undo.
2013-01-24 08:39:43 +01:00
Alexei Podtelezhnikov
b6de8e6612 [base, truetype] New internal FT_Hypot function.
* include/freetype/fttrigon.h (FT_Hypot): Declare it.
* src/base/fttrigon.c (FT_Hypot): Define it.
* src/truetype/ttgload.c (TT_Process_Composite_Component): Use it
instead of explicit expressions.
* src/truetype/ttinterp.c (Current_Ratio, Normalize): Use it instead
of TT_VecLen.
(TT_VecLen): Removed.
2013-01-23 23:31:41 -05:00
Alexei Podtelezhnikov
dcc0d070e0 Typo. 2013-01-23 23:09:59 -05:00
Alexei Podtelezhnikov
da11e5e764 [base] Fix integer overflow.
* src/base/ftoutln.c (FT_Outline_EmboldenXY): Normalize incoming and
outgoing vectors and use fixed point arithmetic.
2013-01-23 20:11:40 -05:00
Alexei Podtelezhnikov
e1a2ac1900 [base] Fix integer overflow.
* src/base/ftoutln.c (FT_Outline_Get_Orientation): Scale the
coordinates down to avoid overflow.
2013-01-23 19:51:28 -05:00
Alexei Podtelezhnikov
869fb8c49d [base] Split out MSB function.
* src/base/fttrigon.c (ft_trig_prenorm): Borrow from here.
* include/freetype/internal/ftcalc.h (FT_MSB): Declare here.
* src/base/ftcalc.c (FT_MSB): Define here.
2013-01-23 19:43:28 -05:00
Werner Lemberg
e0469372be [truetype] Fix font height.
* src/truetype/ttobjs.c (tt_size_reset): The Windows rendering
engine uses rounded values of the ascender and descender to compute
the TrueType font height.
2013-01-22 11:07:07 +01:00
Werner Lemberg
7190098098 Minor. 2013-01-16 20:08:35 +01:00
Werner Lemberg
cd3f871e8d [sfnt] Fix optimized sbit loader.
It was not taking bit_depth into consideration when blitting!

* src/sfnt/ttsbit0.c (tt_sbit_decoder_load_byte_aligned,
* tt_sbit_decoder_load_bit_aligned): Handle bit
depth.
2013-01-16 19:56:08 +01:00
David Turner
3a40612723 [truetype] Improve sub-pixel code.
This patches fixes many issues with the ttsubpix implementation.

1. Data tables are defined, instead of declared, in the header, and
   thus copied into each source file that includes it.

2. These tables were defined as global, mutable, visible variables,
   and thus costing private RAM to every process that loads the
   library (> 50 KB / process, this is huge!).

   Additionally, this also made the library export the symbols
   completely needlessly.

3. Missing `sph_' and `SPH_' prefixes to some of the definitions.

Note that this doesn't try to fix the incredibly inefficient storage
format for the data tables used by the code.  This one will require
another pass in the future.

* src/truetype/ttinterp.h (MAX_NAME_SIZE, MAX_CLASS_MEMBERS):
Renamed to...
(SPH_MAX_NAME_SIZE, SPH_MAX_CLASS_MEMBERS): This.
Update all users.

(SPH_TweakRule, SPH_ScaleRule): Decorate with `const' where
appropriate.

(Font_Class): Rename to...
(SPH_Font_Class): This.  Decorate with `const' where appropriate.

* src/truetype/ttsubpix.h (scale_test_tweak, sph_test_tweak):
Decorate arguments with `const' where appropriate.

Move font tweaking tables to...

* src/truetype/ttsubpic.c: This file and decorate them with `static'
and `const' where appropriate.

(X_SCALING_Rules, X_SCALING_RULES_SIZE): Renamed to...
(spu_X_SCALING_Rules, SPH_X_SCALING_RULES_SIZE): This.
Update all users.
2013-01-16 19:48:31 +01:00
Alexei Podtelezhnikov
0e0fdc5dc8 [truetype] Improve accuracy of normalization of short vectors.
Unit vector components are stored as 2.14 fixed-point numbers. In
order to calculate all 14 bits accurately, a short vector to be
normalized has to be upscaled to at least 14 bits before its length
is calculated. This has been safe since accurate CORDIC algorithms
were adopted.

* src/truetype/ttinterp.c (Normalize): Scale short vectors by 0x4000.
2013-01-12 23:05:55 -05:00
Alexei Podtelezhnikov
081aba390a [truetype] Kill very old vector normalization hacks.
Back in the days, vector length calculations were not very accurate
and the vector normalization function, Normalize, had to meticulously
correct the errors for long vectors [commit b7ef2b0968]. It was no
longer necessary after accurate CORDIC algorithms were adopted, but
the code remained. It is time to kill it.

* src/truetype/ttinterp.c (Normalize): Remove error compensation.
(TT_VecLen): Remove any mention of old less accurate implementation.
2013-01-12 22:36:37 -05:00
Alexei Podtelezhnikov
a692170a23 Call it fixed-point. 2013-01-12 19:17:05 -05:00
Werner Lemberg
e4ecce3bfe Disable FT_CONFIG_OPTION_OLD_INTERNALS.
After the next release we are going to remove the code completely.

* devel/ftoption.h, include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_OLD_INTERNALS): Comment out.
* docs/CHANGES: Document it.
2013-01-11 09:02:22 +01:00
Werner Lemberg
53c0cb59ed Typos, whitespace. 2013-01-11 08:29:22 +01:00
Alexei Podtelezhnikov
ad9d5c9726 [base] Update the overflow protection bit.
The recent optimizations of CORDIC iterations drastically reduce
the expansion factor. The vector components with MSB of 29 are now
safe from overflow.

* src/base/fttrigon.c (FT_TRIG_SAFE_MSB): New macro.
(ft_trig_prenorm): Use it and remove dead code.
2013-01-10 22:29:07 -05:00
Werner Lemberg
4412e74de7 Minor comment improvements. 2013-01-10 20:16:20 +01:00
Alexei Podtelezhnikov
6b83a3674c [base, pshinter] Use FT_ABS, FT_MIN, and FT_MAX for readability.
* src/base/ftbbox.c: Updated.
* src/base/ftobjs.c: Updated.
* src/base/fttrigon.c: Updated.
* src/pshinter/pshalgo.c: Updated.
* src/pshinter/pshrec.c: Updated.
2013-01-09 00:25:32 -05:00
Alexei Podtelezhnikov
09dbb059e1 [base] Clean up trigonometric core.
* src/base/fttrigon.c: Document the algorithm in a large comment.
(FT_TRIG_COSCALE): Remove macro.
(FT_Tan: Use `FT_TRIG_SCALE' instead.
(FT_Cos, FT_Vector_Unit): Ditto and round the return values.
2013-01-08 23:29:44 -05:00
Alexei Podtelezhnikov
5dd9657fe8 [base] Use rounding in CORDIC iterations.
* src/base/fttrigon.c (ft_trig_pseudo_rotate,
ft_trig_pseudo_polarize): Improve accuracy by rounding.
2013-01-02 23:45:14 -05:00
Alexei Podtelezhnikov
b4ac30b0ed [base] Reduce trigonometric algorithms.
After we get within 45 degrees by means of true 90-degree rotations,
we can remove initial 45-degree CORDIC iteration and start from
atan(1/2) pseudorotation, reducing expansion factor thereby.

* src/base/fttrigon.c (FT_TRIG_SCALE, FT_TRIG_COSCALE): Update macros.
(ft_trig_pseudo_rotate, ft_trig_pseudo_polarize): Update.

* src/tools/cordic.py: Bring up to date with trigonometric core.

* docs/CHANGES: Old typo.
2013-01-02 22:21:37 -05:00
Alexei Podtelezhnikov
50e634abe1 * src/pshinter/pshalgo.h: Remove unused code. 2013-01-02 20:31:56 -05:00
Werner Lemberg
7d6dc907d8 * src/truetype/ttgload.c (tt_loader_init): Add more tracing. 2012-12-27 01:08:24 +01:00
Werner Lemberg
2ef0a19842 [type1] Fix handling of /FontBBox in MM fonts.
Problem reported by Del Merritt <del@alum.mit.edu>

If we have

  /FontBBox { { 11 12 13 14 15 16 17 18 }
              { 21 22 23 24 25 26 27 28 }
              { 31 32 33 34 35 36 37 38 }
              { 41 42 43 44 45 46 47 48 } }

in the /Blend dictionary,  then the first BBox is { 11 21 31 41 },
the second { 12 22 32 42 }, etc.

* include/freetype/internal/psaux.h (T1_FieldType): Add
`T1_FIELD_TYPE_MM_BBOX' (for temporary use).

* src/psaux/psobjs.c (ps_parser_load_field) <T1_FIELD_TYPE_MM_BBOX>:
Implement it.
2012-12-23 21:14:37 +01:00