如何(编程)滚动到gtktextview / gtksourceview特定行(how to (pr

2019-09-17 07:20发布

我创建一个文本编辑器越来越熟悉C和GTK +的一种方式。 我使用GTK + -2.0&gtksourceview-2.0,和gtk_scrolled_window。 作为在创建一个goto功能浏览器的第一尝试我想我只是简单地创建的文档,并在其上它们发生线的对应阵列中找到的功能的阵列。 我有多少事。 我很惊讶地发现,有没有goto线的能力,我可以在devhelp很容易找到。 这听起来像gtk_text_view_scroll_to_mark()是我想要的东西(创建标记之后),但所有的* scroll_to功能需要一个within_margin,这是说实话,我真的不明白:

从devhelp:

此功能的目的,有效的屏幕被尺寸within_margin的余量降低。

这意味着什么?

我是差得远了? 如何创建这样滚动行号的功能?

谢谢。

UPDATE:以下三个功能被用来滚动到缓冲液中的线:

gtk_text_iter_set_line (&start, lineNums[9]);
gtk_text_buffer_add_mark (tbuffer, scroll2mark, &start);  
gtk_text_view_scroll_to_mark (text_view, scroll2mark, 0.0, TRUE, 0.0, 0.17);

gtk_text_view_scroll_to_mark的最后一个参数是用来获取目标行号与在缓冲区中的最上面一行来排队。 我想这个参数将无法在所有的屏幕尺寸工作,但我没有测试它。

该gtk_text_view_scroll_mark_onscreen功能让我靠近行号,但它只是一对夫妇超出文本区域的底部线。

Answer 1:

该within_margin参数控制筛,其中,滚动到的文本应该出现或者更确切地说它设置在该文本不应该出现在屏幕边框的空间量的区域。

这存在这样当你设置use_align为假(即你不希望文本在屏幕上的特定位置出现),你仍然可以确保文本不会在底部的顶部直接出现屏幕(这可能是坏的可读性目的)。

如果你完全不关心在该文本将出现的位置,你可以使用g_text_view_scroll_mark_on_screen只需要文本视图和一个标记,并没有进一步的论证。 这将始终滚动的最小量,以使文本显示在屏幕上。



文章来源: how to (programmatically) scroll to a specific line in gtktextview/gtksourceview