我正在创建一个文本编辑器,作为更熟悉C和gtk+的一种方式。 我正在使用gtk+-2.0和gtksourceview-2.0和gtk_scrolled_window。 作为创建goto函数浏览器的第一次尝试,我认为我只需创建一个在文档中找到的函数数组以及它们出现的相应行数组。 我做了很多。 我很惊讶地发现没有可以在 devhelp 中轻松找到的 goto line 功能。 听起来gtk_text_view_scroll_to_mark((是我想要的(在创建标记之后(,但是所有*scroll_to函数都需要within_margin,老实说我真的不明白。
来自开发帮助:
用于此功能的有效屏幕减少了大小within_margin的余量。
那是什么意思?
我甚至接近吗? 如何创建此滚动到行号功能?
谢谢。
更新:以下三个函数用于滚动到缓冲区中的一行:
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函数让我接近行号,但它离文本区域底部只有几行。
within_margin 参数控制应显示滚动到的文本的屏幕区域,或者更准确地说,它设置不应显示文本的屏幕边框处的空间量。
这样做是为了当您将use_align设置为 false 时(即您不希望文本出现在屏幕上的特定位置(,您仍然可以确保文本不会直接出现在屏幕底部的顶部(这可能不利于可读性(。
如果您根本不关心文本显示的位置,则可以使用仅接受文本视图和标记而不带进一步参数的g_text_view_scroll_mark_on_screen
。这将始终滚动最小量以使文本显示在屏幕上。