Cité de here:Comment est-ce que je comprends ce que cela signifie?
if (to_end)
{
/* If we want to scroll to the end, including horizontal scrolling,
* then we just create a mark with right gravity at the end of the
* buffer. It will stay at the end unless explicitely moved with
* gtk_text_buffer_move_mark.
*/
gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE);
/* Add scrolling timeout. */
return g_timeout_add (50, (GSourceFunc) scroll_to_end, textview);
}
else
{
/* If we want to scroll to the bottom, but not scroll horizontally,
* then an end mark won't do the job. Just create a mark so we can
* use it with gtk_text_view_scroll_mark_onscreen, we'll position it
* explicitely when needed. Use left gravity so the mark stays where
* we put it after inserting new text.
*/
gtk_text_buffer_create_mark (buffer, "scroll", &iter, TRUE);
/* Add scrolling timeout. */
return g_timeout_add (100, (GSourceFunc) scroll_to_bottom, textview);
}
Bien qu'il existe assez peu de lignes de commentaires, je ne comprends toujours pas la logique, surtout, quelle est la relation entre une marque et la position de défilement barre?
MISE À JOUR
Il semble que je suis trompé par ce commentaire:
/* and place the mark at iter. the mark will stay there after we
* insert some text at the end because it has right gravity.
*/
Say, la marque scroll
a laissé gravité, pas droit gravité, est-ce pas?
Mais je ne vois pas la raison pour laquelle 'mark' doit être ** left ** ou ** right ** gravity respectivement. Pouvez-vous expliquer cela? – Gtker
La 'gravité' des contrôles 'mark' où la' marque' est repositionnée si le texte est ajouté sur la même ligne, c'est-à-dire avec la gravité 'gauche' à gauche du texte, tandis que 'droite' mettez-le à la droite du texte. Personnellement, semble être un schéma de nommage assez obtus. – Kitsune
Je ne crois pas. 'mark' semble juste être un point dans le tampon que vous pouvez utiliser pour faire défiler plus tard (ou au moins se souvenir pour une utilisation ultérieure). – Kitsune