summaryrefslogtreecommitdiff
path: root/src/gtkext
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
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')
-rw-r--r--src/gtkext/gtkbufferview-int.h2
-rw-r--r--src/gtkext/gtkbufferview.c41
-rw-r--r--src/gtkext/gtkviewpanel-int.h4
-rw-r--r--src/gtkext/gtkviewpanel.c37
-rw-r--r--src/gtkext/gtkviewpanel.h3
5 files changed, 85 insertions, 2 deletions
diff --git a/src/gtkext/gtkbufferview-int.h b/src/gtkext/gtkbufferview-int.h
index 4f82757..a6d937b 100644
--- a/src/gtkext/gtkbufferview-int.h
+++ b/src/gtkext/gtkbufferview-int.h
@@ -45,7 +45,7 @@ struct _GtkBufferView
gint left_text; /* Début d'impression du code */
GdkRectangle caret; /* Emplacement du curseur */
- const vmpa2t *caret_addr; /* Position mémoire du curseur */
+ const vmpa2t *caret_addr; /* Position mémoire du curseur */ /* FIXME : REMME */
guint caret_timer; /* Identifiant du chronomètre */
bool show_caret; /* Bascule entre les affichages*/
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. *
diff --git a/src/gtkext/gtkviewpanel-int.h b/src/gtkext/gtkviewpanel-int.h
index 90bd141..220b253 100644
--- a/src/gtkext/gtkviewpanel-int.h
+++ b/src/gtkext/gtkviewpanel-int.h
@@ -51,6 +51,9 @@ typedef void (* prepare_resize_fc) (GtkViewPanel *);
/* Indique la position d'affichage d'une adresse donnée. */
typedef bool (* get_addr_coordinates_fc) (const GtkViewPanel *, const vmpa2t *, gint *, gint *, ScrollPositionTweak);
+/* Fournit des éléments liés à la position courante dans la vue. */
+typedef bool (* get_view_position_fc) (const GtkViewPanel *, GBufferLine **, GBufferSegment **);
+
/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
typedef void (* cache_glance_fc) (GtkViewPanel *, cairo_t *, const GtkAllocation *, double);
@@ -87,6 +90,7 @@ struct _GtkViewPanelClass
compute_requested_size compute_size; /* Calcul de la taille requise */
compute_scroll_inc compute_inc; /* Calcul des bonds */
get_addr_coordinates_fc get_coordinates;/* Conversion adresse <-> pos. */
+ get_view_position_fc get_position; /* Indications sur la position */
};
diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c
index 40ae038..d434f1e 100644
--- a/src/gtkext/gtkviewpanel.c
+++ b/src/gtkext/gtkviewpanel.c
@@ -822,6 +822,43 @@ void gtk_view_panel_scroll_to_address(GtkViewPanel *panel, const vmpa2t *addr, S
/******************************************************************************
* *
+* Paramètres : panel = 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 : - *
+* *
+******************************************************************************/
+
+bool gtk_view_panel_get_position(const GtkViewPanel *panel, GBufferLine **line, GBufferSegment **segment)
+{
+ bool result; /* Bilan de l'opération */
+
+ if (GTK_VIEW_PANEL_GET_CLASS(panel)->get_position == NULL)
+ return false;
+
+ result = GTK_VIEW_PANEL_GET_CLASS(panel)->get_position(panel, line, segment);
+
+ if (result)
+ {
+ g_object_ref(G_OBJECT(*line));
+
+ if (segment != NULL && *segment != NULL)
+ g_object_ref(G_OBJECT(*segment));
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : panel = composant GTK à manipuler. *
* cairo = assistant pour la création de rendus. *
* area = taille de la surface réduite à disposition. *
diff --git a/src/gtkext/gtkviewpanel.h b/src/gtkext/gtkviewpanel.h
index c733314..080ad97 100644
--- a/src/gtkext/gtkviewpanel.h
+++ b/src/gtkext/gtkviewpanel.h
@@ -84,6 +84,9 @@ typedef enum _ScrollPositionTweak
/* S'assure qu'une adresse donnée est visible à l'écran. */
void gtk_view_panel_scroll_to_address(GtkViewPanel *, const vmpa2t *, ScrollPositionTweak);
+/* Fournit des éléments liés à la position courante dans la vue. */
+bool gtk_view_panel_get_position(const GtkViewPanel *, GBufferLine **, GBufferSegment **);
+
/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
void gtk_view_panel_cache_glance(GtkViewPanel *, cairo_t *, const GtkAllocation *, double);