diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-03-08 19:30:52 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-03-08 19:30:52 (GMT) |
commit | 68bb7efaf61e4f5ca2f2cffce84995ffd667c4cc (patch) | |
tree | 9b6a6f63ee20b08d8c2ac35849ee051d61787447 /src/gtkext/gtkbufferview.c | |
parent | dc9e68505c4cc7ad208e63dbc7d0e0e8f582d0d9 (diff) |
Handle cross references as well as entry points.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@482 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/gtkext/gtkbufferview.c')
-rw-r--r-- | src/gtkext/gtkbufferview.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/gtkext/gtkbufferview.c b/src/gtkext/gtkbufferview.c index 30cf075..c7c0267 100644 --- a/src/gtkext/gtkbufferview.c +++ b/src/gtkext/gtkbufferview.c @@ -61,6 +61,9 @@ static void gtk_buffer_view_compute_scroll_inc(GtkBufferView *, gint, GtkOrienta /* Indique la position d'affichage d'une adresse donnée. */ static bool gtk_buffer_view_get_address_coordinates(const GtkBufferView *, const vmpa2t *, gint *, gint *, ScrollPositionTweak); +/* Fournit des éléments liés à la position courante dans la vue. */ +static bool gtk_buffer_view_get_position(const GtkBufferView *, GBufferLine **, GBufferSegment **); + /* Place en cache un rendu destiné à l'aperçu graphique rapide. */ static void gtk_buffer_view_cache_glance(GtkBufferView *, cairo_t *, const GtkAllocation *, double); @@ -117,6 +120,7 @@ static void gtk_buffer_view_class_init(GtkBufferViewClass *class) panel_class->compute_size = (compute_requested_size)gtk_buffer_view_compute_requested_size; panel_class->compute_inc = (compute_scroll_inc)gtk_buffer_view_compute_scroll_inc; panel_class->get_coordinates = (get_addr_coordinates_fc)gtk_buffer_view_get_address_coordinates; + panel_class->get_position = (get_view_position_fc)gtk_buffer_view_get_position; g_signal_new("caret-moved", GTK_TYPE_BUFFER_VIEW, @@ -255,7 +259,8 @@ static gboolean gtk_buffer_view_button_press(GtkWidget *widget, GdkEventButton * } else { - addr = g_buffer_view_compute_caret(view->buffer_view, line, index, real_x, pview->display, &new); + //addr = g_buffer_view_compute_caret_old(view->buffer_view, line, index, real_x, pview->display, &new); + addr = g_buffer_view_compute_caret(view->buffer_view, real_x, real_y, pview->display, &new); gtk_buffer_view_relocate_caret(view, &new, addr); } @@ -608,6 +613,40 @@ static bool gtk_buffer_view_get_address_coordinates(const GtkBufferView *view, c /****************************************************************************** * * +* Paramètres : view = composant GTK à consulter. * +* line = ligne de tampon où se trouve le curseur. [OUT] * +* segment = eventuel segment de ligne actif. [OUT] * +* * +* Description : Fournit des éléments liés à la position courante dans la vue.* +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool gtk_buffer_view_get_position(const GtkBufferView *view, GBufferLine **line, GBufferSegment **segment) +{ + GBufferSegment *seg; /* Segment à récupérer */ + + /* Si aucune position n'est définie... */ + if (view->caret_addr == NULL) + return false; + + *line = g_buffer_view_find_line_and_segment_at(view->buffer_view, + (gint []){ view->caret.x }, view->caret.y, NULL, + GTK_VIEW_PANEL(view)->display, &seg); + + if (segment != NULL) + *segment = seg; + + return (line != NULL); + +} + + +/****************************************************************************** +* * * Paramètres : view = composant GTK à manipuler. * * cairo = assistant pour la création de rendus. * * area = taille de la surface réduite à disposition. * |