[ft-paint] Apply ClipBox to all glyphs
This commit is contained in:
parent
c11ae85cbf
commit
393bab4ba1
|
@ -262,7 +262,22 @@ _hb_ft_paint (FT_OpaquePaint opaque_paint,
|
||||||
if (FT_Get_Color_Glyph_Paint (ft_face, paint.u.colr_glyph.glyphID,
|
if (FT_Get_Color_Glyph_Paint (ft_face, paint.u.colr_glyph.glyphID,
|
||||||
FT_COLOR_NO_ROOT_TRANSFORM,
|
FT_COLOR_NO_ROOT_TRANSFORM,
|
||||||
&other_paint))
|
&other_paint))
|
||||||
|
{
|
||||||
|
bool has_clip_box;
|
||||||
|
FT_ClipBox clip_box;
|
||||||
|
has_clip_box = FT_Get_Color_Glyph_ClipBox (ft_face, paint.u.colr_glyph.glyphID, &clip_box);
|
||||||
|
has_clip_box = 0;
|
||||||
|
|
||||||
|
if (has_clip_box)
|
||||||
|
paint_funcs->push_clip_rectangle (paint_data,
|
||||||
|
clip_box.bottom_left.x / 64.f,
|
||||||
|
clip_box.bottom_left.y / 64.f,
|
||||||
|
clip_box.top_right.x / 64.f,
|
||||||
|
clip_box.top_right.y / 64.f);
|
||||||
paint_recurse (other_paint);
|
paint_recurse (other_paint);
|
||||||
|
if (has_clip_box)
|
||||||
|
paint_funcs->pop_clip (paint_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FT_COLR_PAINTFORMAT_TRANSFORM:
|
case FT_COLR_PAINTFORMAT_TRANSFORM:
|
||||||
|
@ -405,28 +420,26 @@ hb_ft_paint_glyph_colr (hb_font_t *font,
|
||||||
&paint))
|
&paint))
|
||||||
{
|
{
|
||||||
FT_ClipBox clip_box;
|
FT_ClipBox clip_box;
|
||||||
bool pop_clip = false;
|
bool has_clip;
|
||||||
if (FT_Get_Color_Glyph_ClipBox (ft_face, gid,
|
|
||||||
&clip_box))
|
has_clip = FT_Get_Color_Glyph_ClipBox (ft_face, gid, &clip_box);
|
||||||
{
|
if (has_clip)
|
||||||
/* TODO mult's like hb-ft. */
|
|
||||||
paint_funcs->push_clip_rectangle (paint_data,
|
paint_funcs->push_clip_rectangle (paint_data,
|
||||||
clip_box.bottom_left.x,
|
clip_box.bottom_left.x,
|
||||||
clip_box.bottom_left.y,
|
clip_box.bottom_left.y,
|
||||||
clip_box.top_right.x,
|
clip_box.top_right.x,
|
||||||
clip_box.top_right.y);
|
clip_box.top_right.y);
|
||||||
pop_clip = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
paint_funcs->push_root_transform (paint_data, font);
|
paint_funcs->push_root_transform (paint_data, font);
|
||||||
|
|
||||||
_hb_ft_paint (paint,
|
_hb_ft_paint (paint,
|
||||||
ft_font,
|
ft_font,
|
||||||
font,
|
font,
|
||||||
paint_funcs, paint_data,
|
paint_funcs, paint_data,
|
||||||
palette, foreground);
|
palette, foreground);
|
||||||
paint_funcs->pop_root_transform (paint_data);
|
|
||||||
|
|
||||||
if (pop_clip)
|
paint_funcs->pop_root_transform (paint_data);
|
||||||
|
if (has_clip)
|
||||||
paint_funcs->pop_clip (paint_data);
|
paint_funcs->pop_clip (paint_data);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue