home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: SysTools / SysTools.zip / ft-beta.zip / freetype / lib / changes next >
Text File  |  1997-10-06  |  11KB  |  387 lines

  1. Latest changes, DavidT : 22 Sep 97
  2.  
  3.   - "freetype.h" doesn't include "extapi.h" anymore.If a client
  4.     application needs to use extension, it will have to include the
  5.     API extension header file itself
  6.  
  7.   - renamed "extkern.h" to "ftxkern.h". And modified "ttkern.h" to
  8.     include it now
  9.  
  10.   - various format changes within the engine.
  11.  
  12.   - added "ttcommon.h" to automatically prefix all function names with
  13.     "FT" to avoid problems at link time
  14.  
  15.   - renamed Alloc and Free to TT_Alloc and TT_Free to follow the convention
  16.     of all replaceable components
  17.  
  18.   - did the same with the mutex functions, though they're still dummy
  19.  
  20.   - added "const" to some parameter types in the high-level API
  21.  
  22.   - NOTE : thread-safety still unsupported..
  23.  
  24.   - major rewrite of some docs.. incomplete though
  25.  
  26.   - new directory layouts.
  27.  
  28. Latest changes, DavidT :  8 Sep 97
  29.  
  30.   - Added a user guide in the docs directory. Still incomplete..
  31.  
  32.   ttraster.c
  33.  
  34.     The scan-line converter is now re-entrant, though we'll probably
  35.     only use it in thread-safe mode (as each render pool is about 64Kb )
  36.  
  37.  
  38.   ttcmap.c
  39.  
  40.     Replaces ttindex.c. The charmap are now loaded on demand.
  41.     The structure of the cmap tables has changed slightly
  42.     ( one unuseful indirection level removed )
  43.  
  44.  
  45.   ttload.c
  46.  
  47.     Changed the cmap loader to only load the table directory
  48.     in memory
  49.  
  50.  
  51.   ttapi.c
  52.     
  53.     Changed the character mapping API slightly to allow
  54.     charmaps enumerations.
  55.  
  56.  
  57.   freetype.h
  58.  
  59.     added an include to allow extensions
  60.  
  61.  
  62.   ttobjs.h
  63.  
  64.     changed to include the new definitions from ttcmap.h
  65.  
  66.  
  67.   extend/api.h
  68.  
  69.     High-Level API extension file. This file should include
  70.     all extended API definitions (here 'apikern.h')
  71.  
  72.  
  73.   extend/apikern.h
  74.  
  75.     High-level API extension relative to kerning
  76.  
  77.  
  78.   extend/kern.h and kern.c
  79.  
  80.     Kerning support. The tables are loaded on demand
  81.  
  82.  
  83.   extend/extend.h and extend.c
  84.  
  85.     Generic extension management.
  86.  
  87.  
  88.   updated the makefiles, as well as view, lint and timer.
  89.  
  90.   Still to do :
  91.  
  92.    -  zoom.c
  93.    -  last fixes in the interpreter regarding rotated text
  94.    -  documentation !!!
  95.  
  96. -------------------------------------------------------------------
  97.  
  98. Latest Changes, introduced by me, DavidT :
  99.  
  100. - New component layout (again) :
  101.  
  102.   The changes are very similar to those already applied to the Pascal source
  103.   Here is a list of the source files and their role/meaning :
  104.  
  105.    freetype.h  (interface only)
  106.    
  107.      high-level API and external interface. In a perfect world, the
  108.      only file that should be included by client applications. Note
  109.      however that the test programs currently include also "ttraster.h"
  110.      to access directly the scan-line converter, as well as "tterror.h"
  111.      for the 'Panic' function.
  112.  
  113.      Changes :
  114.  
  115.        - introduced the API. Please have a look at it.
  116.  
  117.        - changed the types of handles from 'void*' to 'struct ..' for
  118.          much safer compiles and uses
  119.  
  120.  
  121.    ttapi.c  (body only)
  122.  
  123.       implements most of the functions defined in 'freetype.h'. Does
  124.       some minimal handle checking/conversions then calls the appropriate
  125.       functions.
  126.  
  127.  
  128.    ttcache.h/c  (new component)
  129.  
  130.       the generic cache component. A cache is used to track and recycle
  131.       all instances of a given object class. A cache can be protected by
  132.       a mutex for thread-enabled builds.
  133.  
  134.  
  135.    ttcalc.h/c
  136.  
  137.       the 'math' component used by the engine. Note that I changed the
  138.       configuration macro used to enable 'long longs' with gcc from
  139.       '_GNUC_' to '_GNUC_LONG64_'. This is because long longs are not
  140.       ANSI and give various unpleasant warnings. Moreover, it really
  141.       doesn't seem to speed up operations, but makes a bigger executable.
  142.       That's why it isn't the default anymore..
  143.       
  144.  
  145.    ttconfig.h  (interface only)
  146.  
  147.       configuration header file. Untouched
  148.  
  149.  
  150.    ttdebug.h/c
  151.  
  152.       the debugging component. This is used by both the debugger and
  153.       the interpreter when compiled with '-DDEBUG' (which then includes
  154.       an in-line text-mode simple debugger). Untouched
  155.  
  156.  
  157.    ttengine.h  (interface only)
  158.  
  159.       Engine-specific data root structure definition. This component
  160.       was designed with the idea of grouping all library global variables
  161.       in a unique structure, called the 'Engine_Instance'. It contains
  162.       several variables, as well as pointers to component-specific
  163.       structures, defined in other source files.
  164.  
  165.       Note that all global variables have not been gathered in the engine
  166.       instance yet. For example, the scan-line converter still uses a big
  167.       set of those.
  168.  
  169.  
  170.    tterror.h/c
  171.  
  172.       Error definitions. Added a few ones
  173.  
  174.  
  175.    ttfile.h/c
  176.  
  177.       The ANSI libc file component. rewritten for the new stream
  178.       semantics introduced here.
  179.  
  180.  
  181.    ttfile2.h/c
  182.  
  183.       The memory-mapping version of the file component, for Unix
  184.       systems. rewritten for the new stream semantics introduced
  185.       here
  186.  
  187.  
  188.    ttgload.h/c
  189.  
  190.       The glyph loader is now a single component.
  191.       It is now _complete_ !! And CJK composites work too !
  192.  
  193.  
  194.    ttindex.h/c
  195.  
  196.       The glyph index component. Changed some function names and
  197.       calling parameters to reflect the changes introduced there.
  198.       Also 'fixed' the Cmap0 table lookup.
  199.  
  200.  
  201.    ttinterp.h/c  (previously known as 'ttins.h/c')
  202.  
  203.       The TrueType instructions interpreter. Fixed a bug in the
  204.       super-rounding. Chngaed some code to reflect the new error
  205.       reporting scheme.
  206.  
  207.  
  208.    ttlists.h/c
  209.  
  210.       The generic lists component. A simple component to handle
  211.       all kinds of singly-linked lists.
  212.  
  213.  
  214.    ttload.h/c
  215.  
  216.       The TrueType tables loader. Contains the routines that are
  217.       needed to load a TrueType table in memory. It also contains
  218.       some destructors for delicate structures, like CharMaps or
  219.       Names.
  220.  
  221.       IMPORTANT NOTE :
  222.  
  223.       The new error scheme not interprets a 0 as SUCCESS, and another
  224.       value as an error code. The macros have been updated to collect
  225.       the error code in a local variable called 'error' of type 'TT_Error'
  226.       while the calls themselves have been touched to convert lines like
  227.  
  228.        if ( !ACTION(..) )
  229.          ...
  230.  
  231.       into their now equivalent
  232.  
  233.        if ( ACTION(..) )
  234.          ...
  235.  
  236.       which really translates into :
  237.  
  238.        if ( (error = Action(..)) )
  239.          ...
  240.  
  241.       The error assignement has been included in the macros to make
  242.       the code more readable and maintanable, while still close to the
  243.       Pascal version.
  244.  
  245.  
  246.    ttmemory.h/c
  247.  
  248.       The memory component. Introduced a very simple debugging package
  249.       Just compile ttmemory.c with the 'DEBUG' macro defined to activate
  250.       it. It will dump the list of allocation errors when closing the
  251.       engine..
  252.  
  253.  
  254.    ttmutex.h/c  ( interface only for non threaded builds )
  255.  
  256.       The generic mutex component. Defines some macros
  257.  
  258.  
  259.    ttobjs.h/c
  260.  
  261.       This component defines the object managed by the engine, as well
  262.       as their behaviour. Each object has several methods, uncareful of
  263.       concurrency and coherency, following the naming convention :
  264.  
  265.               Class_Action
  266.  
  267.       e.g.    Instance_Init, Instance_Reset, Face_Create, Context_Run,
  268.               etc ..
  269.  
  270.       Each object class has one constructor and a destructor that are
  271.       used by the caches defined in this component.
  272.  
  273.       There is a more high-level interface, which takes care of coherency
  274.       and concurrency, following a slightly different convention :
  275.  
  276.               Action_Class
  277.  
  278.       e.g.    New_Instance, New_Context, Done_Instance, Done_Context,..
  279.  
  280.  
  281.       NOTE : All object classes are gathered in these files, while in
  282.              the Pascal source, each class has its own tiny source file.
  283.  
  284.  
  285.    ttraster.h/c
  286.  
  287.      The scan-line converter. Now uses the types defined in 'freetype.h'
  288.  
  289.  
  290.    tttables.h  (interface only)
  291.  
  292.      This interface component includes the definition of all TrueType
  293.      tables, as defined per the specifications.
  294.  
  295.  
  296.    tttags.h (interface only)
  297.  
  298.      This component includes the definition of the TrueType table tags
  299.      as defined per the specifications
  300.  
  301.  
  302.    tttypes.h  (interface only)
  303.  
  304.      Engine internal types definitions. Changed the SUCCESS/FAILURE
  305.      macro values to match the new error model.
  306.  
  307.  
  308. What's working :
  309.  
  310.   - view, timer and lint (zoom on its way) in both C and Pascal
  311.   - the Pascal debugger now works well. It has been very useful again :-)
  312.   - it seems that composites are now OK, even CJK ones. Could
  313.     someone check the 'carons', etc .., of many fonts.. They now
  314.     seem good to me, but I may be wrong..
  315.  
  316.  
  317. What's still to do :
  318.  
  319.   - real support for horizontal _and_ vertical device resolutions
  320.     ( the vertical one is currently ignored, and the lib assumes
  321.       square pixels ).
  322.  
  323.   - support for all kinds of transforms in the API as well as the
  324.     interpreter. ( Not much work, but needs a bit of thinking to do
  325.     things well ). This would allow rotated text for instance.
  326.  
  327.     ( these two points are really only one )
  328.  
  329.   - We currently do not support the 'instruction control' flags
  330.     and not all of the 'scan control' ones in the interpreter. This
  331.     would typically deactivate hinting at sizes under 7 ppem or
  332.     over 2048 ppem
  333.  
  334.   - I'm thinking on a way of allowing several extensions to the
  335.     engine more easily ( like adding new tables, like kerning, and
  336.     new APIs ). I'll mail you about it soon..
  337.  
  338.  
  339. What i'd like you to do :
  340.  
  341. - TEST this thing on the maximum fonts you can. I have currently
  342.   tested on the following configs :
  343.  
  344.       - OS/2   gcc-2.6.3
  345.       - Linux  gcc-2.7.2 ( also with electric fence )
  346.  
  347. - eventually port zoom.c..
  348.  
  349.  
  350. ===========================================================================
  351.  
  352. Changes between this version and 05q
  353.  
  354. - integrated Werner's patch
  355.  
  356. - debugged the glyph loader and the ttcalc component
  357.  
  358. - added full font viewing to 'view' as well as scaling and gray-levels.
  359.   Now works well.. Try it !!
  360.   ( Warning : locks up on certain fonts at very small sizes < 7 ).
  361.  
  362. - added a very simple debugger called 'fdebug'
  363.   see note below on interpreter compilation.
  364.  
  365. - added a simple debugger shell within the interpreter. Compiled only when
  366.   the DEBUG maco is defined ( required to compile fdebug )
  367.  
  368. - added a parameter to Load_TrueType_Glyph named 'allow_components'.
  369.   if TRUE, enables the loading of composite glyphs; if FALSE, the
  370.   load will always fail on composites.
  371.  
  372.   ( This was needed for the viewer, as composite glyphs hinting doesn't
  373.     work yet ).
  374.  
  375.   Of course all test programs were modified to work well with these
  376.   changes, with the exception of 'timer' ( on the todo list.. )
  377.  
  378. - enjoy the viewer, it's really nice :-) !!
  379.  
  380.   NOTE : There seem to be very, very, light differences with the Pascal
  381.          viewer in the rendered glyphs. I'll take a deeper look at that
  382.          problem with Pavel's debugger.
  383.  
  384.   - DavidT
  385.  
  386.  
  387.