[paint] Add slant to image() callback
And slant images in hb-view.
This commit is contained in:
parent
c221933977
commit
237955dffc
|
@ -948,7 +948,7 @@ struct CBDT
|
||||||
if (unlikely (!hb_font_get_glyph_extents (font, glyph, &extents)))
|
if (unlikely (!hb_font_get_glyph_extents (font, glyph, &extents)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
funcs->image (data, blob, HB_PAINT_IMAGE_FORMAT_PNG, &extents);
|
funcs->image (data, blob, HB_PAINT_IMAGE_FORMAT_PNG, font->slant_xy, &extents);
|
||||||
|
|
||||||
hb_blob_destroy (blob);
|
hb_blob_destroy (blob);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -248,7 +248,7 @@ struct sbix
|
||||||
if (!hb_font_get_glyph_extents (font, glyph, &extents))
|
if (!hb_font_get_glyph_extents (font, glyph, &extents))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
funcs->image (data, blob, HB_PAINT_IMAGE_FORMAT_PNG, &extents);
|
funcs->image (data, blob, HB_PAINT_IMAGE_FORMAT_PNG, font->slant_xy, &extents);
|
||||||
|
|
||||||
hb_blob_destroy (blob);
|
hb_blob_destroy (blob);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -103,7 +103,7 @@ struct SVG
|
||||||
if (blob == hb_blob_get_empty ())
|
if (blob == hb_blob_get_empty ())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
funcs->image (data, blob, HB_PAINT_IMAGE_FORMAT_SVG, nullptr);
|
funcs->image (data, blob, HB_PAINT_IMAGE_FORMAT_SVG, font->slant_xy, nullptr);
|
||||||
|
|
||||||
hb_blob_destroy (blob);
|
hb_blob_destroy (blob);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -78,6 +78,7 @@ static void
|
||||||
hb_paint_image_nil (hb_paint_funcs_t *funcs, void *paint_data,
|
hb_paint_image_nil (hb_paint_funcs_t *funcs, void *paint_data,
|
||||||
hb_blob_t *image,
|
hb_blob_t *image,
|
||||||
hb_tag_t format,
|
hb_tag_t format,
|
||||||
|
float slant_xy,
|
||||||
hb_glyph_extents_t *extents,
|
hb_glyph_extents_t *extents,
|
||||||
void *user_data) {}
|
void *user_data) {}
|
||||||
|
|
||||||
|
|
|
@ -264,6 +264,7 @@ typedef void (*hb_paint_image_func_t) (hb_paint_funcs_t *funcs,
|
||||||
void *paint_data,
|
void *paint_data,
|
||||||
hb_blob_t *image,
|
hb_blob_t *image,
|
||||||
hb_tag_t format,
|
hb_tag_t format,
|
||||||
|
float slant,
|
||||||
hb_glyph_extents_t *extents,
|
hb_glyph_extents_t *extents,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
|
|
|
@ -100,9 +100,10 @@ struct hb_paint_funcs_t
|
||||||
void image (void *paint_data,
|
void image (void *paint_data,
|
||||||
hb_blob_t *image,
|
hb_blob_t *image,
|
||||||
hb_tag_t format,
|
hb_tag_t format,
|
||||||
|
float slant,
|
||||||
hb_glyph_extents_t *extents)
|
hb_glyph_extents_t *extents)
|
||||||
{ func.image (this, paint_data,
|
{ func.image (this, paint_data,
|
||||||
image, format, extents,
|
image, format, slant, extents,
|
||||||
!user_data ? nullptr : user_data->image); }
|
!user_data ? nullptr : user_data->image); }
|
||||||
void linear_gradient (void *paint_data,
|
void linear_gradient (void *paint_data,
|
||||||
hb_color_line_t *color_line,
|
hb_color_line_t *color_line,
|
||||||
|
|
|
@ -100,6 +100,7 @@ void
|
||||||
hb_cairo_paint_glyph_image (cairo_t *cr,
|
hb_cairo_paint_glyph_image (cairo_t *cr,
|
||||||
hb_blob_t *blob,
|
hb_blob_t *blob,
|
||||||
hb_tag_t format,
|
hb_tag_t format,
|
||||||
|
float slant,
|
||||||
hb_glyph_extents_t *extents)
|
hb_glyph_extents_t *extents)
|
||||||
{
|
{
|
||||||
#ifdef CAIRO_HAS_PNG_FUNCTIONS
|
#ifdef CAIRO_HAS_PNG_FUNCTIONS
|
||||||
|
@ -119,6 +120,12 @@ hb_cairo_paint_glyph_image (cairo_t *cr,
|
||||||
cairo_matrix_t matrix = {(double) width, 0, 0, (double) height, 0, 0};
|
cairo_matrix_t matrix = {(double) width, 0, 0, (double) height, 0, 0};
|
||||||
cairo_pattern_set_matrix (pattern, &matrix);
|
cairo_pattern_set_matrix (pattern, &matrix);
|
||||||
|
|
||||||
|
/* Undo slant in the extents and apply it in the context. */
|
||||||
|
extents->width -= extents->height * slant;
|
||||||
|
extents->x_bearing -= extents->y_bearing * slant;
|
||||||
|
cairo_matrix_t cairo_matrix = {1., 0., slant, 1., 0., 0.};
|
||||||
|
cairo_transform (cr, &cairo_matrix);
|
||||||
|
|
||||||
cairo_translate (cr, extents->x_bearing, extents->y_bearing);
|
cairo_translate (cr, extents->x_bearing, extents->y_bearing);
|
||||||
cairo_scale (cr, extents->width, extents->height);
|
cairo_scale (cr, extents->width, extents->height);
|
||||||
cairo_set_source (cr, pattern);
|
cairo_set_source (cr, pattern);
|
||||||
|
|
|
@ -73,6 +73,7 @@ hb_paint_composite_mode_to_cairo (hb_paint_composite_mode_t mode)
|
||||||
void hb_cairo_paint_glyph_image (cairo_t *cr,
|
void hb_cairo_paint_glyph_image (cairo_t *cr,
|
||||||
hb_blob_t *blob,
|
hb_blob_t *blob,
|
||||||
hb_tag_t format,
|
hb_tag_t format,
|
||||||
|
float slant,
|
||||||
hb_glyph_extents_t *extents);
|
hb_glyph_extents_t *extents);
|
||||||
|
|
||||||
void hb_cairo_paint_linear_gradient (cairo_t *cr,
|
void hb_cairo_paint_linear_gradient (cairo_t *cr,
|
||||||
|
|
|
@ -222,12 +222,13 @@ paint_image (hb_paint_funcs_t *funcs,
|
||||||
void *paint_data,
|
void *paint_data,
|
||||||
hb_blob_t *blob,
|
hb_blob_t *blob,
|
||||||
hb_tag_t format,
|
hb_tag_t format,
|
||||||
|
float slant,
|
||||||
hb_glyph_extents_t *extents,
|
hb_glyph_extents_t *extents,
|
||||||
void *user_data)
|
void *user_data)
|
||||||
{
|
{
|
||||||
cairo_t *cr = (cairo_t *)paint_data;
|
cairo_t *cr = (cairo_t *)paint_data;
|
||||||
|
|
||||||
hb_cairo_paint_glyph_image (cr, blob, format, extents);
|
hb_cairo_paint_glyph_image (cr, blob, format, slant, extents);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue