summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkbufferview.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-03-08 19:30:52 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-03-08 19:30:52 (GMT)
commit68bb7efaf61e4f5ca2f2cffce84995ffd667c4cc (patch)
tree9b6a6f63ee20b08d8c2ac35849ee051d61787447 /src/gtkext/gtkbufferview.c
parentdc9e68505c4cc7ad208e63dbc7d0e0e8f582d0d9 (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.c41
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. *