ftimage.h revision 85a477b2ee5e87f3759f81ca86a3fc235b4a2cde
1d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/***************************************************************************/
2d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*                                                                         */
3d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*  ftimage.h                                                              */
4d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*                                                                         */
55aa646c565b963d44e295162dbe27c039fdd2e1bWerner Lemberg/*    FreeType glyph image formats and default raster interface            */
65aa646c565b963d44e295162dbe27c039fdd2e1bWerner Lemberg/*    (specification).                                                     */
7f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner/*                                                                         */
8c32b178934ed742781e1fb0a28d964e410226780Werner Lemberg/*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,   */
9c32b178934ed742781e1fb0a28d964e410226780Werner Lemberg/*            2010 by                                                      */
105aa646c565b963d44e295162dbe27c039fdd2e1bWerner Lemberg/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
11d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*                                                                         */
12670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg/*  This file is part of the FreeType project, and may only be used,       */
13670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg/*  modified, and distributed under the terms of the FreeType project      */
14d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
15d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*  this file you indicate that you have read the license and              */
16d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*  understand and accept it fully.                                        */
17d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/*                                                                         */
18d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/***************************************************************************/
19d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
20670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
21670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
22670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* Note: A `raster' is simply a scan-line converter, used to render      */
23670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*       FT_Outlines into FT_Bitmaps.                                    */
24670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
25670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
26670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
27670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
284c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner Lemberg#ifndef __FTIMAGE_H__
294c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner Lemberg#define __FTIMAGE_H__
30d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
31bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg
32d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg  /* _STANDALONE_ is from ftgrays.c */
335dfbdf76594325baea09634869566195cf5937e8Werner Lemberg#ifndef _STANDALONE_
34d3c8e064a5587e924f83913e5eae38586b50840cDavid Turner#include <ft2build.h>
355dfbdf76594325baea09634869566195cf5937e8Werner Lemberg#endif
364c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner Lemberg
3790d9964ec9c6537a69dedbc29f0a6d277707dbccWerner Lemberg
384c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner LembergFT_BEGIN_HEADER
39bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg
4038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
4138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
4238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
4338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Section>                                                             */
4438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*    basic_types                                                        */
4538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
4638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
4738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
48bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg
49d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
50d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
51d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Type>                                                                */
52d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    FT_Pos                                                             */
53d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
54d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
55c4bdb7357186a820e6064d10cc6fb71d1b4cb26fWerner Lemberg  /*    The type FT_Pos is used to store vectorial coordinates.  Depending */
56c4bdb7357186a820e6064d10cc6fb71d1b4cb26fWerner Lemberg  /*    on the context, these can represent distances in integer font      */
57c4bdb7357186a820e6064d10cc6fb71d1b4cb26fWerner Lemberg  /*    units, or 16.16, or 26.6 fixed float pixel coordinates.            */
58d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
59d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  typedef signed long  FT_Pos;
60d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
61d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
62d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
63d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
64d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Struct>                                                              */
65d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    FT_Vector                                                          */
66d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
67d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
68670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    A simple structure used to store a 2D vector; coordinates are of   */
69d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    the FT_Pos type.                                                   */
70d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
71d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Fields>                                                              */
72d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    x :: The horizontal coordinate.                                    */
73d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    y :: The vertical coordinate.                                      */
74d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
75d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  typedef struct  FT_Vector_
76d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
77d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    FT_Pos  x;
78d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    FT_Pos  y;
79d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
80d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  } FT_Vector;
81d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
82d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
83670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
84670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
85e231a6588203091276aabd32e4217e452675f3c4David Turner  /* <Struct>                                                              */
86e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    FT_BBox                                                            */
87e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
88e231a6588203091276aabd32e4217e452675f3c4David Turner  /* <Description>                                                         */
89e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    A structure used to hold an outline's bounding box, i.e., the      */
90e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    coordinates of its extrema in the horizontal and vertical          */
91e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    directions.                                                        */
92e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
93e231a6588203091276aabd32e4217e452675f3c4David Turner  /* <Fields>                                                              */
94e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    xMin :: The horizontal minimum (left-most).                        */
95e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
96e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    yMin :: The vertical minimum (bottom-most).                        */
97e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
98e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    xMax :: The horizontal maximum (right-most).                       */
99e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
100e231a6588203091276aabd32e4217e452675f3c4David Turner  /*    yMax :: The vertical maximum (top-most).                           */
101e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
102b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /* <Note>                                                                */
103b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    The bounding box is specified with the coordinates of the lower    */
104b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    left and the upper right corner.  In PostScript, those values are  */
105b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    often called (llx,lly) and (urx,ury), respectively.                */
106b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*                                                                       */
107b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    If `yMin' is negative, this value gives the glyph's descender.     */
108b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    Otherwise, the glyph doesn't descend below the baseline.           */
109b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    Similarly, if `ymax' is positive, this value gives the glyph's     */
110b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*    ascender.                                                          */
111b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg  /*                                                                       */
11285a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg  /*    `xMin' gives the horizontal distance from the glyph's origin to    */
11385a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg  /*    the left edge of the glyph's bounding box.  If `xMin' is negative, */
11485a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg  /*    the glyph extends to the left of the origin.                       */
11585a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg  /*                                                                       */
116e231a6588203091276aabd32e4217e452675f3c4David Turner  typedef struct  FT_BBox_
117e231a6588203091276aabd32e4217e452675f3c4David Turner  {
118e231a6588203091276aabd32e4217e452675f3c4David Turner    FT_Pos  xMin, yMin;
119e231a6588203091276aabd32e4217e452675f3c4David Turner    FT_Pos  xMax, yMax;
120e231a6588203091276aabd32e4217e452675f3c4David Turner
121e231a6588203091276aabd32e4217e452675f3c4David Turner  } FT_BBox;
122e231a6588203091276aabd32e4217e452675f3c4David Turner
123e231a6588203091276aabd32e4217e452675f3c4David Turner
124e231a6588203091276aabd32e4217e452675f3c4David Turner  /*************************************************************************/
125e231a6588203091276aabd32e4217e452675f3c4David Turner  /*                                                                       */
126670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Enum>                                                                */
127670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FT_Pixel_Mode                                                      */
128670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
129670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
130670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    An enumeration type used to describe the format of pixels in a     */
131670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    given bitmap.  Note that additional formats may be added in the    */
132670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    future.                                                            */
133670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
13456106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  /* <Values>                                                              */
13556106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  /*    FT_PIXEL_MODE_NONE ::                                              */
1368a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*      Value~0 is reserved.                                             */
13756106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  /*                                                                       */
1386b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    FT_PIXEL_MODE_MONO ::                                              */
1398a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*      A monochrome bitmap, using 1~bit per pixel.  Note that pixels    */
1406b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      are stored in most-significant order (MSB), which means that     */
1416b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      the left-most pixel in a byte has value 128.                     */
142b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
1436b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    FT_PIXEL_MODE_GRAY ::                                              */
1446b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      An 8-bit bitmap, generally used to represent anti-aliased glyph  */
1456b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      images.  Each pixel is stored in one byte.  Note that the number */
14605bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      of `gray' levels is stored in the `num_grays' field of the       */
14705bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      @FT_Bitmap structure (it generally is 256).                      */
148b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
149b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_PIXEL_MODE_GRAY2 ::                                             */
15005bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      A 2-bit per pixel bitmap, used to represent embedded             */
15105bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      anti-aliased bitmaps in font files according to the OpenType     */
15205bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      specification.  We haven't found a single font using this        */
15305bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      format, however.                                                 */
154b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
155b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_PIXEL_MODE_GRAY4 ::                                             */
15605bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      A 4-bit per pixel bitmap, representing embedded anti-aliased     */
157b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*      bitmaps in font files according to the OpenType specification.   */
1586b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      We haven't found a single font using this format, however.       */
159b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
1606b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    FT_PIXEL_MODE_LCD ::                                               */
16105bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      An 8-bit bitmap, representing RGB or BGR decimated glyph images  */
16205bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      used for display on LCD displays; the bitmap is three times      */
16305bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      wider than the original glyph image.  See also                   */
1646b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      @FT_RENDER_MODE_LCD.                                             */
165b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
166b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_PIXEL_MODE_LCD_V ::                                             */
16705bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      An 8-bit bitmap, representing RGB or BGR decimated glyph images  */
16805bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      used for display on rotated LCD displays; the bitmap is three    */
16905bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg  /*      times taller than the original glyph image.  See also            */
170fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*      @FT_RENDER_MODE_LCD_V.                                           */
171670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
172670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef enum  FT_Pixel_Mode_
173d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
174b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_NONE = 0,
175b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_MONO,
176b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_GRAY,
177b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_GRAY2,
178b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_GRAY4,
179b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_LCD,
180b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_LCD_V,
181b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner
182b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_PIXEL_MODE_MAX      /* do not remove */
18346ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
184d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  } FT_Pixel_Mode;
185d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
186d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
187670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
188670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
189670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Enum>                                                                */
190b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    ft_pixel_mode_xxx                                                  */
191b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
192b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Description>                                                         */
1936b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    A list of deprecated constants.  Use the corresponding             */
1946b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    @FT_Pixel_Mode values instead.                                     */
195b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
196b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Values>                                                              */
197fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_pixel_mode_none  :: See @FT_PIXEL_MODE_NONE.                    */
198fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_pixel_mode_mono  :: See @FT_PIXEL_MODE_MONO.                    */
199fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_pixel_mode_grays :: See @FT_PIXEL_MODE_GRAY.                    */
200fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_pixel_mode_pal2  :: See @FT_PIXEL_MODE_GRAY2.                   */
201fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_pixel_mode_pal4  :: See @FT_PIXEL_MODE_GRAY4.                   */
2026b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*                                                                       */
2036b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_none   FT_PIXEL_MODE_NONE
2046b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_mono   FT_PIXEL_MODE_MONO
2056b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_grays  FT_PIXEL_MODE_GRAY
2066b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_pal2   FT_PIXEL_MODE_GRAY2
2076b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_pal4   FT_PIXEL_MODE_GRAY4
208b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner
209b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */
2106b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
211b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner#if 0
2126b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
213b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*************************************************************************/
214b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
215b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Enum>                                                                */
216670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FT_Palette_Mode                                                    */
217670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
218670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
2196b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT!                           */
220b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
221fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    An enumeration type to describe the format of a bitmap palette,    */
222fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    used with ft_pixel_mode_pal4 and ft_pixel_mode_pal8.               */
223670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
224e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg  /* <Values>                                                              */
2258a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    ft_palette_mode_rgb  :: The palette is an array of 3-byte RGB      */
226670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                            records.                                   */
227670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
2288a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    ft_palette_mode_rgba :: The palette is an array of 4-byte RGBA     */
229670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                            records.                                   */
230670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
231670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
232670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    As ft_pixel_mode_pal2, pal4 and pal8 are currently unused by       */
233670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FreeType, these types are not handled by the library itself.       */
234670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
235670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef enum  FT_Palette_Mode_
236d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
237d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    ft_palette_mode_rgb = 0,
238d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    ft_palette_mode_rgba,
23946ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
240e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg    ft_palette_mode_max   /* do not remove */
24146ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
242d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  } FT_Palette_Mode;
243d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
244b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* */
2456b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
246b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner#endif
247d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
2486b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
249670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
250670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
251670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Struct>                                                              */
252670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FT_Bitmap                                                          */
253670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
254670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
255670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    A structure used to describe a bitmap or pixmap to the raster.     */
256670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    Note that we now manage pixmaps of various depths through the      */
257670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    `pixel_mode' field.                                                */
258670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
259670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Fields>                                                              */
260670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    rows         :: The number of bitmap rows.                         */
261670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
262670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    width        :: The number of pixels in bitmap row.                */
263670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
264670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    pitch        :: The pitch's absolute value is the number of bytes  */
265670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    taken by one bitmap row, including padding.        */
266670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    However, the pitch is positive when the bitmap has */
267670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    a `down' flow, and negative when it has an `up'    */
268670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    flow.  In all cases, the pitch is an offset to add */
269670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    to a bitmap pointer in order to go down one row.   */
270670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
271670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    buffer       :: A typeless pointer to the bitmap buffer.  This     */
272670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    value should be aligned on 32-bit boundaries in    */
273670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    most cases.                                        */
274670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
275670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    num_grays    :: This field is only used with                       */
276fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*                    @FT_PIXEL_MODE_GRAY; it gives the number of gray   */
277670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                    levels used in the bitmap.                         */
278670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
2796d798993623602c7877d864b5799424ee17722f3Werner Lemberg  /*    pixel_mode   :: The pixel mode, i.e., how pixel bits are stored.   */
2806d798993623602c7877d864b5799424ee17722f3Werner Lemberg  /*                    See @FT_Pixel_Mode for possible values.            */
281670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
282ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*    palette_mode :: This field is intended for paletted pixel modes;   */
283ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*                    it indicates how the palette is stored.  Not       */
284ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*                    used currently.                                    */
285670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
286ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*    palette      :: A typeless pointer to the bitmap palette; this     */
287ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*                    field is intended for paletted pixel modes.  Not   */
288ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*                    used currently.                                    */
289670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
290670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
291ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg  /*   For now, the only pixel modes supported by FreeType are mono and    */
292670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*   grays.  However, drivers might be added in the future to support    */
293670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*   more `colorful' options.                                            */
294670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
295670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef struct  FT_Bitmap_
296d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
297bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    int             rows;
298bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    int             width;
299bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    int             pitch;
300bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    unsigned char*  buffer;
301bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    short           num_grays;
302bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    char            pixel_mode;
303bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    char            palette_mode;
304bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg    void*           palette;
305d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
306d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  } FT_Bitmap;
307d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
308d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
30938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
31038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
31138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Section>                                                             */
31238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*    outline_processing                                                 */
31338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
31438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
31538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
31618b55f7bbc39f92877f825326441c13f8aaf5e80David Turner
317d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
318d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
319d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Struct>                                                              */
320d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    FT_Outline                                                         */
321d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
322d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
323d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    This structure is used to describe an outline to the scan-line     */
324f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*    converter.                                                         */
325d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
326d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Fields>                                                              */
32741dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner  /*    n_contours :: The number of contours in the outline.               */
328d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
32941dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner  /*    n_points   :: The number of points in the outline.                 */
330d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
3316756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    points     :: A pointer to an array of `n_points' @FT_Vector       */
332670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                  elements, giving the outline's point coordinates.    */
333d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
334670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    tags       :: A pointer to an array of `n_points' chars, giving    */
33572271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  each outline point's type.                           */
33672271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                                                                       */
33772271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  If bit~0 is unset, the point is `off' the curve,     */
33872271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  i.e., a Bézier control point, while it is `on' if    */
33972271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  set.                                                 */
340d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
3418a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*                  Bit~1 is meaningful for `off' points only.  If set,  */
342e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*                  it indicates a third-order Bézier arc control point; */
343670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                  and a second-order control point if unset.           */
344d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
34572271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  If bit~2 is set, bits 5-7 contain the drop-out mode  */
34672271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  (as defined in the OpenType specification; the value */
34772271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  is the same as the argument to the SCANMODE          */
34872271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  instruction).                                        */
34972271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                                                                       */
35072271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                  Bits 3 and~4 are reserved for internal purposes.     */
35172271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                                                                       */
35241dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner  /*    contours   :: An array of `n_contours' shorts, giving the end      */
35341dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner  /*                  point of each contour within the outline.  For       */
354670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                  example, the first contour is defined by the points  */
355670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                  `0' to `contours[0]', the second one is defined by   */
356670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                  the points `contours[0]+1' to `contours[1]', etc.    */
357d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
358670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    flags      :: A set of bit flags used to characterize the outline  */
359670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                  and give hints to the scan-converter and hinter on   */
3606756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*                  how to convert/grid-fit it.  See @FT_OUTLINE_FLAGS.  */
361d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
36272271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /* <Note>                                                                */
36372271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    The B/W rasterizer only checks bit~2 in the `tags' array for the   */
36472271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    first point of each contour.  The drop-out mode as given with      */
36572271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and       */
36672271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden.           */
36772271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                                                                       */
368d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  typedef struct  FT_Outline_
369d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
370d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    short       n_contours;      /* number of contours in glyph        */
371d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    short       n_points;        /* number of points in the glyph      */
372d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
373d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    FT_Vector*  points;          /* the outline's points               */
37441dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner    char*       tags;            /* the points flags                   */
375d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner    short*      contours;        /* the contour end points             */
376d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
37741dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner    int         flags;           /* outline masks                      */
37846ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
3790f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  } FT_Outline;
380d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
3814c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)  /* Following limits must be consistent with */
3824c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)  /* FT_Outline.{n_contours,n_points}         */
3834c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)#define FT_OUTLINE_CONTOURS_MAX  SHRT_MAX
3844c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)#define FT_OUTLINE_POINTS_MAX    SHRT_MAX
3854c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)
386f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner
3870f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  /*************************************************************************/
3880f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  /*                                                                       */
3890f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  /* <Enum>                                                                */
3905df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_FLAGS                                                   */
3910f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  /*                                                                       */
3920f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  /* <Description>                                                         */
3937a0241049aad6b471effe410c436e9256443883fWerner Lemberg  /*    A list of bit-field constants use for the flags in an outline's    */
3946aa35cd5e836fb1ae7bf9b50ad7a53311f717265Werner Lemberg  /*    `flags' field.                                                     */
3950f99ddda5f236479edd55f9233dd4ade1d76f646David Turner  /*                                                                       */
39656106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  /* <Values>                                                              */
3975df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_NONE ::                                                 */
3988a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*      Value~0 is reserved.                                             */
3995df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4005df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_OWNER ::                                                */
4015df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      If set, this flag indicates that the outline's field arrays      */
4025df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      (i.e., `points', `flags', and `contours') are `owned' by the     */
4035df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      outline object, and should thus be freed when it is destroyed.   */
4045df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4055df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_EVEN_ODD_FILL ::                                        */
4065df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      By default, outlines are filled using the non-zero winding rule. */
4075df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      If set to 1, the outline will be filled using the even-odd fill  */
40872271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*      rule (only works with the smooth rasterizer).                    */
4095df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4105df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_REVERSE_FILL ::                                         */
4115df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      By default, outside contours of an outline are oriented in       */
4125df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      clock-wise direction, as defined in the TrueType specification.  */
4135df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      This flag is set if the outline uses the opposite direction      */
4148a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*      (typically for Type~1 fonts).  This flag is ignored by the scan  */
4155df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      converter.                                                       */
4165df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4175df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_IGNORE_DROPOUTS ::                                      */
4185df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      By default, the scan converter will try to detect drop-outs in   */
4195df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      an outline and correct the glyph bitmap to ensure consistent     */
4205df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      shape continuity.  If set, this flag hints the scan-line         */
42172271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*      converter to ignore such cases.  See below for more information. */
4225df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4235df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_SMART_DROPOUTS ::                                       */
4245df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      Select smart dropout control.  If unset, use simple dropout      */
42572271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*      control.  Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See    */
42672271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*      below for more information.                                      */
4275df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4285df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_INCLUDE_STUBS ::                                        */
4295df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      If set, turn pixels on for `stubs', otherwise exclude them.      */
43072271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*      Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See below for    */
43172271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*      more information.                                                */
4325df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4335df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_HIGH_PRECISION ::                                       */
4345df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      This flag indicates that the scan-line converter should try to   */
4355df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      convert this outline to bitmaps with the highest possible        */
4365df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      quality.  It is typically set for small character sizes.  Note   */
4375df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      that this is only a hint that might be completely ignored by a   */
4385df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      given scan-converter.                                            */
4395df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4405df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    FT_OUTLINE_SINGLE_PASS ::                                          */
4415df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      This flag is set to force a given scan-converter to only use a   */
4425df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      single pass over the outline to render a bitmap glyph image.     */
4435df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      Normally, it is set for very large character sizes.  It is only  */
4445df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      a hint that might be completely ignored by a given               */
4455df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*      scan-converter.                                                  */
4465df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*                                                                       */
4475df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /* <Note>                                                                */
44872271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */
44972271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth            */
45072271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    rasterizer.                                                        */
45172271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                                                                       */
45272271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    There exists a second mechanism to pass the drop-out mode to the   */
45372271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*    B/W rasterizer; see the `tags' field in @FT_Outline.               */
45472271140434028186a49a5dc5925f0727559e46fWerner Lemberg  /*                                                                       */
4555df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    Please refer to the description of the `SCANTYPE' instruction in   */
4565df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    the OpenType specification (in file `ttinst1.doc') how simple      */
4575df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg  /*    drop-outs, smart drop-outs, and stubs are defined.                 */
458670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
4597a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_NONE             0x0
4607a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_OWNER            0x1
4617a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_EVEN_ODD_FILL    0x2
4627a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_REVERSE_FILL     0x4
4637a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_IGNORE_DROPOUTS  0x8
4645df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg#define FT_OUTLINE_SMART_DROPOUTS   0x10
4655df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg#define FT_OUTLINE_INCLUDE_STUBS    0x20
46646ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
4677a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_HIGH_PRECISION   0x100
4687a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_SINGLE_PASS      0x200
469d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
4706b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
47156106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /*************************************************************************
47256106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  *
47398add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  * @enum:
4746aa35cd5e836fb1ae7bf9b50ad7a53311f717265Werner Lemberg  *   ft_outline_flags
47556106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  *
47656106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  * @description:
47798add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   These constants are deprecated.  Please use the corresponding
4786aa35cd5e836fb1ae7bf9b50ad7a53311f717265Werner Lemberg  *   @FT_OUTLINE_FLAGS values.
47956106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  *
48056106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  * @values:
48198add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_none            :: See @FT_OUTLINE_NONE.
48298add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_owner           :: See @FT_OUTLINE_OWNER.
48398add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_even_odd_fill   :: See @FT_OUTLINE_EVEN_ODD_FILL.
48498add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_reverse_fill    :: See @FT_OUTLINE_REVERSE_FILL.
48598add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_ignore_dropouts :: See @FT_OUTLINE_IGNORE_DROPOUTS.
48698add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_high_precision  :: See @FT_OUTLINE_HIGH_PRECISION.
48798add9e68c172e2c689a420ea3c53bd5c2772b87Werner Lemberg  *   ft_outline_single_pass     :: See @FT_OUTLINE_SINGLE_PASS.
48856106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  */
48956106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_none             FT_OUTLINE_NONE
49056106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_owner            FT_OUTLINE_OWNER
49156106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_even_odd_fill    FT_OUTLINE_EVEN_ODD_FILL
49256106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_reverse_fill     FT_OUTLINE_REVERSE_FILL
49325f845aa64d720052c92d6f524af7d8eae13db27David Turner#define ft_outline_ignore_dropouts  FT_OUTLINE_IGNORE_DROPOUTS
49456106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_high_precision   FT_OUTLINE_HIGH_PRECISION
49556106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_single_pass      FT_OUTLINE_SINGLE_PASS
496b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner
49718b55f7bbc39f92877f825326441c13f8aaf5e80David Turner  /* */
498415235df1b955940ce85401a076f882e8717ef7bWerner Lemberg
499670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg#define FT_CURVE_TAG( flag )  ( flag & 3 )
500d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
50172271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_ON            1
50272271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_CONIC         0
50372271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_CUBIC         2
50472271140434028186a49a5dc5925f0727559e46fWerner Lemberg
50572271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_HAS_SCANMODE  4
506d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
50772271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_TOUCH_X       8  /* reserved for the TrueType hinter */
50872271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_TOUCH_Y      16  /* reserved for the TrueType hinter */
509d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
51072271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_TOUCH_BOTH    ( FT_CURVE_TAG_TOUCH_X | \
51172271140434028186a49a5dc5925f0727559e46fWerner Lemberg                                     FT_CURVE_TAG_TOUCH_Y )
512670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
513ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_On       FT_CURVE_TAG_ON
514ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Conic    FT_CURVE_TAG_CONIC
515ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Cubic    FT_CURVE_TAG_CUBIC
516ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Touch_X  FT_CURVE_TAG_TOUCH_X
517ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Touch_Y  FT_CURVE_TAG_TOUCH_Y
518ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg
519d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
520d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
521d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
522d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <FuncType>                                                            */
523b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Outline_MoveToFunc                                              */
524d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
525d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
526d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A function pointer type used to describe the signature of a `move  */
527d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    to' function during outline walking/decomposition.                 */
528d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
529d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A `move to' is emitted to start a new contour in an outline.       */
530d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
531d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Input>                                                               */
532d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    to   :: A pointer to the target point of the `move to'.            */
533670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
534d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    user :: A typeless pointer which is passed from the caller of the  */
535d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*            decomposition function.                                    */
536d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
537d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Return>                                                              */
5388a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Error code.  0~means success.                                      */
539d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
5404a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
54149f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg  (*FT_Outline_MoveToFunc)( const FT_Vector*  to,
54249f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                            void*             user );
543d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
544b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner#define FT_Outline_MoveTo_Func  FT_Outline_MoveToFunc
545d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
546e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg
547d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
548d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
549d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <FuncType>                                                            */
550b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Outline_LineToFunc                                              */
551d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
552d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
553d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A function pointer type used to describe the signature of a `line  */
554d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    to' function during outline walking/decomposition.                 */
555d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
556d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A `line to' is emitted to indicate a segment in the outline.       */
557d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
558d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Input>                                                               */
559d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    to   :: A pointer to the target point of the `line to'.            */
560670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
561d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    user :: A typeless pointer which is passed from the caller of the  */
562d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*            decomposition function.                                    */
563d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
564d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Return>                                                              */
5658a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Error code.  0~means success.                                      */
566d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
5674a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
56849f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg  (*FT_Outline_LineToFunc)( const FT_Vector*  to,
56949f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                            void*             user );
570d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
571ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Outline_LineTo_Func  FT_Outline_LineToFunc
572d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
573e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg
574d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
575d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
576d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <FuncType>                                                            */
577b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Outline_ConicToFunc                                             */
578d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
579d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
58094cdb3f045565a344d992629fca527e18d7721cbWerner Lemberg  /*    A function pointer type used to describe the signature of a `conic */
58194cdb3f045565a344d992629fca527e18d7721cbWerner Lemberg  /*    to' function during outline walking or decomposition.              */
582d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
583e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*    A `conic to' is emitted to indicate a second-order Bézier arc in   */
584d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    the outline.                                                       */
585d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
586d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Input>                                                               */
587d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    control :: An intermediate control point between the last position */
588d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*               and the new target in `to'.                             */
589d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
590d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    to      :: A pointer to the target end point of the conic arc.     */
591d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
592d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    user    :: A typeless pointer which is passed from the caller of   */
593d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*               the decomposition function.                             */
594d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
595d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Return>                                                              */
5968a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Error code.  0~means success.                                      */
597d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
5984a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
59949f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg  (*FT_Outline_ConicToFunc)( const FT_Vector*  control,
60049f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                             const FT_Vector*  to,
60149f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                             void*             user );
602d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
603ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Outline_ConicTo_Func  FT_Outline_ConicToFunc
604d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
605e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg
606d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
607d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
608d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <FuncType>                                                            */
609b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Outline_CubicToFunc                                             */
610d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
611d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
612d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A function pointer type used to describe the signature of a `cubic */
61394cdb3f045565a344d992629fca527e18d7721cbWerner Lemberg  /*    to' function during outline walking or decomposition.              */
614d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
615e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*    A `cubic to' is emitted to indicate a third-order Bézier arc.      */
616d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
617d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Input>                                                               */
618e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*    control1 :: A pointer to the first Bézier control point.           */
619670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
620e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*    control2 :: A pointer to the second Bézier control point.          */
621670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
622d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    to       :: A pointer to the target end point.                     */
623670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
624d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    user     :: A typeless pointer which is passed from the caller of  */
625d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                the decomposition function.                            */
626d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
627d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Return>                                                              */
6288a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Error code.  0~means success.                                      */
629d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
6304a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
63149f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg  (*FT_Outline_CubicToFunc)( const FT_Vector*  control1,
63249f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                             const FT_Vector*  control2,
63349f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                             const FT_Vector*  to,
63449f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                             void*             user );
635b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner
636ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Outline_CubicTo_Func  FT_Outline_CubicToFunc
637d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
638d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
639d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
640d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
641d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Struct>                                                              */
642d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    FT_Outline_Funcs                                                   */
643d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
644d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
645d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A structure to hold various function pointers used during outline  */
646c32b178934ed742781e1fb0a28d964e410226780Werner Lemberg  /*    decomposition in order to emit segments, conic, and cubic Béziers. */
647d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
648d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Fields>                                                              */
649d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    move_to  :: The `move to' emitter.                                 */
650670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
651d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    line_to  :: The segment emitter.                                   */
652670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
653e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*    conic_to :: The second-order Bézier arc emitter.                   */
654670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
655e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*    cubic_to :: The third-order Bézier arc emitter.                    */
656d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
657670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    shift    :: The shift that is applied to coordinates before they   */
658670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                are sent to the emitter.                               */
659f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*                                                                       */
660670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    delta    :: The delta that is applied to coordinates before they   */
661670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                are sent to the emitter, but after the shift.          */
662f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*                                                                       */
663f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /* <Note>                                                                */
664f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*    The point coordinates sent to the emitters are the transformed     */
665f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*    version of the original coordinates (this is important for high    */
666670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    accuracy during scan-conversion).  The transformation is simple:   */
667f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*                                                                       */
6686756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    {                                                                  */
669670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*      x' = (x << shift) - delta                                        */
670670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*      y' = (x << shift) - delta                                        */
6716756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    }                                                                  */
672f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*                                                                       */
673c32b178934ed742781e1fb0a28d964e410226780Werner Lemberg  /*    Set the values of `shift' and `delta' to~0 to get the original     */
674670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    point coordinates.                                                 */
675f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner  /*                                                                       */
676d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  typedef struct  FT_Outline_Funcs_
677d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
678b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_Outline_MoveToFunc   move_to;
679b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_Outline_LineToFunc   line_to;
680b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_Outline_ConicToFunc  conic_to;
681b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_Outline_CubicToFunc  cubic_to;
682d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
683b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    int                     shift;
684b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_Pos                  delta;
685c136b409eb0a9a9e5ffeb27ee0488ea4c7e0f09bDavid Turner
686d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  } FT_Outline_Funcs;
687d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
688d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
68938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
69038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
69138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Section>                                                             */
69238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*    basic_types                                                        */
69338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
69438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
69538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
69618b55f7bbc39f92877f825326441c13f8aaf5e80David Turner
697d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
698d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
699d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Macro>                                                               */
700d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    FT_IMAGE_TAG                                                       */
701d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
702d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
703fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    This macro converts four-letter tags to an unsigned long type.     */
704d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
7051039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /* <Note>                                                                */
7068a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Since many 16-bit compilers don't like 32-bit enumerations, you    */
7071039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /*    should redefine this macro in case of problems to something like   */
7081039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /*    this:                                                              */
7091039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /*                                                                       */
710fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    {                                                                  */
711deadbb53d26f9a9e0a24a66bf1b74a5370f629b4Werner Lemberg  /*      #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  value         */
712fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    }                                                                  */
7131039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /*                                                                       */
7141039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /*    to get a simple enumeration without assigning special numbers.     */
7151039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg  /*                                                                       */
716be5a53654d0a986709745bbb6b87f0b313778006Werner Lemberg#ifndef FT_IMAGE_TAG
71738364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  \
71838364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg          value = ( ( (unsigned long)_x1 << 24 ) | \
71938364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg                    ( (unsigned long)_x2 << 16 ) | \
72038364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg                    ( (unsigned long)_x3 << 8  ) | \
72138364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg                      (unsigned long)_x4         )
722be5a53654d0a986709745bbb6b87f0b313778006Werner Lemberg#endif /* FT_IMAGE_TAG */
723670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
724670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
725670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
726670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
727670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Enum>                                                                */
728670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FT_Glyph_Format                                                    */
729670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
730670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
731670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    An enumeration type used to describe the format of a given glyph   */
732670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    image.  Note that this version of FreeType only supports two image */
733670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    formats, even though future font drivers will be able to register  */
734670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    their own format.                                                  */
735670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
736b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Values>                                                              */
737b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_GLYPH_FORMAT_NONE ::                                            */
7388a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*      The value~0 is reserved.                                         */
739b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
740b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_GLYPH_FORMAT_COMPOSITE ::                                       */
7416b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      The glyph image is a composite of several other images.  This    */
742f9d864a916becf67e6ae0e3f0888fda3a89d419eWerner Lemberg  /*      format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to   */
743f9d864a916becf67e6ae0e3f0888fda3a89d419eWerner Lemberg  /*      report compound glyphs (like accented characters).               */
744b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
7456b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    FT_GLYPH_FORMAT_BITMAP ::                                          */
7466b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      The glyph image is a bitmap, and can be described as an          */
7476b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      @FT_Bitmap.  You generally need to access the `bitmap' field of  */
7486b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      the @FT_GlyphSlotRec structure to read it.                       */
749b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
7506b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    FT_GLYPH_FORMAT_OUTLINE ::                                         */
751fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*      The glyph image is a vectorial outline made of line segments     */
752e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg  /*      and Bézier arcs; it can be described as an @FT_Outline; you      */
7536b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      generally want to access the `outline' field of the              */
754b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*      @FT_GlyphSlotRec structure to read it.                           */
755b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
7566b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    FT_GLYPH_FORMAT_PLOTTER ::                                         */
757fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*      The glyph image is a vectorial path with no inside and outside   */
7588a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*      contours.  Some Type~1 fonts, like those in the Hershey family,  */
7596b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*      contain glyphs in this format.  These are described as           */
760b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*      @FT_Outline, but FreeType isn't currently capable of rendering   */
761b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*      them correctly.                                                  */
762670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
763670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef enum  FT_Glyph_Format_
764d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
765b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ),
76638364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg
767b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
768b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP,    'b', 'i', 't', 's' ),
769b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE,   'o', 'u', 't', 'l' ),
770b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER,   'p', 'l', 'o', 't' )
77146ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
77237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  } FT_Glyph_Format;
77337379e2170f4e8c28bb9271929dcca76eab22a07David Turner
7746b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
775b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*************************************************************************/
776b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
777b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Enum>                                                                */
778b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    ft_glyph_format_xxx                                                */
779b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
780b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Description>                                                         */
781a4875bdcca1cdde7c745242862549b614255c591Werner Lemberg  /*    A list of deprecated constants.  Use the corresponding             */
782b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    @FT_Glyph_Format values instead.                                   */
783b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
784b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /* <Values>                                                              */
785fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_glyph_format_none      :: See @FT_GLYPH_FORMAT_NONE.            */
786fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_glyph_format_composite :: See @FT_GLYPH_FORMAT_COMPOSITE.       */
787fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_glyph_format_bitmap    :: See @FT_GLYPH_FORMAT_BITMAP.          */
788fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_glyph_format_outline   :: See @FT_GLYPH_FORMAT_OUTLINE.         */
789fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg  /*    ft_glyph_format_plotter   :: See @FT_GLYPH_FORMAT_PLOTTER.         */
790b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
7916b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_none       FT_GLYPH_FORMAT_NONE
7926b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_composite  FT_GLYPH_FORMAT_COMPOSITE
7936b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_bitmap     FT_GLYPH_FORMAT_BITMAP
7946b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_outline    FT_GLYPH_FORMAT_OUTLINE
7956b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_plotter    FT_GLYPH_FORMAT_PLOTTER
7966b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
797670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
79837379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
79937379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
80037379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
80137379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*****                                                               *****/
80237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*****            R A S T E R   D E F I N I T I O N S                *****/
80337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*****                                                               *****/
80437379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
80537379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
80637379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
807d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
808670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
809670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
810670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
811670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* A raster is a scan converter, in charge of rendering an outline into  */
812670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* a a bitmap.  This section contains the public API for rasters.        */
813670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
814670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* Note that in FreeType 2, all rasters are now encapsulated within      */
8150456354658b844ec9f0a23cce83735a0d0cf21f8Werner Lemberg  /* specific modules called `renderers'.  See `freetype/ftrender.h' for   */
8160456354658b844ec9f0a23cce83735a0d0cf21f8Werner Lemberg  /* more details on renderers.                                            */
817670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
818670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
819670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
82038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
82138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
82238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
82338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Section>                                                             */
82456106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  /*    raster                                                             */
82538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
82638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Title>                                                               */
827ee95b6f0d487cb31e90170032ab39d120258052eWerner Lemberg  /*    Scanline Converter                                                 */
82838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
82938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Abstract>                                                            */
83038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*    How vectorial outlines are converted into bitmaps and pixmaps.     */
83138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
83238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* <Description>                                                         */
83338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*    This section contains technical definitions.                       */
83438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
83538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*************************************************************************/
83638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
837d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
838d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
839d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
840d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Type>                                                                */
841d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    FT_Raster                                                          */
842d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
843d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
844d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    A handle (pointer) to a raster object.  Each object can be used    */
845d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*    independently to convert an outline into a bitmap or pixmap.       */
846d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
847d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  typedef struct FT_RasterRec_*  FT_Raster;
848d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
849d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
850d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
851d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
85237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Struct>                                                              */
85337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    FT_Span                                                            */
854d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
855d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
85637379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    A structure used to model a single span of gray (or black) pixels  */
857670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    when rendering a monochrome or anti-aliased bitmap.                */
858d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
85937379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Fields>                                                              */
860670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    x        :: The span's horizontal start position.                  */
861670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
862670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    len      :: The span's length in pixels.                           */
863670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
864670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    coverage :: The span color/coverage, ranging from 0 (background)   */
865670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                to 255 (foreground).  Only used for anti-aliased       */
866670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                rendering.                                             */
867d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
86837379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Note>                                                                */
869670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    This structure is used by the span drawing callback type named     */
8708a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    @FT_SpanFunc which takes the y~coordinate of the span as a         */
871670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    a parameter.                                                       */
87237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
873c91dfa39e8863318f092b4d38b31e7dca32d5b40Werner Lemberg  /*    The coverage value is always between 0 and 255.  If you want less  */
874c91dfa39e8863318f092b4d38b31e7dca32d5b40Werner Lemberg  /*    gray values, the callback function has to reduce them.             */
875d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
876670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef struct  FT_Span_
87737379e2170f4e8c28bb9271929dcca76eab22a07David Turner  {
87838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg    short           x;
87938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg    unsigned short  len;
88038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg    unsigned char   coverage;
88146ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
88237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  } FT_Span;
883d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
884d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
885d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*************************************************************************/
886d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
887d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <FuncType>                                                            */
888b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_SpanFunc                                                        */
889d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
890d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Description>                                                         */
89137379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    A function used as a call-back by the anti-aliased renderer in     */
89237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    order to let client applications draw themselves the gray pixel    */
89337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    spans on each scan line.                                           */
894d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
895d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Input>                                                               */
8968a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    y     :: The scanline's y~coordinate.                              */
89737379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
898670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    count :: The number of spans to draw on this scanline.             */
899670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
900670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    spans :: A table of `count' spans to draw on the scanline.         */
90137379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
902670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    user  :: User-supplied data that is passed to the callback.        */
90337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
904670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
905670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    This callback allows client applications to directly render the    */
906670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    gray spans of the anti-aliased bitmap to any kind of surfaces.     */
907670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
908670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    This can be used to write anti-aliased outlines directly to a      */
909670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    given background bitmap, and even perform translucency.            */
91037379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
911670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    Note that the `count' field cannot be greater than a fixed value   */
9126756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    defined by the `FT_MAX_GRAY_SPANS' configuration macro in          */
9138a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    `ftoption.h'.  By default, this value is set to~32, which means    */
9148a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    that if there are more than 32~spans on a given scanline, the      */
9156756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    callback is called several times with the same `y' parameter in    */
9166756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    order to draw all callbacks.                                       */
91737379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
918670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    Otherwise, the callback is only called once per scan-line, and     */
919670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    only for those scanlines that do have `gray' pixels on them.       */
92037379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
9214a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef void
92249f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg  (*FT_SpanFunc)( int             y,
92349f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                  int             count,
92449f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                  const FT_Span*  spans,
92549f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                  void*           user );
926670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
927e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Span_Func  FT_SpanFunc
9286b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
92946ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
93037379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
931d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
93237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <FuncType>                                                            */
93337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    FT_Raster_BitTest_Func                                             */
934d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
93537379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Description>                                                         */
9366b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT.                           */
937b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
93837379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    A function used as a call-back by the monochrome scan-converter    */
939670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    to test whether a given target pixel is already set to the drawing */
940670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    `color'.  These tests are crucial to implement drop-out control    */
941670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    per-se the TrueType spec.                                          */
94237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
94337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Input>                                                               */
9448a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    y     :: The pixel's y~coordinate.                                 */
945670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
9468a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    x     :: The pixel's x~coordinate.                                 */
947670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
948670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    user  :: User-supplied data that is passed to the callback.        */
949d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
950d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /* <Return>                                                              */
9518a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*   1~if the pixel is `set', 0~otherwise.                               */
952d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  /*                                                                       */
9534a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
9544a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  (*FT_Raster_BitTest_Func)( int    y,
9554a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg                             int    x,
9564a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg                             void*  user );
957670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
95837379e2170f4e8c28bb9271929dcca76eab22a07David Turner
95937379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*************************************************************************/
96037379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
96137379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <FuncType>                                                            */
96237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    FT_Raster_BitSet_Func                                              */
96337379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
96437379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Description>                                                         */
9656b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    THIS TYPE IS DEPRECATED.  DO NOT USE IT.                           */
966b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*                                                                       */
96737379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*    A function used as a call-back by the monochrome scan-converter    */
968670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    to set an individual target pixel.  This is crucial to implement   */
969670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    drop-out control according to the TrueType specification.          */
97037379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
97137379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Input>                                                               */
9728a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    y     :: The pixel's y~coordinate.                                 */
973670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
9748a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    x     :: The pixel's x~coordinate.                                 */
975670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
976670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    user  :: User-supplied data that is passed to the callback.        */
97737379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /*                                                                       */
97837379e2170f4e8c28bb9271929dcca76eab22a07David Turner  /* <Return>                                                              */
9798a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    1~if the pixel is `set', 0~otherwise.                              */
980670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
9814a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef void
9824a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  (*FT_Raster_BitSet_Func)( int    y,
9834a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg                            int    x,
9844a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg                            void*  user );
985670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
9866b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg
987670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
988670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
989670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Enum>                                                                */
9907a0241049aad6b471effe410c436e9256443883fWerner Lemberg  /*    FT_RASTER_FLAG_XXX                                                 */
991670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
992670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
9937a0241049aad6b471effe410c436e9256443883fWerner Lemberg  /*    A list of bit flag constants as used in the `flags' field of a     */
9947a0241049aad6b471effe410c436e9256443883fWerner Lemberg  /*    @FT_Raster_Params structure.                                       */
995670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
99656106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner  /* <Values>                                                              */
997b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_RASTER_FLAG_DEFAULT :: This value is 0.                         */
998670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
999b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_RASTER_FLAG_AA      :: This flag is set to indicate that an     */
100038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              anti-aliased glyph image should be       */
100138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              generated.  Otherwise, it will be        */
10027a0241049aad6b471effe410c436e9256443883fWerner Lemberg  /*                              monochrome (1-bit).                      */
100338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
1004b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_RASTER_FLAG_DIRECT  :: This flag is set to indicate direct      */
100538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              rendering.  In this mode, client         */
100638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              applications must provide their own span */
100738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              callback.  This lets them directly       */
100838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              draw or compose over an existing bitmap. */
100938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              If this bit is not set, the target       */
101038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              pixmap's buffer _must_ be zeroed before  */
101138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              rendering.                               */
101238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
101338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              Note that for now, direct rendering is   */
101438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              only possible with anti-aliased glyphs.  */
101538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
1016b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_RASTER_FLAG_CLIP    :: This flag is only used in direct         */
101738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              rendering mode.  If set, the output will */
101838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              be clipped to a box specified in the     */
10196756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*                              `clip_box' field of the                  */
10206756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*                              @FT_Raster_Params structure.             */
102138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                                                                       */
102238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              Note that by default, the glyph bitmap   */
102338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              is clipped to the target pixmap, except  */
102438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              in direct rendering mode where all spans */
102538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /*                              are generated if no clipping box is set. */
1026670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10277a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_DEFAULT  0x0
10287a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_AA       0x1
10297a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_DIRECT   0x2
10307a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_CLIP     0x4
103137379e2170f4e8c28bb9271929dcca76eab22a07David Turner
10327a0241049aad6b471effe410c436e9256443883fWerner Lemberg  /* deprecated */
10336b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_default  FT_RASTER_FLAG_DEFAULT
10346b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_aa       FT_RASTER_FLAG_AA
10356b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_direct   FT_RASTER_FLAG_DIRECT
10366b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_clip     FT_RASTER_FLAG_CLIP
1037b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner
1038670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1039670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1040670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1041670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Struct>                                                              */
1042670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FT_Raster_Params                                                   */
1043670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1044670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
1045670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    A structure to hold the arguments used by a raster's render        */
1046670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    function.                                                          */
1047670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1048670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Fields>                                                              */
1049670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    target      :: The target bitmap.                                  */
1050670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10516756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    source      :: A pointer to the source glyph image (e.g., an       */
10526756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*                   @FT_Outline).                                       */
1053670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1054670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    flags       :: The rendering flags.                                */
1055670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1056670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    gray_spans  :: The gray span drawing callback.                     */
1057670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10583ba8301b218dbb0b3007ceea46670f14f8f26746Werner Lemberg  /*    black_spans :: The black span drawing callback.  UNIMPLEMENTED!    */
1059670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10606b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    bit_test    :: The bit test callback.  UNIMPLEMENTED!              */
1061670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10626b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg  /*    bit_set     :: The bit set callback.  UNIMPLEMENTED!               */
1063670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1064670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    user        :: User-supplied data that is passed to each drawing   */
1065670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                   callback.                                           */
1066670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10673975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg  /*    clip_box    :: An optional clipping box.  It is only used in       */
10683975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg  /*                   direct rendering mode.  Note that coordinates here  */
10693975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg  /*                   should be expressed in _integer_ pixels (and not in */
10703975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg  /*                   26.6 fixed-point units).                            */
1071859a18a358ccc64451ac834137e61cf26c9da1f8David Turner  /*                                                                       */
1072670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
10736756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA    */
10746756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    bit flag is set in the `flags' field, otherwise a monochrome       */
10756756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    bitmap is generated.                                               */
1076670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
10776756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the      */
1078670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster will call the `gray_spans' callback to draw gray pixel      */
1079670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    spans, in the case of an aa glyph bitmap, it will call             */
1080670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    `black_spans', and `bit_test' and `bit_set' in the case of a       */
1081670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    monochrome bitmap.  This allows direct composition over a          */
1082670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    pre-existing bitmap through user-provided callbacks to perform the */
1083670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    span drawing/composition.                                          */
1084670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1085670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    Note that the `bit_test' and `bit_set' callbacks are required when */
1086670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    rendering a monochrome bitmap, as they are crucial to implement    */
1087670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    correct drop-out control as defined in the TrueType specification. */
1088670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1089670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef struct  FT_Raster_Params_
1090d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner  {
1091c01c90424939a4b60edce9900cbfed09a9bfacdfWerner Lemberg    const FT_Bitmap*        target;
10928ae1dceb94effa59a307c0b778b37483f808f3d4Werner Lemberg    const void*             source;
109337379e2170f4e8c28bb9271929dcca76eab22a07David Turner    int                     flags;
1094b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner    FT_SpanFunc             gray_spans;
10953ba8301b218dbb0b3007ceea46670f14f8f26746Werner Lemberg    FT_SpanFunc             black_spans;  /* doesn't work! */
10966b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg    FT_Raster_BitTest_Func  bit_test;     /* doesn't work! */
10976b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg    FT_Raster_BitSet_Func   bit_set;      /* doesn't work! */
109837379e2170f4e8c28bb9271929dcca76eab22a07David Turner    void*                   user;
1099859a18a358ccc64451ac834137e61cf26c9da1f8David Turner    FT_BBox                 clip_box;
110046ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
110137379e2170f4e8c28bb9271929dcca76eab22a07David Turner  } FT_Raster_Params;
110237379e2170f4e8c28bb9271929dcca76eab22a07David Turner
110337379e2170f4e8c28bb9271929dcca76eab22a07David Turner
1104670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1105670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1106670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <FuncType>                                                            */
1107b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Raster_NewFunc                                                  */
1108670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1109670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
1110670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    A function used to create a new raster object.                     */
1111670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1112670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Input>                                                               */
1113670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    memory :: A handle to the memory allocator.                        */
1114670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1115670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Output>                                                              */
1116670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster :: A handle to the new raster object.                       */
1117670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1118670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Return>                                                              */
11198a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Error code.  0~means success.                                      */
1120670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1121670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
1122670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    The `memory' parameter is a typeless pointer in order to avoid     */
1123670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    un-wanted dependencies on the rest of the FreeType code.  In       */
11246756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    practice, it is an @FT_Memory object, i.e., a handle to the        */
11256756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    standard FreeType memory allocator.  However, this field can be    */
11266756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    completely ignored by a given raster implementation.               */
1127670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
11284a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
1129b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  (*FT_Raster_NewFunc)( void*       memory,
1130b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner                        FT_Raster*  raster );
1131670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1132e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_New_Func  FT_Raster_NewFunc
1133670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1134d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg
1135670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1136670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1137670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <FuncType>                                                            */
1138b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Raster_DoneFunc                                                 */
1139670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1140670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
1141670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    A function used to destroy a given raster object.                  */
1142670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1143670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Input>                                                               */
1144670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster :: A handle to the raster object.                           */
1145670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
11464a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef void
1147b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  (*FT_Raster_DoneFunc)( FT_Raster  raster );
114837379e2170f4e8c28bb9271929dcca76eab22a07David Turner
1149e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Done_Func  FT_Raster_DoneFunc
115037379e2170f4e8c28bb9271929dcca76eab22a07David Turner
1151d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg
1152670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1153670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1154670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <FuncType>                                                            */
1155b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Raster_ResetFunc                                                */
1156670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1157670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
1158670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FreeType provides an area of memory called the `render pool',      */
1159670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    available to all registered rasters.  This pool can be freely used */
1160670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    during a given scan-conversion but is shared by all rasters.  Its  */
1161670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    content is thus transient.                                         */
1162670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1163670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    This function is called each time the render pool changes, or just */
1164670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    after a new raster object is created.                              */
1165670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1166670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Input>                                                               */
1167670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster    :: A handle to the new raster object.                    */
1168670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1169670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    pool_base :: The address in memory of the render pool.             */
1170670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1171670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    pool_size :: The size in bytes of the render pool.                 */
1172670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1173670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
1174670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    Rasters can ignore the render pool and rely on dynamic memory      */
1175670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    allocation if they want to (a handle to the memory allocator is    */
1176670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    passed to the raster constructor).  However, this is not           */
1177670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    recommended for efficiency purposes.                               */
1178670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
11794a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef void
1180b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  (*FT_Raster_ResetFunc)( FT_Raster       raster,
1181b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner                          unsigned char*  pool_base,
1182b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner                          unsigned long   pool_size );
1183670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1184e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Reset_Func  FT_Raster_ResetFunc
1185670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1186d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg
1187670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1188670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1189670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <FuncType>                                                            */
1190b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Raster_SetModeFunc                                              */
1191670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1192670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
1193670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    This function is a generic facility to change modes or attributes  */
1194670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    in a given raster.  This can be used for debugging purposes, or    */
1195670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    simply to allow implementation-specific `features' in a given      */
1196670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster module.                                                     */
1197670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1198670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Input>                                                               */
1199670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster :: A handle to the new raster object.                       */
1200670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1201670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    mode   :: A 4-byte tag used to name the mode or property.          */
1202670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1203670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    args   :: A pointer to the new mode/property to use.               */
1204670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
12054a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
1206b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  (*FT_Raster_SetModeFunc)( FT_Raster      raster,
1207b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner                            unsigned long  mode,
1208b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner                            void*          args );
1209670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1210ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Raster_Set_Mode_Func  FT_Raster_SetModeFunc
1211670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1212d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg
1213670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1214670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1215670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <FuncType>                                                            */
1216b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner  /*    FT_Raster_RenderFunc                                               */
1217670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1218670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
12198a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Invoke a given raster to scan-convert a given glyph image into a   */
12208a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    target bitmap.                                                     */
1221670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1222670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Input>                                                               */
1223670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster :: A handle to the raster object.                           */
1224670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
12256756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    params :: A pointer to an @FT_Raster_Params structure used to      */
12266756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*              store the rendering parameters.                          */
1227670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1228670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Return>                                                              */
12298a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg  /*    Error code.  0~means success.                                      */
1230670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1231670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Note>                                                                */
1232670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    The exact format of the source image depends on the raster's glyph */
12336756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    format defined in its @FT_Raster_Funcs structure.  It can be an    */
12346756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    @FT_Outline or anything else in order to support a large array of  */
1235670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    glyph formats.                                                     */
1236670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1237670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    Note also that the render function can fail and return a           */
12386756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*    `FT_Err_Unimplemented_Feature' error code if the raster used does  */
1239670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    not support direct composition.                                    */
1240670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1241670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    XXX: For now, the standard raster doesn't support direct           */
1242670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*         composition but this should change for the final release (see */
12436756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*         the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c'    */
12446756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg  /*         for examples of distinct implementations which support direct */
1245670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*         composition).                                                 */
1246670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
12474a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg  typedef int
124849f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg  (*FT_Raster_RenderFunc)( FT_Raster                raster,
124949f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg                           const FT_Raster_Params*  params );
125037379e2170f4e8c28bb9271929dcca76eab22a07David Turner
1251e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Render_Func  FT_Raster_RenderFunc
125237379e2170f4e8c28bb9271929dcca76eab22a07David Turner
1253d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg
1254670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*************************************************************************/
1255670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1256670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Struct>                                                              */
1257670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    FT_Raster_Funcs                                                    */
1258670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1259670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Description>                                                         */
1260670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*   A structure used to describe a given raster class to the library.   */
1261670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1262670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /* <Fields>                                                              */
1263670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    glyph_format  :: The supported glyph format for this raster.       */
1264670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1265670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster_new    :: The raster constructor.                           */
1266670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1267670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster_reset  :: Used to reset the render pool within the raster.  */
1268670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1269670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster_render :: A function to render a glyph into a given bitmap. */
1270670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1271670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*    raster_done   :: The raster destructor.                            */
1272670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  /*                                                                       */
1273670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg  typedef struct  FT_Raster_Funcs_
127437379e2170f4e8c28bb9271929dcca76eab22a07David Turner  {
1275d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg    FT_Glyph_Format        glyph_format;
1276d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg    FT_Raster_NewFunc      raster_new;
1277d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg    FT_Raster_ResetFunc    raster_reset;
1278d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg    FT_Raster_SetModeFunc  raster_set_mode;
1279d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg    FT_Raster_RenderFunc   raster_render;
1280d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg    FT_Raster_DoneFunc     raster_done;
128146ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
128237379e2170f4e8c28bb9271929dcca76eab22a07David Turner  } FT_Raster_Funcs;
128346ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner
1284bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg
128538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg  /* */
128638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
128738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg
12884c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner LembergFT_END_HEADER
1289bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg
12904c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner Lemberg#endif /* __FTIMAGE_H__ */
1291d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner
1292670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg
1293670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg/* END */
1294e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg
1295e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg
1296e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg/* Local Variables: */
1297e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg/* coding: utf-8    */
1298e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg/* End:             */
1299