v1.0.10 iter8 以降の BlinkWebView
は、親コンテナのサイズ変更に自動追従します。
本ドキュメントではその動作仕様、移行時の注意点、および過去バージョンとの
違いを解説します。
BlinkWebView は GtkWidget
を直接継承しており、GTK4 canonical な
size_allocate vfunc でサイズ変更通知を受け取ります。内部で
Chromium の
RenderWidgetHostView::SetSize()
を呼び、レンダリング解像度を自動更新します。
開発者は blink_web_view_set_canvas_size()
を手動で呼ぶ必要はありません。
以下のイベントで、Chromium 側のビュー (RenderWidgetHostView) のサイズが自動的に更新されます:
| トリガ | 説明 |
|---|---|
| ウィンドウリサイズ | gtk_window_set_default_size()
やユーザによるドラッグリサイズ |
| 親レイアウトの再計算 | GtkBox / GtkGrid
内で他ウィジェットが追加・削除された場合 |
notify::scale-factor |
別モニタへドラッグ等による HiDPI スケール変化 |
size_allocate(w, h, baseline) の w,
h は GTK4 論理 (CSS) ピクセルdevice_scale_factor を掛けてgtk_scale_factor=2) では、論理 1280x800 → 物理
2560x1600 で描画#include <blink_gtk/blink_gtk.h>
#include <gtk/gtk.h>
int main(int argc, char* argv[]) {
blink_gtk_init(&argc, &argv); /* GTK4 は引数なし */
GtkWidget* window = gtk_window_new();
gtk_window_set_default_size(GTK_WINDOW(window), 1280, 800);
BlinkWebView* view = BLINK_WEB_VIEW(blink_web_view_new());
gtk_window_set_child(GTK_WINDOW(window), GTK_WIDGET(view));
gtk_window_present(GTK_WINDOW(window));
blink_web_view_load_uri(view, "https://www.example.com");
return blink_gtk_run_main_loop();
}ウィンドウリサイズ時に追加コードは不要です。BlinkWebView
が自動で
親コンテナサイズに追従します。
v1.0.10 iter7 以前では、BlinkWebView
が親コンテナサイズに追従せず、
Chromium 初期デフォルトの 800x600
固定で描画されていました。HiDPI 環境では
この 800x600 が物理ピクセル座標として扱われ、見かけ上は画面の左上 1/4
付近
(400x300 CSS px) に縮小表示される症状がありました。
回避策として blink_web_view_set_canvas_size(view, w, h)
を手動で呼ぶ
必要がありました。しかし GTK4 では size-allocate シグナルが
deprecated で、
GtkWidgetClass::size_allocate_vfunc を override
するしかありません。
C アプリからは現実的に困難でした。
blink_gtk_api.cc に以下を追加して解消:
GtkWidgetClass::size_allocate vfunc を
BlinkWebView クラスで override
SetCanvasSize() を呼ぶmeasure vfunc の natural を 0x0 に変更
hexpand=TRUE / vexpand=TRUE
(内部で自動設定) と組み合わせてnotify::scale-factor ハンドラ追加
measure が natural=0
を返すため、親コンテナ側で明示的に最小サイズを
確保していないと、レイアウト計算上 0x0
に縮退する可能性があります。
実用上は gtk_window_set_default_size() か
gtk_widget_set_size_request()
で最低サイズを指定してください。
set_canvas_size() は引き続き利用可能ヘッドレステストや自動 resize
診断など、手動でサイズ制御したい用途では
blink_web_view_set_canvas_size(view, w, h)
を引き続き使用できます。
手動呼出しは size_allocate
経由の自動更新と共存可能です。
size_allocate は GTK
レイアウト中に同一サイズで複数回呼ばれることが
あります。内部で連続同サイズを検出し Chromium IPC を抑制するため、
パフォーマンス影響はありません。
BlinkGTK リリースビルドは
release/scripts/check-resize-follow.sh で
自動検証されます:
bash release/scripts/check-resize-follow.sh --tarball blinkgtk-*.tar.gzwindow size 1280x800 → 1600x1000 の resize が
size_allocate vfunc と
Chromium 側ビューの bounds
の両方で追従していることを確認します。追従失敗時はリリース
ブロッカーとなります。
最終更新: 2026-04-20 (v1.0.10 iter8)
作成者: BlinkGTK Project