Как (программно) прокрутить до определенной строки в gtktextview/gtksourceview

Я создаю текстовый редактор, чтобы лучше познакомиться с C и gtk+. Я использую gtk+-2.0 & gtksourceview-2.0 и gtk_scrolled_window. В качестве первой попытки создания браузера функций goto я подумал, что просто создам массив функций, найденных в документе, и соответствующий массив строк, в которых они встречаются. Я так много сделал. Я был удивлен, обнаружив, что в devhelp нет такой возможности, как goto line. Похоже, что gtk_text_view_scroll_to_mark () - это то, что я хочу (после создания отметки), но все функции *scroll_to требуют в пределах_маргина, что, честно говоря, я не совсем понимаю.

Из devhelp:

Эффективный экран для целей этой функции уменьшается на величину поля в пределах_маргина.

Что это значит?

Я даже близко? Как я могу создать эту функцию прокрутки до номера строки?

Благодарю.

ОБНОВЛЕНИЕ: Следующие три функции были использованы для прокрутки до строки в буфере:

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 приблизила меня к номеру строки, но это была всего лишь пара строк в нижней части текстовой области.

1 ответ

Решение

Параметр Within_margin управляет областью экрана, в которой должен отображаться прокручиваемый текст, или, точнее, он определяет количество пространства на границе экрана, в которой текст не должен появляться.

Это происходит так, что когда вы устанавливаете для use_align значение false (т.е. вы не хотите, чтобы текст появлялся в определенной позиции на экране), вы все равно можете убедиться, что текст не отображается непосредственно вверху внизу экран (что может быть плохо для удобства чтения).

Если вас не волнует положение, в котором появится текст, вы можете использовать g_text_view_scroll_mark_on_screen который принимает только текстовое представление и отметку, а не дальнейшие аргументы. Это всегда прокручивает минимальную сумму, чтобы текст отображался на экране.

Другие вопросы по тегам