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