Charles.Forsyth20060303a828770d19 years agoHistory
1241 lines · 76.0 KB · C
RawDownload
/***************************************************************************//*                                                                         *//*  ftimage.h                                                              *//*                                                                         *//*    FreeType glyph image formats and default raster interface            *//*    (specification).                                                     *//*                                                                         *//*  Copyright 1996-2001, 2002 by                                           *//*  David Turner, Robert Wilhelm, and Werner Lemberg.                      *//*                                                                         *//*  This file is part of the FreeType project, and may only be used,       *//*  modified, and distributed under the terms of the FreeType project      *//*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//***************************************************************************/   /*************************************************************************/  /*                                                                       */  /* Note: A `raster' is simply a scan-line converter, used to render      */  /*       FT_Outlines into FT_Bitmaps.                                    */  /*                                                                       */  /*************************************************************************/  #ifndef __FTIMAGE_H__#define __FTIMAGE_H__  /* _STANDALONE_ is from ftgrays.c */#ifndef _STANDALONE_#include <ft2build.h>#endif  FT_BEGIN_HEADER    /*************************************************************************/  /*                                                                       */  /* <Section>                                                             */  /*    basic_types                                                        */  /*                                                                       */  /*************************************************************************/    /*************************************************************************/  /*                                                                       */  /* <Type>                                                                */  /*    FT_Pos                                                             */  /*                                                                       */  /* <Description>                                                         */  /*    The type FT_Pos is a 32-bit integer used to store vectorial        */  /*    coordinates.  Depending on the context, these can represent        */  /*    distances in integer font units, or 26.6 fixed float pixel         */  /*    coordinates.                                                       */  /*                                                                       */  typedef signed long  FT_Pos;    /*************************************************************************/  /*                                                                       */  /* <Struct>                                                              */  /*    FT_Vector                                                          */  /*                                                                       */  /* <Description>                                                         */  /*    A simple structure used to store a 2D vector; coordinates are of   */  /*    the FT_Pos type.                                                   */  /*                                                                       */  /* <Fields>                                                              */  /*    x :: The horizontal coordinate.                                    */  /*    y :: The vertical coordinate.                                      */  /*                                                                       */  typedef struct  FT_Vector_  {    FT_Pos  x;    FT_Pos  y;   } FT_Vector;    /*************************************************************************/  /*                                                                       */  /* <Struct>                                                              */  /*    FT_BBox                                                            */  /*                                                                       */  /* <Description>                                                         */  /*    A structure used to hold an outline's bounding box, i.e., the      */  /*    coordinates of its extrema in the horizontal and vertical          */  /*    directions.                                                        */  /*                                                                       */  /* <Fields>                                                              */  /*    xMin :: The horizontal minimum (left-most).                        */  /*                                                                       */  /*    yMin :: The vertical minimum (bottom-most).                        */  /*                                                                       */  /*    xMax :: The horizontal maximum (right-most).                       */  /*                                                                       */  /*    yMax :: The vertical maximum (top-most).                           */  /*                                                                       */  typedef struct  FT_BBox_  {    FT_Pos  xMin, yMin;    FT_Pos  xMax, yMax;   } FT_BBox;    /*************************************************************************/  /*                                                                       */  /* <Enum>                                                                */  /*    FT_Pixel_Mode                                                      */  /*                                                                       */  /* <Description>                                                         */  /*    An enumeration type used to describe the format of pixels in a     */  /*    given bitmap.  Note that additional formats may be added in the    */  /*    future.                                                            */  /*                                                                       */  /* <Values>                                                              */  /*    FT_PIXEL_MODE_NONE ::                                              */  /*      Value 0 is reserved.                                             */  /*                                                                       */  /*    FT_PIXEL_MODE_MONO ::                                              */  /*      A monochrome bitmap, using 1 bit per pixel.  Note that pixels    */  /*      are stored in most-significant order (MSB), which means that     */  /*      the left-most pixel in a byte has value 128.                     */  /*                                                                       */  /*    FT_PIXEL_MODE_GRAY ::                                              */  /*      An 8-bit bitmap, generally used to represent anti-aliased glyph  */  /*      images.  Each pixel is stored in one byte.  Note that the number */  /*      of value "gray" levels is stored in the `num_bytes' field of     */  /*      the @FT_Bitmap structure (it generally is 256).                  */  /*                                                                       */  /*    FT_PIXEL_MODE_GRAY2 ::                                             */  /*      A 2-bit/pixel bitmap, used to represent embedded anti-aliased    */  /*      bitmaps in font files according to the OpenType specification.   */  /*      We haven't found a single font using this format, however.       */  /*                                                                       */  /*    FT_PIXEL_MODE_GRAY4 ::                                             */  /*      A 4-bit/pixel bitmap, used to represent embedded anti-aliased    */  /*      bitmaps in font files according to the OpenType specification.   */  /*      We haven't found a single font using this format, however.       */  /*                                                                       */  /*    FT_PIXEL_MODE_LCD ::                                               */  /*      An 8-bit bitmap, used to represent RGB or BGR decimated glyph    */  /*      images used for display on LCD displays; the bitmap's width is   */  /*      three times wider than the original glyph image.  See also       */  /*      @FT_RENDER_MODE_LCD.                                             */  /*                                                                       */  /*    FT_PIXEL_MODE_LCD_V ::                                             */  /*      An 8-bit bitmap, used to represent RGB or BGR decimated glyph    */  /*      images used for display on rotated LCD displays; the bitmap's    */  /*      height is three times taller than the original glyph image.      */  /*      See also @FT_RENDER_MODE_LCD_V.                                  */  /*                                                                       */  typedef enum  FT_Pixel_Mode_  {    FT_PIXEL_MODE_NONE = 0,    FT_PIXEL_MODE_MONO,    FT_PIXEL_MODE_GRAY,    FT_PIXEL_MODE_GRAY2,    FT_PIXEL_MODE_GRAY4,    FT_PIXEL_MODE_LCD,    FT_PIXEL_MODE_LCD_V,     FT_PIXEL_MODE_MAX      /* do not remove */   } FT_Pixel_Mode;    /*************************************************************************/  /*                                                                       */  /* <Enum>                                                                */  /*    ft_pixel_mode_xxx                                                  */  /*                                                                       */  /* <Description>                                                         */  /*    A list of deprecated constants.  Use the corresponding             */  /*    @FT_Pixel_Mode values instead.                                     */  /*                                                                       */  /* <Values>                                                              */  /*    ft_pixel_mode_none  :: see @FT_PIXEL_MODE_NONE                     */  /*    ft_pixel_mode_mono  :: see @FT_PIXEL_MODE_MONO                     */  /*    ft_pixel_mode_grays :: see @FT_PIXEL_MODE_GRAY                     */  /*    ft_pixel_mode_pal2  :: see @FT_PIXEL_MODE_GRAY2                    */  /*    ft_pixel_mode_pal4  :: see @FT_PIXEL_MODE_GRAY4                    */  /*                                                                       */#define ft_pixel_mode_none   FT_PIXEL_MODE_NONE#define ft_pixel_mode_mono   FT_PIXEL_MODE_MONO#define ft_pixel_mode_grays  FT_PIXEL_MODE_GRAY#define ft_pixel_mode_pal2   FT_PIXEL_MODE_GRAY2#define ft_pixel_mode_pal4   FT_PIXEL_MODE_GRAY4  /* */ #if 0   /*************************************************************************/  /*                                                                       */  /* <Enum>                                                                */  /*    FT_Palette_Mode                                                    */  /*                                                                       */  /* <Description>                                                         */  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT!                           */  /*                                                                       */  /*    An enumeration type used to describe the format of a bitmap        */  /*    palette, used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8.      */  /*                                                                       */  /* <Fields>                                                              */  /*    ft_palette_mode_rgb  :: The palette is an array of 3-bytes RGB     */  /*                            records.                                   */  /*                                                                       */  /*    ft_palette_mode_rgba :: The palette is an array of 4-bytes RGBA    */  /*                            records.                                   */  /*                                                                       */  /* <Note>                                                                */  /*    As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by       */  /*    FreeType, these types are not handled by the library itself.       */  /*                                                                       */  typedef enum  FT_Palette_Mode_  {    ft_palette_mode_rgb = 0,    ft_palette_mode_rgba,     ft_palettte_mode_max   /* do not remove */   } FT_Palette_Mode;   /* */ #endif    /*************************************************************************/  /*                                                                       */  /* <Struct>                                                              */  /*    FT_Bitmap                                                          */  /*                                                                       */  /* <Description>                                                         */  /*    A structure used to describe a bitmap or pixmap to the raster.     */  /*    Note that we now manage pixmaps of various depths through the      */  /*    `pixel_mode' field.                                                */  /*                                                                       */  /* <Fields>                                                              */  /*    rows         :: The number of bitmap rows.                         */  /*                                                                       */  /*    width        :: The number of pixels in bitmap row.                */  /*                                                                       */  /*    pitch        :: The pitch's absolute value is the number of bytes  */  /*                    taken by one bitmap row, including padding.        */  /*                    However, the pitch is positive when the bitmap has */  /*                    a `down' flow, and negative when it has an `up'    */  /*                    flow.  In all cases, the pitch is an offset to add */  /*                    to a bitmap pointer in order to go down one row.   */  /*                                                                       */  /*    buffer       :: A typeless pointer to the bitmap buffer.  This     */  /*                    value should be aligned on 32-bit boundaries in    */  /*                    most cases.                                        */  /*                                                                       */  /*    num_grays    :: This field is only used with                       */  /*                    `FT_PIXEL_MODE_GRAY'; it gives the number of gray  */  /*                    levels used in the bitmap.                         */  /*                                                                       */  /*    pixel_mode   :: The pixel_mode, i.e., how pixel bits are stored.   */  /*                                                                       */  /*    palette_mode :: This field is only used with paletted pixel modes; */  /*                    it indicates how the palette is stored.            */  /*                                                                       */  /*    palette      :: A typeless pointer to the bitmap palette; only     */  /*                    used for paletted pixel modes.                     */  /*                                                                       */  /* <Note>                                                                */  /*   For now, the only pixel mode supported by FreeType are mono and     */  /*   grays.  However, drivers might be added in the future to support    */  /*   more `colorful' options.                                            */  /*                                                                       */  /*   When using pixel modes pal2, pal4 and pal8 with a void `palette'    */  /*   field, a gray pixmap with respectively 4, 16, and 256 levels of     */  /*   gray is assumed.  This, in order to be compatible with some         */  /*   embedded bitmap formats defined in the TrueType specification.      */  /*                                                                       */  /*   Note that no font was found presenting such embedded bitmaps, so    */  /*   this is currently completely unhandled by the library.              */  /*                                                                       */  typedef struct  FT_Bitmap_  {    int             rows;    int             width;    int             pitch;    unsigned char*  buffer;    short           num_grays;    char            pixel_mode;    char            palette_mode;    void*           palette;   } FT_Bitmap;    /*************************************************************************/  /*                                                                       */  /* <Section>                                                             */  /*    outline_processing                                                 */  /*                                                                       */  /*************************************************************************/    /*************************************************************************/  /*                                                                       */  /* <Struct>                                                              */  /*    FT_Outline                                                         */  /*                                                                       */  /* <Description>                                                         */  /*    This structure is used to describe an outline to the scan-line     */  /*    converter.                                                         */  /*                                                                       */  /* <Fields>                                                              */  /*    n_contours :: The number of contours in the outline.               */  /*                                                                       */  /*    n_points   :: The number of points in the outline.                 */  /*                                                                       */  /*    points     :: A pointer to an array of `n_points' FT_Vector        */  /*                  elements, giving the outline's point coordinates.    */  /*                                                                       */  /*    tags       :: A pointer to an array of `n_points' chars, giving    */  /*                  each outline point's type.  If bit 0 is unset, the   */  /*                  point is `off' the curve, i.e. a Bezier control      */  /*                  point, while it is `on' when set.                    */  /*                                                                       */  /*                  Bit 1 is meaningful for `off' points only.  If set,  */  /*                  it indicates a third-order Bezier arc control point; */  /*                  and a second-order control point if unset.           */  /*                                                                       */  /*    contours   :: An array of `n_contours' shorts, giving the end      */  /*                  point of each contour within the outline.  For       */  /*                  example, the first contour is defined by the points  */  /*                  `0' to `contours[0]', the second one is defined by   */  /*                  the points `contours[0]+1' to `contours[1]', etc.    */  /*                                                                       */  /*    flags      :: A set of bit flags used to characterize the outline  */  /*                  and give hints to the scan-converter and hinter on   */  /*                  how to convert/grid-fit it.  See FT_Outline_Flags.   */  /*                                                                       */  typedef struct  FT_Outline_  {    short       n_contours;      /* number of contours in glyph        */    short       n_points;        /* number of points in the glyph      */     FT_Vector*  points;          /* the outline's points               */    char*       tags;            /* the points flags                   */    short*      contours;        /* the contour end points             */     int         flags;           /* outline masks                      */   } FT_Outline;    /*************************************************************************/  /*                                                                       */  /* <Enum>                                                                */  /*   FT_Outline_Flags                                                    */  /*                                                                       */  /* <Description>                                                         */  /*    A simple type used to enumerates the flags in an outline's         */  /*    `outline_flags' field.                                             */  /*                                                                       */  /* <Values>                                                              */  /*    FT_OUTLINE_NONE           :: Value 0 is reserved.                  */  /*                                                                       */  /*    FT_OUTLINE_OWNER          :: If set, this flag indicates that the  */  /*                                 outline's field arrays (i.e.          */  /*                                 `points', `flags' & `contours') are   */  /*                                 `owned' by the outline object, and    */  /*                                 should thus be freed when it is       */  /*                                 destroyed.                            */  /*                                                                       */  /*   FT_OUTLINE_EVEN_ODD_FILL   :: By default, outlines are filled using */  /*                                 the non-zero winding rule.  If set to */  /*                                 1, the outline will be filled using   */  /*                                 the even-odd fill rule (only works    */  /*                                 with the smooth raster).              */  /*                                                                       */  /*   FT_OUTLINE_REVERSE_FILL    :: By default, outside contours of an    */  /*                                 outline are oriented in clock-wise    */  /*                                 direction, as defined in the TrueType */  /*                                 specification.  This flag is set if   */  /*                                 the outline uses the opposite         */  /*                                 direction (typically for Type 1       */  /*                                 fonts).  This flag is ignored by the  */  /*                                 scan-converter.  However, it is very  */  /*                                 important for the auto-hinter.        */  /*                                                                       */  /*   FT_OUTLINE_IGNORE_DROPOUTS :: By default, the scan converter will   */  /*                                 try to detect drop-outs in an outline */  /*                                 and correct the glyph bitmap to       */  /*                                 ensure consistent shape continuity.   */  /*                                 If set, this flag hints the scan-line */  /*                                 converter to ignore such cases.       */  /*                                                                       */  /*   FT_OUTLINE_HIGH_PRECISION  :: This flag indicates that the          */  /*                                 scan-line converter should try to     */  /*                                 convert this outline to bitmaps with  */  /*                                 the highest possible quality.  It is  */  /*                                 typically set for small character     */  /*                                 sizes.  Note that this is only a      */  /*                                 hint, that might be completely        */  /*                                 ignored by a given scan-converter.    */  /*                                                                       */  /*   FT_OUTLINE_SINGLE_PASS     :: This flag is set to force a given     */  /*                                 scan-converter to only use a single   */  /*                                 pass over the outline to render a     */  /*                                 bitmap glyph image.  Normally, it is  */  /*                                 set for very large character sizes.   */  /*                                 It is only a hint, that might be      */  /*                                 completely ignored by a given         */  /*                                 scan-converter.                       */  /*                                                                       */  typedef enum  FT_Outline_Flags_  {    FT_OUTLINE_NONE            = 0,    FT_OUTLINE_OWNER           = 1,    FT_OUTLINE_EVEN_ODD_FILL   = 2,    FT_OUTLINE_REVERSE_FILL    = 4,    FT_OUTLINE_IGNORE_DROPOUTS = 8,    FT_OUTLINE_HIGH_PRECISION  = 256,    FT_OUTLINE_SINGLE_PASS     = 512   } FT_Outline_Flags;   /*************************************************************************  *  * @enum:  *   ft_outline_xxx  *  * @description:  *   These constants are deprecated.  Please use the corresponding  *   @FT_OUTLINE_XXX values.  *  * @values:  *   ft_outline_none            :: See @FT_OUTLINE_NONE.  *   ft_outline_owner           :: See @FT_OUTLINE_OWNER.  *   ft_outline_even_odd_fill   :: See @FT_OUTLINE_EVEN_ODD_FILL.  *   ft_outline_reverse_fill    :: See @FT_OUTLINE_REVERSE_FILL.  *   ft_outline_ignore_dropouts :: See @FT_OUTLINE_IGNORE_DROPOUTS.  *   ft_outline_high_precision  :: See @FT_OUTLINE_HIGH_PRECISION.  *   ft_outline_single_pass     :: See @FT_OUTLINE_SINGLE_PASS.  */#define ft_outline_none             FT_OUTLINE_NONE#define ft_outline_owner            FT_OUTLINE_OWNER#define ft_outline_even_odd_fill    FT_OUTLINE_EVEN_ODD_FILL#define ft_outline_reverse_fill     FT_OUTLINE_REVERSE_FILL#define ft_outline_ignore_dropouts  FT_OUTLINE_IGNORE_DROPOUTS#define ft_outline_high_precision   FT_OUTLINE_HIGH_PRECISION#define ft_outline_single_pass      FT_OUTLINE_SINGLE_PASS   /* */ #define FT_CURVE_TAG( flag )  ( flag & 3 ) #define FT_CURVE_TAG_ON           1#define FT_CURVE_TAG_CONIC        0#define FT_CURVE_TAG_CUBIC        2 #define FT_CURVE_TAG_TOUCH_X      8  /* reserved for the TrueType hinter */#define FT_CURVE_TAG_TOUCH_Y     16  /* reserved for the TrueType hinter */ #define FT_CURVE_TAG_TOUCH_BOTH  ( FT_CURVE_TAG_TOUCH_X | \                                   FT_CURVE_TAG_TOUCH_Y ) #define  FT_Curve_Tag_On       FT_CURVE_TAG_ON#define  FT_Curve_Tag_Conic    FT_CURVE_TAG_CONIC#define  FT_Curve_Tag_Cubic    FT_CURVE_TAG_CUBIC#define  FT_Curve_Tag_Touch_X  FT_CURVE_TAG_TOUCH_X#define  FT_Curve_Tag_Touch_Y  FT_CURVE_TAG_TOUCH_Y   /*************************************************************************/  /*                                                                       */  /* <FuncType>                                                            */  /*    FT_Outline_MoveToFunc                                              */  /*                                                                       */  /* <Description>                                                         */  /*    A function pointer type used to describe the signature of a `move  */  /*    to' function during outline walking/decomposition.                 */  /*                                                                       */  /*    A `move to' is emitted to start a new contour in an outline.       */  /*                                                                       */  /* <Input>                                                               */  /*    to   :: A pointer to the target point of the `move to'.            */  /*                                                                       */  /*    user :: A typeless pointer which is passed from the caller of the  */  /*            decomposition function.                                    */  /*                                                                       */  /* <Return>                                                              */  /*    Error code.  0 means success.                                      */  /*                                                                       */  typedef int  (*FT_Outline_MoveToFunc)( FT_Vector*  to,                            void*       user ); #define FT_Outline_MoveTo_Func  FT_Outline_MoveToFunc

Lines 1–500 of 1241.