diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-10-23 11:59:26 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-10-23 11:59:26 (GMT) |
commit | 3f05bacd4fec23824489b51d964a7ce3565bb85b (patch) | |
tree | 486cb1d96c11a33385a2155d2f326b88aae08e16 /src/glibext/gbufferview.c | |
parent | fa30b0fb42d2e229de9f760bfa842f25738efc18 (diff) |
Memorized all creators of line content at the line level and saved memory.
Diffstat (limited to 'src/glibext/gbufferview.c')
-rw-r--r-- | src/glibext/gbufferview.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/glibext/gbufferview.c b/src/glibext/gbufferview.c index cfa521e..2deeffe 100644 --- a/src/glibext/gbufferview.c +++ b/src/glibext/gbufferview.c @@ -1266,6 +1266,62 @@ GBufferLine *g_buffer_view_find_line_and_segment_at(GBufferView *view, gint *x, /****************************************************************************** * * +* Paramètres : view = visualisation à consulter. * +* x = abscisse comprise dans le segment recherché. [OUT] * +* y = ordonnée comprise dans la ligne recherchée. * +* idx = indice de la ligne trouvée ou NULL. [OUT] * +* display = règles d'affichage des colonnes modulables. * +* creator = instance à l'origine de la représentation. [OUT] * +* * +* Description : Fournit la ligne et son segment présents à une position. * +* * +* Retour : Ligne retrouvée ou NULL si aucune. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GBufferLine *g_buffer_view_find_line_and_creator_at(GBufferView *view, gint *x, gint y, size_t *idx, const bool *display, GObject **creator) +{ + GBufferLine *result; /* Ligne trouvée à retourner */ + size_t index; /* Indice de la ligne trouvée */ + GBufferViewClass *class; /* Classe pour les vues */ + line_width_summary summary; /* Résumé concis des largeurs */ + + /* Recherche d'une ligne correspondante */ + + result = g_buffer_view_find_line_at(view, y, &index); + + if (idx != NULL) *idx = index; + + /* Recherche du segment visé éventuel */ + + if (result != NULL && creator != NULL) + { + class = G_BUFFER_VIEW_GET_CLASS(view); + + if (*x < class->left_text) + *creator = NULL; + + else + { + g_width_tracker_get_local_width_summary(view->tracker, index, &summary); + + *x -= class->left_text; + *creator = g_buffer_line_get_creator_at(result, &summary, display, + (gint []) { 0 }, x, GDK_SCROLL_LEFT, true); + + } + + } + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : view = composant GTK à consulter. * * addr = adresse à présenter à l'écran. * * x = position horizontale au sein du composant. [OUT] * |