キープレス機能をセットアップして、Shift + Upキーの組み合わせをvteターミナルウィンドウで1行スクロールバックするように割り当てようとしています。これが私がこれまでに持っているものです:
case GDK_Up:
if (event -> state & GDK_SHIFT_MASK)
{
GtkAdjustment *verticalAdjust;
gdouble lower = 0;
gdouble upper = 0;
gdouble page_size = 0;
gdouble step_size = 0.1;
verticalAdjust = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(scrollwin[0]));
lower = gtk_adjustment_get_lower(verticalAdjust);
upper = gtk_adjustment_get_upper(verticalAdjust);
page_size = gtk_adjustment_get_page_size(verticalAdjust);
step_size = ((upper - page_size) - lower)/page_size;
gtk_adjustment_set_value (verticalAdjust, step_size);
gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW(scrollwin[0]), verticalAdjust);
printf("vertAdj: %f, lower: %f, upper: %f, pg_size: %f, step_size: %f\n", gtk_adjustment_get_value(verticalAdjust), lower, upper, page_size, step_size);
return TRUE;
}
私は次のドキュメントを読みましたgtk_adjustment_set_value ()
:
GtkScrollbar で使用される調整の場合、許容される値の有効な範囲は、調整 -> 下限から調整 -> 上限 - 調整 -> page_size になることに注意してください。
でのガイダンスはありませんgtk_scrolled_window_set_vadjustment
。
したがって、この式で1行のスクロールステップサイズが得られるのではないかと思いました。
`step_size = ((upper - page_size) - lower)/page_size;`
私は間違っていた。GtkAdjust 構造体 Set の step_increment に等しいステップ サイズを試しました。
step_size = gtk_adjustment_get_step_increment(verticalAdjust);
これにより、ほとんどの場合、step_size が 1.0 のままになり、upper が ~60 に達するとスクロールしすぎました。
step_size を 0.1、1、10 に設定してみましたが、この調整全体がどのように機能するのかまったく理解できません。
新しいターミナル ウィンドウを開いて dmesg と入力し、次に Shift+Up を 1 回入力しました。上記の printf ステートメントによって作成された出力で、step_size が 1.0、upper が 420 で、スクロールされたウィンドウが一番上までスクロールしたことを確認しました。何かが正しく機能していないか、何かが得られません。
どんなガイダンスでも大歓迎です。ありがとう。