Some docs

This commit is contained in:
Matthias Clasen 2022-12-16 00:48:28 -05:00 committed by Behdad Esfahbod
parent d7c2eacf45
commit 44c68594f1
2 changed files with 239 additions and 0 deletions

View File

@ -28,6 +28,15 @@
#include "hb-paint.hh"
/**
* SECTION: hb-paint
* @title: hb-paint
* @short_description: Glyph painting
* @include: hb.h
*
* Functions for painting (extracting) glyph color layers.
**/
static void
hb_paint_push_transform_nil (hb_paint_funcs_t *funcs, void *paint_data,
float xx, float yx,

View File

@ -33,6 +33,25 @@
HB_BEGIN_DECLS
/**
* hb_paint_funcs_t:
*
* Glyph paint callbacks.
*
* All the callbacks are necessary.
*
* The callbacks assume that the caller maintains a stack
* of current transforms, clips and intermediate surfaces,
* as evidenced by the pairs of push/pop callbacks. The
* push/pop calls will be properly nested, so it is fine
* to store the different kinds of object on a single stack.
*
* The callbacks also assume that the caller uses
* hb_ot_color_palette_get_colors() to obtain colors
* from one of the fonts color palettes.
*
* Since: REPLACEME
**/
typedef struct hb_paint_funcs_t hb_paint_funcs_t;
HB_EXTERN hb_paint_funcs_t *
@ -50,6 +69,27 @@ hb_paint_funcs_make_immutable (hb_paint_funcs_t *funcs);
HB_EXTERN hb_bool_t
hb_paint_funcs_is_immutable (hb_paint_funcs_t *funcs);
/**
* hb_paint_push_transform_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @xx: xx component of the transform matrix
* @yx: yx component of the transform matrix
* @xy: xy component of the transform matrix
* @yy: yy component of the transform matrix
* @dx: dx component of the transform matrix
* @dy: dy component of the transform matrix
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to apply
* a transform to subsequent paint calls.
*
* This transform is applied after the current transform,
* and remains in effect until a matching call to the
* #hb_paint_funcs_pop_transform_func_t vfunc.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_push_transform_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
float xx, float xy,
@ -57,25 +97,110 @@ typedef void (*hb_paint_push_transform_func_t) (hb_paint_funcs_t *funcs,
float x0, float y0,
void *user_data);
/**
* hb_paint_pop_transform_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to undo
* the effect of a prior call to the #hb_paint_funcs_push_transform_func_t
* vfunc.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_pop_transform_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
void *user_data);
/**
* hb_paint_push_clip_glyph_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 clip
* subsequent paint calls to the outline of a glyph.
*
* The coordinates of the glyph outline are interpreted according
* to the current transform.
*
* This clip is applied in addition to the current clip,
* and remains in effect until a matching call to the
* #hb_paint_funcs_pop_clip_func_t vfunc.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_push_clip_glyph_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
hb_codepoint_t glyph,
void *user_data);
/**
* hb_paint_push_clip_rect_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @xmin: min X for the rectangle
* @ymin: min Y for the rectangle
* @xmax: max X for the rectangle
* @ymax: max Y for the rectangle
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to clip
* subsequent paint calls to a rectangle.
*
* The coordinates of the rectangle are interpreted according
* to the current transform.
*
* This clip is applied in addition to the current clip,
* and remains in effect until a matching call to the
* #hb_paint_funcs_pop_clip_func_t vfunc.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_push_clip_rect_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
float xmin, float ymin,
float xmax, float ymax,
void *user_data);
/**
* hb_paint_pop_clip_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to undo
* the effect of a prior call to the #hb_paint_funcs_push_clip_glyph_func_t
* or #hb_paint_funcs_push_clip_rect_func_t vfuncs.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_pop_clip_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
void *user_data);
/**
* hb_paint_solid_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @color_index: Index of a color in the fonts selected color palette
* @alpha: alpha to apply in addition
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to paint a solid
* color everywhere within the current clip.
*
* The @color_index can be either an index into one of the fonts
* color palettes, or the special value #FFFF, which indicates that
* the foreground color should be used.
*
* In either case, the @alpha value should be applied in addition
* (i.e. multiplied with) the alpha value found in the color.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_solid_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
unsigned int color_index,
@ -106,6 +231,31 @@ typedef enum {
HB_EXTERN hb_paint_extend_t
hb_color_line_get_extend (hb_color_line_t *color_line);
/**
* hb_paint_linear_gradient_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @color_line: Color information for the gradient
* @x0: X coordinate of the first point
* @y0: Y coordinate of the first point
* @x1: X coordinate of the second point
* @y1: Y coordinate of the second point
* @x2: X coordinate of the third point
* @y2: Y coordinate of the third point
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to paint a linear
* gradient everywhere within the current clip.
*
* The coordinates of the points are interpreted according
* to the current transform.
*
* See the OpenType spec COLR section (FIXME link) for details on how the
* points define the direction of the gradient, and how
* to interpret the @color_line.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_linear_gradient_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
hb_color_line_t *color_line,
@ -114,6 +264,31 @@ typedef void (*hb_paint_linear_gradient_func_t) (hb_paint_funcs_t *funcs,
float x2, float y2,
void *user_data);
/**
* hb_paint_radial_gradient_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @color_line: Color information for the gradient
* @x0: X coordinate of the first circle's center
* @y0: Y coordinate of the first circle's center
* @r0: radius of the first circle
* @x1: X coordinate of the second circle's center
* @y1: Y coordinate of the second circle's center
* @r1: radius of the second circle
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to paint a radial
* gradient everywhere within the current clip.
*
* The coordinates of the points are interpreted according
* to the current transform.
*
* See the OpenType spec COLR section (FIXME link) for details on how the
* points define the direction of the gradient, and how
* to interpret the @color_line.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_radial_gradient_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
hb_color_line_t *color_line,
@ -121,6 +296,29 @@ typedef void (*hb_paint_radial_gradient_func_t) (hb_paint_funcs_t *funcs,
float x1, float y1, float r1,
void *user_data);
/**
* hb_paint_sweep_gradient_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @color_line: Color information for the gradient
* @x0: X coordinate of the circle's center
* @y0: Y coordinate of the circle's center
* @start_angle: the start angle
* @end_angle: the end angle
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to paint a sweep
* gradient everywhere within the current clip.
*
* The coordinates of the points are interpreted according
* to the current transform.
*
* See the OpenType spec COLR section (FIXME link) for details on how the
* points define the direction of the gradient, and how
* to interpret the @color_line.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_sweep_gradient_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
hb_color_line_t *color_line,
@ -160,10 +358,42 @@ typedef enum {
HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY,
} hb_paint_composite_mode_t;
/**
* hb_paint_push_group_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to use
* an intermediate surface for subsequent paint calls.
*
* The drawing will be redirected to an intermediate surface
* until a matching call to the #hb_paint_funcs_pop_group_func_t
* vfunc.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_push_group_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
void *user_data);
/**
* hb_paint_pop_group_func_t:
* @funcs: paint functions object
* @paint_data: The data accompanying the paint functions
* @mode: the compositing mode to use
* @user_data: user data passed to the hb_font_paint_glyph() call
*
* A virtual method for the #hb_paint_funcs_t to undo
* the effect of a prior call to the #hb_paint_funcs_push_group_func_t
* vfunc.
*
* This call stops the redirection to the intermediate surface,
* and then composites it on the previous surface, using the
* compositing mode passed to this call.
*
* Since: REPLACEME
*/
typedef void (*hb_paint_pop_group_func_t) (hb_paint_funcs_t *funcs,
void *paint_data,
hb_paint_composite_mode_t mode,