summaryrefslogtreecommitdiff
path: root/src/glibext/gbufferview.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-10-23 11:59:26 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-10-23 11:59:26 (GMT)
commit3f05bacd4fec23824489b51d964a7ce3565bb85b (patch)
tree486cb1d96c11a33385a2155d2f326b88aae08e16 /src/glibext/gbufferview.c
parentfa30b0fb42d2e229de9f760bfa842f25738efc18 (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.c56
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] *