forked from minhngoc25a/freetype2
Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
Werner Lemberg | 9d86c63f4a |
|
@ -45,6 +45,12 @@ FT_BEGIN_HEADER
|
||||||
* @description:
|
* @description:
|
||||||
* The functions described here allow access and manipulation of color
|
* The functions described here allow access and manipulation of color
|
||||||
* palette entries in OpenType's 'CPAL' tables.
|
* palette entries in OpenType's 'CPAL' tables.
|
||||||
|
*
|
||||||
|
* FreeType maintains a 'working palette' (together with a corresponding
|
||||||
|
* 'working palette index'), which can be set either to a palette stored
|
||||||
|
* in the font (function @FT_Palette_Select) or to a user-defined palette
|
||||||
|
* (function @FT_Palette_Set). For user-defined palettes, the working
|
||||||
|
* palette index is negative, and positive otherwise.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,18 +224,13 @@ FT_BEGIN_HEADER
|
||||||
* FT_Palette_Select
|
* FT_Palette_Select
|
||||||
*
|
*
|
||||||
* @description:
|
* @description:
|
||||||
* This function has two purposes.
|
* This function copies a palette entry in the font's 'CPAL' table into a
|
||||||
|
* 'working palette', which is a read-write array managed by FreeType.
|
||||||
|
* It also sets the 'working palette index' to the index value given as
|
||||||
|
* an argument.
|
||||||
*
|
*
|
||||||
* (1) It activates a palette for rendering color glyphs, and
|
* The current working palette and palette index can be retrieved with
|
||||||
*
|
* @FT_Palette_Get.
|
||||||
* (2) it retrieves all (unmodified) color entries of this palette. This
|
|
||||||
* function returns a read-write array, which means that a calling
|
|
||||||
* application can modify the palette entries on demand.
|
|
||||||
*
|
|
||||||
* A corollary of (2) is that calling the function, then modifying some
|
|
||||||
* values, then calling the function again with the same arguments resets
|
|
||||||
* all color entries to the original 'CPAL' values; all user modifications
|
|
||||||
* are lost.
|
|
||||||
*
|
*
|
||||||
* @input:
|
* @input:
|
||||||
* face ::
|
* face ::
|
||||||
|
@ -240,10 +241,10 @@ FT_BEGIN_HEADER
|
||||||
*
|
*
|
||||||
* @output:
|
* @output:
|
||||||
* apalette ::
|
* apalette ::
|
||||||
* An array of color entries for a palette with index `palette_index`,
|
* A pointer to the 'working palette', which is an array of color
|
||||||
* having `num_palette_entries` elements (as found in the
|
* entries for a palette with index `palette_index`, having
|
||||||
* `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no
|
* `num_palette_entries` elements (as found in the `FT_Palette_Data`
|
||||||
* array gets returned (and no color entries can be modified).
|
* structure). If `apalette` is set to `NULL`, no array gets returned.
|
||||||
*
|
*
|
||||||
* In case the font doesn't support color palettes, `NULL` is returned.
|
* In case the font doesn't support color palettes, `NULL` is returned.
|
||||||
*
|
*
|
||||||
|
@ -266,6 +267,92 @@ FT_BEGIN_HEADER
|
||||||
FT_Color* *apalette );
|
FT_Color* *apalette );
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @function:
|
||||||
|
* FT_Palette_Set
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* Set FreeType's 'working palette' and 'working palette index' to the
|
||||||
|
* given arguments. Use this function if you want to provide a
|
||||||
|
* user-defined palette, not being part of the font's 'CPAL' table.
|
||||||
|
*
|
||||||
|
* The current working palette and palette index can be retrieved with
|
||||||
|
* @FT_Palette_Get.
|
||||||
|
*
|
||||||
|
* @input:
|
||||||
|
* face ::
|
||||||
|
* The source face handle.
|
||||||
|
*
|
||||||
|
* palette_index ::
|
||||||
|
* A palette index, which must be an arbitrary, negative integer (since
|
||||||
|
* positive values are reserved for indices from the 'CPAL' table).
|
||||||
|
* FreeType sets the 'working palette index' to this value.
|
||||||
|
*
|
||||||
|
* palette ::
|
||||||
|
* A pointer to an array of color entries, having `num_palette_entries`
|
||||||
|
* elements (as found in the `FT_Palette_Data` structure). FreeType
|
||||||
|
* copies this array into its 'working palette'.
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0~means success.
|
||||||
|
*
|
||||||
|
* @note:
|
||||||
|
* This function always returns an error if the config macro
|
||||||
|
* `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
|
||||||
|
*
|
||||||
|
* @since:
|
||||||
|
* 2.12
|
||||||
|
*/
|
||||||
|
FT_EXPORT( FT_Error )
|
||||||
|
FT_Palette_Set( FT_Face face,
|
||||||
|
FT_Int index,
|
||||||
|
FT_Color* palette );
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @function:
|
||||||
|
* FT_Palette_Get
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* Get FreeType's 'working palette' and 'working palette index'.
|
||||||
|
*
|
||||||
|
* The working palette and palette index can be set with @FT_Palette_Set.
|
||||||
|
*
|
||||||
|
* @input:
|
||||||
|
* face ::
|
||||||
|
* The source face handle.
|
||||||
|
*
|
||||||
|
* @output:
|
||||||
|
* anindex ::
|
||||||
|
* The 'working palette index'. If the value is zero or positive, the
|
||||||
|
* working palette represents an entry from the font's 'CPAL' table
|
||||||
|
* (with the given index). Otherwise it is a user-defined palette. If
|
||||||
|
* `anindex` is set to `NULL`, no value gets returned.
|
||||||
|
*
|
||||||
|
* apalette ::
|
||||||
|
* A pointer to the 'working palette', which is an array of color
|
||||||
|
* entries for a palette having `num_palette_entries` elements (as
|
||||||
|
* found in the `FT_Palette_Data` structure). If `apalette` is set to
|
||||||
|
* `NULL`, no array gets returned.
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0~means success.
|
||||||
|
*
|
||||||
|
* @note:
|
||||||
|
* This function always returns an error if the config macro
|
||||||
|
* `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
|
||||||
|
*
|
||||||
|
* @since:
|
||||||
|
* 2.12
|
||||||
|
*/
|
||||||
|
FT_EXPORT( FT_Error )
|
||||||
|
FT_Palette_Get( FT_Face face,
|
||||||
|
FT_Int *anindex,
|
||||||
|
FT_Color* *apalette );
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
*
|
*
|
||||||
* @function:
|
* @function:
|
||||||
|
@ -286,11 +373,9 @@ FT_BEGIN_HEADER
|
||||||
* FreeType error code. 0~means success.
|
* FreeType error code. 0~means success.
|
||||||
*
|
*
|
||||||
* @note:
|
* @note:
|
||||||
* If this function isn't called, the text foreground color is set to
|
* See function @FT_Palette_Get_Foreground_Color for details on what
|
||||||
* white opaque (BGRA value 0xFFFFFFFF) if
|
* foreground color is used if `FT_Palette_Set_Foreground_Color` is not
|
||||||
* @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette,
|
* called.
|
||||||
* and black opaque (BGRA value 0x000000FF) otherwise, including the case
|
|
||||||
* that no palette types are available in the 'CPAL' table.
|
|
||||||
*
|
*
|
||||||
* This function always returns an error if the config macro
|
* This function always returns an error if the config macro
|
||||||
* `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
|
* `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
|
||||||
|
@ -303,6 +388,53 @@ FT_BEGIN_HEADER
|
||||||
FT_Color foreground_color );
|
FT_Color foreground_color );
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* @function:
|
||||||
|
* FT_Palette_Get_Foreground_Color
|
||||||
|
*
|
||||||
|
* @description:
|
||||||
|
* Get the 'text foreground color' as set by a previous call to
|
||||||
|
* @FT_Palette_Set_Foreground_Color.
|
||||||
|
*
|
||||||
|
* @input:
|
||||||
|
* face ::
|
||||||
|
* The source face handle.
|
||||||
|
*
|
||||||
|
* @output:
|
||||||
|
* aforeground_color ::
|
||||||
|
* The text foreground color.
|
||||||
|
*
|
||||||
|
* @return:
|
||||||
|
* FreeType error code. 0~means success.
|
||||||
|
*
|
||||||
|
* @note:
|
||||||
|
* The returned color is as follows.
|
||||||
|
*
|
||||||
|
* * If a foreground color was set with @FT_Palette_Get_Foreground_Color,
|
||||||
|
* return this value.
|
||||||
|
*
|
||||||
|
* * Otherwise, return black opaque (BGRA value 0x000000FF) if the
|
||||||
|
* 'working palette' is a user-defined palette.
|
||||||
|
*
|
||||||
|
* * Otherwise, return white opaque (BGRA value 0xFFFFFFFF) if
|
||||||
|
* @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette.
|
||||||
|
*
|
||||||
|
* * Otherwise, return black opaque (BGRA value 0x000000FF). This
|
||||||
|
* includes the case that no palette types are available in the 'CPAL'
|
||||||
|
* table.
|
||||||
|
*
|
||||||
|
* This function always returns an error if the config macro
|
||||||
|
* `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
|
||||||
|
*
|
||||||
|
* @since:
|
||||||
|
* 2.12
|
||||||
|
*/
|
||||||
|
FT_EXPORT( FT_Error )
|
||||||
|
FT_Palette_Get_Foreground_Color( FT_Face face,
|
||||||
|
FT_Color* aforeground_color );
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
*
|
*
|
||||||
* @section:
|
* @section:
|
||||||
|
|
|
@ -1537,7 +1537,7 @@ FT_BEGIN_HEADER
|
||||||
|
|
||||||
/* glyph colors */
|
/* glyph colors */
|
||||||
FT_Palette_Data palette_data; /* since 2.10 */
|
FT_Palette_Data palette_data; /* since 2.10 */
|
||||||
FT_UShort palette_index;
|
FT_Int palette_index;
|
||||||
FT_Color* palette;
|
FT_Color* palette;
|
||||||
FT_Bool have_foreground_color;
|
FT_Bool have_foreground_color;
|
||||||
FT_Color foreground_color;
|
FT_Color foreground_color;
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
{
|
{
|
||||||
if ( !face )
|
if ( !face )
|
||||||
return FT_THROW( Invalid_Face_Handle );
|
return FT_THROW( Invalid_Face_Handle );
|
||||||
if ( !apalette_data)
|
if ( !apalette_data )
|
||||||
return FT_THROW( Invalid_Argument );
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
if ( FT_IS_SFNT( face ) )
|
if ( FT_IS_SFNT( face ) )
|
||||||
|
@ -88,6 +88,57 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* documentation is in ftcolor.h */
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Palette_Set( FT_Face face,
|
||||||
|
FT_Int index,
|
||||||
|
FT_Color* palette )
|
||||||
|
{
|
||||||
|
TT_Face ttface;
|
||||||
|
FT_UShort i;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !face || !FT_IS_SFNT( face ) )
|
||||||
|
return FT_THROW( Invalid_Face_Handle );
|
||||||
|
|
||||||
|
if ( !palette || index >= 0 )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
ttface = (TT_Face)face;
|
||||||
|
|
||||||
|
for ( i = 0; i < ttface->palette_data.num_palette_entries; i++ )
|
||||||
|
ttface->palette[i] = palette[i];
|
||||||
|
ttface->palette_index = index;
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* documentation is in ftcolor.h */
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Palette_Get( FT_Face face,
|
||||||
|
FT_Int *anindex,
|
||||||
|
FT_Color* *apalette )
|
||||||
|
{
|
||||||
|
TT_Face ttface;
|
||||||
|
|
||||||
|
|
||||||
|
if ( !face || !FT_IS_SFNT( face ) )
|
||||||
|
return FT_THROW( Invalid_Face_Handle );
|
||||||
|
|
||||||
|
ttface = (TT_Face)face;
|
||||||
|
|
||||||
|
if ( anindex )
|
||||||
|
*anindex = ttface->palette_index;
|
||||||
|
if ( apalette )
|
||||||
|
*apalette = ttface->palette;
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* documentation is in ftcolor.h */
|
/* documentation is in ftcolor.h */
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
@ -111,6 +162,44 @@
|
||||||
return FT_Err_Ok;
|
return FT_Err_Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* documentation is in ftcolor.h */
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Palette_Get_Foreground_Color( FT_Face face,
|
||||||
|
FT_Color* aforeground_color )
|
||||||
|
{
|
||||||
|
TT_Face ttface;
|
||||||
|
|
||||||
|
FT_Color white = { 0xFF, 0xFF, 0xFF, 0xFF };
|
||||||
|
FT_Color black = { 0x00, 0x00, 0x00, 0xFF };
|
||||||
|
|
||||||
|
|
||||||
|
if ( !face || !FT_IS_SFNT( face ) )
|
||||||
|
return FT_THROW( Invalid_Face_Handle );
|
||||||
|
|
||||||
|
if ( !aforeground_color )
|
||||||
|
return FT_THROW( Invalid_Argument );
|
||||||
|
|
||||||
|
ttface = (TT_Face)face;
|
||||||
|
|
||||||
|
if ( ttface->have_foreground_color )
|
||||||
|
*aforeground_color = ttface->foreground_color;
|
||||||
|
else if ( ttface->palette_index < 0 )
|
||||||
|
*aforeground_color = black;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( ttface->palette_data.palette_flags &&
|
||||||
|
( ttface->palette_data.palette_flags[ttface->palette_index] &
|
||||||
|
FT_PALETTE_FOR_DARK_BACKGROUND ) )
|
||||||
|
*aforeground_color = white;
|
||||||
|
else
|
||||||
|
*aforeground_color = black;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FT_Err_Ok;
|
||||||
|
}
|
||||||
|
|
||||||
#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
|
#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
@ -139,6 +228,34 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Palette_Set( FT_Face face,
|
||||||
|
FT_Int index,
|
||||||
|
FT_Color* palette )
|
||||||
|
{
|
||||||
|
FT_UNUSED( face );
|
||||||
|
FT_UNUSED( index );
|
||||||
|
FT_UNUSED( palette );
|
||||||
|
|
||||||
|
|
||||||
|
return FT_THROW( Unimplemented_Feature );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Palette_Get( FT_Face face,
|
||||||
|
FT_Int *anindex,
|
||||||
|
FT_Color* *apalette )
|
||||||
|
{
|
||||||
|
FT_UNUSED( face );
|
||||||
|
FT_UNUSED( anindex );
|
||||||
|
FT_UNUSED( apalette );
|
||||||
|
|
||||||
|
|
||||||
|
return FT_THROW( Unimplemented_Feature );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
FT_EXPORT_DEF( FT_Error )
|
||||||
FT_Palette_Set_Foreground_Color( FT_Face face,
|
FT_Palette_Set_Foreground_Color( FT_Face face,
|
||||||
FT_Color foreground_color )
|
FT_Color foreground_color )
|
||||||
|
@ -150,6 +267,18 @@
|
||||||
return FT_THROW( Unimplemented_Feature );
|
return FT_THROW( Unimplemented_Feature );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
FT_Palette_Get_Foreground_Color( FT_Face face,
|
||||||
|
FT_Color* aforeground_color )
|
||||||
|
{
|
||||||
|
FT_UNUSED( face );
|
||||||
|
FT_UNUSED( aforeground_color );
|
||||||
|
|
||||||
|
|
||||||
|
return FT_THROW( Unimplemented_Feature );
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */
|
#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue