Skip to content

Releases: daisy19gnu/blinkgtk-dist

BlinkGTK 1.2.0-build2 — 版の名乗りと版面メトリクス

Choose a tag to compare

@daisy19gnu daisy19gnu released this 03 Aug 15:02

Chromium 151.0.7922.71 ベース。build1 と同じエンジン基盤で、版の名乗りと版面メトリクスの公開が入っています。

このビルドで加わったもの

版が正しく名乗られる (#129)

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

navigator.userAgent が固定文字列で、エンジンを更新しても追従していませんでした。8 メジャー版古い版を名乗っていたことになります。「古い版を名乗って安全側」ではなく、実際にある機能を無いと判定される方向の誤りです。

版は blink_gtk_get_version() / blink_gtk_get_chromium_version()同じ単一ソースから出ます。

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

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 のメインループが回りません。コンパイルも起動も通るぶん気付きにくいものでした。

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 を削除 (#127)

Chromium 151 が上流で同じ問題を解決したため、独自 patch を外して151 標準の挙動に一本化しました。

検証

  • V8 三点 15.1.206.10 整合 (libv8 / snapshot_blob / v8_context_snapshot)
  • 必須ファイル 12 件、SONAME-versioned .so + ICD JSON
  • RPM: 全 named 依存が Fedora で解決可能、GPG 署名済
  • 同梱ドキュメント: ja/en 完備 + WebKitGTK 同等種別 + 版数整合

検証手順

gpg --import BlinkGTK-GPG-KEY.asc
gpg --verify SHA256SUMS.asc SHA256SUMS
sha256sum -c SHA256SUMS

必要なもの

GTK4 4.6.0+ / GLib 2.70.0+ / Wayland 1.18.0+ (Wayland 専用)

BlinkGTK 1.2.0-build1 — Chromium 151

Choose a tag to compare

@daisy19gnu daisy19gnu released this 01 Aug 09:41

BlinkGTK 1.2.0-build1 リリースノート

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

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


このリリースでできるようになったこと

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

これまで、圏点(傍点)を付けた行だけ行の高さが広がっていました。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 削除されました

動かすために必要なもの

  • Linux (Wayland)
  • GTK 4.6 以降 / GLib 2.70 以降
  • 組み込みアプリは PartitionAlloc allocator shim を直接リンクしてください。
    pkg-config --libs blinkgtk-0.1 を使えば自動的に含まれます。
    この要件は 151 でも継続します(本版のビルドで確認済み)。
    詳細は 組み込み・統合ガイド

切り分け用のスイッチ

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

変数 効果
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 と同じ規約です。


連絡先

BlinkGTK v1.1.0-build6

Choose a tag to compare

@daisy19gnu daisy19gnu released this 29 Jul 12:52

BlinkGTK 1.1.0-build6 リリースノート

日付: 2026-07-29
Chromium: 150.0.7871.46 (stable)
状態: 開発版 (1.1.0-dev)。本配布物は検証用途を含みます。

このリリースでできるようになったこと

文字サイズを変えてもページが白くならない

文字サイズを大きく変えた直後に、ページが白紙のまま固定される問題を解消しました。
見開きの縦書き表示で特に起きやすく、これまでは文字サイズ変更を備えた読書アプリが
成立しませんでした。

大きなリフローの途中で描画の差分領域が空と計算され、白いタイルが有効なまま
固定されるのが原因でした。真因まで辿って修正し、意図的に不具合を注入して
再発を検出する回帰試験を組み込んであります (Issue #120)。

静止時に CPU を消費しない

何も操作していない間、CPU を常時 1 コア近く消費し続けていた問題を解消しました。
バッテリー駆動の端末や、キオスク端末のように電源を入れたまま置いておく機器でも
使えます (Issue #115)。

日本語の縦書きで段組みができる

段組み (column-count) と writing-mode: vertical-rl を組み合わせたとき、列の
境目にかかる行が隣の列に欠けて描画される問題を解消しました。縦書きの電子書籍や、
新聞・雑誌のような多段組みの版面が組めます。

既定では無効です。従来の描画を変えないため、起動時に明示して有効にします。

myapp --enable-blink-features=CJKVerticalColumnFragmentation

現段階の実装は、列幅 600px・column-gap: 0・直交ルートの border/padding が 0 という
条件を前提としています。この範囲を外れる版面は従来どおりの描画になります
(Issue #110)。

権限の要求をアプリ側で決められる

Web ページからの位置情報・通知などの要求を、アプリが受け取って許可・拒否を返せる
ようになりました。既定は拒否です。シグナルを繋がなければ、すべての要求が自動的に
拒否されます。

キオスク端末や電子書籍リーダーのように「利用者に権限ダイアログを出したくない」
「特定の要求だけ通したい」という用途で、挙動を保証できます。

static gboolean on_permission(BlinkWebView *view,
                              BlinkPermissionRequest *req,
                              gpointer user_data) {
    const char *kind = blink_permission_request_get_type_name(req);
    if (g_strcmp0(kind, "notifications") == 0)
        blink_permission_request_allow(req);   /* 通知だけ許可 */
    else
        blink_permission_request_deny(req);
    return TRUE;   /* 処理したことを伝える */
}

g_signal_connect(view, "permission-request", G_CALLBACK(on_permission), NULL);

User-Agent と Cookie を差し替えられる

blink_web_view_set_user_agent() で User-Agent を上書きし、
blink_web_view_set_cookie() で Cookie を仕込めます。特定のサービス向けの専用
クライアントを作る場合や、認証済みの状態で起動したい場合に使えます。

Python や JavaScript から書ける

GObject Introspection まわりを整備しました。列挙型 (LoadEvent / LoadError /
GpuMode / ContentPolicy) を GType として登録し、プロパティ変更の notify:: 通知と
uri-changed シグナルが実際のナビゲーションで発火するようにしています。
PyGObject と GJS から動作を確認済みです。

マウス操作が実用に耐えるようになった

ホイールスクロールの座標、スクロールバーのつまみのドラッグ、ページ遷移後の
クリックが正しく動くようになりました。これまでは画面中央以外がスクロールできない、
本を切り替えたあとクリックが効かず再起動が必要、といった状態でした
(Issue #112 / #114)。

アプリを好きな場所に置ける

blink_gtk_set_resources_path() が Chromium のすべてのリソースに効くように
なりました。従来はリソースパックだけが実行ファイルの隣を見ていたため、独自の
ディレクトリ構成を持つアプリが起動できませんでした。

100 行で組み込み方が分かる

同梱するサンプルを、https://google.com/ を表示するだけの blinkgtk_browser
(105 行) 1 本にしました。examples/make と打つだけでビルドできます。従来
同梱していた開発用ブラウザは、描画経路の切り替えなど開発時にしか使わない機能を
多く含み、組み込み方を知るための例としては大きすぎました。

なお メインループだけは GTK と書き方が違いますg_application_run() ではなく
blink_gtk_run_main_loop() を呼んでください (前者では画面が白いままになります)。
GTK4 そのものの使い方は https://docs.gtk.org/gtk4/ を参照してください。

動かすために必要なもの

Chromium 150.0.7871.46 (stable) をベースにしています。

パッケージは WebKitGTK と同じく 3 つに分かれています。アプリを 動かす だけなら
runtime、ビルド するなら devel も、Python や JavaScript から使う なら gir も
入れてください。

中身 必要になる場面
runtime 共有ライブラリと Chromium ランタイム 実行
devel ヘッダと blinkgtk-0.1.pc ビルド
gir GObject Introspection typelib Python / GJS

リンクは必ず pkg-config --cflags --libs blinkgtk-0.1 を通してください。
-lblinkgtk だけを手で書くと、ビルドも起動も通るのにページが白いままになります
(Chromium の allocator shim が実行ファイルの直接依存として必要なためです)。

共有ライブラリの SONAME は libblinkgtk-0.1.so.0 に版数付けされています。
各リリースには第三者ライセンス表記 (THIRD_PARTY_NOTICES.html) と SHA256SUMS
付きます。

切り分け用のスイッチ

上記の修正が原因で不都合が出た場合に、修正前の挙動へ戻すための環境変数です。
通常は設定不要です。

環境変数 戻る挙動
BLINKGTK_120_INVAL_FALLBACK=0 白紙固定の修正 (差分領域のフォールバック) を無効化
BLINKGTK_120_ACT_REDRAW=0 白紙固定の修正 (再描画の供給) を無効化
BLINKGTK_CAPTURE_DAMAGE_GATE=0 CPU 消費削減のうち、描画取得の間引きを無効化
BLINKGTK_PUMP_LEGACY=1 CPU 消費削減のうち、メインループの変更を無効化
BLINKGTK_PUMP_RESCUE=0 メインループの起床ハートビートを無効化
BLINKGTK_EGL_FRACTIONAL=1 実験中の分数スケーリングを有効化 (既定は整数、Issue #117)

公開している環境変数の一覧は、同梱の api-reference/environment-variables-ja.md にあります。
ここに載っていないものは内部診断用で、予告なく変わります。

修正の一覧

上記に含まれない修正と、build ごとの内訳です。

build6

同梱ドキュメントの是正のみで、バイナリに変更はありません。

  • ドキュメントに書かれていたビルドコマンド (gcc ... -lblinkgtk) が、記載どおりに
    実行すると失敗する状態でした。10 ファイル 16 箇所を是正しています。doc のビルド
    コマンドを実際に実行して検証するゲートを追加しました。
  • 「WebKitGTK と完全互換」という記述は誤りでした。関数名も対象オブジェクトも
    異なります。実態に沿う表現に改めました。
  • 対象バージョン表記が v0.9 系のまま残っていた箇所を更新しました。
  • 開発用の内部番号 (CP 番号・Build 番号) を利用者向けの記述から除きました。
  • ドキュメント間のリンクが Web で開けなかった問題を修正しました。
  • 説明が先に長く続いて手順に辿り着けない構成を、先に手順・後に仕組みへ改めました。

build5

  • blink_gtk_set_resources_path() がリソースパックに効いていなかった問題を修正。
    実行ファイルをリソースと別の場所に置くと
    Check failed: data_pack->LoadFromPath(path) で起動できませんでした。
  • 同梱サンプルの実行ファイルに、ビルド環境の絶対パスが rpath として埋め込まれて
    いた問題を修正。
  • 同梱サンプルを blinkgtk_browser に入れ替え。
  • 設定 API のドキュメントから、同梱サンプルに存在しないコマンドラインオプションの
    例を削除し、API での設定例に置き換え。

build4

build2 / build3 の同梱ドキュメントに、同梱バイナリに存在しない API を記載した箇所が
20 種
ありました。記載どおりに書くとビルドできない状態で、settings-api /
c-api-reference / navigation-api / signals-api と各チュートリアルが該当します。

  • 記載名が実装と食い違っていたものを実名に修正
    (blink_web_view_set_enable_javascriptblink_web_view_set_javascript_enabled
    blink_web_view_set_auto_load_imagesblink_web_view_set_images_enabled)。
  • User-Agent / Cookie / 権限要求を実装。
  • 実装のないドキュメント (INI 形式の設定ファイル API、アクセシビリティ API) は同梱から
    取り下げ。実装後に改めて提供します。
  • 配布物そのものを展開して doc と binary の整合を機械検証するゲートを追加し、公開の
    前提条件としました。
  • 保守されていない検査用プログラム (api_check.c / api_tester.c) の同梱を終了。
  • examples/Makefile を pkg-config ベースに差し替え (従来のものは autotools が生成した
    もので、生成環境の絶対パスを含み配布先では動きませんでした)。
  • tarball / RPM / DEB のすべてを build4 として再生成 (build3 は RPM のみの差し替え)。

build2 (v1.1 系の初回一般公開版、2026-07-21)

build1 は内部検証のみで一般公開していません。

  • Chromium 150 (stable) へ移行。V8 スナップショットの整合、描画スモーク、実機での
    縦組み描画 (EGL 経路を含む) を検証済み。
  • 共有ライブラリの SONAME を libblinkgtk-0.1.so.0 に版数付け。
  • runtime / devel / gir の 3 分割配布を開始。
  • メインループに 100ms の起床ハートビートを追加し、滞留した処理の遅延を有界化
    (アイドル時の負荷増は実測 0.5% 未満)。
  • 公開している環境変数の一覧 (environment-variables-{ja,en}.md) を同梱ドキュメントに
    追加。
  • 診断用の基盤 (フレーム検査・不具合注入など) は環境変数で無効を既定として同梱して
    おり、通常の動作には影響しません。

互換性

  • 利用側 (consumer) は PartitionAlloc allocator shim の直接リンクが必要です
    (同梱の pkg-config blinkgtk-0.1.pc が処理します。Issue #90)。
  • C API に互換性を壊す変更はありません。
  • SONAME 版数付け (libblinkgtk-0.1.so.0) により、consumer は再リンクで versioned な
    依存を持ちます。devel パッケージの pkg-config 経由でビルドすれば自動的に整合します。

既知の制限

  • CJKVerticalColumnFragmentation は列幅 600px / column-gap 0 / 直交ルートの
    border·padding 0 を前提とした段階の実装です (experimental、既定無効)。
  • tarball (FHS) 実行時は runtime の ld.so.conf.d 断片または LD_LIBRARY_PATH
    private dir (/usr/lib64/blinkgtk-0.1/) を解決してください。
  • アイドル時の CPU 消費 (Issue #115) は継続調査中です。