BlinkGTK 1.2.0-build3 リリースノート

リリース日: 2026-08-08 / Chromium: 151.0.7922.71 / 言語: 日本語 | English

レンダリングエンジンを Chromium 151 に更新しました。日本語の組版に直接効く変更が
まとまって入っています。とくに縦組みで圏点を使う文書は、版面が変わります


build3 で加わったもの

GPU 描画が指定だけで使えるようになりました

環境変数ひとつで GPU 経路に切り替えられます。

BLINKGTK_GPU_MODE=egl ./myapp

**アプリ側のコード変更は要りません。**縦書きの長文でもスクロールが軽く、
CPU 描画より明確に速く動きます。

これまでは、この経路を動かすのに 4 つの設定 (GTK4 統合・手動 viewport・
デバイススケール・受け手ウィジェットの構築) が必要で、それを行っていたのは
配布物に含まれない開発用ブラウザの中だけ
でした。利用者が知る手段が無く、
BLINKGTK_GPU_MODE=egl を指定してもウィンドウが白いままになっていました。
必要な組み立てはすべてエンジン側へ移しました。

実 GPU と Wayland EGL 対応ドライバが要ります。環境によって CPU 描画のほうが
速いこともあるので、実機でお確かめください。

ウィンドウの大きさを変えても、文字が二重に見えなくなりました

リサイズや全画面化の途中で、前の画面と新しい画面が重なって見えることが
ありました。縦書きでは行の位置が命なので、行がずれて見えると組版が壊れたように
映ります。

新しい画面が整うまでの間、前の画面を引き伸ばさず、原寸のまま表示するように
しました。文字の位置が動かないので、二重には見えません。切り替わりの間、
余白が見えます。

見え方は環境変数で選べます。

指定 見え方
(既定) 原寸のまま上端に置く。文字が動かない
BLINKGTK_RESIZE_FIT=center 原寸のまま中央に置く
BLINKGTK_RESIZE_FIT=stretch 引き伸ばす (build2 までの挙動)

更新のたびに描画を自動で検査するようにしました

エンジンの土台となる Chromium を更新するたび、GPU 経路で「白いまま」
「小さく表示される」が再発していました。画面を見なくてもログから判定できる
検査
を用意し、更新手順の必須項目にしています。


build2 で加わったもの

版が正しく名乗られる

navigator.userAgent が実際のエンジン版を返すようになりました。

これまで: BlinkGTK/0.1.0 Chrome/143.0.0.0
本版:     BlinkGTK/1.2.0 Chrome/151.0.0.0

これまでは固定文字列で、エンジンを更新しても追従しませんでした。8 メジャー版
古い版を名乗っていた
ことになります。「古い版を名乗って安全側」ではなく、
実際にある機能を無いと判定される方向の誤りです。機能検出をバージョンで
分岐しているサイトでは、挙動が変わり得ます。

版は blink_gtk_get_version() / blink_gtk_get_chromium_version()
同じ単一ソースから出ます。UA と C API がずれることはもうありません。

縦書き版面の実測値を JavaScript から読める

縦組み multicol の版面について、エンジンが実際に使った値をページ内 JS から
読めるようになりました。行送りや列境界を矩形から逆算する必要がなくなります。

window.__blinkgtk.verticalFlowMetrics(element)
// → { stride, originX, contentWidth, columnCount, lineCount, generation,
//     lines: [{ inlineSize, blockOffset, columnIndex, hasHanging }] }

columnIndexエンジン内部の列添字そのもので、座標比較の結果ではありません。
境界ちょうどの行が 1 列ずれる、という誤りが原理的に起きません。

起動時に --enable-blink-features=CJKVerticalColumnFragmentation が必要です。
無効なときは window.__blinkgtk 自体が生えないので、typeof で検出できます。

現時点の制限: 対象要素そのものが「縦書き かつ multicol」である必要があります。
外側が横書き multicol・内側が縦書き、という二層構造では null が返ります
二層への対応は次のビルドで行います。

ドキュメントのサンプルが記載どおりに動く

同梱ドキュメントの C / C++ サンプル 28 件が、書かれたとおりに書くと
ページを表示しない
状態でした。g_application_run() では Chromium の
メインループが回らないためで、コンパイルも起動も通るぶん気付きにくいものでした。

利用者が最初に読む QUICKSTART を含めて是正し、検出ゲートを追加しています。

