[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft-devel] New Infinality Release

From: Werner LEMBERG
Subject: Re: [ft-devel] New Infinality Release
Date: Sat, 16 Jun 2012 08:44:53 +0200 (CEST)

> For those interested, the latest release is available here:

Very nice!

Some remarks regarding

  . In line 1440 I see this:


    Just drop these too lines :-)

  . To get the distinction between GDI and DW ClearType (the former,
    older one doesn't support AA rendering along the y axis), Greg
    Hitchcock explained on the OpenType mailing list:

      Most likely, though, is the DirectWrite support for sub-pixel
      positioned ClearType.  This can be queried with GETINFO selector
      bit 10, return bit 17.  (In order to test this flag, the
      TrueType version must be >= 38 and <= 64.)  GDI does not support
      sub-pixel positioned ClearType.

    Bits 10/17, along with two other pairs, 11/18 and 12/19, lack
    complete documentation in the OpenType standard currently; Greg is
    going to fix that in the ClearType whitepaper, he told me.

    Shall we set bit pair 10/17 and use value 38 (not 37) for the
    rasterizer version?

  . I suggest to replace

      if ( distance < FT_MulDiv( minimum_distance_factor,
                                 CUR.GS.minimum_distance, 64 ) )
        distance = FT_MulDiv( minimum_distance_factor,
                              CUR.GS.minimum_distance, 64 );


      new_distance = FT_MulDiv( minimum_distance_factor,
                                CUR.GS.minimum_distance, 64 );
      if ( distance < new_distance )
        distance = new_distance;

    to help dumb compilers.  I think it also makes the code more
    readable.  This is around lines 1300, 1310, 1404, and 1414 in the

  . I'm not happy that you are using `float'.  Right now floating
    mathematics is not used in FreeType, and ideally I would like to
    stay with that (until someone is going to replace MulDiv
    completely).  Would it be a great burden to use FT_MulDiv and
    friends instead?

  . You use wide characters for Cyrillic, e.g.


    This is a bad idea.  First of all, MS compilers require them to be
    encoded in UTF-16 (which is only 16bit wide).  Second, as
    currently written in the source code, those values are encoded in
    a different encoding, namely UTF-8.  This doesn't fit.  Third, for
    higher Unicode values, UTF-8 gives three or more bytes which
    doesn't fit either.  Fourth, the correct type for L'...' would be
    wchar_t, but this is not portable.  Unicode 4.0 says:

      "The width of wchar_t is compiler-specific and can be as small
      as 8 bits.  Consequently, programs that need to be portable
      across any C or C++ compiler should not use wchar_t for storing
      Unicode text.  The wchar_t type is intended for storing
      compiler-defined wide characters, which may be Unicode
      characters in some compilers."

    Please replace them with numeric values (and a proper comment).

You did a lot of search and replace.  If possible I ask you to fix
some formatting stuff:

  . After the variable declarations within a block, you sometimes use
    a single line before the code starts.  I ask you to use two empty

      FT_UInt  foo;

      foo = bar;

    And please avoid excessive, unnecessary whitespace before variable

      FT_UInt                 foo;

    Two spaces (if not aligning vertically) are fully sufficient for
    the weird FreeType formatting :-)

  . Please don't write

      if ( foo != 0                                    &&
           !( bar & baz ) )

    but rather

      if ( foo != 0       &&
           !( bar & baz ) )

    to align the left character of `&&' or `||' with the correct level
    of the closing parenthesis.  If necessary, move the closing brace
    to the right to get a nice vertical alignment.

  . Please say

      foo    = x;
      foobar = x;

    instead of

      foo = x;
      foobar = x;

  . Please always say

      if (foo)
        x = bar;
        x = foobar;

    instead of

      if (foo) x = bar;
      else x = foobar;

    even for very short IF and IF-ELSE clauses.  I like vertical
    formatting a lot, and it improves legibility IMHO.

  . Please don't use braces for single-line blocks, thus

      if (foo)
        foo = bar;

    should rather be

      if (foo)
        foo = bar;

  . We have a space before a parenthesis only after a C
    keyword, but not after function or macro declarations:

      foo ( bar )    =>   foo( bar )

      sizeof( foo )  =>   sizeof ( foo )


reply via email to

[Prev in Thread] Current Thread [Next in Thread]