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/* */ 80a0c22569deab933df21127e75db5c81f724f292Werner Lemberg/* Copyright 1996-2018 by */ 95aa646c565b963d44e295162dbe27c039fdd2e1bWerner Lemberg/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 10d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/* */ 11670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg/* This file is part of the FreeType project, and may only be used, */ 12670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg/* modified, and distributed under the terms of the FreeType project */ 13d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 14d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/* this file you indicate that you have read the license and */ 15d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/* understand and accept it fully. */ 16d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/* */ 17d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner/***************************************************************************/ 18d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 19670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 20670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 21670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* Note: A `raster' is simply a scan-line converter, used to render */ 22670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* FT_Outlines into FT_Bitmaps. */ 23670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 24670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 25670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 26670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 2737412ff9f42212bcf4dd29d9762f3c35b5735768Werner Lemberg#ifndef FTIMAGE_H_ 2837412ff9f42212bcf4dd29d9762f3c35b5735768Werner Lemberg#define FTIMAGE_H_ 29d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 30bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg 319d0b76d7f6e87b68ee739688be693f28094b23bfWerner Lemberg /* STANDALONE_ is from ftgrays.c */ 329d0b76d7f6e87b68ee739688be693f28094b23bfWerner Lemberg#ifndef STANDALONE_ 33d3c8e064a5587e924f83913e5eae38586b50840cDavid Turner#include <ft2build.h> 345dfbdf76594325baea09634869566195cf5937e8Werner Lemberg#endif 354c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner Lemberg 3690d9964ec9c6537a69dedbc29f0a6d277707dbccWerner Lemberg 374c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner LembergFT_BEGIN_HEADER 38bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg 3938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 4038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 4138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 4238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Section> */ 4338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* basic_types */ 4438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 4538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 4638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 47bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg 48d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 49d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 50d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Type> */ 51d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* FT_Pos */ 52d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 53d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 54c4bdb7357186a820e6064d10cc6fb71d1b4cb26fWerner Lemberg /* The type FT_Pos is used to store vectorial coordinates. Depending */ 55c4bdb7357186a820e6064d10cc6fb71d1b4cb26fWerner Lemberg /* on the context, these can represent distances in integer font */ 56a692170a238f4bdb5fdb3b7b7c31bf662340a43aAlexei Podtelezhnikov (Алексей Подтележников) /* units, or 16.16, or 26.6 fixed-point pixel coordinates. */ 57d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 58d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner typedef signed long FT_Pos; 59d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 60d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 61d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 62d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 63d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Struct> */ 64d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* FT_Vector */ 65d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 66d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 67670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A simple structure used to store a 2D vector; coordinates are of */ 68d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* the FT_Pos type. */ 69d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 70d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Fields> */ 71d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* x :: The horizontal coordinate. */ 72d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* y :: The vertical coordinate. */ 73d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 74d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner typedef struct FT_Vector_ 75d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 76d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner FT_Pos x; 77d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner FT_Pos y; 78d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 79d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner } FT_Vector; 80d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 81d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 82670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 83670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 84e231a6588203091276aabd32e4217e452675f3c4David Turner /* <Struct> */ 85e231a6588203091276aabd32e4217e452675f3c4David Turner /* FT_BBox */ 86e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 87e231a6588203091276aabd32e4217e452675f3c4David Turner /* <Description> */ 88e231a6588203091276aabd32e4217e452675f3c4David Turner /* A structure used to hold an outline's bounding box, i.e., the */ 89e231a6588203091276aabd32e4217e452675f3c4David Turner /* coordinates of its extrema in the horizontal and vertical */ 90e231a6588203091276aabd32e4217e452675f3c4David Turner /* directions. */ 91e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 92e231a6588203091276aabd32e4217e452675f3c4David Turner /* <Fields> */ 93e231a6588203091276aabd32e4217e452675f3c4David Turner /* xMin :: The horizontal minimum (left-most). */ 94e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 95e231a6588203091276aabd32e4217e452675f3c4David Turner /* yMin :: The vertical minimum (bottom-most). */ 96e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 97e231a6588203091276aabd32e4217e452675f3c4David Turner /* xMax :: The horizontal maximum (right-most). */ 98e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 99e231a6588203091276aabd32e4217e452675f3c4David Turner /* yMax :: The vertical maximum (top-most). */ 100e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 101b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* <Note> */ 102b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* The bounding box is specified with the coordinates of the lower */ 103b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* left and the upper right corner. In PostScript, those values are */ 104b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* often called (llx,lly) and (urx,ury), respectively. */ 105b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* */ 106b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* If `yMin' is negative, this value gives the glyph's descender. */ 107b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* Otherwise, the glyph doesn't descend below the baseline. */ 108b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* Similarly, if `ymax' is positive, this value gives the glyph's */ 109b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* ascender. */ 110b8f245bd7731320056e68f0b9bd6041ca414947fWerner Lemberg /* */ 11185a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg /* `xMin' gives the horizontal distance from the glyph's origin to */ 11285a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg /* the left edge of the glyph's bounding box. If `xMin' is negative, */ 11385a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg /* the glyph extends to the left of the origin. */ 11485a477b2ee5e87f3759f81ca86a3fc235b4a2cdeWerner Lemberg /* */ 115e231a6588203091276aabd32e4217e452675f3c4David Turner typedef struct FT_BBox_ 116e231a6588203091276aabd32e4217e452675f3c4David Turner { 117e231a6588203091276aabd32e4217e452675f3c4David Turner FT_Pos xMin, yMin; 118e231a6588203091276aabd32e4217e452675f3c4David Turner FT_Pos xMax, yMax; 119e231a6588203091276aabd32e4217e452675f3c4David Turner 120e231a6588203091276aabd32e4217e452675f3c4David Turner } FT_BBox; 121e231a6588203091276aabd32e4217e452675f3c4David Turner 122e231a6588203091276aabd32e4217e452675f3c4David Turner 123e231a6588203091276aabd32e4217e452675f3c4David Turner /*************************************************************************/ 124e231a6588203091276aabd32e4217e452675f3c4David Turner /* */ 125670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Enum> */ 126670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* FT_Pixel_Mode */ 127670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 128670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 129670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* An enumeration type used to describe the format of pixels in a */ 130670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* given bitmap. Note that additional formats may be added in the */ 131670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* future. */ 132670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 13356106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /* <Values> */ 13456106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /* FT_PIXEL_MODE_NONE :: */ 1358a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Value~0 is reserved. */ 13656106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /* */ 1376b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* FT_PIXEL_MODE_MONO :: */ 1388a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* A monochrome bitmap, using 1~bit per pixel. Note that pixels */ 1396b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* are stored in most-significant order (MSB), which means that */ 1406b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* the left-most pixel in a byte has value 128. */ 141b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 1426b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* FT_PIXEL_MODE_GRAY :: */ 1436b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* An 8-bit bitmap, generally used to represent anti-aliased glyph */ 1446b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* images. Each pixel is stored in one byte. Note that the number */ 14505bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* of `gray' levels is stored in the `num_grays' field of the */ 14605bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* @FT_Bitmap structure (it generally is 256). */ 147b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 148b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_PIXEL_MODE_GRAY2 :: */ 14905bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* A 2-bit per pixel bitmap, used to represent embedded */ 15005bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* anti-aliased bitmaps in font files according to the OpenType */ 15105bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* specification. We haven't found a single font using this */ 15205bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* format, however. */ 153b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 154b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_PIXEL_MODE_GRAY4 :: */ 15505bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* A 4-bit per pixel bitmap, representing embedded anti-aliased */ 156b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* bitmaps in font files according to the OpenType specification. */ 1576b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* We haven't found a single font using this format, however. */ 158b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 1596b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* FT_PIXEL_MODE_LCD :: */ 16005bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */ 16105bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* used for display on LCD displays; the bitmap is three times */ 16205bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* wider than the original glyph image. See also */ 1636b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* @FT_RENDER_MODE_LCD. */ 164b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 165b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_PIXEL_MODE_LCD_V :: */ 16605bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* An 8-bit bitmap, representing RGB or BGR decimated glyph images */ 16705bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* used for display on rotated LCD displays; the bitmap is three */ 16805bf6877a4b03fa1ea5e2b99f2318104a9de0294Werner Lemberg /* times taller than the original glyph image. See also */ 169fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* @FT_RENDER_MODE_LCD_V. */ 170670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 171760d342d37ec9b26420956e3421075d410571b65Behdad Esfahbod /* FT_PIXEL_MODE_BGRA :: */ 1721ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* [Since 2.5] An image with four 8-bit channels per pixel, */ 1731ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* representing a color image (such as emoticons) with alpha */ 1741ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* channel. For each pixel, the format is BGRA, which means, the */ 1751ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* blue channel comes first in memory. The color channels are */ 1761ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* pre-multiplied and in the sRGB colorspace. For example, full */ 1771ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* red at half-translucent opacity will be represented as */ 1781ad07c1c79841e54ff3d5c37e28bfb91f402ee84Werner Lemberg /* `00,00,80,80', not `00,00,FF,80'. See also @FT_LOAD_COLOR. */ 179760d342d37ec9b26420956e3421075d410571b65Behdad Esfahbod /* */ 180670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg typedef enum FT_Pixel_Mode_ 181d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 182b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_NONE = 0, 183b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_MONO, 184b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_GRAY, 185b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_GRAY2, 186b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_GRAY4, 187b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_LCD, 188b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_LCD_V, 189760d342d37ec9b26420956e3421075d410571b65Behdad Esfahbod FT_PIXEL_MODE_BGRA, 190b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner 191b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_PIXEL_MODE_MAX /* do not remove */ 19246ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 193d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner } FT_Pixel_Mode; 194d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 195d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 196de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */ 197de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* values instead. */ 1986b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_none FT_PIXEL_MODE_NONE 1996b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO 2006b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY 2016b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 2026b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 203b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner 2046b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg 205670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 206670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 207670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Struct> */ 208670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* FT_Bitmap */ 209670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 210670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 211670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A structure used to describe a bitmap or pixmap to the raster. */ 212670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* Note that we now manage pixmaps of various depths through the */ 213670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* `pixel_mode' field. */ 214670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 215670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Fields> */ 216670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* rows :: The number of bitmap rows. */ 217670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 218670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* width :: The number of pixels in bitmap row. */ 219670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 220670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* pitch :: The pitch's absolute value is the number of bytes */ 221670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* taken by one bitmap row, including padding. */ 222670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* However, the pitch is positive when the bitmap has */ 223670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* a `down' flow, and negative when it has an `up' */ 224670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* flow. In all cases, the pitch is an offset to add */ 225670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* to a bitmap pointer in order to go down one row. */ 226670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 227f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* Note that `padding' means the alignment of a */ 228f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* bitmap to a byte border, and FreeType functions */ 229f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* normally align to the smallest possible integer */ 230f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* value. */ 231f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* */ 2322d43503901d6105a3d3d5a9eeeb9f0859537d596Werner Lemberg /* For the B/W rasterizer, `pitch' is always an even */ 2332d43503901d6105a3d3d5a9eeeb9f0859537d596Werner Lemberg /* number. */ 2342d43503901d6105a3d3d5a9eeeb9f0859537d596Werner Lemberg /* */ 235f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* To change the pitch of a bitmap (say, to make it a */ 236f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* multiple of 4), use @FT_Bitmap_Convert. */ 237f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* Alternatively, you might use callback functions to */ 238f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* directly render to the application's surface; see */ 239f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* the file `example2.cpp' in the tutorial for a */ 240f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* demonstration. */ 241f434e299067c8d7ae43fbb6e021b283c3f2303c8Werner Lemberg /* */ 242670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* buffer :: A typeless pointer to the bitmap buffer. This */ 243670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* value should be aligned on 32-bit boundaries in */ 244670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* most cases. */ 245670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 246670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* num_grays :: This field is only used with */ 247fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* @FT_PIXEL_MODE_GRAY; it gives the number of gray */ 248670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* levels used in the bitmap. */ 249670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 2506d798993623602c7877d864b5799424ee17722f3Werner Lemberg /* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */ 2516d798993623602c7877d864b5799424ee17722f3Werner Lemberg /* See @FT_Pixel_Mode for possible values. */ 252670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 253ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg /* palette_mode :: This field is intended for paletted pixel modes; */ 254ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg /* it indicates how the palette is stored. Not */ 255ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg /* used currently. */ 256670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 257ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg /* palette :: A typeless pointer to the bitmap palette; this */ 258ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg /* field is intended for paletted pixel modes. Not */ 259ece8b20e6c51924b85f3055e555a430a2d4bfd1bWerner Lemberg /* used currently. */ 260670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 261670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg typedef struct FT_Bitmap_ 262d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 263b3500af717010137046ec4076d1e1c0641e33727Werner Lemberg unsigned int rows; 264b3500af717010137046ec4076d1e1c0641e33727Werner Lemberg unsigned int width; 265bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg int pitch; 266bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg unsigned char* buffer; 267b3500af717010137046ec4076d1e1c0641e33727Werner Lemberg unsigned short num_grays; 268b3500af717010137046ec4076d1e1c0641e33727Werner Lemberg unsigned char pixel_mode; 269b3500af717010137046ec4076d1e1c0641e33727Werner Lemberg unsigned char palette_mode; 270bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg void* palette; 271d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 272d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner } FT_Bitmap; 273d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 274d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 27538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 27638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 27738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Section> */ 27838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* outline_processing */ 27938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 28038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 28138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 28218b55f7bbc39f92877f825326441c13f8aaf5e80David Turner 283d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 284d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 285d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Struct> */ 286d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* FT_Outline */ 287d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 288d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 289d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* This structure is used to describe an outline to the scan-line */ 290f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* converter. */ 291d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 292d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Fields> */ 29341dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner /* n_contours :: The number of contours in the outline. */ 294d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 29541dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner /* n_points :: The number of points in the outline. */ 296d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 2976756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* points :: A pointer to an array of `n_points' @FT_Vector */ 298670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* elements, giving the outline's point coordinates. */ 299d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 300670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* tags :: A pointer to an array of `n_points' chars, giving */ 30172271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* each outline point's type. */ 30272271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* */ 30372271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* If bit~0 is unset, the point is `off' the curve, */ 304c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* i.e., a Bezier control point, while it is `on' if */ 30572271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* set. */ 306d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 3078a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Bit~1 is meaningful for `off' points only. If set, */ 308c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* it indicates a third-order Bezier arc control point; */ 309670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* and a second-order control point if unset. */ 310d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 31172271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* If bit~2 is set, bits 5-7 contain the drop-out mode */ 31272271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* (as defined in the OpenType specification; the value */ 31372271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* is the same as the argument to the SCANMODE */ 31472271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* instruction). */ 31572271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* */ 31672271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* Bits 3 and~4 are reserved for internal purposes. */ 31772271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* */ 31841dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner /* contours :: An array of `n_contours' shorts, giving the end */ 31941dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner /* point of each contour within the outline. For */ 320670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* example, the first contour is defined by the points */ 321670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* `0' to `contours[0]', the second one is defined by */ 322670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* the points `contours[0]+1' to `contours[1]', etc. */ 323d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 324670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* flags :: A set of bit flags used to characterize the outline */ 325670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* and give hints to the scan-converter and hinter on */ 326de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* how to convert/grid-fit it. See @FT_OUTLINE_XXX. */ 327d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 32872271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* <Note> */ 32972271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* The B/W rasterizer only checks bit~2 in the `tags' array for the */ 33072271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* first point of each contour. The drop-out mode as given with */ 33172271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and */ 33272271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden. */ 33372271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* */ 334d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner typedef struct FT_Outline_ 335d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 336d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner short n_contours; /* number of contours in glyph */ 337d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner short n_points; /* number of points in the glyph */ 338d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 339d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner FT_Vector* points; /* the outline's points */ 34041dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner char* tags; /* the points flags */ 341d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner short* contours; /* the contour end points */ 342d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 34341dbcbf6285901c9e1fcc7605cf996341af2ac3eDavid Turner int flags; /* outline masks */ 34446ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 3450f99ddda5f236479edd55f9233dd4ade1d76f646David Turner } FT_Outline; 346d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 347de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* */ 348de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg 3494c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉) /* Following limits must be consistent with */ 3504c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉) /* FT_Outline.{n_contours,n_points} */ 3514c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)#define FT_OUTLINE_CONTOURS_MAX SHRT_MAX 3524c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉)#define FT_OUTLINE_POINTS_MAX SHRT_MAX 3534c531460ed677d9aaa06f79de160bfe3d03d9b3cSuzuki, Toshiya (鈴木俊哉) 354f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner 3550f99ddda5f236479edd55f9233dd4ade1d76f646David Turner /*************************************************************************/ 3560f99ddda5f236479edd55f9233dd4ade1d76f646David Turner /* */ 3570f99ddda5f236479edd55f9233dd4ade1d76f646David Turner /* <Enum> */ 358de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_OUTLINE_XXX */ 3590f99ddda5f236479edd55f9233dd4ade1d76f646David Turner /* */ 3600f99ddda5f236479edd55f9233dd4ade1d76f646David Turner /* <Description> */ 3617a0241049aad6b471effe410c436e9256443883fWerner Lemberg /* A list of bit-field constants use for the flags in an outline's */ 3626aa35cd5e836fb1ae7bf9b50ad7a53311f717265Werner Lemberg /* `flags' field. */ 3630f99ddda5f236479edd55f9233dd4ade1d76f646David Turner /* */ 36456106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /* <Values> */ 3655df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_NONE :: */ 3668a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Value~0 is reserved. */ 3675df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 3685df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_OWNER :: */ 3695df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* If set, this flag indicates that the outline's field arrays */ 3705df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* (i.e., `points', `flags', and `contours') are `owned' by the */ 3715df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* outline object, and should thus be freed when it is destroyed. */ 3725df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 3735df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_EVEN_ODD_FILL :: */ 3745df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* By default, outlines are filled using the non-zero winding rule. */ 3755df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* If set to 1, the outline will be filled using the even-odd fill */ 37672271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* rule (only works with the smooth rasterizer). */ 3775df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 3785df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_REVERSE_FILL :: */ 3795df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* By default, outside contours of an outline are oriented in */ 3805df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* clock-wise direction, as defined in the TrueType specification. */ 3815df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* This flag is set if the outline uses the opposite direction */ 3828a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* (typically for Type~1 fonts). This flag is ignored by the scan */ 3835df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* converter. */ 3845df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 3855df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_IGNORE_DROPOUTS :: */ 3865df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* By default, the scan converter will try to detect drop-outs in */ 3875df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* an outline and correct the glyph bitmap to ensure consistent */ 3885df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* shape continuity. If set, this flag hints the scan-line */ 38972271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* converter to ignore such cases. See below for more information. */ 3905df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 3915df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_SMART_DROPOUTS :: */ 3925df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* Select smart dropout control. If unset, use simple dropout */ 39372271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See */ 39472271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* below for more information. */ 3955df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 3965df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_INCLUDE_STUBS :: */ 3975df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* If set, turn pixels on for `stubs', otherwise exclude them. */ 39872271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for */ 39972271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* more information. */ 4005df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 4015df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_HIGH_PRECISION :: */ 4025df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* This flag indicates that the scan-line converter should try to */ 4035df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* convert this outline to bitmaps with the highest possible */ 4045df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* quality. It is typically set for small character sizes. Note */ 4055df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* that this is only a hint that might be completely ignored by a */ 4065df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* given scan-converter. */ 4075df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 4085df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* FT_OUTLINE_SINGLE_PASS :: */ 4095df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* This flag is set to force a given scan-converter to only use a */ 4105df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* single pass over the outline to render a bitmap glyph image. */ 4115df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* Normally, it is set for very large character sizes. It is only */ 4125df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* a hint that might be completely ignored by a given */ 4135df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* scan-converter. */ 4145df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* */ 4155df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* <Note> */ 41672271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */ 41772271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth */ 41872271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* rasterizer. */ 41972271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* */ 42072271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* There exists a second mechanism to pass the drop-out mode to the */ 42172271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* B/W rasterizer; see the `tags' field in @FT_Outline. */ 42272271140434028186a49a5dc5925f0727559e46fWerner Lemberg /* */ 4235df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* Please refer to the description of the `SCANTYPE' instruction in */ 4245df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* the OpenType specification (in file `ttinst1.doc') how simple */ 4255df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg /* drop-outs, smart drop-outs, and stubs are defined. */ 426670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 4277a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_NONE 0x0 4287a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_OWNER 0x1 4297a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_EVEN_ODD_FILL 0x2 4307a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_REVERSE_FILL 0x4 4317a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_IGNORE_DROPOUTS 0x8 4325df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg#define FT_OUTLINE_SMART_DROPOUTS 0x10 4335df5dbb722cf008b3f617448d8d28fde4d725556Werner Lemberg#define FT_OUTLINE_INCLUDE_STUBS 0x20 43446ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 4357a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_HIGH_PRECISION 0x100 4367a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_OUTLINE_SINGLE_PASS 0x200 437d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 4386b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg 439de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* these constants are deprecated; use the corresponding */ 440de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* `FT_OUTLINE_XXX' values instead */ 44156106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_none FT_OUTLINE_NONE 44256106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_owner FT_OUTLINE_OWNER 44356106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL 44456106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL 44525f845aa64d720052c92d6f524af7d8eae13db27David Turner#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS 44656106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION 44756106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS 448b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner 44918b55f7bbc39f92877f825326441c13f8aaf5e80David Turner /* */ 450415235df1b955940ce85401a076f882e8717ef7bWerner Lemberg 451670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg#define FT_CURVE_TAG( flag ) ( flag & 3 ) 452d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 45372271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_ON 1 45472271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_CONIC 0 45572271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_CUBIC 2 45672271140434028186a49a5dc5925f0727559e46fWerner Lemberg 45772271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_HAS_SCANMODE 4 458d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 45972271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */ 46072271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */ 461d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 46272271140434028186a49a5dc5925f0727559e46fWerner Lemberg#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ 46372271140434028186a49a5dc5925f0727559e46fWerner Lemberg FT_CURVE_TAG_TOUCH_Y ) 464670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 465ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_On FT_CURVE_TAG_ON 466ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC 467ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC 468ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X 469ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y 470ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg 471d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 472d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 473d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 474d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <FuncType> */ 475b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Outline_MoveToFunc */ 476d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 477d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 478d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* A function pointer type used to describe the signature of a `move */ 479d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* to' function during outline walking/decomposition. */ 480d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 481d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* A `move to' is emitted to start a new contour in an outline. */ 482d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 483d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Input> */ 484d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* to :: A pointer to the target point of the `move to'. */ 485670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 48600ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* user :: A typeless pointer, which is passed from the caller of the */ 487d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* decomposition function. */ 488d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 489d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Return> */ 4908a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Error code. 0~means success. */ 491d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 4924a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 49349f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg (*FT_Outline_MoveToFunc)( const FT_Vector* to, 49449f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg void* user ); 495d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 496b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc 497d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 498e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg 499d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 500d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 501d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <FuncType> */ 502b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Outline_LineToFunc */ 503d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 504d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 505d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* A function pointer type used to describe the signature of a `line */ 506d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* to' function during outline walking/decomposition. */ 507d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 508d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* A `line to' is emitted to indicate a segment in the outline. */ 509d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 510d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Input> */ 511d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* to :: A pointer to the target point of the `line to'. */ 512670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 51300ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* user :: A typeless pointer, which is passed from the caller of the */ 514d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* decomposition function. */ 515d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 516d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Return> */ 5178a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Error code. 0~means success. */ 518d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 5194a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 52049f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg (*FT_Outline_LineToFunc)( const FT_Vector* to, 52149f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg void* user ); 522d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 523ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Outline_LineTo_Func FT_Outline_LineToFunc 524d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 525e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg 526d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 527d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 528d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <FuncType> */ 529b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Outline_ConicToFunc */ 530d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 531d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 53294cdb3f045565a344d992629fca527e18d7721cbWerner Lemberg /* A function pointer type used to describe the signature of a `conic */ 53394cdb3f045565a344d992629fca527e18d7721cbWerner Lemberg /* to' function during outline walking or decomposition. */ 534d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 535c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* A `conic to' is emitted to indicate a second-order Bezier arc in */ 536d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* the outline. */ 537d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 538d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Input> */ 539d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* control :: An intermediate control point between the last position */ 540d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* and the new target in `to'. */ 541d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 542d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* to :: A pointer to the target end point of the conic arc. */ 543d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 54400ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* user :: A typeless pointer, which is passed from the caller of */ 545d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* the decomposition function. */ 546d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 547d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Return> */ 5488a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Error code. 0~means success. */ 549d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 5504a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 55149f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg (*FT_Outline_ConicToFunc)( const FT_Vector* control, 55249f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg const FT_Vector* to, 55349f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg void* user ); 554d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 555ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc 556d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 557e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg 558d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 559d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 560d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <FuncType> */ 561b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Outline_CubicToFunc */ 562d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 563d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 564d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* A function pointer type used to describe the signature of a `cubic */ 56594cdb3f045565a344d992629fca527e18d7721cbWerner Lemberg /* to' function during outline walking or decomposition. */ 566d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 567c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* A `cubic to' is emitted to indicate a third-order Bezier arc. */ 568d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 569d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Input> */ 570c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* control1 :: A pointer to the first Bezier control point. */ 571670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 572c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* control2 :: A pointer to the second Bezier control point. */ 573670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 574d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* to :: A pointer to the target end point. */ 575670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 57600ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* user :: A typeless pointer, which is passed from the caller of */ 577d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* the decomposition function. */ 578d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 579d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Return> */ 5808a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Error code. 0~means success. */ 581d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 5824a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 58349f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg (*FT_Outline_CubicToFunc)( const FT_Vector* control1, 58449f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg const FT_Vector* control2, 58549f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg const FT_Vector* to, 58649f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg void* user ); 587b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner 588ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc 589d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 590d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 591d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 592d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 593d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Struct> */ 594d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* FT_Outline_Funcs */ 595d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 596d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 597d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* A structure to hold various function pointers used during outline */ 598c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* decomposition in order to emit segments, conic, and cubic Beziers. */ 599d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 600d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Fields> */ 601d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* move_to :: The `move to' emitter. */ 602670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 603d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* line_to :: The segment emitter. */ 604670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 605c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* conic_to :: The second-order Bezier arc emitter. */ 606670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 607c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* cubic_to :: The third-order Bezier arc emitter. */ 608d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 609670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* shift :: The shift that is applied to coordinates before they */ 610670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* are sent to the emitter. */ 611f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* */ 612670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* delta :: The delta that is applied to coordinates before they */ 613670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* are sent to the emitter, but after the shift. */ 614f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* */ 615f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* <Note> */ 616f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* The point coordinates sent to the emitters are the transformed */ 617f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* version of the original coordinates (this is important for high */ 618670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* accuracy during scan-conversion). The transformation is simple: */ 619f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* */ 6206756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* { */ 621670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* x' = (x << shift) - delta */ 622d4b6a2053f5bd86366f78efb6446f7aa5279b7c4Alexei Podtelezhnikov (Алексей Подтележников) /* y' = (y << shift) - delta */ 6236756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* } */ 624f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* */ 625c32b178934ed742781e1fb0a28d964e410226780Werner Lemberg /* Set the values of `shift' and `delta' to~0 to get the original */ 626670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* point coordinates. */ 627f0df85ba2a573c6c5c602667e9f91ef3b00c1d20David Turner /* */ 628d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner typedef struct FT_Outline_Funcs_ 629d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 630b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_Outline_MoveToFunc move_to; 631b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_Outline_LineToFunc line_to; 632b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_Outline_ConicToFunc conic_to; 633b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_Outline_CubicToFunc cubic_to; 634d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 635b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner int shift; 636b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_Pos delta; 637c136b409eb0a9a9e5ffeb27ee0488ea4c7e0f09bDavid Turner 638d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner } FT_Outline_Funcs; 639d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 640d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 64138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 64238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 64338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Section> */ 64438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* basic_types */ 64538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 64638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 64738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 64818b55f7bbc39f92877f825326441c13f8aaf5e80David Turner 649d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 650d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 651d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Macro> */ 652d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* FT_IMAGE_TAG */ 653d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 654d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 655fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* This macro converts four-letter tags to an unsigned long type. */ 656d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 6571039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* <Note> */ 6588a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Since many 16-bit compilers don't like 32-bit enumerations, you */ 6591039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* should redefine this macro in case of problems to something like */ 6601039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* this: */ 6611039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* */ 662fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* { */ 663deadbb53d26f9a9e0a24a66bf1b74a5370f629b4Werner Lemberg /* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */ 664fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* } */ 6651039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* */ 6661039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* to get a simple enumeration without assigning special numbers. */ 6671039234c39e036bd40d891cd9e96715a1be595a7Werner Lemberg /* */ 668be5a53654d0a986709745bbb6b87f0b313778006Werner Lemberg#ifndef FT_IMAGE_TAG 66938364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ 67038364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg value = ( ( (unsigned long)_x1 << 24 ) | \ 67138364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg ( (unsigned long)_x2 << 16 ) | \ 67238364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg ( (unsigned long)_x3 << 8 ) | \ 67338364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg (unsigned long)_x4 ) 674be5a53654d0a986709745bbb6b87f0b313778006Werner Lemberg#endif /* FT_IMAGE_TAG */ 675670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 676670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 677670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 678670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 679670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Enum> */ 680670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* FT_Glyph_Format */ 681670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 682670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 683670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* An enumeration type used to describe the format of a given glyph */ 684670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* image. Note that this version of FreeType only supports two image */ 685670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* formats, even though future font drivers will be able to register */ 686670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* their own format. */ 687670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 688b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* <Values> */ 689b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_GLYPH_FORMAT_NONE :: */ 6908a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* The value~0 is reserved. */ 691b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 692b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_GLYPH_FORMAT_COMPOSITE :: */ 6936b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* The glyph image is a composite of several other images. This */ 694f9d864a916becf67e6ae0e3f0888fda3a89d419eWerner Lemberg /* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */ 695f9d864a916becf67e6ae0e3f0888fda3a89d419eWerner Lemberg /* report compound glyphs (like accented characters). */ 696b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 6976b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* FT_GLYPH_FORMAT_BITMAP :: */ 6986b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* The glyph image is a bitmap, and can be described as an */ 6996b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* @FT_Bitmap. You generally need to access the `bitmap' field of */ 7006b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* the @FT_GlyphSlotRec structure to read it. */ 701b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 7026b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* FT_GLYPH_FORMAT_OUTLINE :: */ 703fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* The glyph image is a vectorial outline made of line segments */ 704c3cbb440afc45a1b7ef0501eda41e2f4edd9061eWerner Lemberg /* and Bezier arcs; it can be described as an @FT_Outline; you */ 7056b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* generally want to access the `outline' field of the */ 706b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* @FT_GlyphSlotRec structure to read it. */ 707b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* */ 7086b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* FT_GLYPH_FORMAT_PLOTTER :: */ 709fd74ec68b44fe2346b89ccc485a1d451f26df9d6Werner Lemberg /* The glyph image is a vectorial path with no inside and outside */ 7108a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* contours. Some Type~1 fonts, like those in the Hershey family, */ 7116b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg /* contain glyphs in this format. These are described as */ 712b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* @FT_Outline, but FreeType isn't currently capable of rendering */ 713b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* them correctly. */ 714670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 715670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg typedef enum FT_Glyph_Format_ 716d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 717b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ), 71838364152e61e53d164a2f64fdcdf83860ae9840eWerner Lemberg 719b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), 720b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), 721b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), 722b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ) 72346ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 72437379e2170f4e8c28bb9271929dcca76eab22a07David Turner } FT_Glyph_Format; 72537379e2170f4e8c28bb9271929dcca76eab22a07David Turner 7266b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg 727de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* these constants are deprecated; use the corresponding */ 728de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* `FT_Glyph_Format' values instead. */ 7296b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE 7306b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE 7316b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP 7326b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE 7336b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER 7346b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg 735670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 73637379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 73737379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 73837379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 73937379e2170f4e8c28bb9271929dcca76eab22a07David Turner /***** *****/ 74037379e2170f4e8c28bb9271929dcca76eab22a07David Turner /***** R A S T E R D E F I N I T I O N S *****/ 74137379e2170f4e8c28bb9271929dcca76eab22a07David Turner /***** *****/ 74237379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 74337379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 74437379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 745d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 746670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 747670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 748670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 749670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A raster is a scan converter, in charge of rendering an outline into */ 750500bcbdded6b4996a07acd315d6c5bdd56615264Alexei Podtelezhnikov (Алексей Подтележников) /* a bitmap. This section contains the public API for rasters. */ 751670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 752670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* Note that in FreeType 2, all rasters are now encapsulated within */ 753fae382076409db198dfbff36ac4cbb97b05b30a1Werner Lemberg /* specific modules called `renderers'. See `ftrender.h' for more */ 754fae382076409db198dfbff36ac4cbb97b05b30a1Werner Lemberg /* details on renderers. */ 755670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 756670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 757670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 75838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 75938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 76038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 76138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Section> */ 76256106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /* raster */ 76338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 76438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Title> */ 765ee95b6f0d487cb31e90170032ab39d120258052eWerner Lemberg /* Scanline Converter */ 76638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 76738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Abstract> */ 76838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* How vectorial outlines are converted into bitmaps and pixmaps. */ 76938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 77038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* <Description> */ 77138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* This section contains technical definitions. */ 77238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 773de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* <Order> */ 774de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster */ 775de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Span */ 776de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_SpanFunc */ 777de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* */ 778de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_Params */ 779de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_RASTER_FLAG_XXX */ 780de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* */ 781de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_NewFunc */ 782de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_DoneFunc */ 783de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_ResetFunc */ 784de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_SetModeFunc */ 785de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_RenderFunc */ 786de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* FT_Raster_Funcs */ 787de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* */ 78838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /*************************************************************************/ 78938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 790d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 791d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 792d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 793d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Type> */ 794d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* FT_Raster */ 795d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 796d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 797de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* An opaque handle (pointer) to a raster object. Each object can be */ 798de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* used independently to convert an outline into a bitmap or pixmap. */ 799d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 800d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner typedef struct FT_RasterRec_* FT_Raster; 801d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 802d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 803d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 804d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 80537379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <Struct> */ 80637379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* FT_Span */ 807d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 808d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 809de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* A structure used to model a single span of gray pixels when */ 810de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* rendering an anti-aliased bitmap. */ 811d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 81237379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <Fields> */ 813670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* x :: The span's horizontal start position. */ 814670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 815670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* len :: The span's length in pixels. */ 816670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 817670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* coverage :: The span color/coverage, ranging from 0 (background) */ 818de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* to 255 (foreground). */ 819d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 82037379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <Note> */ 821670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* This structure is used by the span drawing callback type named */ 82200ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* @FT_SpanFunc that takes the y~coordinate of the span as a */ 82300ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* parameter. */ 82437379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 825c91dfa39e8863318f092b4d38b31e7dca32d5b40Werner Lemberg /* The coverage value is always between 0 and 255. If you want less */ 826c91dfa39e8863318f092b4d38b31e7dca32d5b40Werner Lemberg /* gray values, the callback function has to reduce them. */ 827d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 828670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg typedef struct FT_Span_ 82937379e2170f4e8c28bb9271929dcca76eab22a07David Turner { 83038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg short x; 83138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg unsigned short len; 83238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg unsigned char coverage; 83346ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 83437379e2170f4e8c28bb9271929dcca76eab22a07David Turner } FT_Span; 835d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 836d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 837d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /*************************************************************************/ 838d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 839d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <FuncType> */ 840b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_SpanFunc */ 841d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 842d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Description> */ 84337379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* A function used as a call-back by the anti-aliased renderer in */ 84437379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* order to let client applications draw themselves the gray pixel */ 84537379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* spans on each scan line. */ 846d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 847d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* <Input> */ 8488a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* y :: The scanline's y~coordinate. */ 84937379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 850670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* count :: The number of spans to draw on this scanline. */ 851670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 852670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* spans :: A table of `count' spans to draw on the scanline. */ 85337379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 854670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* user :: User-supplied data that is passed to the callback. */ 85537379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 856670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Note> */ 857670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* This callback allows client applications to directly render the */ 858670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* gray spans of the anti-aliased bitmap to any kind of surfaces. */ 859670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 860670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* This can be used to write anti-aliased outlines directly to a */ 861670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* given background bitmap, and even perform translucency. */ 86237379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 8634a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef void 86449f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg (*FT_SpanFunc)( int y, 86549f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg int count, 86649f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg const FT_Span* spans, 86749f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg void* user ); 868670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 869e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Span_Func FT_SpanFunc 8706b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg 87146ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 87237379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 873d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 87437379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <FuncType> */ 87537379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* FT_Raster_BitTest_Func */ 876d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 87737379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <Description> */ 878de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* Deprecated, unimplemented. */ 879d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner /* */ 8804a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 8814a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg (*FT_Raster_BitTest_Func)( int y, 8824a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg int x, 8834a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg void* user ); 884670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 88537379e2170f4e8c28bb9271929dcca76eab22a07David Turner 88637379e2170f4e8c28bb9271929dcca76eab22a07David Turner /*************************************************************************/ 88737379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 88837379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <FuncType> */ 88937379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* FT_Raster_BitSet_Func */ 89037379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* */ 89137379e2170f4e8c28bb9271929dcca76eab22a07David Turner /* <Description> */ 892de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* Deprecated, unimplemented. */ 893670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 8944a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef void 8954a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg (*FT_Raster_BitSet_Func)( int y, 8964a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg int x, 8974a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg void* user ); 898670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 8996b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg 900670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 901670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 902670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Enum> */ 9037a0241049aad6b471effe410c436e9256443883fWerner Lemberg /* FT_RASTER_FLAG_XXX */ 904670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 905670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 9067a0241049aad6b471effe410c436e9256443883fWerner Lemberg /* A list of bit flag constants as used in the `flags' field of a */ 9077a0241049aad6b471effe410c436e9256443883fWerner Lemberg /* @FT_Raster_Params structure. */ 908670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 90956106fb97d3a6ccc9483eb0d736b1edc2e770d2eDavid Turner /* <Values> */ 910b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_RASTER_FLAG_DEFAULT :: This value is 0. */ 911670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 912b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */ 91338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* anti-aliased glyph image should be */ 91438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* generated. Otherwise, it will be */ 9157a0241049aad6b471effe410c436e9256443883fWerner Lemberg /* monochrome (1-bit). */ 91638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 917b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */ 91838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* rendering. In this mode, client */ 91938208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* applications must provide their own span */ 92038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* callback. This lets them directly */ 92138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* draw or compose over an existing bitmap. */ 92238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* If this bit is not set, the target */ 92338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* pixmap's buffer _must_ be zeroed before */ 92438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* rendering. */ 92538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 926de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* Direct rendering is only possible with */ 927de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* anti-aliased glyphs. */ 92838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 929b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */ 93038208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* rendering mode. If set, the output will */ 93138208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* be clipped to a box specified in the */ 9326756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* `clip_box' field of the */ 9336756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* @FT_Raster_Params structure. */ 93438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 93538208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* Note that by default, the glyph bitmap */ 93638208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* is clipped to the target pixmap, except */ 93738208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* in direct rendering mode where all spans */ 93838208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* are generated if no clipping box is set. */ 939670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 9407a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_DEFAULT 0x0 9417a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_AA 0x1 9427a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_DIRECT 0x2 9437a0241049aad6b471effe410c436e9256443883fWerner Lemberg#define FT_RASTER_FLAG_CLIP 0x4 94437379e2170f4e8c28bb9271929dcca76eab22a07David Turner 945de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* these constants are deprecated; use the corresponding */ 946de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* `FT_RASTER_FLAG_XXX' values instead */ 9476b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT 9486b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_aa FT_RASTER_FLAG_AA 9496b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT 9506b5c669b7b300ef3dea4ad956885d0d5f5a25920Werner Lemberg#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP 951b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner 952670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 953670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 954670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 955670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Struct> */ 956670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* FT_Raster_Params */ 957670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 958670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 959670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A structure to hold the arguments used by a raster's render */ 960670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* function. */ 961670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 962670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Fields> */ 963670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* target :: The target bitmap. */ 964670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 9656756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* source :: A pointer to the source glyph image (e.g., an */ 9666756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* @FT_Outline). */ 967670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 968670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* flags :: The rendering flags. */ 969670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 970670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* gray_spans :: The gray span drawing callback. */ 971670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 972de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* black_spans :: Unused. */ 973670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 974de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* bit_test :: Unused. */ 975670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 976de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* bit_set :: Unused. */ 977670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 978670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* user :: User-supplied data that is passed to each drawing */ 979670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* callback. */ 980670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 9813975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg /* clip_box :: An optional clipping box. It is only used in */ 9823975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg /* direct rendering mode. Note that coordinates here */ 9833975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg /* should be expressed in _integer_ pixels (and not in */ 9843975e2e1f5ae5a616c4a4cc9994d483a15c17495Werner Lemberg /* 26.6 fixed-point units). */ 985859a18a358ccc64451ac834137e61cf26c9da1f8David Turner /* */ 986670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Note> */ 9876756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */ 9886756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* bit flag is set in the `flags' field, otherwise a monochrome */ 9896756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* bitmap is generated. */ 990670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 9916756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */ 992670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster will call the `gray_spans' callback to draw gray pixel */ 993de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* spans. This allows direct composition over a pre-existing bitmap */ 994de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* through user-provided callbacks to perform the span drawing and */ 995de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg /* composition. Not supported by the monochrome rasterizer. */ 996670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 997670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg typedef struct FT_Raster_Params_ 998d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner { 999c01c90424939a4b60edce9900cbfed09a9bfacdfWerner Lemberg const FT_Bitmap* target; 10008ae1dceb94effa59a307c0b778b37483f808f3d4Werner Lemberg const void* source; 100137379e2170f4e8c28bb9271929dcca76eab22a07David Turner int flags; 1002b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_SpanFunc gray_spans; 1003de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg FT_SpanFunc black_spans; /* unused */ 1004de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg FT_Raster_BitTest_Func bit_test; /* unused */ 1005de43ace7a32252f0cdf50336f74fc1d9d52e2b03Werner Lemberg FT_Raster_BitSet_Func bit_set; /* unused */ 100637379e2170f4e8c28bb9271929dcca76eab22a07David Turner void* user; 1007859a18a358ccc64451ac834137e61cf26c9da1f8David Turner FT_BBox clip_box; 100846ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 100937379e2170f4e8c28bb9271929dcca76eab22a07David Turner } FT_Raster_Params; 101037379e2170f4e8c28bb9271929dcca76eab22a07David Turner 101137379e2170f4e8c28bb9271929dcca76eab22a07David Turner 1012670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 1013670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1014670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <FuncType> */ 1015b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Raster_NewFunc */ 1016670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1017670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 1018670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A function used to create a new raster object. */ 1019670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1020670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Input> */ 1021670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* memory :: A handle to the memory allocator. */ 1022670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1023670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Output> */ 1024670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster :: A handle to the new raster object. */ 1025670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1026670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Return> */ 10278a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Error code. 0~means success. */ 1028670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1029670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Note> */ 1030670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* The `memory' parameter is a typeless pointer in order to avoid */ 1031670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* un-wanted dependencies on the rest of the FreeType code. In */ 10326756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* practice, it is an @FT_Memory object, i.e., a handle to the */ 10336756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* standard FreeType memory allocator. However, this field can be */ 10346756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* completely ignored by a given raster implementation. */ 1035670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 10364a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 1037b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner (*FT_Raster_NewFunc)( void* memory, 1038b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner FT_Raster* raster ); 1039670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1040e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_New_Func FT_Raster_NewFunc 1041670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1042d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg 1043670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 1044670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1045670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <FuncType> */ 1046b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Raster_DoneFunc */ 1047670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1048670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 1049670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A function used to destroy a given raster object. */ 1050670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1051670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Input> */ 1052670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster :: A handle to the raster object. */ 1053670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 10544a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef void 1055b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner (*FT_Raster_DoneFunc)( FT_Raster raster ); 105637379e2170f4e8c28bb9271929dcca76eab22a07David Turner 1057e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Done_Func FT_Raster_DoneFunc 105837379e2170f4e8c28bb9271929dcca76eab22a07David Turner 1059d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg 1060670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 1061670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1062670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <FuncType> */ 1063b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Raster_ResetFunc */ 1064670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1065670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 1066516342534468565abf0dafbd5bbb2891bfc19990Behdad Esfahbod /* FreeType used to provide an area of memory called the `render */ 1067e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* pool' available to all registered rasterizers. This was not */ 1068e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* thread safe, however, and now FreeType never allocates this pool. */ 1069670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1070e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* This function is called after a new raster object is created. */ 1071670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1072670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Input> */ 1073670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster :: A handle to the new raster object. */ 1074670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1075e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* pool_base :: Previously, the address in memory of the render pool. */ 1076e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* Set this to NULL. */ 1077670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1078e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* pool_size :: Previously, the size in bytes of the render pool. */ 1079e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* Set this to 0. */ 1080670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1081670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Note> */ 1082e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* Rasterizers should rely on dynamic or stack allocation if they */ 1083e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* want to (a handle to the memory allocator is passed to the */ 1084e99b26aadae8fa057debf995e4b8017e18c2b995Werner Lemberg /* rasterizer constructor). */ 1085670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 10864a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef void 1087b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner (*FT_Raster_ResetFunc)( FT_Raster raster, 1088b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner unsigned char* pool_base, 1089b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner unsigned long pool_size ); 1090670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1091e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Reset_Func FT_Raster_ResetFunc 1092670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1093d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg 1094670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 1095670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1096670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <FuncType> */ 1097b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Raster_SetModeFunc */ 1098670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1099670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 1100670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* This function is a generic facility to change modes or attributes */ 1101670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* in a given raster. This can be used for debugging purposes, or */ 1102670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* simply to allow implementation-specific `features' in a given */ 1103670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster module. */ 1104670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1105670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Input> */ 1106670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster :: A handle to the new raster object. */ 1107670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1108670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* mode :: A 4-byte tag used to name the mode or property. */ 1109670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1110670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* args :: A pointer to the new mode/property to use. */ 1111670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 11124a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 1113b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner (*FT_Raster_SetModeFunc)( FT_Raster raster, 1114b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner unsigned long mode, 1115b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner void* args ); 1116670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1117ee0f2ab9704dae0ff463377a5c447f3ec5d5da61Werner Lemberg#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc 1118670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1119d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg 1120670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 1121670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1122670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <FuncType> */ 1123b08fe2dc7af972a61f4e6bcadd7bb522861faec5David Turner /* FT_Raster_RenderFunc */ 1124670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1125670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 11268a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Invoke a given raster to scan-convert a given glyph image into a */ 11278a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* target bitmap. */ 1128670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1129670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Input> */ 1130670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster :: A handle to the raster object. */ 1131670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 11326756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* params :: A pointer to an @FT_Raster_Params structure used to */ 11336756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* store the rendering parameters. */ 1134670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1135670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Return> */ 11368a9b63913f62bdf342f4bd8791cb7c7ebfdbfeddWerner Lemberg /* Error code. 0~means success. */ 1137670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1138670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Note> */ 1139670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* The exact format of the source image depends on the raster's glyph */ 11406756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* format defined in its @FT_Raster_Funcs structure. It can be an */ 11416756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* @FT_Outline or anything else in order to support a large array of */ 1142670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* glyph formats. */ 1143670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1144670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* Note also that the render function can fail and return a */ 11456756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* `FT_Err_Unimplemented_Feature' error code if the raster used does */ 1146670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* not support direct composition. */ 1147670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1148670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* XXX: For now, the standard raster doesn't support direct */ 1149670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* composition but this should change for the final release (see */ 11506756dc15ba424186394ca3f295ba8d125b0f047eWerner Lemberg /* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */ 115100ea2a133b377d74f9694d3ba74588a4e8542120Werner Lemberg /* for examples of distinct implementations that support direct */ 1152670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* composition). */ 1153670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 11544a2305cf0c686d58273e264780b48b159e42f604Werner Lemberg typedef int 115549f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg (*FT_Raster_RenderFunc)( FT_Raster raster, 115649f4d34ed3dc58b087b34de661cd2c536d810882Werner Lemberg const FT_Raster_Params* params ); 115737379e2170f4e8c28bb9271929dcca76eab22a07David Turner 1158e899991b5e729b48ed219e15727c6fbb39c7e18fWerner Lemberg#define FT_Raster_Render_Func FT_Raster_RenderFunc 115937379e2170f4e8c28bb9271929dcca76eab22a07David Turner 1160d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg 1161670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /*************************************************************************/ 1162670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1163670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Struct> */ 1164670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* FT_Raster_Funcs */ 1165670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1166670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Description> */ 1167670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* A structure used to describe a given raster class to the library. */ 1168670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1169670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* <Fields> */ 1170670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* glyph_format :: The supported glyph format for this raster. */ 1171670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1172670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster_new :: The raster constructor. */ 1173670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1174670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster_reset :: Used to reset the render pool within the raster. */ 1175670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1176670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster_render :: A function to render a glyph into a given bitmap. */ 1177670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1178670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* raster_done :: The raster destructor. */ 1179670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg /* */ 1180670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg typedef struct FT_Raster_Funcs_ 118137379e2170f4e8c28bb9271929dcca76eab22a07David Turner { 1182d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg FT_Glyph_Format glyph_format; 1183c95b7652d8db19530c91e80d23c288bbf27f1b72Werner Lemberg 1184d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg FT_Raster_NewFunc raster_new; 1185d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg FT_Raster_ResetFunc raster_reset; 1186d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg FT_Raster_SetModeFunc raster_set_mode; 1187d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg FT_Raster_RenderFunc raster_render; 1188d2e1573706cd2f9a28250f8f98e943da3fba9d8fWerner Lemberg FT_Raster_DoneFunc raster_done; 118946ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 119037379e2170f4e8c28bb9271929dcca76eab22a07David Turner } FT_Raster_Funcs; 119146ab6331e0c23bddb563ffd909162aa73364b4bcDavid Turner 119238208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg /* */ 119338208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 119438208a6e6b07c8d3e144632c33833e16023b410bWerner Lemberg 11954c80f0c9ca0b24c9cd082d2d6b09465e2d04c6a8Werner LembergFT_END_HEADER 1196bd5ae40006959667299f09f13defa6f025caa744Werner Lemberg 119737412ff9f42212bcf4dd29d9762f3c35b5735768Werner Lemberg#endif /* FTIMAGE_H_ */ 1198d2b1f357049f6b5e6766af9f3dfa134d2527feeDavid Turner 1199670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg 1200670caab8554dd0458ac2e59687223544e09ce15dWerner Lemberg/* END */ 1201e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg 1202e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg 1203e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg/* Local Variables: */ 1204e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg/* coding: utf-8 */ 1205e12a471f6af23257f4c406feb8745eb12915fa7dWerner Lemberg/* End: */ 1206