GtkWidget* gtk_layout_new(GtkAdjustment *hadjustment, GtkAdjustment *vadjustment);
hadjustment 控制水平捲動範圍與步進,vadjustment 控制垂直捲動。若傳入 NULL,GTK+ 會自動建立預設調整物件。
GtkAdjustment 封裝了 value(目前位置)、lower/upper(範圍)、step_increment(單步)、page_increment(頁步)、page_size(可視區大小)。Layout 內部會監聽這些調整物件的 value-changed 訊號,重新計算子元件座標並觸發重繪。
原始碼中先呼叫 gtk_layout_new(GTK_ADJUSTMENT(adjustment), GTK_ADJUSTMENT(adjustment2)),此時 adjustment 與 adjustment2 尚未初始化(野指標),導致行為未定義。隨後才用 gtk_adjustment_new() 建立調整物件,但 Layout 已持有無效指標,故參數設定無效果。
GtkAdjustment *hadj = gtk_adjustment_new(0, 0, 1000, 50, 100, 200);
GtkAdjustment *vadj = gtk_adjustment_new(0, 0, 1000, 50, 100, 200);
GtkWidget *layout = gtk_layout_new(hadj, vadj);
若需動態改變捲動範圍,可隨時呼叫 gtk_adjustment_set_upper() 等函數,Layout 會自動響應。
gtk_layout_put() 以絕對座標放置子元件。若子元件座標超出可視區,捲動條會自動出現(前提是 Layout 放入 GtkScrolledWindow)。範例缺少 ScrolledWindow,故捲動條不會顯示,調整參數看似無效果。
window → scrolled_window → layout → button
如此調整參數才會在 UI 上體現為捲動條範圍與步進。