diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-03-24 07:38:31 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-03-24 07:38:31 (GMT) |
commit | b7347c96930027fc11b9c5038157f972d58a41bf (patch) | |
tree | 182ddabae529e89b28db93acb3404cd7424086ed /src/glibext | |
parent | 518ce6e1594ba80be4286bd3e561b0b7f73ce4b0 (diff) |
Built routine digest for tooltip hints.
Diffstat (limited to 'src/glibext')
-rw-r--r-- | src/glibext/gbufferview.c | 64 | ||||
-rw-r--r-- | src/glibext/gbufferview.h | 4 |
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 *); |