【问题标题】:how to (programmatically) scroll to a specific line in gtktextview/gtksourceview如何(以编程方式)滚动到 gtktextview/gtksourceview 中的特定行
【发布时间】:2012-05-19 05:34:46
【问题描述】:

我正在创建一个文本编辑器,以便更熟悉 C 和 gtk+。我正在使用 gtk+-2.0 & gtksourceview-2.0 和 gtk_scrolled_window 。作为创建 goto 函数浏览器的第一次尝试,我想我只需创建在文档中找到的函数数组以及它们出现的相应行数组。我做了那么多。我惊讶地发现在 devhelp 中没有可以轻松找到的 goto line 功能。听起来 gtk_text_view_scroll_to_mark () 是我想要的(在创建标记之后),但是所有 *scroll_to 函数都需要一个 inside_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 函数让我接近了行号,但它只是文本区域底部的几行。

【问题讨论】:

  • 我认为它只是允许您在视图中设置一个边距,滚动标记不会结束,除非您位于文档的末尾。通过这种解释,0.5 应该使标记滚动到视图的中心。但是,是的,描述很糟糕。

标签: c gtk gtksourceview


【解决方案1】:

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

这存在是为了当你将 use_align 设置为 false 时(即你不希望文本出现在屏幕上的特定位置),你仍然可以确保文本不会直接出现在屏幕底部(这可能不利于可读性)。

如果您根本不关心文本出现的位置,您可以使用g_text_view_scroll_mark_on_screen,它只接受文本视图和一个标记,而无需进一步的参数。这将始终滚动最小量以使文本出现在屏幕上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多