1999-12-17 00:11:37 +01:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* ftimage.h */
|
|
|
|
/* */
|
2000-07-14 08:16:47 +02:00
|
|
|
/* FreeType glyph image formats and default raster interface */
|
|
|
|
/* (specification). */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* */
|
2015-01-17 20:41:43 +01:00
|
|
|
/* Copyright 1996-2015 by */
|
2000-07-14 08:16:47 +02:00
|
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* This file is part of the FreeType project, and may only be used, */
|
|
|
|
/* modified, and distributed under the terms of the FreeType project */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
|
|
|
/* this file you indicate that you have read the license and */
|
|
|
|
/* understand and accept it fully. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* Note: A `raster' is simply a scan-line converter, used to render */
|
|
|
|
/* FT_Outlines into FT_Bitmaps. */
|
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
|
|
|
|
* INSTALL: Revised.
* builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
builds/win32/w32-bccd.mk: Revised.
* include/freetype/config/ftbuild.h,
include/freetype/internal/internal.h: Revised.
* include/freetype/ftimage.h: Updated to new header inclusion scheme.
* builds/toplevel.mk (.PHONY): Adding `distclean'.
* builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
`setup'.
* INSTALL: Slightly updated the quick starter documentation to
include IDE compilation, prevent against BSD Make, and specify "make
setup" instead of a single "make" for build configuration.
* include/config/ftbuild.h, include/internal/internal.h: Added new
configuration files used to determine the location of all public,
configuration, and internal header files for FreeType 2. Modified
all headers under "include/freetype" to reflect this change. Note
that we still need to change the library source files themselves
though.
builds/win32/detect.mk: Added new files to support compilation with
the free Borland C++ command-line compiler. Modified the detection
rules to recognize the new "bcc32" target in "make setup bcc32".
src/truetype/ttobjs.c, src/truetype/ttgload.c,
src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
didn't really like. Basically, this compiler complains when FT_UInt
is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
in these cases).
2000-12-01 18:25:58 +01:00
|
|
|
#ifndef __FTIMAGE_H__
|
|
|
|
#define __FTIMAGE_H__
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2000-07-05 06:32:02 +02:00
|
|
|
|
2007-12-31 00:49:14 +01:00
|
|
|
/* _STANDALONE_ is from ftgrays.c */
|
2002-09-16 08:15:31 +02:00
|
|
|
#ifndef _STANDALONE_
|
2000-12-04 23:53:55 +01:00
|
|
|
#include <ft2build.h>
|
2002-09-16 08:15:31 +02:00
|
|
|
#endif
|
* INSTALL: Revised.
* builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
builds/win32/w32-bccd.mk: Revised.
* include/freetype/config/ftbuild.h,
include/freetype/internal/internal.h: Revised.
* include/freetype/ftimage.h: Updated to new header inclusion scheme.
* builds/toplevel.mk (.PHONY): Adding `distclean'.
* builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
`setup'.
* INSTALL: Slightly updated the quick starter documentation to
include IDE compilation, prevent against BSD Make, and specify "make
setup" instead of a single "make" for build configuration.
* include/config/ftbuild.h, include/internal/internal.h: Added new
configuration files used to determine the location of all public,
configuration, and internal header files for FreeType 2. Modified
all headers under "include/freetype" to reflect this change. Note
that we still need to change the library source files themselves
though.
builds/win32/detect.mk: Added new files to support compilation with
the free Borland C++ command-line compiler. Modified the detection
rules to recognize the new "bcc32" target in "make setup bcc32".
src/truetype/ttobjs.c, src/truetype/ttgload.c,
src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
didn't really like. Basically, this compiler complains when FT_UInt
is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
in these cases).
2000-12-01 18:25:58 +01:00
|
|
|
|
2000-12-09 01:45:38 +01:00
|
|
|
|
* INSTALL: Revised.
* builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
builds/win32/w32-bccd.mk: Revised.
* include/freetype/config/ftbuild.h,
include/freetype/internal/internal.h: Revised.
* include/freetype/ftimage.h: Updated to new header inclusion scheme.
* builds/toplevel.mk (.PHONY): Adding `distclean'.
* builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
`setup'.
* INSTALL: Slightly updated the quick starter documentation to
include IDE compilation, prevent against BSD Make, and specify "make
setup" instead of a single "make" for build configuration.
* include/config/ftbuild.h, include/internal/internal.h: Added new
configuration files used to determine the location of all public,
configuration, and internal header files for FreeType 2. Modified
all headers under "include/freetype" to reflect this change. Note
that we still need to change the library source files themselves
though.
builds/win32/detect.mk: Added new files to support compilation with
the free Borland C++ command-line compiler. Modified the detection
rules to recognize the new "bcc32" target in "make setup bcc32".
src/truetype/ttobjs.c, src/truetype/ttgload.c,
src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
didn't really like. Basically, this compiler complains when FT_UInt
is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
in these cases).
2000-12-01 18:25:58 +01:00
|
|
|
FT_BEGIN_HEADER
|
2000-07-05 06:32:02 +02:00
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Section> */
|
|
|
|
/* basic_types */
|
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2000-07-05 06:32:02 +02:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_Pos */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2009-11-02 07:25:01 +01:00
|
|
|
/* The type FT_Pos is used to store vectorial coordinates. Depending */
|
|
|
|
/* on the context, these can represent distances in integer font */
|
2013-01-13 01:17:05 +01:00
|
|
|
/* units, or 16.16, or 26.6 fixed-point pixel coordinates. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
typedef signed long FT_Pos;
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Vector */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* A simple structure used to store a 2D vector; coordinates are of */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* the FT_Pos type. */
|
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
|
|
|
/* x :: The horizontal coordinate. */
|
|
|
|
/* y :: The vertical coordinate. */
|
|
|
|
/* */
|
|
|
|
typedef struct FT_Vector_
|
|
|
|
{
|
|
|
|
FT_Pos x;
|
|
|
|
FT_Pos y;
|
|
|
|
|
|
|
|
} FT_Vector;
|
|
|
|
|
|
|
|
|
2001-02-13 18:42:49 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_BBox */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A structure used to hold an outline's bounding box, i.e., the */
|
|
|
|
/* coordinates of its extrema in the horizontal and vertical */
|
|
|
|
/* directions. */
|
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
|
|
|
/* xMin :: The horizontal minimum (left-most). */
|
|
|
|
/* */
|
|
|
|
/* yMin :: The vertical minimum (bottom-most). */
|
|
|
|
/* */
|
|
|
|
/* xMax :: The horizontal maximum (right-most). */
|
|
|
|
/* */
|
|
|
|
/* yMax :: The vertical maximum (top-most). */
|
|
|
|
/* */
|
2010-01-21 08:41:41 +01:00
|
|
|
/* <Note> */
|
|
|
|
/* The bounding box is specified with the coordinates of the lower */
|
|
|
|
/* left and the upper right corner. In PostScript, those values are */
|
|
|
|
/* often called (llx,lly) and (urx,ury), respectively. */
|
|
|
|
/* */
|
|
|
|
/* If `yMin' is negative, this value gives the glyph's descender. */
|
|
|
|
/* Otherwise, the glyph doesn't descend below the baseline. */
|
|
|
|
/* Similarly, if `ymax' is positive, this value gives the glyph's */
|
|
|
|
/* ascender. */
|
|
|
|
/* */
|
2010-01-23 13:17:27 +01:00
|
|
|
/* `xMin' gives the horizontal distance from the glyph's origin to */
|
|
|
|
/* the left edge of the glyph's bounding box. If `xMin' is negative, */
|
|
|
|
/* the glyph extends to the left of the origin. */
|
|
|
|
/* */
|
2001-02-13 18:42:49 +01:00
|
|
|
typedef struct FT_BBox_
|
|
|
|
{
|
|
|
|
FT_Pos xMin, yMin;
|
|
|
|
FT_Pos xMax, yMax;
|
|
|
|
|
|
|
|
} FT_BBox;
|
|
|
|
|
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Enum> */
|
|
|
|
/* FT_Pixel_Mode */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* An enumeration type used to describe the format of pixels in a */
|
|
|
|
/* given bitmap. Note that additional formats may be added in the */
|
|
|
|
/* future. */
|
|
|
|
/* */
|
2002-09-18 00:57:29 +02:00
|
|
|
/* <Values> */
|
|
|
|
/* FT_PIXEL_MODE_NONE :: */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Value~0 is reserved. */
|
2002-09-18 00:57:29 +02:00
|
|
|
/* */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* FT_PIXEL_MODE_MONO :: */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* A monochrome bitmap, using 1~bit per pixel. Note that pixels */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* are stored in most-significant order (MSB), which means that */
|
|
|
|
/* the left-most pixel in a byte has value 128. */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* FT_PIXEL_MODE_GRAY :: */
|
|
|
|
/* An 8-bit bitmap, generally used to represent anti-aliased glyph */
|
|
|
|
/* images. Each pixel is stored in one byte. Note that the number */
|
2008-12-18 07:32:10 +01:00
|
|
|
/* of `gray' levels is stored in the `num_grays' field of the */
|
|
|
|
/* @FT_Bitmap structure (it generally is 256). */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
|
|
|
/* FT_PIXEL_MODE_GRAY2 :: */
|
2008-12-18 07:32:10 +01:00
|
|
|
/* A 2-bit per pixel bitmap, used to represent embedded */
|
|
|
|
/* anti-aliased bitmaps in font files according to the OpenType */
|
|
|
|
/* specification. We haven't found a single font using this */
|
|
|
|
/* format, however. */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
|
|
|
/* FT_PIXEL_MODE_GRAY4 :: */
|
2008-12-18 07:32:10 +01:00
|
|
|
/* A 4-bit per pixel bitmap, representing embedded anti-aliased */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* bitmaps in font files according to the OpenType specification. */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* We haven't found a single font using this format, however. */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* FT_PIXEL_MODE_LCD :: */
|
2008-12-18 07:32:10 +01:00
|
|
|
/* An 8-bit bitmap, representing RGB or BGR decimated glyph images */
|
|
|
|
/* used for display on LCD displays; the bitmap is three times */
|
|
|
|
/* wider than the original glyph image. See also */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* @FT_RENDER_MODE_LCD. */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
|
|
|
/* FT_PIXEL_MODE_LCD_V :: */
|
2008-12-18 07:32:10 +01:00
|
|
|
/* An 8-bit bitmap, representing RGB or BGR decimated glyph images */
|
|
|
|
/* used for display on rotated LCD displays; the bitmap is three */
|
|
|
|
/* times taller than the original glyph image. See also */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* @FT_RENDER_MODE_LCD_V. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
Add support for color embedded bitmaps (eg. color emoji).
A new load flag, FT_LOAD_COLOR, makes FreeType load color
embedded-bitmaps, following this draft specification
https://color-emoji.googlecode.com/git/specification/v1.html
which defines two new SFNT tables, `CBDT' and `CBLC' (named and
modeled after `EBDT' and `EBLC', respectively). The color bitmaps
are stored in the new FT_PIXEL_MODE_BGRA format to represent BGRA
pre-multiplied sRGB images. If PNG support is available, PNG color
images as defined in the same proposed specification are supported
also.
Note that color bitmaps are converted to grayscale if client didn't
ask for color.
* builds/unix/configure.raw: Search for libpng.
Add `--without-png' option.
* devel/ftoption.h, include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_USE_PNG): New macro.
* include/freetype/freetype.h (FT_LOAD_COLOR): New load flag.
* include/freetype/ftimage.h (FT_Pixel_Mode): Add
`FT_PIXEL_MODE_BGRA'.
* include/freetype/tttags.h (TTAG_CBDT, TTAG_CBLC): New tags.
* src/base/ftbitmap.c (FT_Bitmap_Embolden): Updated.
(ft_gray_for_premultiplied_srgb_bgra): New function.
(FT_Bitmap_Convert): Handle FT_PIXEL_MODE_BGRA.
* src/sfnt/pngshim.c, src/sfnt/pngshim.h: New files.
* src/sfnt/sfnt.c: Include `pngshim.c'.
* src/sfnt/ttsbit.c: Include FT_BITMAP_H and `pngshim.h'
(tt_face_load_eblc): Load `CBLC'.
(tt_sbit_decoder_init): Load `CBDT'.
(tt_sbit_decoder_alloc_bitmap): Pass load flags to select between
color and grayscale bitmaps.
Set `num_grays'. This is used by `ftview' to choose the blending
algorithm.
(tt_sbit_decoder_load_byte_aligned,
tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_compound,
tt_sbit_decoder_load_image): Pass load flag.
s/write/pwrite/.
Don't call `tt_sbit_decoder_alloc_bitmap'.
Updated.
(tt_sbit_decoder_load_png) [FT_CONFIG_OPTION_USE_PNG]: New function.
(tt_sbit_decoder_load_bitmap): Pass load flag.
Handle new glyph formats 17, 18, and 19.
Call `tt_sbit_decoder_alloc_bitmap'.
Flatten color bitmaps if necessary.
(tt_face_load_sbit_image): Updated.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Add `pngshim.c'.
* docs/CHANGES: Updated.
2013-05-29 11:36:18 +02:00
|
|
|
/* FT_PIXEL_MODE_BGRA :: */
|
|
|
|
/* An image with four 8-bit channels per pixel, representing a */
|
|
|
|
/* color image (such as emoticons) with alpha channel. For each */
|
|
|
|
/* pixel, the format is BGRA, which means, the blue channel comes */
|
|
|
|
/* first in memory. The color channels are pre-multiplied and in */
|
|
|
|
/* the sRGB colorspace. For example, full red at half-translucent */
|
|
|
|
/* opacity will be represented as `00,00,80,80', not `00,00,FF,80'. */
|
|
|
|
/* See also @FT_LOAD_COLOR. */
|
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
typedef enum FT_Pixel_Mode_
|
1999-12-17 00:11:37 +01:00
|
|
|
{
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
FT_PIXEL_MODE_NONE = 0,
|
|
|
|
FT_PIXEL_MODE_MONO,
|
|
|
|
FT_PIXEL_MODE_GRAY,
|
|
|
|
FT_PIXEL_MODE_GRAY2,
|
|
|
|
FT_PIXEL_MODE_GRAY4,
|
|
|
|
FT_PIXEL_MODE_LCD,
|
|
|
|
FT_PIXEL_MODE_LCD_V,
|
Add support for color embedded bitmaps (eg. color emoji).
A new load flag, FT_LOAD_COLOR, makes FreeType load color
embedded-bitmaps, following this draft specification
https://color-emoji.googlecode.com/git/specification/v1.html
which defines two new SFNT tables, `CBDT' and `CBLC' (named and
modeled after `EBDT' and `EBLC', respectively). The color bitmaps
are stored in the new FT_PIXEL_MODE_BGRA format to represent BGRA
pre-multiplied sRGB images. If PNG support is available, PNG color
images as defined in the same proposed specification are supported
also.
Note that color bitmaps are converted to grayscale if client didn't
ask for color.
* builds/unix/configure.raw: Search for libpng.
Add `--without-png' option.
* devel/ftoption.h, include/freetype/config/ftoption.h
(FT_CONFIG_OPTION_USE_PNG): New macro.
* include/freetype/freetype.h (FT_LOAD_COLOR): New load flag.
* include/freetype/ftimage.h (FT_Pixel_Mode): Add
`FT_PIXEL_MODE_BGRA'.
* include/freetype/tttags.h (TTAG_CBDT, TTAG_CBLC): New tags.
* src/base/ftbitmap.c (FT_Bitmap_Embolden): Updated.
(ft_gray_for_premultiplied_srgb_bgra): New function.
(FT_Bitmap_Convert): Handle FT_PIXEL_MODE_BGRA.
* src/sfnt/pngshim.c, src/sfnt/pngshim.h: New files.
* src/sfnt/sfnt.c: Include `pngshim.c'.
* src/sfnt/ttsbit.c: Include FT_BITMAP_H and `pngshim.h'
(tt_face_load_eblc): Load `CBLC'.
(tt_sbit_decoder_init): Load `CBDT'.
(tt_sbit_decoder_alloc_bitmap): Pass load flags to select between
color and grayscale bitmaps.
Set `num_grays'. This is used by `ftview' to choose the blending
algorithm.
(tt_sbit_decoder_load_byte_aligned,
tt_sbit_decoder_load_bit_aligned, tt_sbit_decoder_load_compound,
tt_sbit_decoder_load_image): Pass load flag.
s/write/pwrite/.
Don't call `tt_sbit_decoder_alloc_bitmap'.
Updated.
(tt_sbit_decoder_load_png) [FT_CONFIG_OPTION_USE_PNG]: New function.
(tt_sbit_decoder_load_bitmap): Pass load flag.
Handle new glyph formats 17, 18, and 19.
Call `tt_sbit_decoder_alloc_bitmap'.
Flatten color bitmaps if necessary.
(tt_face_load_sbit_image): Updated.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Add `pngshim.c'.
* docs/CHANGES: Updated.
2013-05-29 11:36:18 +02:00
|
|
|
FT_PIXEL_MODE_BGRA,
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
|
|
|
|
FT_PIXEL_MODE_MAX /* do not remove */
|
2000-04-04 18:46:12 +02:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
} FT_Pixel_Mode;
|
|
|
|
|
|
|
|
|
2014-12-02 23:06:04 +01:00
|
|
|
/* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */
|
|
|
|
/* values instead. */
|
2002-09-05 17:10:54 +02:00
|
|
|
#define ft_pixel_mode_none FT_PIXEL_MODE_NONE
|
|
|
|
#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO
|
|
|
|
#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY
|
|
|
|
#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2
|
|
|
|
#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
|
2002-09-05 17:10:54 +02:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Bitmap */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A structure used to describe a bitmap or pixmap to the raster. */
|
|
|
|
/* Note that we now manage pixmaps of various depths through the */
|
|
|
|
/* `pixel_mode' field. */
|
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
|
|
|
/* rows :: The number of bitmap rows. */
|
|
|
|
/* */
|
|
|
|
/* width :: The number of pixels in bitmap row. */
|
|
|
|
/* */
|
|
|
|
/* pitch :: The pitch's absolute value is the number of bytes */
|
|
|
|
/* taken by one bitmap row, including padding. */
|
|
|
|
/* However, the pitch is positive when the bitmap has */
|
|
|
|
/* a `down' flow, and negative when it has an `up' */
|
|
|
|
/* flow. In all cases, the pitch is an offset to add */
|
|
|
|
/* to a bitmap pointer in order to go down one row. */
|
|
|
|
/* */
|
2010-08-21 09:01:51 +02:00
|
|
|
/* Note that `padding' means the alignment of a */
|
|
|
|
/* bitmap to a byte border, and FreeType functions */
|
|
|
|
/* normally align to the smallest possible integer */
|
|
|
|
/* value. */
|
|
|
|
/* */
|
2010-02-09 07:40:56 +01:00
|
|
|
/* For the B/W rasterizer, `pitch' is always an even */
|
|
|
|
/* number. */
|
|
|
|
/* */
|
2010-08-21 09:01:51 +02:00
|
|
|
/* To change the pitch of a bitmap (say, to make it a */
|
|
|
|
/* multiple of 4), use @FT_Bitmap_Convert. */
|
|
|
|
/* Alternatively, you might use callback functions to */
|
|
|
|
/* directly render to the application's surface; see */
|
|
|
|
/* the file `example2.cpp' in the tutorial for a */
|
|
|
|
/* demonstration. */
|
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* buffer :: A typeless pointer to the bitmap buffer. This */
|
|
|
|
/* value should be aligned on 32-bit boundaries in */
|
|
|
|
/* most cases. */
|
|
|
|
/* */
|
|
|
|
/* num_grays :: This field is only used with */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* @FT_PIXEL_MODE_GRAY; it gives the number of gray */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* levels used in the bitmap. */
|
|
|
|
/* */
|
2003-07-01 09:28:55 +02:00
|
|
|
/* pixel_mode :: The pixel mode, i.e., how pixel bits are stored. */
|
|
|
|
/* See @FT_Pixel_Mode for possible values. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2004-12-14 00:16:59 +01:00
|
|
|
/* palette_mode :: This field is intended for paletted pixel modes; */
|
|
|
|
/* it indicates how the palette is stored. Not */
|
|
|
|
/* used currently. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2004-12-14 00:16:59 +01:00
|
|
|
/* palette :: A typeless pointer to the bitmap palette; this */
|
|
|
|
/* field is intended for paletted pixel modes. Not */
|
|
|
|
/* used currently. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
typedef struct FT_Bitmap_
|
1999-12-17 00:11:37 +01:00
|
|
|
{
|
2014-11-19 21:28:21 +01:00
|
|
|
unsigned int rows;
|
|
|
|
unsigned int width;
|
2000-07-05 06:32:02 +02:00
|
|
|
int pitch;
|
|
|
|
unsigned char* buffer;
|
2014-11-19 21:28:21 +01:00
|
|
|
unsigned short num_grays;
|
|
|
|
unsigned char pixel_mode;
|
|
|
|
unsigned char palette_mode;
|
2000-07-05 06:32:02 +02:00
|
|
|
void* palette;
|
1999-12-17 00:11:37 +01:00
|
|
|
|
|
|
|
} FT_Bitmap;
|
|
|
|
|
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Section> */
|
|
|
|
/* outline_processing */
|
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2001-01-10 07:53:49 +01:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Outline */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* This structure is used to describe an outline to the scan-line */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* converter. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
2000-03-09 12:46:25 +01:00
|
|
|
/* n_contours :: The number of contours in the outline. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-03-09 12:46:25 +01:00
|
|
|
/* n_points :: The number of points in the outline. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* points :: A pointer to an array of `n_points' @FT_Vector */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* elements, giving the outline's point coordinates. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* tags :: A pointer to an array of `n_points' chars, giving */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* each outline point's type. */
|
|
|
|
/* */
|
|
|
|
/* If bit~0 is unset, the point is `off' the curve, */
|
|
|
|
/* i.e., a Bézier control point, while it is `on' if */
|
|
|
|
/* set. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Bit~1 is meaningful for `off' points only. If set, */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* it indicates a third-order Bézier arc control point; */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* and a second-order control point if unset. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* If bit~2 is set, bits 5-7 contain the drop-out mode */
|
|
|
|
/* (as defined in the OpenType specification; the value */
|
|
|
|
/* is the same as the argument to the SCANMODE */
|
|
|
|
/* instruction). */
|
|
|
|
/* */
|
|
|
|
/* Bits 3 and~4 are reserved for internal purposes. */
|
|
|
|
/* */
|
2000-03-09 12:46:25 +01:00
|
|
|
/* contours :: An array of `n_contours' shorts, giving the end */
|
|
|
|
/* point of each contour within the outline. For */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* example, the first contour is defined by the points */
|
|
|
|
/* `0' to `contours[0]', the second one is defined by */
|
|
|
|
/* the points `contours[0]+1' to `contours[1]', etc. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* flags :: A set of bit flags used to characterize the outline */
|
|
|
|
/* and give hints to the scan-converter and hinter on */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* how to convert/grid-fit it. See @FT_OUTLINE_XXX. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* <Note> */
|
|
|
|
/* The B/W rasterizer only checks bit~2 in the `tags' array for the */
|
|
|
|
/* first point of each contour. The drop-out mode as given with */
|
|
|
|
/* @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and */
|
|
|
|
/* @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden. */
|
|
|
|
/* */
|
1999-12-17 00:11:37 +01:00
|
|
|
typedef struct FT_Outline_
|
|
|
|
{
|
|
|
|
short n_contours; /* number of contours in glyph */
|
|
|
|
short n_points; /* number of points in the glyph */
|
|
|
|
|
|
|
|
FT_Vector* points; /* the outline's points */
|
2000-03-09 12:46:25 +01:00
|
|
|
char* tags; /* the points flags */
|
1999-12-17 00:11:37 +01:00
|
|
|
short* contours; /* the contour end points */
|
|
|
|
|
2000-03-09 12:46:25 +01:00
|
|
|
int flags; /* outline masks */
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2000-03-06 14:23:32 +01:00
|
|
|
} FT_Outline;
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2014-12-02 23:06:04 +01:00
|
|
|
/* */
|
|
|
|
|
2009-07-08 07:26:51 +02:00
|
|
|
/* Following limits must be consistent with */
|
|
|
|
/* FT_Outline.{n_contours,n_points} */
|
|
|
|
#define FT_OUTLINE_CONTOURS_MAX SHRT_MAX
|
|
|
|
#define FT_OUTLINE_POINTS_MAX SHRT_MAX
|
|
|
|
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
|
2000-03-06 14:23:32 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Enum> */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* FT_OUTLINE_XXX */
|
2000-03-06 14:23:32 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2003-06-18 08:59:57 +02:00
|
|
|
/* A list of bit-field constants use for the flags in an outline's */
|
2003-07-09 17:20:32 +02:00
|
|
|
/* `flags' field. */
|
2000-03-06 14:23:32 +01:00
|
|
|
/* */
|
2002-09-18 00:57:29 +02:00
|
|
|
/* <Values> */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* FT_OUTLINE_NONE :: */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Value~0 is reserved. */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_OWNER :: */
|
|
|
|
/* If set, this flag indicates that the outline's field arrays */
|
|
|
|
/* (i.e., `points', `flags', and `contours') are `owned' by the */
|
|
|
|
/* outline object, and should thus be freed when it is destroyed. */
|
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_EVEN_ODD_FILL :: */
|
|
|
|
/* By default, outlines are filled using the non-zero winding rule. */
|
|
|
|
/* If set to 1, the outline will be filled using the even-odd fill */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* rule (only works with the smooth rasterizer). */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_REVERSE_FILL :: */
|
|
|
|
/* By default, outside contours of an outline are oriented in */
|
|
|
|
/* clock-wise direction, as defined in the TrueType specification. */
|
|
|
|
/* This flag is set if the outline uses the opposite direction */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* (typically for Type~1 fonts). This flag is ignored by the scan */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* converter. */
|
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_IGNORE_DROPOUTS :: */
|
|
|
|
/* By default, the scan converter will try to detect drop-outs in */
|
|
|
|
/* an outline and correct the glyph bitmap to ensure consistent */
|
|
|
|
/* shape continuity. If set, this flag hints the scan-line */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* converter to ignore such cases. See below for more information. */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_SMART_DROPOUTS :: */
|
|
|
|
/* Select smart dropout control. If unset, use simple dropout */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* control. Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See */
|
|
|
|
/* below for more information. */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_INCLUDE_STUBS :: */
|
|
|
|
/* If set, turn pixels on for `stubs', otherwise exclude them. */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for */
|
|
|
|
/* more information. */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_HIGH_PRECISION :: */
|
|
|
|
/* This flag indicates that the scan-line converter should try to */
|
|
|
|
/* convert this outline to bitmaps with the highest possible */
|
|
|
|
/* quality. It is typically set for small character sizes. Note */
|
|
|
|
/* that this is only a hint that might be completely ignored by a */
|
|
|
|
/* given scan-converter. */
|
|
|
|
/* */
|
|
|
|
/* FT_OUTLINE_SINGLE_PASS :: */
|
|
|
|
/* This flag is set to force a given scan-converter to only use a */
|
|
|
|
/* single pass over the outline to render a bitmap glyph image. */
|
|
|
|
/* Normally, it is set for very large character sizes. It is only */
|
|
|
|
/* a hint that might be completely ignored by a given */
|
|
|
|
/* scan-converter. */
|
|
|
|
/* */
|
|
|
|
/* <Note> */
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
/* The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, */
|
|
|
|
/* and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth */
|
|
|
|
/* rasterizer. */
|
|
|
|
/* */
|
|
|
|
/* There exists a second mechanism to pass the drop-out mode to the */
|
|
|
|
/* B/W rasterizer; see the `tags' field in @FT_Outline. */
|
|
|
|
/* */
|
2008-06-22 15:40:08 +02:00
|
|
|
/* Please refer to the description of the `SCANTYPE' instruction in */
|
|
|
|
/* the OpenType specification (in file `ttinst1.doc') how simple */
|
|
|
|
/* drop-outs, smart drop-outs, and stubs are defined. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2003-06-18 08:59:57 +02:00
|
|
|
#define FT_OUTLINE_NONE 0x0
|
|
|
|
#define FT_OUTLINE_OWNER 0x1
|
|
|
|
#define FT_OUTLINE_EVEN_ODD_FILL 0x2
|
|
|
|
#define FT_OUTLINE_REVERSE_FILL 0x4
|
|
|
|
#define FT_OUTLINE_IGNORE_DROPOUTS 0x8
|
2008-06-22 15:40:08 +02:00
|
|
|
#define FT_OUTLINE_SMART_DROPOUTS 0x10
|
|
|
|
#define FT_OUTLINE_INCLUDE_STUBS 0x20
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2003-06-18 08:59:57 +02:00
|
|
|
#define FT_OUTLINE_HIGH_PRECISION 0x100
|
|
|
|
#define FT_OUTLINE_SINGLE_PASS 0x200
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2002-09-05 17:10:54 +02:00
|
|
|
|
2014-12-02 23:06:04 +01:00
|
|
|
/* these constants are deprecated; use the corresponding */
|
|
|
|
/* `FT_OUTLINE_XXX' values instead */
|
2002-09-18 00:57:29 +02:00
|
|
|
#define ft_outline_none FT_OUTLINE_NONE
|
|
|
|
#define ft_outline_owner FT_OUTLINE_OWNER
|
|
|
|
#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL
|
|
|
|
#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL
|
2002-09-10 01:45:29 +02:00
|
|
|
#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS
|
2002-09-18 00:57:29 +02:00
|
|
|
#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION
|
|
|
|
#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
|
2001-01-10 07:53:49 +01:00
|
|
|
/* */
|
2001-06-28 19:49:10 +02:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
#define FT_CURVE_TAG( flag ) ( flag & 3 )
|
1999-12-17 00:11:37 +01:00
|
|
|
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
#define FT_CURVE_TAG_ON 1
|
|
|
|
#define FT_CURVE_TAG_CONIC 0
|
|
|
|
#define FT_CURVE_TAG_CUBIC 2
|
|
|
|
|
|
|
|
#define FT_CURVE_TAG_HAS_SCANMODE 4
|
1999-12-17 00:11:37 +01:00
|
|
|
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
#define FT_CURVE_TAG_TOUCH_X 8 /* reserved for the TrueType hinter */
|
|
|
|
#define FT_CURVE_TAG_TOUCH_Y 16 /* reserved for the TrueType hinter */
|
1999-12-17 00:11:37 +01:00
|
|
|
|
Fix B/W rasterization of subglyphs with different drop-out modes.
Normally, the SCANMODE instruction (if present) to set the drop-out
mode in a TrueType font is located in the `prep' table only and thus
valid for all glyphs. However, there are fonts like `pala.ttf'
which additionally contain this instruction in the hinting code of
some glyphs (but not all). As a result it can happen that a
composite glyph needs multiple drop-out modes for its subglyphs
since the rendering state gets reset for each subglyph.
FreeType collects the hinted outlines from all subglyphs, then it
sends the data to the rasterizer. It also sends the drop-out mode
-- after hinting has been applied -- and here is the error: It sends
the drop-out mode of the last subglyph only; drop-out modes of all
other subglyphs are lost.
This patch fixes the problem; it adds a second, alternative
mechanism to pass the drop-out mode: For each contour, the
rasterizer now checks the first `tags' array element. If bit 2 is
set, bits 5-7 contain the contour's drop-out mode, overriding the
global drop-out mode.
* include/freetype/ftimage.h (FT_CURVE_TAG_HAS_SCANMODE): New macro.
* src/truetype/ttgload.c (TT_Hint_Glyph): Store drop-out mode in
`tags[0]'.
* src/raster/ftraster.c (Flow_Up, Overshoot_Top, Overshoot_Bottom):
Use bits 3-5 instead of 0-2.
(New_Profile): Set the drop-out mode in the profile's `flags' field.
(Decompose_Curve): Check `tags[0]' and set `dropOutControl' if
necessary.
(Vertical_Sweep_Drop, Horizontal_Sweep_Drop,
Horizontal_Gray_Sweep_Drop, Draw_Sweep): Use the profile's drop-out
mode.
2009-06-18 15:42:52 +02:00
|
|
|
#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \
|
|
|
|
FT_CURVE_TAG_TOUCH_Y )
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2008-01-12 21:24:01 +01:00
|
|
|
#define FT_Curve_Tag_On FT_CURVE_TAG_ON
|
|
|
|
#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC
|
|
|
|
#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC
|
|
|
|
#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X
|
|
|
|
#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y
|
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Outline_MoveToFunc */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A function pointer type used to describe the signature of a `move */
|
|
|
|
/* to' function during outline walking/decomposition. */
|
|
|
|
/* */
|
|
|
|
/* A `move to' is emitted to start a new contour in an outline. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* to :: A pointer to the target point of the `move to'. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2013-09-03 11:33:10 +02:00
|
|
|
/* user :: A typeless pointer, which is passed from the caller of the */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* decomposition function. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Error code. 0~means success. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
halved.
* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
strength.
Don't increase slot->advance.y.
* include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
(FREETYPE_PATCH): Set to 0.
* builds/unix/configure.ac (version_info): Set to 9:9:3.
Currently, we are still binary compatible.
* builds/win32/visualc/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
* builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
s/2.1.9/2.1.10/.
* docs/CHANGES, docs/VERSION.DLL: Updated.
* ChangeLog: Split off older entries into...
* ChangeLog.20, ChangeLog.21: These new files.
The next release will be 2.2.0, so don't worry about source code
backwards compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
include/freetype/ftrender.h (FT_Glyph_TransformFunc,
FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
parameters with `const' where appropriate.
* src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
to make glyphs centered vertically.
* src/truetype/ttgload.c (compute_glyph_metrics): Compute
vertBearingY to make glyphs centered vertically.
Fix some bugs in vertical metrics:
. loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
units.
. As we use the glyph's cbox to calculate the top bearing now
there iss no need to adjust `top'.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
* docs/release: Update.
2005-06-16 21:07:08 +02:00
|
|
|
(*FT_Outline_MoveToFunc)( const FT_Vector* to,
|
|
|
|
void* user );
|
1999-12-17 00:11:37 +01:00
|
|
|
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Outline_LineToFunc */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A function pointer type used to describe the signature of a `line */
|
|
|
|
/* to' function during outline walking/decomposition. */
|
|
|
|
/* */
|
|
|
|
/* A `line to' is emitted to indicate a segment in the outline. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* to :: A pointer to the target point of the `line to'. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2013-09-03 11:33:10 +02:00
|
|
|
/* user :: A typeless pointer, which is passed from the caller of the */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* decomposition function. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Error code. 0~means success. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
halved.
* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
strength.
Don't increase slot->advance.y.
* include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
(FREETYPE_PATCH): Set to 0.
* builds/unix/configure.ac (version_info): Set to 9:9:3.
Currently, we are still binary compatible.
* builds/win32/visualc/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
* builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
s/2.1.9/2.1.10/.
* docs/CHANGES, docs/VERSION.DLL: Updated.
* ChangeLog: Split off older entries into...
* ChangeLog.20, ChangeLog.21: These new files.
The next release will be 2.2.0, so don't worry about source code
backwards compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
include/freetype/ftrender.h (FT_Glyph_TransformFunc,
FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
parameters with `const' where appropriate.
* src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
to make glyphs centered vertically.
* src/truetype/ttgload.c (compute_glyph_metrics): Compute
vertBearingY to make glyphs centered vertically.
Fix some bugs in vertical metrics:
. loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
units.
. As we use the glyph's cbox to calculate the top bearing now
there iss no need to adjust `top'.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
* docs/release: Update.
2005-06-16 21:07:08 +02:00
|
|
|
(*FT_Outline_LineToFunc)( const FT_Vector* to,
|
|
|
|
void* user );
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2008-01-12 21:24:01 +01:00
|
|
|
#define FT_Outline_LineTo_Func FT_Outline_LineToFunc
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Outline_ConicToFunc */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2009-12-16 20:47:21 +01:00
|
|
|
/* A function pointer type used to describe the signature of a `conic */
|
|
|
|
/* to' function during outline walking or decomposition. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* A `conic to' is emitted to indicate a second-order Bézier arc in */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* the outline. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* control :: An intermediate control point between the last position */
|
|
|
|
/* and the new target in `to'. */
|
|
|
|
/* */
|
|
|
|
/* to :: A pointer to the target end point of the conic arc. */
|
|
|
|
/* */
|
2013-09-03 11:33:10 +02:00
|
|
|
/* user :: A typeless pointer, which is passed from the caller of */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* the decomposition function. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Error code. 0~means success. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
halved.
* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
strength.
Don't increase slot->advance.y.
* include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
(FREETYPE_PATCH): Set to 0.
* builds/unix/configure.ac (version_info): Set to 9:9:3.
Currently, we are still binary compatible.
* builds/win32/visualc/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
* builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
s/2.1.9/2.1.10/.
* docs/CHANGES, docs/VERSION.DLL: Updated.
* ChangeLog: Split off older entries into...
* ChangeLog.20, ChangeLog.21: These new files.
The next release will be 2.2.0, so don't worry about source code
backwards compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
include/freetype/ftrender.h (FT_Glyph_TransformFunc,
FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
parameters with `const' where appropriate.
* src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
to make glyphs centered vertically.
* src/truetype/ttgload.c (compute_glyph_metrics): Compute
vertBearingY to make glyphs centered vertically.
Fix some bugs in vertical metrics:
. loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
units.
. As we use the glyph's cbox to calculate the top bearing now
there iss no need to adjust `top'.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
* docs/release: Update.
2005-06-16 21:07:08 +02:00
|
|
|
(*FT_Outline_ConicToFunc)( const FT_Vector* control,
|
|
|
|
const FT_Vector* to,
|
|
|
|
void* user );
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2008-01-12 21:24:01 +01:00
|
|
|
#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Outline_CubicToFunc */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A function pointer type used to describe the signature of a `cubic */
|
2009-12-16 20:47:21 +01:00
|
|
|
/* to' function during outline walking or decomposition. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* A `cubic to' is emitted to indicate a third-order Bézier arc. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Input> */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* control1 :: A pointer to the first Bézier control point. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* control2 :: A pointer to the second Bézier control point. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* to :: A pointer to the target end point. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2013-09-03 11:33:10 +02:00
|
|
|
/* user :: A typeless pointer, which is passed from the caller of */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* the decomposition function. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Error code. 0~means success. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
halved.
* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
strength.
Don't increase slot->advance.y.
* include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
(FREETYPE_PATCH): Set to 0.
* builds/unix/configure.ac (version_info): Set to 9:9:3.
Currently, we are still binary compatible.
* builds/win32/visualc/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
* builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
s/2.1.9/2.1.10/.
* docs/CHANGES, docs/VERSION.DLL: Updated.
* ChangeLog: Split off older entries into...
* ChangeLog.20, ChangeLog.21: These new files.
The next release will be 2.2.0, so don't worry about source code
backwards compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
include/freetype/ftrender.h (FT_Glyph_TransformFunc,
FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
parameters with `const' where appropriate.
* src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
to make glyphs centered vertically.
* src/truetype/ttgload.c (compute_glyph_metrics): Compute
vertBearingY to make glyphs centered vertically.
Fix some bugs in vertical metrics:
. loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
units.
. As we use the glyph's cbox to calculate the top bearing now
there iss no need to adjust `top'.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
* docs/release: Update.
2005-06-16 21:07:08 +02:00
|
|
|
(*FT_Outline_CubicToFunc)( const FT_Vector* control1,
|
|
|
|
const FT_Vector* control2,
|
|
|
|
const FT_Vector* to,
|
|
|
|
void* user );
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
|
2008-01-12 21:24:01 +01:00
|
|
|
#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc
|
1999-12-17 00:11:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Outline_Funcs */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A structure to hold various function pointers used during outline */
|
2010-01-03 14:09:03 +01:00
|
|
|
/* decomposition in order to emit segments, conic, and cubic Béziers. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
|
|
|
/* move_to :: The `move to' emitter. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* line_to :: The segment emitter. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* conic_to :: The second-order Bézier arc emitter. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* cubic_to :: The third-order Bézier arc emitter. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* shift :: The shift that is applied to coordinates before they */
|
|
|
|
/* are sent to the emitter. */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* delta :: The delta that is applied to coordinates before they */
|
|
|
|
/* are sent to the emitter, but after the shift. */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* */
|
|
|
|
/* <Note> */
|
|
|
|
/* The point coordinates sent to the emitters are the transformed */
|
|
|
|
/* version of the original coordinates (this is important for high */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* accuracy during scan-conversion). The transformation is simple: */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* { */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* x' = (x << shift) - delta */
|
|
|
|
/* y' = (x << shift) - delta */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* } */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* */
|
2010-01-03 14:09:03 +01:00
|
|
|
/* Set the values of `shift' and `delta' to~0 to get the original */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* point coordinates. */
|
- MAJOR INTERNAL REDESIGN:
A lot of internal modifications have been performed lately on the
source in order to provide the following enhancements:
- more generic module support:
The FT_Module type is now defined to represent a handle to a given
module. The file <freetype/ftmodule.h> contains the FT_Module_Class
definition, as well as the module-loading public API
The FT_Driver type is still defined, and still represents a pointer
to a font driver. Note that FT_Add_Driver is replaced by FT_Add_Module,
FT_Get_Driver by FT_Get_Module, etc..
- support for generic glyph image types:
The FT_Renderer type is a pointer to a module used to perform various
operations on glyph image.
Each renderer is capable of handling images in a single format
(e.g. ft_glyph_format_outline). Its functions are used to:
- transform an glyph image
- render a glyph image into a bitmap
- return the control box (dimensions) of a given glyph image
The scan converters "ftraster.c" and "ftgrays.c" have been moved
to the new directory "src/renderer", and are used to provide two
default renderer modules.
One corresponds to the "standard" scan-converter, the other to the
"smooth" one.
The current renderer can be set through the new function
FT_Set_Renderer.
The old raster-related function FT_Set_Raster, FT_Get_Raster and
FT_Set_Raster_Mode have now disappeared, in favor of the new:
FT_Get_Renderer
FT_Set_Renderer
see the file <freetype/ftrender.h> for more details..
These changes were necessary to properly support different scalable
formats in the future, like bi-color glyphs, etc..
- glyph loader object:
A new internal object, called a 'glyph loader' has been introduced
in the base layer. It is used by all scalable format font drivers
to load glyphs and composites.
This object has been created to reduce the code size of each driver,
as each one of them basically re-implemented its functionality.
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
more information..
- FT_GlyphSlot had new fields:
In order to support extended features (see below), the FT_GlyphSlot
structure has a few new fields:
linearHoriAdvance: this field gives the linearly scaled (i.e.
scaled but unhinted) advance width for the glyph,
expressed as a 16.16 fixed pixel value. This
is useful to perform WYSIWYG text.
linearVertAdvance: this field gives the linearly scaled advance
height for the glyph (relevant in vertical glyph
layouts only). This is useful to perform
WYSIWYG text.
Note that the two above field replace the removed "metrics2" field
in the glyph slot.
advance: this field is a vector that gives the transformed
advance for the glyph. By default, it corresponds
to the advance width, unless FT_LOAD_VERTICAL_LAYOUT
was specified when calling FT_Load_Glyph or FT_Load_Char
bitmap_left: this field gives the distance in integer pixels from
the current pen position to the left-most pixel of
a glyph image WHEN IT IS A BITMAP. It is only valid
when the "format" field is set to
"ft_glyph_format_bitmap", for example, after calling
the new function FT_Render_Glyph.
bitmap_top: this field gives the distance in integer pixels from
the current pen position (located on the baseline) to
the top-most pixel of the glyph image WHEN IT IS A
BITMAP. Positive values correspond to upwards Y.
loader: this is a new private field for the glyph slot. Client
applications should not touch it..
- support for transforms and direct rendering in FT_Load_Glyph:
Most of the functionality found in <freetype/ftglyph.h> has been
moved to the core library. Hence, the following:
- a transform can be specified for a face through FT_Set_Transform.
this transform is applied by FT_Load_Glyph to scalable glyph images
(i.e. NOT TO BITMAPS) before the function returns, unless the
bit flag FT_LOAD_IGNORE_TRANSFORM was set in the load flags..
- once a glyph image has been loaded, it can be directly converted to
a bitmap by using the new FT_Render_Glyph function. Note that this
function takes the glyph image from the glyph slot, and converts
it to a bitmap whose properties are returned in "face.glyph.bitmap",
"face.glyph.bitmap_left" and "face.glyph.bitmap_top". The original
native image might be lost after the conversion.
- when using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
and FT_Load_Char functions will call FT_Render_Glyph automatically
when needed.
2000-06-22 02:17:42 +02:00
|
|
|
/* */
|
1999-12-17 00:11:37 +01:00
|
|
|
typedef struct FT_Outline_Funcs_
|
|
|
|
{
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
FT_Outline_MoveToFunc move_to;
|
|
|
|
FT_Outline_LineToFunc line_to;
|
|
|
|
FT_Outline_ConicToFunc conic_to;
|
|
|
|
FT_Outline_CubicToFunc cubic_to;
|
1999-12-17 00:11:37 +01:00
|
|
|
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
int shift;
|
|
|
|
FT_Pos delta;
|
2000-05-04 19:24:54 +02:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
} FT_Outline_Funcs;
|
|
|
|
|
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Section> */
|
|
|
|
/* basic_types */
|
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2001-01-10 07:53:49 +01:00
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Macro> */
|
|
|
|
/* FT_IMAGE_TAG */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* This macro converts four-letter tags to an unsigned long type. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2002-08-18 09:15:52 +02:00
|
|
|
/* <Note> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Since many 16-bit compilers don't like 32-bit enumerations, you */
|
2002-08-18 09:15:52 +02:00
|
|
|
/* should redefine this macro in case of problems to something like */
|
|
|
|
/* this: */
|
|
|
|
/* */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* { */
|
2004-04-13 23:08:17 +02:00
|
|
|
/* #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* } */
|
2002-08-18 09:15:52 +02:00
|
|
|
/* */
|
|
|
|
/* to get a simple enumeration without assigning special numbers. */
|
|
|
|
/* */
|
2001-06-16 13:20:41 +02:00
|
|
|
#ifndef FT_IMAGE_TAG
|
2001-06-20 10:06:50 +02:00
|
|
|
#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \
|
|
|
|
value = ( ( (unsigned long)_x1 << 24 ) | \
|
|
|
|
( (unsigned long)_x2 << 16 ) | \
|
|
|
|
( (unsigned long)_x3 << 8 ) | \
|
|
|
|
(unsigned long)_x4 )
|
2001-06-16 13:20:41 +02:00
|
|
|
#endif /* FT_IMAGE_TAG */
|
2000-07-10 16:24:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Enum> */
|
|
|
|
/* FT_Glyph_Format */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* An enumeration type used to describe the format of a given glyph */
|
|
|
|
/* image. Note that this version of FreeType only supports two image */
|
|
|
|
/* formats, even though future font drivers will be able to register */
|
|
|
|
/* their own format. */
|
|
|
|
/* */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* <Values> */
|
|
|
|
/* FT_GLYPH_FORMAT_NONE :: */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* The value~0 is reserved. */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
|
|
|
/* FT_GLYPH_FORMAT_COMPOSITE :: */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* The glyph image is a composite of several other images. This */
|
2003-07-25 07:57:21 +02:00
|
|
|
/* format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to */
|
|
|
|
/* report compound glyphs (like accented characters). */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* FT_GLYPH_FORMAT_BITMAP :: */
|
|
|
|
/* The glyph image is a bitmap, and can be described as an */
|
|
|
|
/* @FT_Bitmap. You generally need to access the `bitmap' field of */
|
|
|
|
/* the @FT_GlyphSlotRec structure to read it. */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* FT_GLYPH_FORMAT_OUTLINE :: */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* The glyph image is a vectorial outline made of line segments */
|
2006-05-12 16:20:43 +02:00
|
|
|
/* and Bézier arcs; it can be described as an @FT_Outline; you */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* generally want to access the `outline' field of the */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* @FT_GlyphSlotRec structure to read it. */
|
|
|
|
/* */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* FT_GLYPH_FORMAT_PLOTTER :: */
|
2006-05-12 06:00:44 +02:00
|
|
|
/* The glyph image is a vectorial path with no inside and outside */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* contours. Some Type~1 fonts, like those in the Hershey family, */
|
2002-09-05 17:10:54 +02:00
|
|
|
/* contain glyphs in this format. These are described as */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* @FT_Outline, but FreeType isn't currently capable of rendering */
|
|
|
|
/* them correctly. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
typedef enum FT_Glyph_Format_
|
1999-12-17 00:11:37 +01:00
|
|
|
{
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ),
|
2001-06-20 10:06:50 +02:00
|
|
|
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ),
|
|
|
|
FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ),
|
|
|
|
FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ),
|
|
|
|
FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' )
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
} FT_Glyph_Format;
|
|
|
|
|
2002-09-05 17:10:54 +02:00
|
|
|
|
2014-12-02 23:06:04 +01:00
|
|
|
/* these constants are deprecated; use the corresponding */
|
|
|
|
/* `FT_Glyph_Format' values instead. */
|
2002-09-05 17:10:54 +02:00
|
|
|
#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE
|
|
|
|
#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE
|
|
|
|
#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP
|
|
|
|
#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE
|
|
|
|
#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER
|
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/***** *****/
|
|
|
|
/***** R A S T E R D E F I N I T I O N S *****/
|
|
|
|
/***** *****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* A raster is a scan converter, in charge of rendering an outline into */
|
|
|
|
/* a a bitmap. This section contains the public API for rasters. */
|
|
|
|
/* */
|
|
|
|
/* Note that in FreeType 2, all rasters are now encapsulated within */
|
2013-11-13 08:55:46 +01:00
|
|
|
/* specific modules called `renderers'. See `ftrender.h' for more */
|
|
|
|
/* details on renderers. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Section> */
|
2002-09-18 00:57:29 +02:00
|
|
|
/* raster */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
|
|
|
/* <Title> */
|
Adding OpenType validation module. The code is based on the
(unfinished) `otlayout' module but has been heavily modified to make
it much more compact.
* src/otvalid/*: New module.
* include/freetype/ftotval.h, src/base/ftotval.c,
include/freetype/internal/services/svotval.h: New files.
* include/freetype/config/ftmodule.h: Add otv_module_class.
* include/freetype/config/ftheader.h (FT_OPENTYPE_VALIDATE_H): New
macro.
* include/freetype/internal/ftserv.h
(FT_SERVICE_OPENTYPE_VALIDATE_H): New macro.
* include/freetype/internal/fttrace.h (otvmodule, otvcommon,
otvbase, otvgdef, otvgpos, otvgsub, otvjstf): New trace components.
* include/freetype/ftchapters.h: Updated.
* src/base/Jamfile (Library), src/base/descrip.mms (OBJS),
src/base/rules.mk (BASE_EXT_SRC): Updated.
* docs/CHANGES: Updated.
2004-09-10 16:39:00 +02:00
|
|
|
/* Scanline Converter */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
|
|
|
/* <Abstract> */
|
|
|
|
/* How vectorial outlines are converted into bitmaps and pixmaps. */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* This section contains technical definitions. */
|
|
|
|
/* */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* <Order> */
|
|
|
|
/* FT_Raster */
|
|
|
|
/* FT_Span */
|
|
|
|
/* FT_SpanFunc */
|
|
|
|
/* */
|
|
|
|
/* FT_Raster_Params */
|
|
|
|
/* FT_RASTER_FLAG_XXX */
|
|
|
|
/* */
|
|
|
|
/* FT_Raster_NewFunc */
|
|
|
|
/* FT_Raster_DoneFunc */
|
|
|
|
/* FT_Raster_ResetFunc */
|
|
|
|
/* FT_Raster_SetModeFunc */
|
|
|
|
/* FT_Raster_RenderFunc */
|
|
|
|
/* FT_Raster_Funcs */
|
|
|
|
/* */
|
2001-01-11 10:27:49 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
|
1999-12-17 00:11:37 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Type> */
|
|
|
|
/* FT_Raster */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* An opaque handle (pointer) to a raster object. Each object can be */
|
|
|
|
/* used independently to convert an outline into a bitmap or pixmap. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
typedef struct FT_RasterRec_* FT_Raster;
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Span */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* A structure used to model a single span of gray pixels when */
|
|
|
|
/* rendering an anti-aliased bitmap. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* <Fields> */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* x :: The span's horizontal start position. */
|
|
|
|
/* */
|
|
|
|
/* len :: The span's length in pixels. */
|
|
|
|
/* */
|
|
|
|
/* coverage :: The span color/coverage, ranging from 0 (background) */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* to 255 (foreground). */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* <Note> */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* This structure is used by the span drawing callback type named */
|
2013-09-03 11:33:10 +02:00
|
|
|
/* @FT_SpanFunc that takes the y~coordinate of the span as a */
|
|
|
|
/* parameter. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2008-06-21 08:27:53 +02:00
|
|
|
/* The coverage value is always between 0 and 255. If you want less */
|
|
|
|
/* gray values, the callback function has to reduce them. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
typedef struct FT_Span_
|
2000-03-28 13:22:31 +02:00
|
|
|
{
|
2001-01-11 10:27:49 +01:00
|
|
|
short x;
|
|
|
|
unsigned short len;
|
|
|
|
unsigned char coverage;
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
} FT_Span;
|
1999-12-17 00:11:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_SpanFunc */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* A function used as a call-back by the anti-aliased renderer in */
|
|
|
|
/* order to let client applications draw themselves the gray pixel */
|
|
|
|
/* spans on each scan line. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
|
|
|
/* <Input> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* y :: The scanline's y~coordinate. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* count :: The number of spans to draw on this scanline. */
|
|
|
|
/* */
|
|
|
|
/* spans :: A table of `count' spans to draw on the scanline. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* user :: User-supplied data that is passed to the callback. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* <Note> */
|
|
|
|
/* This callback allows client applications to directly render the */
|
|
|
|
/* gray spans of the anti-aliased bitmap to any kind of surfaces. */
|
|
|
|
/* */
|
|
|
|
/* This can be used to write anti-aliased outlines directly to a */
|
|
|
|
/* given background bitmap, and even perform translucency. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* Note that the `count' field cannot be greater than a fixed value */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* defined by the `FT_MAX_GRAY_SPANS' configuration macro in */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* `ftoption.h'. By default, this value is set to~32, which means */
|
|
|
|
/* that if there are more than 32~spans on a given scanline, the */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* callback is called several times with the same `y' parameter in */
|
|
|
|
/* order to draw all callbacks. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* Otherwise, the callback is only called once per scan-line, and */
|
|
|
|
/* only for those scanlines that do have `gray' pixels on them. */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef void
|
* src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
halved.
* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
strength.
Don't increase slot->advance.y.
* include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
(FREETYPE_PATCH): Set to 0.
* builds/unix/configure.ac (version_info): Set to 9:9:3.
Currently, we are still binary compatible.
* builds/win32/visualc/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
* builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
s/2.1.9/2.1.10/.
* docs/CHANGES, docs/VERSION.DLL: Updated.
* ChangeLog: Split off older entries into...
* ChangeLog.20, ChangeLog.21: These new files.
The next release will be 2.2.0, so don't worry about source code
backwards compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
include/freetype/ftrender.h (FT_Glyph_TransformFunc,
FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
parameters with `const' where appropriate.
* src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
to make glyphs centered vertically.
* src/truetype/ttgload.c (compute_glyph_metrics): Compute
vertBearingY to make glyphs centered vertically.
Fix some bugs in vertical metrics:
. loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
units.
. As we use the glyph's cbox to calculate the top bearing now
there iss no need to adjust `top'.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
* docs/release: Update.
2005-06-16 21:07:08 +02:00
|
|
|
(*FT_SpanFunc)( int y,
|
|
|
|
int count,
|
|
|
|
const FT_Span* spans,
|
|
|
|
void* user );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
#define FT_Raster_Span_Func FT_SpanFunc
|
2002-09-05 17:10:54 +02:00
|
|
|
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
/*************************************************************************/
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* <FuncType> */
|
|
|
|
/* FT_Raster_BitTest_Func */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2000-03-28 13:22:31 +02:00
|
|
|
/* <Description> */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* Deprecated, unimplemented. */
|
1999-12-17 00:11:37 +01:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
|
|
|
(*FT_Raster_BitTest_Func)( int y,
|
|
|
|
int x,
|
|
|
|
void* user );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
|
|
|
/* FT_Raster_BitSet_Func */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* Deprecated, unimplemented. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef void
|
|
|
|
(*FT_Raster_BitSet_Func)( int y,
|
|
|
|
int x,
|
|
|
|
void* user );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2002-09-05 17:10:54 +02:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Enum> */
|
2003-06-18 08:59:57 +02:00
|
|
|
/* FT_RASTER_FLAG_XXX */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2003-06-18 08:59:57 +02:00
|
|
|
/* A list of bit flag constants as used in the `flags' field of a */
|
|
|
|
/* @FT_Raster_Params structure. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2002-09-18 00:57:29 +02:00
|
|
|
/* <Values> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_RASTER_FLAG_DEFAULT :: This value is 0. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_RASTER_FLAG_AA :: This flag is set to indicate that an */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* anti-aliased glyph image should be */
|
|
|
|
/* generated. Otherwise, it will be */
|
2003-06-18 08:59:57 +02:00
|
|
|
/* monochrome (1-bit). */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_RASTER_FLAG_DIRECT :: This flag is set to indicate direct */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* rendering. In this mode, client */
|
|
|
|
/* applications must provide their own span */
|
|
|
|
/* callback. This lets them directly */
|
|
|
|
/* draw or compose over an existing bitmap. */
|
|
|
|
/* If this bit is not set, the target */
|
|
|
|
/* pixmap's buffer _must_ be zeroed before */
|
|
|
|
/* rendering. */
|
|
|
|
/* */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* Direct rendering is only possible with */
|
|
|
|
/* anti-aliased glyphs. */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_RASTER_FLAG_CLIP :: This flag is only used in direct */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* rendering mode. If set, the output will */
|
|
|
|
/* be clipped to a box specified in the */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* `clip_box' field of the */
|
|
|
|
/* @FT_Raster_Params structure. */
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
|
|
|
/* Note that by default, the glyph bitmap */
|
|
|
|
/* is clipped to the target pixmap, except */
|
|
|
|
/* in direct rendering mode where all spans */
|
|
|
|
/* are generated if no clipping box is set. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2003-06-18 08:59:57 +02:00
|
|
|
#define FT_RASTER_FLAG_DEFAULT 0x0
|
|
|
|
#define FT_RASTER_FLAG_AA 0x1
|
|
|
|
#define FT_RASTER_FLAG_DIRECT 0x2
|
|
|
|
#define FT_RASTER_FLAG_CLIP 0x4
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2014-12-02 23:06:04 +01:00
|
|
|
/* these constants are deprecated; use the corresponding */
|
|
|
|
/* `FT_RASTER_FLAG_XXX' values instead */
|
2002-09-05 17:10:54 +02:00
|
|
|
#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT
|
|
|
|
#define ft_raster_flag_aa FT_RASTER_FLAG_AA
|
|
|
|
#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT
|
|
|
|
#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Raster_Params */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A structure to hold the arguments used by a raster's render */
|
|
|
|
/* function. */
|
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
|
|
|
/* target :: The target bitmap. */
|
|
|
|
/* */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* source :: A pointer to the source glyph image (e.g., an */
|
|
|
|
/* @FT_Outline). */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* flags :: The rendering flags. */
|
|
|
|
/* */
|
|
|
|
/* gray_spans :: The gray span drawing callback. */
|
|
|
|
/* */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* black_spans :: Unused. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* bit_test :: Unused. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* bit_set :: Unused. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* user :: User-supplied data that is passed to each drawing */
|
|
|
|
/* callback. */
|
|
|
|
/* */
|
2002-01-09 22:01:18 +01:00
|
|
|
/* clip_box :: An optional clipping box. It is only used in */
|
|
|
|
/* direct rendering mode. Note that coordinates here */
|
|
|
|
/* should be expressed in _integer_ pixels (and not in */
|
|
|
|
/* 26.6 fixed-point units). */
|
2000-12-14 19:50:40 +01:00
|
|
|
/* */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* <Note> */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA */
|
|
|
|
/* bit flag is set in the `flags' field, otherwise a monochrome */
|
|
|
|
/* bitmap is generated. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* raster will call the `gray_spans' callback to draw gray pixel */
|
2014-12-02 23:06:04 +01:00
|
|
|
/* spans. This allows direct composition over a pre-existing bitmap */
|
|
|
|
/* through user-provided callbacks to perform the span drawing and */
|
|
|
|
/* composition. Not supported by the monochrome rasterizer. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
typedef struct FT_Raster_Params_
|
1999-12-17 00:11:37 +01:00
|
|
|
{
|
2005-04-14 18:03:15 +02:00
|
|
|
const FT_Bitmap* target;
|
2005-05-20 08:22:20 +02:00
|
|
|
const void* source;
|
2000-03-28 13:22:31 +02:00
|
|
|
int flags;
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
FT_SpanFunc gray_spans;
|
2014-12-02 23:06:04 +01:00
|
|
|
FT_SpanFunc black_spans; /* unused */
|
|
|
|
FT_Raster_BitTest_Func bit_test; /* unused */
|
|
|
|
FT_Raster_BitSet_Func bit_set; /* unused */
|
2000-03-28 13:22:31 +02:00
|
|
|
void* user;
|
2000-12-14 19:50:40 +01:00
|
|
|
FT_BBox clip_box;
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
} FT_Raster_Params;
|
|
|
|
|
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Raster_NewFunc */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A function used to create a new raster object. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* memory :: A handle to the memory allocator. */
|
|
|
|
/* */
|
|
|
|
/* <Output> */
|
|
|
|
/* raster :: A handle to the new raster object. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Error code. 0~means success. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Note> */
|
|
|
|
/* The `memory' parameter is a typeless pointer in order to avoid */
|
|
|
|
/* un-wanted dependencies on the rest of the FreeType code. In */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* practice, it is an @FT_Memory object, i.e., a handle to the */
|
|
|
|
/* standard FreeType memory allocator. However, this field can be */
|
|
|
|
/* completely ignored by a given raster implementation. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
(*FT_Raster_NewFunc)( void* memory,
|
|
|
|
FT_Raster* raster );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
#define FT_Raster_New_Func FT_Raster_NewFunc
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2007-12-31 00:49:14 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Raster_DoneFunc */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A function used to destroy a given raster object. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* raster :: A handle to the raster object. */
|
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef void
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
(*FT_Raster_DoneFunc)( FT_Raster raster );
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
#define FT_Raster_Done_Func FT_Raster_DoneFunc
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2007-12-31 00:49:14 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Raster_ResetFunc */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2015-01-14 18:30:59 +01:00
|
|
|
/* FreeType used to provide an area of memory called the `render */
|
|
|
|
/* pool' available to all registered rasters. This was not thread */
|
|
|
|
/* safe however and now FreeType never allocates this pool. NULL */
|
|
|
|
/* is always passed in as pool_base. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* This function is called each time the render pool changes, or just */
|
|
|
|
/* after a new raster object is created. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* raster :: A handle to the new raster object. */
|
|
|
|
/* */
|
|
|
|
/* pool_base :: The address in memory of the render pool. */
|
|
|
|
/* */
|
|
|
|
/* pool_size :: The size in bytes of the render pool. */
|
|
|
|
/* */
|
|
|
|
/* <Note> */
|
2015-01-14 18:30:59 +01:00
|
|
|
/* Rasters should ignore the render pool and rely on dynamic or stack */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* allocation if they want to (a handle to the memory allocator is */
|
2015-01-14 18:30:59 +01:00
|
|
|
/* passed to the raster constructor). */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef void
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
(*FT_Raster_ResetFunc)( FT_Raster raster,
|
|
|
|
unsigned char* pool_base,
|
|
|
|
unsigned long pool_size );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
#define FT_Raster_Reset_Func FT_Raster_ResetFunc
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2007-12-31 00:49:14 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Raster_SetModeFunc */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* This function is a generic facility to change modes or attributes */
|
|
|
|
/* in a given raster. This can be used for debugging purposes, or */
|
|
|
|
/* simply to allow implementation-specific `features' in a given */
|
|
|
|
/* raster module. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* raster :: A handle to the new raster object. */
|
|
|
|
/* */
|
|
|
|
/* mode :: A 4-byte tag used to name the mode or property. */
|
|
|
|
/* */
|
|
|
|
/* args :: A pointer to the new mode/property to use. */
|
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
(*FT_Raster_SetModeFunc)( FT_Raster raster,
|
|
|
|
unsigned long mode,
|
|
|
|
void* args );
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2008-01-12 21:24:01 +01:00
|
|
|
#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc
|
2000-07-10 16:24:26 +02:00
|
|
|
|
2007-12-31 00:49:14 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <FuncType> */
|
* massive re-formatting changes to many, many source files. I don't
want to list them all here. The operations performed were all logical
transformations of the sources:
- trying to convert all enums and constants to CAPITALIZED_STYLE, with
#define definitions like
#define my_old_constants MY_NEW_CONSTANT
- big, big update of the documentation comments
* include/freetype/freetype.h, src/base/ftobjs.c, src/smooth/ftsmooth.c,
include/freetype/ftimage.h: adding support for LCD-optimized rendering
though the new constants/enums:
FT_RENDER_MODE_LCD, FT_RENDER_MODE_LCD_V
FT_PIXEL_MODE_LCD, FT_PIXEL_MODE_LCD_V
this is still work in progress, don't expect everything to work correctly
though most of the features have been implemented.
* adding new FT_LOAD_XXX flags, used to specify both hinting and rendering
targets:
FT_LOAD_TARGET_NORMAL :: anti-aliased hinting & rendering
FT_LOAD_TARGET_MONO :: monochrome bitmaps
FT_LOAD_TARGET_LCD :: horizontal RGB/BGR decimated hinting & rendering
FT_LOAD_TARGET_LCD_V :: vertical RGB/BGR decimated hinting & rendering
note that FT_LOAD_TARGET_NORMAL is 0, which means that the default
behaviour of the font engine is _unchanged_.
2002-08-27 22:20:29 +02:00
|
|
|
/* FT_Raster_RenderFunc */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Invoke a given raster to scan-convert a given glyph image into a */
|
|
|
|
/* target bitmap. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* raster :: A handle to the raster object. */
|
|
|
|
/* */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* params :: A pointer to an @FT_Raster_Params structure used to */
|
|
|
|
/* store the rendering parameters. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Return> */
|
2008-06-26 21:56:51 +02:00
|
|
|
/* Error code. 0~means success. */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* */
|
|
|
|
/* <Note> */
|
|
|
|
/* The exact format of the source image depends on the raster's glyph */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* format defined in its @FT_Raster_Funcs structure. It can be an */
|
|
|
|
/* @FT_Outline or anything else in order to support a large array of */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* glyph formats. */
|
|
|
|
/* */
|
|
|
|
/* Note also that the render function can fail and return a */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* `FT_Err_Unimplemented_Feature' error code if the raster used does */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* not support direct composition. */
|
|
|
|
/* */
|
|
|
|
/* XXX: For now, the standard raster doesn't support direct */
|
|
|
|
/* composition but this should change for the final release (see */
|
2006-05-12 10:00:13 +02:00
|
|
|
/* the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c' */
|
2013-09-03 11:33:10 +02:00
|
|
|
/* for examples of distinct implementations that support direct */
|
2000-07-10 16:24:26 +02:00
|
|
|
/* composition). */
|
|
|
|
/* */
|
2001-06-28 09:17:51 +02:00
|
|
|
typedef int
|
* src/base/ftoutln.c (FT_Outline_Embolden): Strength should be
halved.
* src/base/ftsynth.c (FT_GlyphSlot_Embolden): Change the default
strength.
Don't increase slot->advance.y.
* include/freetype/freetype.h (FREETYPE_MINOR): Set to 2.
(FREETYPE_PATCH): Set to 0.
* builds/unix/configure.ac (version_info): Set to 9:9:3.
Currently, we are still binary compatible.
* builds/win32/visualc/index.html,
builds/win32/visualc/freetype.dsp,
builds/win32/visualc/freetype.vcproj: s/219/2110/, s/2.1.9/2.1.10/.
* builds/freetype.mk (refdoc), README, Jamfile (RefDoc):
s/2.1.9/2.1.10/.
* docs/CHANGES, docs/VERSION.DLL: Updated.
* ChangeLog: Split off older entries into...
* ChangeLog.20, ChangeLog.21: These new files.
The next release will be 2.2.0, so don't worry about source code
backwards compatibility.
* include/freetype/ftimage.h (FT_Outline_MoveToFunc,
FT_Outline_LineToFunc, FT_Outline_ConicToFunc,
FT_Outline_CubicToFunc, FT_SpanFunc, FT_Raster_RenderFunc),
include/freetype/ftrender.h (FT_Glyph_TransformFunc,
FT_Renderer_RenderFunc, FT_Renderer_TransformFunc): Decorate
parameters with `const' where appropriate.
* src/sfnt/ttsbit.c (tt_face_load_sbit_image): Compute vertBearingY
to make glyphs centered vertically.
* src/truetype/ttgload.c (compute_glyph_metrics): Compute
vertBearingY to make glyphs centered vertically.
Fix some bugs in vertical metrics:
. loader->pp3.y and loader->pp4.y are in 26.6 format, not in font
units.
. As we use the glyph's cbox to calculate the top bearing now
there iss no need to adjust `top'.
* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE): Use FT_UShort to be
in sync with OTV_OPTIONAL_OFFSET. Reported by YAMATO Masatake.
* docs/release: Update.
2005-06-16 21:07:08 +02:00
|
|
|
(*FT_Raster_RenderFunc)( FT_Raster raster,
|
|
|
|
const FT_Raster_Params* params );
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2008-05-31 09:03:30 +02:00
|
|
|
#define FT_Raster_Render_Func FT_Raster_RenderFunc
|
2000-03-28 13:22:31 +02:00
|
|
|
|
2007-12-31 00:49:14 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Struct> */
|
|
|
|
/* FT_Raster_Funcs */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* A structure used to describe a given raster class to the library. */
|
|
|
|
/* */
|
|
|
|
/* <Fields> */
|
|
|
|
/* glyph_format :: The supported glyph format for this raster. */
|
|
|
|
/* */
|
|
|
|
/* raster_new :: The raster constructor. */
|
|
|
|
/* */
|
|
|
|
/* raster_reset :: Used to reset the render pool within the raster. */
|
|
|
|
/* */
|
|
|
|
/* raster_render :: A function to render a glyph into a given bitmap. */
|
|
|
|
/* */
|
|
|
|
/* raster_done :: The raster destructor. */
|
|
|
|
/* */
|
|
|
|
typedef struct FT_Raster_Funcs_
|
2000-03-28 13:22:31 +02:00
|
|
|
{
|
2007-12-31 00:49:14 +01:00
|
|
|
FT_Glyph_Format glyph_format;
|
|
|
|
FT_Raster_NewFunc raster_new;
|
|
|
|
FT_Raster_ResetFunc raster_reset;
|
|
|
|
FT_Raster_SetModeFunc raster_set_mode;
|
|
|
|
FT_Raster_RenderFunc raster_render;
|
|
|
|
FT_Raster_DoneFunc raster_done;
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2000-03-28 13:22:31 +02:00
|
|
|
} FT_Raster_Funcs;
|
2000-04-04 18:46:12 +02:00
|
|
|
|
2001-01-11 10:27:49 +01:00
|
|
|
/* */
|
|
|
|
|
|
|
|
|
* INSTALL: Revised.
* builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
builds/win32/w32-bccd.mk: Revised.
* include/freetype/config/ftbuild.h,
include/freetype/internal/internal.h: Revised.
* include/freetype/ftimage.h: Updated to new header inclusion scheme.
* builds/toplevel.mk (.PHONY): Adding `distclean'.
* builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
`setup'.
* INSTALL: Slightly updated the quick starter documentation to
include IDE compilation, prevent against BSD Make, and specify "make
setup" instead of a single "make" for build configuration.
* include/config/ftbuild.h, include/internal/internal.h: Added new
configuration files used to determine the location of all public,
configuration, and internal header files for FreeType 2. Modified
all headers under "include/freetype" to reflect this change. Note
that we still need to change the library source files themselves
though.
builds/win32/detect.mk: Added new files to support compilation with
the free Borland C++ command-line compiler. Modified the detection
rules to recognize the new "bcc32" target in "make setup bcc32".
src/truetype/ttobjs.c, src/truetype/ttgload.c,
src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
didn't really like. Basically, this compiler complains when FT_UInt
is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
in these cases).
2000-12-01 18:25:58 +01:00
|
|
|
FT_END_HEADER
|
2000-07-05 06:32:02 +02:00
|
|
|
|
* INSTALL: Revised.
* builds/compiler/bcc-dev.mk, builds/compiler/visualage.mk,
builds/compiler/bcc.mk, builds/win32/w32-bcc.mk,
builds/win32/w32-bccd.mk: Revised.
* include/freetype/config/ftbuild.h,
include/freetype/internal/internal.h: Revised.
* include/freetype/ftimage.h: Updated to new header inclusion scheme.
* builds/toplevel.mk (.PHONY): Adding `distclean'.
* builds/unix/detect.mk (.PHONY): Adding `devel', `unix', `lcc',
`setup'.
* INSTALL: Slightly updated the quick starter documentation to
include IDE compilation, prevent against BSD Make, and specify "make
setup" instead of a single "make" for build configuration.
* include/config/ftbuild.h, include/internal/internal.h: Added new
configuration files used to determine the location of all public,
configuration, and internal header files for FreeType 2. Modified
all headers under "include/freetype" to reflect this change. Note
that we still need to change the library source files themselves
though.
builds/win32/detect.mk: Added new files to support compilation with
the free Borland C++ command-line compiler. Modified the detection
rules to recognize the new "bcc32" target in "make setup bcc32".
src/truetype/ttobjs.c, src/truetype/ttgload.c,
src/truetype/ttinterp.c: Fixed a few comparisons that Borland C++
didn't really like. Basically, this compiler complains when FT_UInt
is compared to FT_UShort (apparently, it promotes `UShort' to `Int'
in these cases).
2000-12-01 18:25:58 +01:00
|
|
|
#endif /* __FTIMAGE_H__ */
|
1999-12-17 00:11:37 +01:00
|
|
|
|
2000-07-10 16:24:26 +02:00
|
|
|
|
|
|
|
/* END */
|
2006-05-12 16:20:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
/* Local Variables: */
|
|
|
|
/* coding: utf-8 */
|
|
|
|
/* End: */
|