Finish CPAL/COLR support (3/4).

* src/base/ftcolor.c: Include FT_INTERNAL_SFNT_H.
(FT_Palette_Select, FT_Palette_Set_Foreground_Color): Implement
functions.
This commit is contained in:
Werner Lemberg 2018-06-12 06:02:59 +02:00
parent b85d4e8f04
commit 45145d348f
3 changed files with 102 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2018-06-12 Werner Lemberg <wl@gnu.org>
Finish CPAL/COLR support (3/4).
* src/base/ftcolor.c: Include FT_INTERNAL_SFNT_H.
(FT_Palette_Select, FT_Palette_Set_Foreground_Color): Implement
functions.
2018-06-12 Werner Lemberg <wl@gnu.org>
Finish CPAL/COLR support (2/4).

View File

@ -533,9 +533,12 @@ FT_BEGIN_HEADER
*
* @Description:
* Blend the bitmap in `new_glyph' into `base_glyph' using the color
* specified by `color_index'.
*
* XXX: Handle foregound color
* specified by `color_index'. If `color_index' is 0xFFFF, use
* `face->foreground_color' if `face->have_foreground_color' is set.
* Otherwise check `face->palette_data.palette_type': If present and
* @FT_PALETTE_USABLE_WITH_DARK_BACKGROUND is set, use BGRA value
* 0xFFFFFFFF (white opaque). Otherwise use BGRA value 0x000000FF
* (black opaque).
*
* @Input:
* face ::

View File

@ -18,6 +18,7 @@
#include <ft2build.h>
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_SFNT_H
#include FT_INTERNAL_TRUETYPE_TYPES_H
#include FT_COLOR_H
@ -47,6 +48,70 @@
return FT_Err_Ok;
}
/* documentation is in ftcolor.h */
FT_EXPORT_DEF( FT_Error )
FT_Palette_Select( FT_Face face,
FT_UShort palette_index,
FT_Color* *apalette )
{
FT_Error error;
TT_Face ttface;
SFNT_Service sfnt;
if ( !face )
return FT_THROW( Invalid_Face_Handle );
if ( !FT_IS_SFNT( face ) )
{
if ( apalette )
*apalette = NULL;
return FT_Err_Ok;
}
ttface = (TT_Face)face;
sfnt = (SFNT_Service)ttface->sfnt;
error = sfnt->set_palette( ttface, palette_index );
if ( error )
return error;
ttface->palette_index = palette_index;
if ( apalette )
*apalette = ttface->palette;
return FT_Err_Ok;
}
/* documentation is in ftcolor.h */
FT_EXPORT_DEF( FT_Error )
FT_Palette_Set_Foreground_Color( FT_Face face,
FT_Color foreground_color )
{
TT_Face ttface;
if ( !face )
return FT_THROW( Invalid_Face_Handle );
if ( !FT_IS_SFNT( face ) )
return FT_Err_Ok;
ttface = (TT_Face)face;
ttface->foreground_color = foreground_color;
ttface->have_foreground_color = 1;
return FT_Err_Ok;
}
#else /* !TT_CONFIG_OPTION_COLOR_LAYERS */
FT_EXPORT_DEF( FT_Error )
@ -60,6 +125,29 @@
return FT_THROW( Unimplemented_Feature );
}
FT_EXPORT_DEF( FT_Error )
FT_Palette_Select( FT_Face face,
FT_UShort palette_index,
FT_Color* *apalette )
{
FT_UNUSED( face );
FT_UNUSED( palette_index );
FT_UNUSED( apalette );
return FT_THROW( Unimplemented_Feature );
}
FT_EXPORT_DEF( FT_Error )
FT_Palette_Set_Foreground_Color( FT_Face face,
FT_Color foreground_color )
{
FT_UNUSED( face );
FT_UNUSED( foreground_color );
}
#endif /* !TT_CONFIG_OPTION_COLOR_LAYERS */