paint: Add a paint-image callback
This will be used for image blobs like pngs and svgs. FIXME: nail down and document sizing.
This commit is contained in:
parent
56b02b6599
commit
82e23f322a
|
@ -68,6 +68,11 @@ hb_paint_color_nil (hb_paint_funcs_t *funcs, void *paint_data,
|
|||
float alpha,
|
||||
void *user_data) {}
|
||||
|
||||
static void
|
||||
hb_paint_image_nil (hb_paint_funcs_t *funcs, void *paint_data,
|
||||
hb_codepoint_t glyph,
|
||||
void *user_data) {}
|
||||
|
||||
static void
|
||||
hb_paint_linear_gradient_nil (hb_paint_funcs_t *funcs, void *paint_data,
|
||||
hb_color_line_t *color_line,
|
||||
|
@ -337,6 +342,13 @@ hb_paint_color (hb_paint_funcs_t *funcs, void *paint_data,
|
|||
funcs->color (paint_data, color_index, alpha);
|
||||
}
|
||||
|
||||
void
|
||||
hb_paint_image (hb_paint_funcs_t *funcs, void *paint_data,
|
||||
hb_codepoint_t glyph)
|
||||
{
|
||||
funcs->image (paint_data, glyph);
|
||||
}
|
||||
|
||||
void
|
||||
hb_paint_linear_gradient (hb_paint_funcs_t *funcs, void *paint_data,
|
||||
hb_color_line_t *color_line,
|
||||
|
|
|
@ -56,6 +56,9 @@ HB_BEGIN_DECLS
|
|||
* For rendering COLRv0 or non-color outline glyphs, the
|
||||
* gradient and composite callbacks are not needed.
|
||||
*
|
||||
* The paint-image callback is only needed for glyphs
|
||||
* with blobs in the CBDT, sbix or SVG tables.
|
||||
*
|
||||
* Since: REPLACEME
|
||||
**/
|
||||
typedef struct hb_paint_funcs_t hb_paint_funcs_t;
|
||||
|
@ -218,6 +221,25 @@ typedef void (*hb_paint_color_func_t) (hb_paint_funcs_t *funcs,
|
|||
float alpha,
|
||||
void *user_data);
|
||||
|
||||
/**
|
||||
* hb_paint_image_func_t:
|
||||
* @funcs: paint functions object
|
||||
* @paint_data: The data accompanying the paint functions
|
||||
* @glyph: the glyph ID
|
||||
* @user_data: user data passed to the hb_font_paint_glyph() call
|
||||
*
|
||||
* A virtual method for the #hb_paint_funcs_t to paint the
|
||||
* glyph image.
|
||||
*
|
||||
* This method is intended for glyphs with image blobs in the CBDT,
|
||||
* sbix or SVG tables.
|
||||
*
|
||||
* Since: REPLACEME
|
||||
*/
|
||||
typedef void (*hb_paint_image_func_t) (hb_paint_funcs_t *funcs,
|
||||
void *paint_data,
|
||||
hb_codepoint_t glyph,
|
||||
void *user_data);
|
||||
|
||||
/**
|
||||
* hb_color_line_t:
|
||||
|
@ -532,6 +554,23 @@ hb_paint_funcs_set_color_func (hb_paint_funcs_t *funcs,
|
|||
void *user_data,
|
||||
hb_destroy_func_t destroy);
|
||||
|
||||
/**
|
||||
* hb_paint_funcs_set_image_func:
|
||||
* @funcs: A paint functions struct
|
||||
* @func: (closure user_data) (destroy destroy) (scope notified): The paint-image callback
|
||||
* @user_data: Data to pass to @func
|
||||
* @destroy: (nullable): Function to call when @user_data is no longer needed
|
||||
*
|
||||
* Sets the paint-image callback on the paint functions struct.
|
||||
*
|
||||
* Since: REPLACEME
|
||||
*/
|
||||
HB_EXTERN void
|
||||
hb_paint_funcs_set_image_func (hb_paint_funcs_t *funcs,
|
||||
hb_paint_image_func_t func,
|
||||
void *user_data,
|
||||
hb_destroy_func_t destroy);
|
||||
|
||||
/**
|
||||
* hb_paint_funcs_set_linear_gradient_func:
|
||||
* @funcs: A paint functions struct
|
||||
|
@ -643,6 +682,10 @@ hb_paint_color (hb_paint_funcs_t *funcs, void *paint_data,
|
|||
unsigned int color_index,
|
||||
float alpha);
|
||||
|
||||
HB_EXTERN void
|
||||
hb_paint_image (hb_paint_funcs_t *funcs, void *paint_data,
|
||||
hb_codepoint_t glyph);
|
||||
|
||||
HB_EXTERN void
|
||||
hb_paint_linear_gradient (hb_paint_funcs_t *funcs, void *paint_data,
|
||||
hb_color_line_t *color_line,
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
HB_PAINT_FUNC_IMPLEMENT (push_clip_rect) \
|
||||
HB_PAINT_FUNC_IMPLEMENT (pop_clip) \
|
||||
HB_PAINT_FUNC_IMPLEMENT (color) \
|
||||
HB_PAINT_FUNC_IMPLEMENT (image) \
|
||||
HB_PAINT_FUNC_IMPLEMENT (linear_gradient) \
|
||||
HB_PAINT_FUNC_IMPLEMENT (radial_gradient) \
|
||||
HB_PAINT_FUNC_IMPLEMENT (sweep_gradient) \
|
||||
|
@ -92,6 +93,11 @@ struct hb_paint_funcs_t
|
|||
{ func.color (this, paint_data,
|
||||
color_index, alpha,
|
||||
!user_data ? nullptr : user_data->color); }
|
||||
void image (void *paint_data,
|
||||
hb_codepoint_t glyph)
|
||||
{ func.image (this, paint_data,
|
||||
glyph,
|
||||
!user_data ? nullptr : user_data->image); }
|
||||
void linear_gradient (void *paint_data,
|
||||
hb_color_line_t *color_line,
|
||||
float x0, float y0,
|
||||
|
|
Loading…
Reference in New Issue