我正在尝试设置按键功能以分配 shift+up 组合键以在 vte 终端窗口中向后滚动一行。这是我到目前为止所拥有的:
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 中使用的调整,允许值的有效范围从调整->下限到调整->上限-调整->页面大小。
它没有给出任何指导gtk_scrolled_window_set_vadjustment
。
所以我想也许这个公式会给我一行的滚动步长:
`step_size = ((upper - page_size) - lower)/page_size;`
我错了。我尝试了一个等于 GtkAdjust 结构集的 step_increment 的步长:
step_size = gtk_adjustment_get_step_increment(verticalAdjust);
这只是让 step_size 在大多数情况下保持在 1.0,并且当上限达到 ~60 时向后滚动太多。
我尝试了 0.1、1、10 的 step_size,但我似乎无法理解整个调整的工作原理。
我刚刚打开了一个新的终端窗口并输入了 dmesg 然后一个 shift+up。我通过上面 printf 语句创建的输出验证了 step_size 是 1.0,upper 是 420,滚动窗口一直滚动到顶部。某些东西工作不正常,或者我没有得到任何东西。
任何指导将不胜感激。谢谢。