14.2.0
diff --git a/NEWS b/NEWS index 20a258d..a266599 100644 --- a/NEWS +++ b/NEWS
@@ -1,235 +1,227 @@ -Overview of changes leading to NEXT (REPLACEME) +Overview of changes leading to 14.2.0 +Monday, April 20, 2026 ===================================== -- GPU library: +In this release, the experimental raster, vector, and GPU libraries went +through several rounds of code review and cleanup to make sure they follow the +high standards expected of HarfBuzz code. The API has also been extensively +reviewed based on experience gained from using these libraries. We consider the +code and API to be ready for stabilization, and we expect to graduate them from +experimental in the near future. If you are using or planning to use these +libraries and have any concerns about the API, it is time to raise them. Once a +library is deemed stable, we will never change the API or ABI in an +incompatible way. +- GPU library: * New color-glyph paint renderer, based on design by Lê Duy Quang. - hb_gpu_paint_t walks a font's paint tree (COLRv0 or COLRv1) and - encodes its layers -- solid fills, linear / radial / sweep - gradients, transforms, composite groups -- into a compact blob. - A new fragment-shader function hb_gpu_paint() renders the blob - in premultiplied RGBA; monochrome glyphs are handled - transparently via a synthesized foreground-colored layer. + `hb_gpu_paint_t` walks a font's paint tree (COLRv0 or COLRv1) and encodes + its layers (solid fills, linear / radial / sweep gradients, transforms, + composite groups) into a compact blob. + A new fragment-shader function `hb_gpu_paint()` renders the blob in + premultiplied RGBA; monochrome glyphs are handled transparently via a + synthesized foreground-colored layer. Shader sources provided in GLSL, WGSL, MSL, and HLSL. - * Paint encoder limitations: the encoder sets `unsupported` and - returns NULL when `num_ops` would exceed 32767, `push_group` - nests deeper than 4, or the paint tree calls back through the - image callback (PaintImage). Nested glyph clips are - intersected up to 3 levels; a few composite modes use - approximate fallbacks; `push_clip_rectangle` is silently - ignored. - * Encode entry point now returns extents and auto-clears the - encoder; the standalone get_extents() is gone. - * hb_gpu_paint() now takes an `out float coverage` parameter - that returns the maximum antialiasing edge coverage across - all paint layers. Callers should apply stem darkening and - gamma correction to this coverage value rather than to the - composited color, so interior paint colors stay undistorted. - * Gradient color stop interpolation now happens in - premultiplied space per the OpenType COLR specification. - * The foreground color sentinel (is_foreground) now correctly - preserves the paint-tree alpha from the encoded color data - instead of discarding it. - * The hb-gpu utility gains --draw / --paint flags with per-font - auto-detect, and --output-file / -o for headless single-frame - rendering to a PPM image (P6). + * Paint encoder limitations: the encoder sets `unsupported` and returns + `NULL` when `num_ops` would exceed 32767, `push_group` nests deeper than 4, + or the paint tree calls back through the image callback (PaintImage). + Nested glyph clips are intersected up to 3 levels; a few composite modes + use approximate fallbacks; `push_clip_rectangle` is silently ignored. + * Encode entry point now returns extents and auto-clears the encoder; the + standalone `get_extents()` is gone. + * Gradient color stop interpolation now happens in premultiplied space per + the OpenType COLR specification. + * The foreground color sentinel (`is_foreground`) now correctly preserves the + paint-tree alpha from the encoded color data instead of discarding it. + * The hb-gpu utility gains `--draw` / `--paint` flags with per-font + auto-detect, and `--output-file` / `-o` for headless single-frame rendering + to a PPM image. - Vector library: - * New PDF output backend. Vector paint glyphs now render to - PDF page content, producing scalable COLRv0 / COLRv1 - color-glyph artwork (solid fills, linear / radial / sweep - gradients, blend modes, PNG images with transparency) that - can be embedded directly in PDF documents -- useful for PDF - producers such as LibreOffice that want crisp, resolution- - independent color emoji. - * New SVG id prefix API on paint allows prefixing document - references, which allows for embedding multiple SVGs in the - same page without name clashes (hb_vector_paint_set_svg_prefix). - * Removed pen_x/pen_y parameters from all vector and - raster _glyph functions. Callers use set_transform() - for glyph positioning instead. - * Removed glyph path dedup from vector draw and paint. - Each glyph is emitted inline; no <defs>/<use> caching. - * _glyph() functions are now thin convenience wrappers - documented as equivalent expansions of the underlying - font draw/paint API. + * New PDF output backend. Vector paint glyphs now render to PDF page content, + producing scalable COLRv0 / COLRv1 color-glyph artwork (solid fills, linear + / radial / sweep gradients, blend modes, PNG images with transparency) that + can be embedded directly in PDF documents. Useful for PDF producers such as + LibreOffice that want crisp, resolution-independent color emoji. + * New SVG id prefix API on paint allows prefixing document references, which + allows for embedding multiple SVGs in the same page without name clashes + (`hb_vector_paint_set_svg_prefix`). + * Removed glyph path dedup from vector draw and paint. Each glyph is emitted + inline; no `<defs>` / `<use>` caching. + * `_glyph()` functions are now thin convenience wrappers documented as + equivalent expansions of the underlying font draw/paint API. * Drop glyph-source rendering of SVG-in-OT fonts. - Raster library: * Drop glyph-source rendering of SVG-in-OT fonts. -- Across Draw / Paint subsystems: _reset() methods gain matching - _clear() companions that drop accumulated data while preserving - user configuration. Getter companions added for setters across - raster, vector, and gpu types. +- Across Draw / Paint subsystems: + * `_reset()` methods gain matching`_clear()` companions that drop accumulated + data while preserving user configuration. Getter companions added for + setters across raster, vector, and gpu types. -- Various fuzzer fixes for `harfbuzz-raster`, `harfbuzz-vector`, - and `harfbuzz-gpu` libraries. +- Various fuzzer fixes for raster, vector, and GPU libraries. - Paint API: - * New arbitrary-path clip: - hb_paint_push_clip_path_start / _end let callers clip to - a caller-supplied outline, not just a font glyph. - push_clip_path_start returns the draw-funcs (and matching - draw data) for the backend's path accumulator; the caller - drives hb_draw_*() into it, then calls - push_clip_path_end, followed by painted ops, then - hb_paint_pop_clip() to release the clip. Implemented for - all paint backends: vector (SVG defs + clipPath + url ref), - vector PDF (q / path / W n), raster (path rendered to an - alpha mask, intersected with the current clip), and GPU - (the path is encoded into a Slug sub-blob so the fragment - shader clips against it the same way it clips against - glyph outlines). + * New arbitrary-path clip: `hb_paint_push_clip_path_start` / `_end` let + callers clip to a caller-supplied outline, not just a font glyph. + `push_clip_path_start()` returns the draw-funcs (and matching draw data) + for the backend’s path accumulator; the caller drives `hb_draw_*()` into + it, then calls `push_clip_path_end()`, followed by painted ops, then + `hb_paint_pop_clip()` to release the clip. Implemented for all paint + backends: vector (SVG defs + clipPath + url ref), vector PDF (q / path / W + n), raster (path rendered to an alpha mask, intersected with the current + clip), and GPU (the path is encoded into a Slug sub-blob so the fragment + shader clips against it the same way it clips against glyph outlines). -- New API, Draw: - +hb_draw_line() - +hb_draw_rectangle() - +hb_draw_circle() - +hb_draw_line_cap_t - +HB_DRAW_LINE_CAP_BUTT - +HB_DRAW_LINE_CAP_ROUND - +HB_DRAW_LINE_CAP_SQUARE +- Shaping: + * Indic: categorize U+1CF5 and U+1CF6 as CS. -- New API, Paint: - +hb_paint_push_group_for() - +hb_paint_funcs_set_push_group_for_func() - +hb_paint_push_group_for_func_t - +hb_paint_reduce_linear_anchors() - +hb_paint_normalize_color_line() - +hb_paint_sweep_gradient_tiles() - +hb_paint_sweep_gradient_tile_func_t - +hb_paint_push_clip_path_start() - +hb_paint_push_clip_path_end() - +hb_paint_funcs_set_push_clip_path_start_func() - +hb_paint_funcs_set_push_clip_path_end_func() - +hb_paint_push_clip_path_start_func_t - +hb_paint_push_clip_path_end_func_t +- Changed API + * GPU library: + - `hb_gpu_draw_glyph()` now returns `void` (was `hb_bool_t`). Use + `hb_gpu_draw_glyph_or_fail()` if you need the success status. + - `hb_gpu_paint_glyph()` now returns `void` (was `hb_bool_t`) and + internally synthesizes a foreground-colored layer for non-color glyphs + via `hb_font_paint_glyph()`, so every glyph with an outline produces + output. Use `hb_gpu_paint_glyph_or_fail()` (which delegates to + `hb_font_paint_glyph_or_fail()`) if you need to distinguish color vs + synthesized paint. Encoder-level limits (unsupported ops, group-stack + overflow) no longer fail paint_glyph; they surface from + `hb_gpu_paint_encode()` returning `NULL`. + - `hb_gpu_draw_encode()` now takes an `extents` out-parameter and + auto-clears the encoder on return. + - `hb_gpu_draw_darken()` renamed to `hb_gpu_stem_darken()`. -- New API, GPU library: - +hb_gpu_paint_t - +hb_gpu_paint_create_or_fail() - +hb_gpu_paint_reference() - +hb_gpu_paint_destroy() - +hb_gpu_paint_set_user_data() - +hb_gpu_paint_get_user_data() - +hb_gpu_paint_get_funcs() - +hb_gpu_paint_set_palette() - +hb_gpu_paint_get_palette() - +hb_gpu_paint_set_custom_palette_color() - +hb_gpu_paint_clear_custom_palette_colors() - +hb_gpu_paint_set_scale() - +hb_gpu_paint_get_scale() - +hb_gpu_paint_glyph() - +hb_gpu_paint_encode() - +hb_gpu_paint_clear() - +hb_gpu_paint_reset() - +hb_gpu_paint_recycle_blob() - +hb_gpu_paint_shader_source() - +hb_gpu_paint_glyph_or_fail() - +HB_GPU_SHADER_STAGE_VERTEX - +HB_GPU_SHADER_STAGE_FRAGMENT - +hb_gpu_shader_source() - +hb_gpu_draw_shader_source() - +hb_gpu_draw_clear() - +hb_gpu_draw_get_scale() - +hb_gpu_draw_glyph_or_fail() + * Vector library: + - `hb_vector_svg_set_precision()` and its paint counterpart renamed to + `hb_vector_draw_set_precision()` / `hb_vector_paint_set_precision()` + (SVG-specific naming is inaccurate with the PDF backend added). + - `hb_vector_draw_glyph()` / `hb_vector_paint_glyph()` now return `void` + (were `hb_bool_t`). Paint additionally gains a draw fallback for + non-color glyphs. Use the matching `_or_fail()` variants for the + `hb_bool_t` return. -- Changed shader API, GPU library: - hb_gpu_paint() now takes an additional `out float coverage` - parameter. Existing callers must update their shader code to - pass this argument. + * Raster library: + - `hb_raster_draw_glyph()` / `hb_raster_paint_glyph()` now return `void` + (were `hb_bool_t`). Paint additionally gains a draw fallback for + non-color glyphs. Use the matching `_or_fail()` variants for the + `hb_bool_t` return. -- New API, Raster library: - +hb_raster_draw_clear() - +hb_raster_draw_glyph_or_fail() - +hb_raster_paint_clear() - +hb_raster_paint_glyph_or_fail() - +hb_raster_paint_set_palette() - +hb_raster_paint_get_palette() - +hb_raster_paint_get_foreground() - +hb_raster_paint_set_background() - +hb_raster_paint_get_background() + * General: + - Many read-only getters gained const on their object argument. + - Six public draw / paint funcs getters across raster, vector, and gpu now + take a const-pointer to the relevant context instance instead of being + singletons: + hb_raster_draw_get_funcs (const hb_raster_draw_t *)` + hb_raster_paint_get_funcs (const hb_raster_paint_t *) + hb_vector_draw_get_funcs (const hb_vector_draw_t *) + hb_vector_paint_get_funcs (const hb_vector_paint_t *) + hb_gpu_draw_get_funcs (const hb_gpu_draw_t *) + hb_gpu_paint_get_funcs (const hb_gpu_paint_t *) + This is what lets vector_paint dispatch to SVG- vs PDF- flavored + callbacks transparently when called from outside code; the others + currently use the instance for symmetry only. -- New API, Vector library: - +HB_VECTOR_FORMAT_PDF - +hb_vector_draw_clear() - +hb_vector_draw_get_precision() - +hb_vector_draw_get_format() - +hb_vector_draw_glyph_or_fail() - +hb_vector_draw_set_foreground() - +hb_vector_draw_get_foreground() - +hb_vector_draw_set_background() - +hb_vector_draw_get_background() - +hb_vector_paint_clear() - +hb_vector_paint_get_precision() - +hb_vector_paint_get_format() - +hb_vector_paint_get_foreground() - +hb_vector_paint_set_background() - +hb_vector_paint_get_background() - +hb_vector_paint_get_palette() - +hb_vector_paint_glyph_or_fail() - +hb_vector_paint_set_svg_prefix() - +hb_vector_paint_get_svg_prefix() +- New API + * Draw: + +HB_DRAW_LINE_CAP_BUTT + +HB_DRAW_LINE_CAP_ROUND + +HB_DRAW_LINE_CAP_SQUARE + +hb_draw_line_cap_t + +hb_draw_line() + +hb_draw_rectangle() + +hb_draw_circle() -- Removed API, GPU library: - -hb_gpu_shader_fragment_source() (replaced by hb_gpu_shader_source(stage)) - -hb_gpu_shader_vertex_source() (replaced by hb_gpu_shader_source(stage)) - -hb_gpu_draw_get_extents() (extents are now an out-parameter of hb_gpu_draw_encode()) + * Paint: + +hb_paint_push_clip_path_start_func_t + +hb_paint_push_clip_path_end_func_t + +hb_paint_sweep_gradient_tile_func_t + +hb_paint_push_group_for_func_t + +hb_paint_push_group_for() + +hb_paint_funcs_set_push_group_for_func() + +hb_paint_reduce_linear_anchors() + +hb_paint_normalize_color_line() + +hb_paint_sweep_gradient_tiles() + +hb_paint_push_clip_path_start() + +hb_paint_push_clip_path_end() + +hb_paint_funcs_set_push_clip_path_start_func() + +hb_paint_funcs_set_push_clip_path_end_func() -- Removed API, Vector library: - -hb_vector_draw_set_flat() - -hb_vector_draw_get_flat() - -hb_vector_paint_set_flat() - -hb_vector_paint_get_flat() + * GPU library: + +HB_GPU_SHADER_STAGE_VERTEX + +HB_GPU_SHADER_STAGE_FRAGMENT + +HB_GPU_SHADER_LANG_INVALID + +hb_gpu_shader_stage_t + +hb_gpu_paint_t + +hb_gpu_paint_create_or_fail() + +hb_gpu_paint_reference() + +hb_gpu_paint_destroy() + +hb_gpu_paint_set_user_data() + +hb_gpu_paint_get_user_data() + +hb_gpu_paint_get_funcs() + +hb_gpu_paint_set_palette() + +hb_gpu_paint_get_palette() + +hb_gpu_paint_set_custom_palette_color() + +hb_gpu_paint_clear_custom_palette_colors() + +hb_gpu_paint_set_scale() + +hb_gpu_paint_get_scale() + +hb_gpu_paint_glyph() + +hb_gpu_paint_encode() + +hb_gpu_paint_clear() + +hb_gpu_paint_reset() + +hb_gpu_paint_recycle_blob() + +hb_gpu_paint_shader_source() + +hb_gpu_paint_glyph_or_fail() + +hb_gpu_shader_source() + +hb_gpu_draw_shader_source() + +hb_gpu_draw_clear() + +hb_gpu_draw_get_scale() + +hb_gpu_draw_glyph_or_fail() -- Changed API, GPU library: - * hb_gpu_draw_glyph() now returns void (was hb_bool_t). Use - hb_gpu_draw_glyph_or_fail() if you need the success status. - * hb_gpu_paint_glyph() now returns void (was hb_bool_t) and - internally synthesizes a foreground-colored layer for - non-color glyphs via hb_font_paint_glyph(), so every glyph - with an outline produces output. Use - hb_gpu_paint_glyph_or_fail() -- which delegates to - hb_font_paint_glyph_or_fail() -- if you need to distinguish - color vs synthesized paint. Encoder-level limits - (unsupported ops, group-stack overflow) no longer fail - paint_glyph; they surface from hb_gpu_paint_encode() - returning NULL. - * hb_gpu_draw_encode() now takes an extents out-parameter and - auto-clears the encoder on return. - * hb_gpu_draw_darken() renamed to hb_gpu_stem_darken(). + * Raster library: + +hb_raster_draw_clear() + +hb_raster_draw_glyph_or_fail() + +hb_raster_paint_clear() + +hb_raster_paint_glyph_or_fail() + +hb_raster_paint_set_palette() + +hb_raster_paint_get_palette() + +hb_raster_paint_get_foreground() + +hb_raster_paint_set_background() + +hb_raster_paint_get_background() -- Changed API, Vector library: - * hb_vector_svg_set_precision() and its paint counterpart renamed - to hb_vector_draw_set_precision() / hb_vector_paint_set_precision() - (SVG-specific naming is inaccurate with the PDF backend added). - * hb_vector_draw_glyph() / hb_vector_paint_glyph() now return - void (were hb_bool_t). Paint additionally gains a draw - fallback for non-color glyphs. Use the matching _or_fail() - variants for the bool return. + * Vector library: + +HB_VECTOR_FORMAT_PDF + +hb_vector_draw_clear() + +hb_vector_draw_get_precision() + +hb_vector_draw_get_format() + +hb_vector_draw_glyph_or_fail() + +hb_vector_draw_new_path() + +hb_vector_draw_set_foreground() + +hb_vector_draw_get_foreground() + +hb_vector_draw_set_background() + +hb_vector_draw_get_background() + +hb_vector_paint_clear() + +hb_vector_paint_get_precision() + +hb_vector_paint_get_format() + +hb_vector_paint_get_foreground() + +hb_vector_paint_set_background() + +hb_vector_paint_get_background() + +hb_vector_paint_get_palette() + +hb_vector_paint_glyph_or_fail() + +hb_vector_paint_set_svg_prefix() + +hb_vector_paint_get_svg_prefix() -- Changed API, Raster library: - * hb_raster_draw_glyph() / hb_raster_paint_glyph() now return - void (were hb_bool_t). Paint additionally gains a draw - fallback for non-color glyphs. Use the matching _or_fail() - variants for the bool return. +- Removed API + * GPU library: + -hb_gpu_shader_fragment_source() (replaced by hb_gpu_shader_source(stage)) + -hb_gpu_shader_vertex_source() (replaced by hb_gpu_shader_source(stage)) + -hb_gpu_draw_get_extents() (extents are now an out-parameter of hb_gpu_draw_encode()) -- Changed API, general: - * Many read-only getters gained const on their object argument. - * Six public draw / paint funcs getters across raster, - vector, and gpu now take a const-pointer to the relevant - context instance instead of being singletons: - hb_raster_draw_get_funcs (const hb_raster_draw_t *) - hb_raster_paint_get_funcs (const hb_raster_paint_t *) - hb_vector_draw_get_funcs (const hb_vector_draw_t *) - hb_vector_paint_get_funcs (const hb_vector_paint_t *) - hb_gpu_draw_get_funcs (const hb_gpu_draw_t *) - hb_gpu_paint_get_funcs (const hb_gpu_paint_t *) - This is what lets vector_paint dispatch to SVG- vs PDF- - flavored callbacks transparently when called from outside - code; the others currently use the instance for symmetry - only. + * Vector library: + -hb_vector_draw_set_flat() + -hb_vector_draw_get_flat() + -hb_vector_paint_set_flat() + -hb_vector_paint_get_flat() Overview of changes leading to 14.1.0
diff --git a/docs/harfbuzz-docs.xml b/docs/harfbuzz-docs.xml index 8859806..505951c 100644 --- a/docs/harfbuzz-docs.xml +++ b/docs/harfbuzz-docs.xml
@@ -131,6 +131,7 @@ <index id="api-index-full"><title>API Index</title><xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include></index> <index id="deprecated-api-index"><title>Index of deprecated API</title><xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include></index> + <index id="api-index-14-2-0"><title>Index of new symbols in 14.2.0</title><xi:include href="xml/api-index-14.2.0.xml"><xi:fallback /></xi:include></index> <index id="api-index-14-1-0"><title>Index of new symbols in 14.1.0</title><xi:include href="xml/api-index-14.1.0.xml"><xi:fallback /></xi:include></index> <index id="api-index-14-0-0"><title>Index of new symbols in 14.0.0</title><xi:include href="xml/api-index-14.0.0.xml"><xi:fallback /></xi:include></index> <index id="api-index-13-2-0"><title>Index of new symbols in 13.2.0</title><xi:include href="xml/api-index-13.2.0.xml"><xi:fallback /></xi:include></index>
diff --git a/meson.build b/meson.build index 78d1d41..bc72451 100644 --- a/meson.build +++ b/meson.build
@@ -1,6 +1,6 @@ project('harfbuzz', ['c', 'cpp'], meson_version: '>= 0.60.0', - version: '14.1.0', + version: '14.2.0', default_options: [ 'cpp_eh=none', # Just to support msvc, we are passing -fno-exceptions also anyway # 'cpp_rtti=false', # Do NOT enable, wraps inherit it and ICU needs RTTI
diff --git a/src/hb-draw.cc b/src/hb-draw.cc index 67972a4..0997153 100644 --- a/src/hb-draw.cc +++ b/src/hb-draw.cc
@@ -486,7 +486,7 @@ * `hb_draw_line()` calls form a closed rectangle without gaps * at the corners. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_draw_line (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -576,7 +576,7 @@ * emitting four hb_draw_line() segments (one per edge) is * considerably cheaper per frame. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_draw_rectangle (hb_draw_funcs_t *dfuncs, void *draw_data, @@ -695,7 +695,7 @@ * the nominal radius; if @stroke_width is `NaN`, the circle is * rendered as a filled disc. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_draw_circle (hb_draw_funcs_t *dfuncs, void *draw_data,
diff --git a/src/hb-draw.h b/src/hb-draw.h index 1e60db6..fe5a5c8 100644 --- a/src/hb-draw.h +++ b/src/hb-draw.h
@@ -358,7 +358,7 @@ * * End-cap shape for hb_draw_line(). * - * XSince: REPLACEME + * Since: 14.2.0 **/ typedef enum { HB_DRAW_LINE_CAP_BUTT = 0,
diff --git a/src/hb-gpu-draw.cc b/src/hb-gpu-draw.cc index 8051f28..ea47532 100644 --- a/src/hb-gpu-draw.cc +++ b/src/hb-gpu-draw.cc
@@ -951,7 +951,7 @@ * Return value: (transfer none): * The GPU draw functions * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_draw_funcs_t * hb_gpu_draw_get_funcs (const hb_gpu_draw_t *draw HB_UNUSED) @@ -989,7 +989,7 @@ * Gets the font scale previously set via hb_gpu_draw_set_scale() or * hb_gpu_draw_glyph(). * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_draw_get_scale (const hb_gpu_draw_t *draw, @@ -1017,7 +1017,7 @@ * Return value: `true` if the glyph was drawn, `false` if the font * has no outlines for @glyph. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_bool_t hb_gpu_draw_glyph_or_fail (hb_gpu_draw_t *draw, @@ -1060,7 +1060,7 @@ * encode. User configuration (font scale) is preserved. Call * hb_gpu_draw_reset() to also reset user configuration to defaults. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_draw_clear (hb_gpu_draw_t *draw) @@ -1145,7 +1145,7 @@ * A shader source string, or `NULL` if @stage or @lang is * unsupported. * - * XSince: REPLACEME + * Since: 14.2.0 **/ const char * hb_gpu_draw_shader_source (hb_gpu_shader_stage_t stage,
diff --git a/src/hb-gpu-paint.cc b/src/hb-gpu-paint.cc index 81d539b..ca89265 100644 --- a/src/hb-gpu-paint.cc +++ b/src/hb-gpu-paint.cc
@@ -995,7 +995,7 @@ * A newly allocated #hb_gpu_paint_t, or `NULL` on allocation * failure. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_gpu_paint_t * hb_gpu_paint_create_or_fail (void) @@ -1012,7 +1012,7 @@ * Return value: (transfer full): * The referenced #hb_gpu_paint_t. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_gpu_paint_t * hb_gpu_paint_reference (hb_gpu_paint_t *paint) @@ -1027,7 +1027,7 @@ * Decreases the reference count on @paint by one. When the * reference count reaches zero, the encoder is freed. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_destroy (hb_gpu_paint_t *paint) @@ -1057,7 +1057,7 @@ * * Return value: `true` if success, `false` otherwise * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_bool_t hb_gpu_paint_set_user_data (hb_gpu_paint_t *paint, @@ -1079,7 +1079,7 @@ * Return value: (transfer none): * A pointer to the user data. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void * hb_gpu_paint_get_user_data (const hb_gpu_paint_t *paint, @@ -1099,7 +1099,7 @@ * Return value: (transfer none): * The GPU paint functions * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_paint_funcs_t * hb_gpu_paint_get_funcs (const hb_gpu_paint_t *paint HB_UNUSED) @@ -1115,7 +1115,7 @@ * Selects which font palette is used when paint callbacks look up * indexed colors. Default is palette 0. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_set_palette (hb_gpu_paint_t *paint, @@ -1133,7 +1133,7 @@ * * Return value: the palette index. * - * XSince: REPLACEME + * Since: 14.2.0 **/ unsigned hb_gpu_paint_get_palette (const hb_gpu_paint_t *paint) @@ -1147,7 +1147,7 @@ * * Clears all custom palette color overrides previously set on @paint. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_clear_custom_palette_colors (hb_gpu_paint_t *paint) @@ -1168,7 +1168,7 @@ * * Return value: `true` if the override was set; `false` on allocation failure. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_bool_t hb_gpu_paint_set_custom_palette_color (hb_gpu_paint_t *paint, @@ -1195,7 +1195,7 @@ * inside the encoded blob. Called automatically by * hb_gpu_paint_glyph(). * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_set_scale (hb_gpu_paint_t *paint, @@ -1214,7 +1214,7 @@ * * Fetches the font scale previously set on @paint. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_get_scale (const hb_gpu_paint_t *paint, @@ -1248,7 +1248,7 @@ * Return value: `true` if the font had paint data for @glyph, * `false` otherwise. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_bool_t hb_gpu_paint_glyph_or_fail (hb_gpu_paint_t *paint, @@ -1284,7 +1284,7 @@ * transparently via a synthesized foreground-colored layer, * so any glyph with an outline produces output. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_glyph (hb_gpu_paint_t *paint, @@ -1329,7 +1329,7 @@ * callers can distinguish "nothing to render" (length 0) from a * real failure (`NULL`). * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_blob_t * hb_gpu_paint_encode (hb_gpu_paint_t *paint, @@ -1488,7 +1488,7 @@ * Discards accumulated paint state so @paint can be reused for * another encode. User configuration (font scale) is preserved. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_clear (hb_gpu_paint_t *paint) @@ -1521,7 +1521,7 @@ * Resets @paint, discarding accumulated state and user * configuration. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_reset (hb_gpu_paint_t *paint) @@ -1546,7 +1546,7 @@ * will be reused by the next call to hb_gpu_paint_encode(), * avoiding a malloc / blob allocation per glyph. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_gpu_paint_recycle_blob (hb_gpu_paint_t *paint, @@ -1589,7 +1589,7 @@ * A shader source string, or `NULL` if @stage or @lang is * unsupported. * - * XSince: REPLACEME + * Since: 14.2.0 **/ const char * hb_gpu_paint_shader_source (hb_gpu_shader_stage_t stage,
diff --git a/src/hb-gpu.cc b/src/hb-gpu.cc index 624b58e..ee98cb6 100644 --- a/src/hb-gpu.cc +++ b/src/hb-gpu.cc
@@ -550,7 +550,7 @@ * A shader source string, or `NULL` if @stage or @lang is * unsupported. * - * XSince: REPLACEME + * Since: 14.2.0 **/ const char * hb_gpu_shader_source (hb_gpu_shader_stage_t stage,
diff --git a/src/hb-gpu.h b/src/hb-gpu.h index bebf52e..4b75220 100644 --- a/src/hb-gpu.h +++ b/src/hb-gpu.h
@@ -59,7 +59,7 @@ * * Shader pipeline stage. * - * XSince: REPLACEME + * Since: 14.2.0 */ typedef enum { HB_GPU_SHADER_STAGE_VERTEX, @@ -184,7 +184,7 @@ * paint state via paint callbacks, then encodes it into a compact * blob for GPU rendering. * - * XSince: REPLACEME + * Since: 14.2.0 */ typedef struct hb_gpu_paint_t hb_gpu_paint_t;
diff --git a/src/hb-paint.cc b/src/hb-paint.cc index f5ed66c..4565635 100644 --- a/src/hb-paint.cc +++ b/src/hb-paint.cc
@@ -625,7 +625,7 @@ * the clip path, or `NULL` if the backend does not implement * arbitrary-path clipping. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_draw_funcs_t * hb_paint_push_clip_path_start (hb_paint_funcs_t *funcs, @@ -647,7 +647,7 @@ * accumulated path now acts as a clip on the paint context * until a matching hb_paint_pop_clip() call. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_paint_push_clip_path_end (hb_paint_funcs_t *funcs, void *paint_data) @@ -815,7 +815,7 @@ * mode known in advance. By default, this calls * hb_paint_push_group(). * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_paint_push_group_for (hb_paint_funcs_t *funcs, void *paint_data, @@ -884,7 +884,7 @@ * gradient's actual direction (perpendicular to the rotation * line). Degenerate (P0 == P2) passes through unchanged. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_paint_reduce_linear_anchors (float x0, float y0, @@ -923,7 +923,7 @@ * to keep the rendered gradient visually unchanged after the * rescale. Empty input is safe: both out-parameters set to 0. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_paint_normalize_color_line (hb_color_stop_t *stops, @@ -973,7 +973,7 @@ * offset; use hb_paint_normalize_color_line() first if they * aren't. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_paint_sweep_gradient_tiles (hb_color_stop_t *stops,
diff --git a/src/hb-paint.h b/src/hb-paint.h index 027470e..9057e3b 100644 --- a/src/hb-paint.h +++ b/src/hb-paint.h
@@ -235,7 +235,7 @@ * the clip path, or `NULL` if arbitrary-path clipping is not * supported. * - * XSince: REPLACEME + * Since: 14.2.0 */ typedef hb_draw_funcs_t * (*hb_paint_push_clip_path_start_func_t) (hb_paint_funcs_t *funcs, void *paint_data, @@ -254,7 +254,7 @@ * paint ops are masked by it until a matching * #hb_paint_pop_clip_func_t call. * - * XSince: REPLACEME + * Since: 14.2.0 */ typedef void (*hb_paint_push_clip_path_end_func_t) (hb_paint_funcs_t *funcs, void *paint_data, @@ -744,7 +744,7 @@ * compositing mode is provided at push time. By default * this calls #hb_paint_push_group_func_t. * - * XSince: REPLACEME + * Since: 14.2.0 */ typedef void (*hb_paint_push_group_for_func_t) (hb_paint_funcs_t *funcs, void *paint_data, @@ -897,7 +897,7 @@ * * Sets the push-clip-path-start callback on the paint functions struct. * - * XSince: REPLACEME + * Since: 14.2.0 */ HB_EXTERN void hb_paint_funcs_set_push_clip_path_start_func (hb_paint_funcs_t *funcs, @@ -914,7 +914,7 @@ * * Sets the push-clip-path-end callback on the paint functions struct. * - * XSince: REPLACEME + * Since: 14.2.0 */ HB_EXTERN void hb_paint_funcs_set_push_clip_path_end_func (hb_paint_funcs_t *funcs, @@ -1050,7 +1050,7 @@ * * Sets the push-group-for callback on the paint functions struct. * - * XSince: REPLACEME + * Since: 14.2.0 */ HB_EXTERN void hb_paint_funcs_set_push_group_for_func (hb_paint_funcs_t *funcs, @@ -1224,7 +1224,7 @@ * Callback invoked once per (a0, a1) sector of a sweep * gradient tiling. See hb_paint_sweep_gradient_tiles(). * - * XSince: REPLACEME + * Since: 14.2.0 **/ typedef void (*hb_paint_sweep_gradient_tile_func_t) (float a0, hb_color_t c0,
diff --git a/src/hb-raster-draw.cc b/src/hb-raster-draw.cc index 9334a12..ba06756 100644 --- a/src/hb-raster-draw.cc +++ b/src/hb-raster-draw.cc
@@ -413,7 +413,7 @@ * is preserved. Call hb_raster_draw_reset() to also reset user * configuration to defaults. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_raster_draw_clear (hb_raster_draw_t *draw) @@ -944,7 +944,7 @@ * Return value: (transfer none): * The rasterizer draw functions * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_draw_funcs_t * hb_raster_draw_get_funcs (const hb_raster_draw_t *draw HB_UNUSED) @@ -968,7 +968,7 @@ * Return value: `true` if the glyph was drawn, `false` if the font has * no outlines for @glyph. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_bool_t hb_raster_draw_glyph_or_fail (hb_raster_draw_t *draw, @@ -989,7 +989,7 @@ * transform. Equivalent to hb_raster_draw_glyph_or_fail() with the * return value ignored. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_raster_draw_glyph (hb_raster_draw_t *draw,
diff --git a/src/hb-raster-paint.cc b/src/hb-raster-paint.cc index 02f1076..d5bcdd8 100644 --- a/src/hb-raster-paint.cc +++ b/src/hb-raster-paint.cc
@@ -2034,7 +2034,7 @@ * * Return value: the foreground color. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_color_t hb_raster_paint_get_foreground (const hb_raster_paint_t *paint) @@ -2051,7 +2051,7 @@ * value, the rendered image is pre-filled with this color before * glyph content is composited on top. Default is transparent. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_raster_paint_set_background (hb_raster_paint_t *paint, @@ -2069,7 +2069,7 @@ * * Return value: the background color. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_color_t hb_raster_paint_get_background (const hb_raster_paint_t *paint) @@ -2085,7 +2085,7 @@ * Selects which font palette is used when paint callbacks look up * indexed colors. Default is palette 0. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_raster_paint_set_palette (hb_raster_paint_t *paint, @@ -2103,7 +2103,7 @@ * * Return value: the palette index. * - * XSince: REPLACEME + * Since: 14.2.0 **/ unsigned hb_raster_paint_get_palette (const hb_raster_paint_t *paint) @@ -2172,7 +2172,7 @@ * Return value: (transfer none): * The rasterizer paint functions * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_paint_funcs_t * hb_raster_paint_get_funcs (const hb_raster_paint_t *paint HB_UNUSED) @@ -2229,7 +2229,7 @@ * * Return value: `true` if painting succeeded, `false` otherwise. * - * XSince: REPLACEME + * Since: 14.2.0 **/ hb_bool_t hb_raster_paint_glyph_or_fail (hb_raster_paint_t *paint, @@ -2250,7 +2250,7 @@ * fall back to a synthesized foreground-colored outline, so any * glyph with an outline or bitmap image produces output. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_raster_paint_glyph (hb_raster_paint_t *paint, @@ -2322,7 +2322,7 @@ * hb_raster_paint_reset() to also reset user configuration to * defaults. * - * XSince: REPLACEME + * Since: 14.2.0 **/ void hb_raster_paint_clear (hb_raster_paint_t *paint)
diff --git a/src/hb-vector-draw.cc b/src/hb-vector-draw.cc index fbf3d27..1a96cb0 100644 --- a/src/hb-vector-draw.cc +++ b/src/hb-vector-draw.cc
@@ -434,7 +434,7 @@ * * Return value: the output format. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_vector_format_t hb_vector_draw_get_format (const hb_vector_draw_t *draw) @@ -451,7 +451,7 @@ * * Return value: (transfer none): immutable #hb_draw_funcs_t. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_draw_funcs_t * hb_vector_draw_get_funcs (const hb_vector_draw_t *draw) @@ -472,7 +472,7 @@ * between glyphs to separate their outlines so fill rules * don't interact across glyphs. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_draw_new_path (hb_vector_draw_t *draw) @@ -498,7 +498,7 @@ * * Return value: `true` if glyph data was emitted, `false` otherwise. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_bool_t hb_vector_draw_glyph_or_fail (hb_vector_draw_t *draw, @@ -537,7 +537,7 @@ * Draws one glyph into @draw. Equivalent to * hb_vector_draw_glyph_or_fail() with the return value ignored. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_draw_glyph (hb_vector_draw_t *draw, @@ -556,7 +556,7 @@ * * Sets numeric output precision for draw output. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_draw_set_precision (hb_vector_draw_t *draw, @@ -574,7 +574,7 @@ * * Return value: the precision. * - * XSince: REPLACEME + * Since: 14.2.0 */ unsigned hb_vector_draw_get_precision (const hb_vector_draw_t *draw) @@ -590,7 +590,7 @@ * Sets the fill color for drawn glyph outlines. * Default is opaque black. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_draw_set_foreground (hb_vector_draw_t *draw, @@ -608,7 +608,7 @@ * * Return value: the foreground color. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_color_t hb_vector_draw_get_foreground (const hb_vector_draw_t *draw) @@ -625,7 +625,7 @@ * rectangle covering the extents is emitted behind all content. * Default is transparent (no background). * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_draw_set_background (hb_vector_draw_t *draw, @@ -642,7 +642,7 @@ * * Return value: the background color. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_color_t hb_vector_draw_get_background (const hb_vector_draw_t *draw) @@ -885,7 +885,7 @@ * precision) is preserved. Call hb_vector_draw_reset() to * also reset user configuration to defaults. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_draw_clear (hb_vector_draw_t *draw)
diff --git a/src/hb-vector-paint.cc b/src/hb-vector-paint.cc index 0ff998b..5d66c2a 100644 --- a/src/hb-vector-paint.cc +++ b/src/hb-vector-paint.cc
@@ -365,7 +365,7 @@ * * Return value: the foreground color. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_color_t hb_vector_paint_get_foreground (const hb_vector_paint_t *paint) @@ -382,7 +382,7 @@ * value, the renderer emits a filled rectangle covering the extents * behind all glyph content. Default is transparent (no background). * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_paint_set_background (hb_vector_paint_t *paint, @@ -400,7 +400,7 @@ * * Return value: the background color. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_color_t hb_vector_paint_get_background (const hb_vector_paint_t *paint) @@ -433,7 +433,7 @@ * * Return value: the palette index. * - * XSince: REPLACEME + * Since: 14.2.0 */ int hb_vector_paint_get_palette (const hb_vector_paint_t *paint) @@ -489,7 +489,7 @@ * * Return value: the output format. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_vector_format_t hb_vector_paint_get_format (const hb_vector_paint_t *paint) @@ -506,7 +506,7 @@ * * Return value: (transfer none): immutable #hb_paint_funcs_t. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_paint_funcs_t * hb_vector_paint_get_funcs (const hb_vector_paint_t *paint) @@ -590,7 +590,7 @@ * * Return value: `true` if glyph paint data was emitted, `false` otherwise. * - * XSince: REPLACEME + * Since: 14.2.0 */ hb_bool_t hb_vector_paint_glyph_or_fail (hb_vector_paint_t *paint, @@ -614,7 +614,7 @@ * data fall back to a synthesized foreground-colored outline, * so any glyph with an outline or bitmap image produces output. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_paint_glyph (hb_vector_paint_t *paint, @@ -640,7 +640,7 @@ * * No effect on PDF output. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_paint_set_svg_prefix (hb_vector_paint_t *paint, @@ -675,7 +675,7 @@ * * Return value: the SVG id prefix. * - * XSince: REPLACEME + * Since: 14.2.0 */ const char * hb_vector_paint_get_svg_prefix (const hb_vector_paint_t *paint) @@ -690,7 +690,7 @@ * * Sets numeric output precision for paint output. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_paint_set_precision (hb_vector_paint_t *paint, @@ -708,7 +708,7 @@ * * Return value: the precision. * - * XSince: REPLACEME + * Since: 14.2.0 */ unsigned hb_vector_paint_get_precision (const hb_vector_paint_t *paint) @@ -726,7 +726,7 @@ * is preserved. Call hb_vector_paint_reset() to also reset * user configuration to defaults. * - * XSince: REPLACEME + * Since: 14.2.0 */ void hb_vector_paint_clear (hb_vector_paint_t *paint)
diff --git a/src/hb-version.h b/src/hb-version.h index cc67563..f44973e 100644 --- a/src/hb-version.h +++ b/src/hb-version.h
@@ -47,7 +47,7 @@ * * The minor component of the library version available at compile-time. */ -#define HB_VERSION_MINOR 1 +#define HB_VERSION_MINOR 2 /** * HB_VERSION_MICRO: * @@ -60,7 +60,7 @@ * * A string literal containing the library version available at compile-time. */ -#define HB_VERSION_STRING "14.1.0" +#define HB_VERSION_STRING "14.2.0" /** * HB_VERSION_ATLEAST: