リリース日: 2026-08-08 / Chromium: 151.0.7922.71 / 言語: 日本語 | English
レンダリングエンジンを Chromium 151
に更新しました。日本語の組版に直接効く変更が
まとまって入っています。とくに縦組みで圏点を使う文書は、版面が変わります。
環境変数ひとつで 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
経路で「白いまま」
「小さく表示される」が再発していました。画面を見なくてもログから判定できる
検査を用意し、更新手順の必須項目にしています。
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
がずれることはもうありません。
縦組み 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() ではない */v1.1 系で同梱していた圏点まわりの独自 patch
を削除し、Chromium 151 標準の
挙動に一本化しました。151
で上流が同じ問題を解決したため、二重に手を入れる
必要がなくなっています。挙動は下記「圏点を付けても行送りが太らない」のとおりです。
これまで、圏点(傍点)を付けた行だけ行の高さが広がっていました。JIS X
4051 と JLReq は
圏点を行間に置き、行送りを変えないことを求めているので、規格とずれた状態でした。
151
で解消しています。縦組み、font-size: 16px、text-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>
のようなマークアップで、スペースの後に改行できるように
なりました。意図しない位置で行が折れる現象が減ります。
Chromium 150 から 151 で、44
の機能が新たに既定で有効になりました。角丸の論理方向指定、
text-fit、focusgroup、ホイールイベントの慣性情報などが含まれます。
版ごとの内訳は 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 ずれるだけで、回避になりません。
pkg-config --libs blinkgtk-0.1
を使えば自動的に含まれます。不具合の切り分けに使える環境変数です。通常の運用では設定しないでください。
| 変数 | 効果 |
|---|---|
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
と同じ規約です。