我正在创建一个文本编辑器,以便更熟悉C和gtk +。我使用的是gtk + -2.0& gtksourceview-2.0和gtk_scrolled_window。作为创建goto函数浏览器的第一次尝试,我想我只需创建一个在文档中找到的函数数组以及它们出现的相应行数。我做了那么多。我很惊讶地发现没有goto line功能,我可以在devhelp中轻松找到。听起来像gtk_text_view_scroll_to_mark()就是我想要的(在创建标记之后),但是所有* scroll_to函数都需要一个within_margin,说实话我真的不明白。:
来自devhelp:
用于此功能的有效屏幕缩小了in_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函数让我接近行号,但它只是文本区域底部的几行。
答案 0 :(得分:2)
within_margin参数控制滚动到文本应该出现的屏幕区域,或者更确切地说,它设置屏幕边框中不应出现文本的空间量。
这样做是为了当你将use_align设置为false时(即你不希望文本显示在屏幕上的特定位置),你仍然可以确保文本不会直接出现在屏幕的顶部。屏幕底部(可能对可读性不利)。
如果您根本不关心文本的显示位置,可以使用g_text_view_scroll_mark_on_screen
,它只接受文本视图和标记,不再使用其他参数。这将始终滚动最小量以使文本显示在屏幕上。