From: Adolf Belka <adolf.belka@ipfire.org>
To: development@lists.ipfire.org
Cc: Adolf Belka <adolf.belka@ipfire.org>
Subject: [PATCH] harfbuzz: Update to version 14.2.0
Date: Sun, 26 Apr 2026 13:44:03 +0200 [thread overview]
Message-ID: <20260426114418.122889-14-adolf.belka@ipfire.org> (raw)
In-Reply-To: <20260426114418.122889-1-adolf.belka@ipfire.org>
- Update from version 14.0.0 to 14.2.0
- Update of rootfile
- Changelog
14.2.0
- 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.
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.
* 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 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.
- 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).
- Shaping:
* Indic: categorize U+1CF5 and U+1CF6 as CS.
- 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()`.
* 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.
* 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.
* 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
* 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()
* 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()
* 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()
* 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()
* 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()
- 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())
* Vector library:
-hb_vector_draw_set_flat()
-hb_vector_draw_get_flat()
-hb_vector_paint_set_flat()
-hb_vector_paint_get_flat()
14.1.0
- GPU library improvements:
* Add anti-aliased rendering for small sizes.
* Store font scale in blob header.
* Port scale/ppem support to MSL, WGSL, and HLSL shaders.
* Fix contour breaks and bounds quantization in encode.
* Fix garbled rendering after font change in web demo.
* Various robustness fixes.
- Various fuzzing fixes for `harfbuzz-raster`, `harfbuzz-gpu` and
`harfbuzz-vector` libraries.
- Move `HB_NO_CFF` from `HB_LEAN` to `HB_NO_DRAW` closure, and fix
`HB_TINY` build.
- New API:
+hb_gpu_draw_set_scale()
Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
---
config/rootfiles/common/harfbuzz | 14 +++++++-------
lfs/harfbuzz | 4 ++--
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/config/rootfiles/common/harfbuzz b/config/rootfiles/common/harfbuzz
index 799c2ddc1..63fe01c89 100644
--- a/config/rootfiles/common/harfbuzz
+++ b/config/rootfiles/common/harfbuzz
@@ -52,25 +52,25 @@ usr/include/harfbuzz/hb-script-list.h
#usr/lib/cmake/harfbuzz/harfbuzz-config.cmake
#usr/lib/libharfbuzz-cairo.so
usr/lib/libharfbuzz-cairo.so.0
-usr/lib/libharfbuzz-cairo.so.0.61400.0
+usr/lib/libharfbuzz-cairo.so.0.61420.0
#usr/lib/libharfbuzz-gobject.so
usr/lib/libharfbuzz-gobject.so.0
-usr/lib/libharfbuzz-gobject.so.0.61400.0
+usr/lib/libharfbuzz-gobject.so.0.61420.0
#usr/lib/libharfbuzz-gpu.so
usr/lib/libharfbuzz-gpu.so.0
-usr/lib/libharfbuzz-gpu.so.0.61400.0
+usr/lib/libharfbuzz-gpu.so.0.61420.0
#usr/lib/libharfbuzz-raster.so
usr/lib/libharfbuzz-raster.so.0
-usr/lib/libharfbuzz-raster.so.0.61400.0
+usr/lib/libharfbuzz-raster.so.0.61420.0
#usr/lib/libharfbuzz-subset.so
usr/lib/libharfbuzz-subset.so.0
-usr/lib/libharfbuzz-subset.so.0.61400.0
+usr/lib/libharfbuzz-subset.so.0.61420.0
#usr/lib/libharfbuzz-vector.so
usr/lib/libharfbuzz-vector.so.0
-usr/lib/libharfbuzz-vector.so.0.61400.0
+usr/lib/libharfbuzz-vector.so.0.61420.0
#usr/lib/libharfbuzz.so
usr/lib/libharfbuzz.so.0
-usr/lib/libharfbuzz.so.0.61400.0
+usr/lib/libharfbuzz.so.0.61420.0
#usr/lib/pkgconfig/harfbuzz-cairo.pc
#usr/lib/pkgconfig/harfbuzz-gobject.pc
#usr/lib/pkgconfig/harfbuzz-gpu.pc
diff --git a/lfs/harfbuzz b/lfs/harfbuzz
index 508944200..f6f83f22a 100644
--- a/lfs/harfbuzz
+++ b/lfs/harfbuzz
@@ -24,7 +24,7 @@
include Config
-VER = 14.0.0
+VER = 14.2.0
THISAPP = harfbuzz-$(VER)
DL_FILE = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_BLAKE2 = a4fe29775ba4844c197a0d46a9d8db197301ea74ad21475ebe799a23d7a3ccd1ac642d15913067d2d7f4714381658b078827be2d0aec86dea91bcabfba66ab43
+$(DL_FILE)_BLAKE2 = bc0df1fad40bbd2f7348d16e1d17927285a1e64eae02bf27f5921691cb77cbe8646a5f51e14c97953416b9e08f326c824646d2f114b59e37579657727cf706f4
install : $(TARGET)
--
2.54.0
next prev parent reply other threads:[~2026-04-26 11:44 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-26 11:43 [PATCH] core202: Ship coreutils Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship glib Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship hwdata Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship iproute2 Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship libcap Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship libgcrypt Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship libjpeg Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship libxml2 Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship parted Adolf Belka
2026-04-26 11:43 ` [PATCH] core202: Ship texinfo Adolf Belka
2026-04-26 11:44 ` [PATCH] coreutils: Update to version 9.11 Adolf Belka
2026-04-26 11:44 ` [PATCH] git: Update to version 2.54.0 Adolf Belka
2026-04-26 11:44 ` [PATCH] glib: Update to version 2.88.0 Adolf Belka
2026-04-26 11:44 ` Adolf Belka [this message]
2026-04-26 11:44 ` [PATCH] hwdata: Update to version 0.406 Adolf Belka
2026-04-26 11:44 ` [PATCH] iana-etc: Update to version 20260409 Adolf Belka
2026-04-26 11:44 ` [PATCH] iperf3: Update to version 3.21 Adolf Belka
2026-04-26 11:44 ` [PATCH] iproute2: Update to version 7.0.0 Adolf Belka
2026-04-26 11:44 ` [PATCH] libcap-ng: Update to version 0.9.3 Adolf Belka
2026-04-26 11:44 ` [PATCH] libcap: Update to version 2.78 Adolf Belka
2026-04-26 11:44 ` [PATCH] libgcrypt: Update to version 1.12.2 Adolf Belka
2026-04-26 11:44 ` [PATCH] libjpeg: Update to version 3.1.4.1 Adolf Belka
2026-04-26 11:44 ` [PATCH] libmpc: Update to version 1.4.1 Adolf Belka
2026-04-26 11:44 ` [PATCH] libpng: Update to version 1.6.58 Adolf Belka
2026-04-26 11:44 ` [PATCH] libsodium: Update to version 1.0.22 Adolf Belka
2026-04-26 11:44 ` [PATCH] libxml2: Update to version 2.15.3 Adolf Belka
2026-04-26 11:44 ` [PATCH] parted: Update to version 3.7 Adolf Belka
2026-04-26 11:44 ` [PATCH] pciutils: Update to version 3.15.0 Adolf Belka
2026-04-26 11:44 ` [PATCH] texinfo: Update to version 7.3 Adolf Belka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260426114418.122889-14-adolf.belka@ipfire.org \
--to=adolf.belka@ipfire.org \
--cc=development@lists.ipfire.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox