>>>>> "Graham" == Graham Asher <[email protected]> writes:
Graham> When I coded this up for a private project a while ago I took a Graham> simpler approach: I used the matrix to convert the point (1,0) to a Graham> new point. If the new point is (x,0), (0,x), (-x,0) or (0,-x) for any Graham> x we have a rotation by a multiple of 90 degrees, neglecting any Graham> slant; the slant is ignored because we are transforming a vector along Graham> the baseline, and that's what we're interested in. Applying the matrix to the point (1,0) is a great idea. The result is Sx×cos(θ), −Sx×sin(θ) or, picking from the matrix itself, (xx,yx). The check, then, is: (xx == 0 && yx != 0) || (yx == 0 && xx != 0) Graham> This system worked perfectly. Again, great simplification! A proposed changeset is:
>From 5b1e0c0f4cc29a278cc2169c04dc56907a220f32 Mon Sep 17 00:00:00 2001 From: James Cloos <[email protected]> Date: Wed, 27 May 2009 17:16:38 -0400 Subject: [PATCH 1/1] =?utf-8?q?Allow=20autohinting=20when=20rotating=20by=20multiples=20of=2090=C2=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit * src/base/ftobjs.c (FT_Load_Glyph): alter check for permitted matrices to allow rotations by multiples of 90°, not only un- rotated, possibility slanted matrices. Signed-off-by: James Cloos <[email protected]> --- src/base/ftobjs.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 613deef..c1ce2fd 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -590,7 +590,8 @@ * * - Do only auto-hinting if we have a hinter module, * a scalable font format dealing with outlines, - * and no transforms except simple slants. + * and no transforms except simple slants and/or + * rotations by integer multiples of 90 degrees. * * - Then, autohint if FT_LOAD_FORCE_AUTOHINT is set * or if we don't have a native font hinter. @@ -607,8 +608,10 @@ FT_DRIVER_IS_SCALABLE( driver ) && FT_DRIVER_USES_OUTLINES( driver ) && !FT_IS_TRICKY( face ) && - face->internal->transform_matrix.yy > 0 && - face->internal->transform_matrix.yx == 0 ) + ( ( face->internal->transform_matrix.yx == 0 && + face->internal->transform_matrix.xx != 0 ) || + ( face->internal->transform_matrix.xx == 0 && + face->internal->transform_matrix.yx != 0 ) ) ) { if ( ( load_flags & FT_LOAD_FORCE_AUTOHINT ) || !FT_DRIVER_HAS_HINTER( driver ) ) -- 1.6.3.rc0.53.g1a1f0.dirty
-JimC -- James Cloos <[email protected]> OpenPGP: 1024D/ED7DAEA6
_______________________________________________ Freetype-devel mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/freetype-devel