GError *error = NULL;
g_application_register(G_APPLICATION(app), NULL, &error);
g_application_activate(G_APPLICATION(app));
int status = blink_gtk_run_main_loop();   /* g_application_run() ではない */

圏点の独自 patch を外しました

v1.1 系で同梱していた圏点まわりの独自 patch を削除し、Chromium 151 標準の
挙動に一本化
しました。151 で上流が同じ問題を解決したため、二重に手を入れる
必要がなくなっています。挙動は下記「圏点を付けても行送りが太らない」のとおりです。


v1.2.0 系列でできるようになったこと

圏点を付けても行送りが太らない

これまで、圏点(傍点)を付けた行だけ行の高さが広がっていました。JIS X 4051 と JLReq は
圏点を行間に置き、行送りを変えないことを求めているので、規格とずれた状態でした。

151 で解消しています。縦組み、font-size: 16pxtext-emphasis-style: sesame
段落の実 pitch を測った値です。

行間の余裕 圏点なし 圏点あり
あり (line-height: 2.6 = 41.59px) 41.59 44.09 +2.50
本版 41.59 41.59 0
なし (line-height: 1.75 = 28px) 28.00 37.00 +9.00
本版 28.00 30.00 +2.00

行間に余裕があれば太りません。余裕がない場合も +9.00 から +2.00 に縮んでいます。

縦組みで圏点を多用する文書は、総ページ数が減ることがあります。 良い方向の変化ですが、
ページ番号を固定している場合は確認してください。

ルビのはみ出しが指定どおりに効く

ruby-overhang が既定で有効になりました。ルビ文字が親文字より長いとき、隣の文字の上へ
どこまではみ出してよいかを制御できます。はみ出しを許さない none も使えます。
JLReq がルビの掛け方について定めている部分に、エンジンが正面から対応した形です。

和欧混植のアキがルビに乱されない

text-autospace による日本語と欧文のあいだの自動アキ調整が、ルビのテキストに
引きずられなくなりました。ルビ付きの本文で字間が不揃いになる問題が減ります。

開きタグの直前で改行が寄らない

日本語 <span>語</span> のようなマークアップで、スペースの後に改行できるように
なりました。意図しない位置で行が折れる現象が減ります。

Web 標準が 1 世代進んだ

Chromium 150 から 151 で、44 の機能が新たに既定で有効になりました。角丸の論理方向指定、
text-fitfocusgroup、ホイールイベントの慣性情報などが含まれます。
版ごとの内訳は Chromium 147 → 151 の新機能
にまとめています。


移行時に確認していただきたいこと

Chromium 側の仕様変更で、動作が変わるものがあります。

変更 影響
圏点の組版 行送りが変わるため、総ページ数・行数が変わりうる
document.implementation.createHTMLDocument()readyState 生成直後の状態が仕様準拠に変わりました
ポップオーバー hint の入れ子表示 入れ子で表示しようとすると例外を投げます
getComputedStyle のフラットツリー外要素 既定で無効になりました
Sub Apps API 削除されました

縦書きで、閉じ括弧で終わる段落の行が半分しか埋まらないことがあります

Chromium 側の不具合です。縦書きで、段落の途中に要素 (<span> <ruby> など) が
あり、閉じ括弧 (」』)〉】}]) で終わるとき、版面幅が特定の 8px の帯に
入ると、行が本来の半分ほどしか埋まりません。text-align: justify を併用すると
字間が倍近くに開くため目に付きます。

上流に報告済みです — crbug 542686223

詰めを保ったままの回避策はありません。 text-spacing-trim: space-all
症状は消えますが、約物の詰めが丸ごと効かなくなります。trim-start は発症する
幅が 8px ずれるだけで、回避になりません。


動かすために必要なもの


切り分け用のスイッチ

不具合の切り分けに使える環境変数です。通常の運用では設定しないでください。

変数 効果
BLINKGTK_GPU_MODE=software / egl 描画経路を選ぶ
BLINKGTK_EMPHASIS_INLINE=0 圏点の行間配置を切る (組版の比較検証用)

版数について

1.2.0 は製品の版で、Chromium baseline が 150 から 151 に変わったことを表します。
build1 は同じ製品版のなかでの作り直しの回数です。不具合のご報告には
build 番号までお知らせください。

パッケージ名やパスに出てくる 0.1(libblinkgtk-0.1.so.0 など)は API の版で、
製品の版とは独立しています。GTK4 の gtk-4.0 と同じ規約です。


連絡先