gpt4 book ai didi

c - gtk+ 以编程方式在包含 vte 终端的scrolled_window 中向后滚动一行

转载 作者:行者123 更新时间:2023-11-30 17:59:32 25 4
gpt4 key购买 nike

我正在尝试设置按键功能来指定 Shift+向上组合键以在 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 中使用的调整,允许值的有效范围为调整->下限到调整->上限 - 调整->page_size。

它没有在 gtk_scrolled_window_set_v adjustmentment 下提供任何指导。

所以我想也许这个公式会给我单行的滚动步长:

 `step_size = ((upper - page_size) - lower)/page_size;`

我错了。我尝试了等于 GtkAdjust 结构的 step_increment 的步长设置:

 step_size = gtk_adjustment_get_step_increment(verticalAdjust);

这在很大程度上将步长设置为 1.0,并且当上限达到 ~60 时向后滚动太多。

我尝试了 0.1、1、10 的 step_size,但我似乎无法理解整个调整过程的工作原理。

我刚刚打开一个新的终端窗口并输入 dmesg,然后按一下 Shift + 向上键。我通过上面 printf 语句创建的输出验证了 step_size 为 1.0,upper 为 420,并且滚动窗口一直滚动到顶部。某些东西无法正常工作,或者我没有得到某些东西。

任何指导将不胜感激。谢谢。

最佳答案

啊,灯亮了!

简单地说,向后滚动您需要的一行:

    adjust = upper - page_size - 1;
gtk_adjustment_set_value (verticalAdjust, adjust);
gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW(scrollwin[0]), verticalAdjust);

要向后滚动另一行,您需要:

    adjust = upper - page_size - 2;
gtk_adjustment_set_value (verticalAdjust, adjust);
gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW(scrollwin[0]), verticalAdjust);

因此您需要在迭代之间存储一些值。据说 GtkAdjustment 应该能够帮助解决这个问题,但我一直不知道如何做到。或者也许我只是误解了文档。不管怎样,我只是决定用全局变量来做。

关于c - gtk+ 以编程方式在包含 vte 终端的scrolled_window 中向后滚动一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com