summaryrefslogtreecommitdiff
path: root/src/glibext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-03-24 07:38:31 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-03-24 07:38:31 (GMT)
commitb7347c96930027fc11b9c5038157f972d58a41bf (patch)
tree182ddabae529e89b28db93acb3404cd7424086ed /src/glibext
parent518ce6e1594ba80be4286bd3e561b0b7f73ce4b0 (diff)
Built routine digest for tooltip hints.
Diffstat (limited to 'src/glibext')
-rw-r--r--src/glibext/gbufferview.c64
-rw-r--r--src/glibext/gbufferview.h4
2 files changed, 68 insertions, 0 deletions
diff --git a/src/glibext/gbufferview.c b/src/glibext/gbufferview.c
index 6a5b6d4..e134118 100644
--- a/src/glibext/gbufferview.c
+++ b/src/glibext/gbufferview.c
@@ -893,6 +893,70 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d
+/******************************************************************************
+* *
+* Paramètres : view = vue de tampon à mettre à jour. *
+* x = abscisse de la zone principale à traiter. *
+* y = ordonnée de la zone principale à traiter. *
+* display = règles d'affichage des colonnes modulables. *
+* *
+* Description : Trouve le créateur à l'origine d'un emplacement donné. *
+* *
+* Retour : Créateur trouvé ou NULL si aucun. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GObject *g_buffer_view_find_creator(GBufferView *view, gint x, gint y, const bool *display)
+{
+ GObject *result; /* Trouvaille à faire remonter */
+ gint text_pos; /* Abscisse de départ du texte */
+ gint lheight; /* Hauteur d'une ligne */
+ size_t index; /* Indice de ligne de tampon */
+ GBufferLine *line; /* Ligne à la position courante*/
+ line_width_summary summary; /* Résumé concis des largeurs */
+
+ result = NULL;
+
+ /* Zone d'intervention bornée ! */
+
+ text_pos = g_buffer_cache_get_text_position(view->cache);
+
+ if (x < text_pos)
+ goto gbvfc_done;
+
+ /* Détermination de la ligne concernée */
+
+ lheight = g_buffer_cache_get_line_height(view->cache);
+ index = y / lheight;
+
+ index += view->first;
+
+ if (index > view->last)
+ goto gbvfc_done;
+
+ line = g_buffer_cache_find_line_by_index(view->cache, index);
+
+ assert(line != NULL);
+
+ /* Recherche d'un segment et de son empreinte */
+
+ g_width_tracker_get_local_width_summary(view->tracker, index, &summary);
+
+ x -= text_pos;
+
+ result = g_buffer_line_get_creator_at(line, &summary, display, (gint []) { 0 }, &x, GDK_SCROLL_LEFT, false);
+
+ g_object_unref(G_OBJECT(line));
+
+ gbvfc_done:
+
+ return result;
+
+}
+
+
diff --git a/src/glibext/gbufferview.h b/src/glibext/gbufferview.h
index 82995d1..6336fb4 100644
--- a/src/glibext/gbufferview.h
+++ b/src/glibext/gbufferview.h
@@ -85,6 +85,10 @@ bool g_buffer_view_move_caret(GBufferView *, bool, GdkScrollDirection, const boo
+/* Trouve le créateur à l'origine d'un emplacement donné. */
+GObject *g_buffer_view_find_creator(GBufferView *, gint, gint, const bool *);
+
+
/* Supprime toute mise en évidence de segments. */
bool g_buffer_view_unhighlight_segments(GBufferView *);