From patchwork Sun Apr 26 11:44:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Adolf Belka X-Patchwork-Id: 9718 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (Client CN "mail01.haj.ipfire.org", Issuer "R12" (not verified)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 4g3Pxy3LTPz3xNC for ; Sun, 26 Apr 2026 11:44:54 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [IPv6:2001:678:b28::201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (Client CN "mail02.haj.ipfire.org", Issuer "E8" (not verified)) by mail01.ipfire.org (Postfix) with ESMTPS id 4g3Pxy164Vz7Bt for ; Sun, 26 Apr 2026 11:44:54 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [IPv6:::1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4g3Pxr0lwKz3795 for ; Sun, 26 Apr 2026 11:44:48 +0000 (UTC) X-Original-To: development@lists.ipfire.org Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (Client CN "mail01.haj.ipfire.org", Issuer "R12" (not verified)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4g3Pxk0z9Gz34Qt for ; Sun, 26 Apr 2026 11:44:42 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4g3Pxj3HFfz5Z3; Sun, 26 Apr 2026 11:44:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1777203881; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QtkN1S14M1PyUGV3vgP9fnNB4gDiNvi/TE5MZRee5js=; b=R4BZOBDUbPXhSXRidpVbIyJOd1gaK/FlI/qyNDKSlOP47b2WtbsPE/QifPAlh1AMXYL3zw I/lyyjBIJDVGn0XCq6Uc7tc+EKQanxLwE2GNE81Lub1uxT76YqrxUdGbbVIhm0lKsWgY2+ RNnIAuSDwrbn3P38sDcfrzBQxs5R5Br3CuK6f/Ma7FKWg1FzVkX8dG+dnne68+DFcQMDG5 dSjmMTmFRqLa5vFcVFUGze0EWHcYLHqMy2UZakeX7aHMa9Gcamx0SKDQnywEBJCLfg1BmS 1/LiQER2KDT+LBqoOu6gAXv9lzsoZcHJzhLXMyso6st+GIBKRS4QMoW/qwnBaA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1777203881; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QtkN1S14M1PyUGV3vgP9fnNB4gDiNvi/TE5MZRee5js=; b=C1wICTXE3yrpMPeyN09KFBau6NNMG3atPho6CJN5+qho5hScX8xNO/Pn3I+Mk53WoAmTKw 4XK/1Foa8iiDksCA== From: Adolf Belka To: development@lists.ipfire.org Cc: Adolf Belka Subject: [PATCH] harfbuzz: Update to version 14.2.0 Date: Sun, 26 Apr 2026 13:44:03 +0200 Message-ID: <20260426114418.122889-14-adolf.belka@ipfire.org> In-Reply-To: <20260426114418.122889-1-adolf.belka@ipfire.org> References: <20260426114418.122889-1-adolf.belka@ipfire.org> Precedence: list List-Id: List-Subscribe: , List-Unsubscribe: , List-Post: List-Help: Sender: Mail-Followup-To: MIME-Version: 1.0 - 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 `` / `` 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 --- 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)