summaryrefslogtreecommitdiff
path: root/src/gtkext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-01-31 22:50:42 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-01-31 22:50:42 (GMT)
commitf6eb49749d627de7d556139a392f73f0ca2862e8 (patch)
treedf84f4c54f9f4f59e9b392b66d4d3ee1ce8633c0 /src/gtkext
parent7ba93e4d9e3e722d8771d665c5217510105375d2 (diff)
Provided the current active object in display panels.
Diffstat (limited to 'src/gtkext')
-rw-r--r--src/gtkext/gtkbufferdisplay.c34
-rw-r--r--src/gtkext/gtkdisplaypanel-int.h5
-rw-r--r--src/gtkext/gtkdisplaypanel.c70
-rw-r--r--src/gtkext/gtkdisplaypanel.h6
4 files changed, 71 insertions, 44 deletions
diff --git a/src/gtkext/gtkbufferdisplay.c b/src/gtkext/gtkbufferdisplay.c
index 3548b3e..d941ff2 100644
--- a/src/gtkext/gtkbufferdisplay.c
+++ b/src/gtkext/gtkbufferdisplay.c
@@ -73,6 +73,9 @@ static const vmpa2t *gtk_buffer_display_get_caret_location(const GtkBufferDispla
/* Indique la position d'affichage d'une adresse donnée. */
static bool gtk_buffer_display_get_address_coordinates(const GtkBufferDisplay *, const vmpa2t *, gint *, gint *, ScrollPositionTweak);
+/* Fournit l'élément actif lié à la position courante. */
+GObject *gtk_buffer_display_get_active_object(const GtkBufferDisplay *);
+
/* Place en cache un rendu destiné à l'aperçu graphique rapide. */
static void gtk_buffer_display_cache_glance(GtkBufferDisplay *, cairo_t *, const GtkAllocation *, double);
@@ -142,6 +145,7 @@ static void gtk_buffer_display_class_init(GtkBufferDisplayClass *class)
panel_class->adjust = (adjust_scroll_value_fc)gtk_buffer_display_adjust_scroll_value;
panel_class->get_caret_loc = (get_caret_location_fc)gtk_buffer_display_get_caret_location;
panel_class->get_coordinates = (get_addr_coordinates_fc)gtk_buffer_display_get_address_coordinates;
+ panel_class->get_active = (get_active_object_fc)gtk_buffer_display_get_active_object;
panel_class->move_caret_to = (move_caret_to_fc)_gtk_buffer_display_move_caret_to;
panel_class->cache_glance = (cache_glance_fc)gtk_buffer_display_cache_glance;
@@ -706,6 +710,36 @@ static bool gtk_buffer_display_get_address_coordinates(const GtkBufferDisplay *d
/******************************************************************************
* *
+* Paramètres : display = composant GTK à consulter. *
+* *
+* Description : Fournit l'élément actif lié à la position courante. *
+* *
+* Retour : Objet actif courant ou NULL si aucun. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GObject *gtk_buffer_display_get_active_object(const GtkBufferDisplay *display)
+{
+ GObject *result; /* Trouvaille à retourner */
+
+ /* Si aucune position n'est définie... */
+ if (is_invalid_vmpa(&display->caret_addr))
+ result = NULL;
+
+ else
+ result = g_buffer_view_find_creator(display->view,
+ display->caret.x, display->caret.y,
+ GTK_DISPLAY_PANEL(display)->display_options);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : display = composant GTK à manipuler. *
* cairo = assistant pour la création de rendus. *
* area = taille de la surface réduite à disposition. *
diff --git a/src/gtkext/gtkdisplaypanel-int.h b/src/gtkext/gtkdisplaypanel-int.h
index 4425427..106663f 100644
--- a/src/gtkext/gtkdisplaypanel-int.h
+++ b/src/gtkext/gtkdisplaypanel-int.h
@@ -54,6 +54,9 @@ typedef const vmpa2t * (* get_caret_location_fc) (const GtkDisplayPanel *);
/* Indique la position d'affichage d'une adresse donnée. */
typedef bool (* get_addr_coordinates_fc) (const GtkDisplayPanel *, const vmpa2t *, gint *, gint *, ScrollPositionTweak);
+/* Fournit l'élément actif lié à la position courante. */
+typedef GObject * (* get_active_object_fc) (const GtkDisplayPanel *);
+
/* Fournit des éléments liés à la position courante dans la vue. */
typedef bool (* get_view_position_fc) (const GtkDisplayPanel *, GBufferLine **, GObject **);
@@ -95,7 +98,7 @@ struct _GtkDisplayPanelClass
define_address_fc define; /* Centrage sur une partie */
get_caret_location_fc get_caret_loc; /* Adresse du curseur */
get_addr_coordinates_fc get_coordinates;/* Conversion adresse <-> pos. */
- get_view_position_fc get_position; /* Indications sur la position */
+ get_active_object_fc get_active; /* Infos sur l'objet actif */
move_caret_to_fc move_caret_to; /* Déplacement du curseur */
cache_glance_fc cache_glance; /* Cache de la mignature */
diff --git a/src/gtkext/gtkdisplaypanel.c b/src/gtkext/gtkdisplaypanel.c
index 989ca85..31b3b58 100644
--- a/src/gtkext/gtkdisplaypanel.c
+++ b/src/gtkext/gtkdisplaypanel.c
@@ -892,6 +892,36 @@ const vmpa2t *gtk_display_panel_get_caret_location(const GtkDisplayPanel *panel)
/******************************************************************************
* *
+* Paramètres : panel = composant GTK à consulter. *
+* *
+* Description : Fournit l'élément actif lié à la position courante. *
+* *
+* Retour : Objet actif courant ou NULL si aucun. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GObject *gtk_display_panel_get_active_object(const GtkDisplayPanel *panel)
+{
+ GObject *result; /* Trouvaille à retourner */
+
+ if (GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_active == NULL)
+ result = NULL;
+
+ else
+ result = GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_active(panel);
+
+ if (result != NULL)
+ g_object_ref(G_OBJECT(result));
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : panel = composant GTK à manipuler. *
* addr = adresse à présenter à l'écran. *
* tweak = adaptation finale à effectuer. *
@@ -994,46 +1024,6 @@ void gtk_display_panel_request_move(GtkDisplayPanel *panel, const vmpa2t *addr)
/******************************************************************************
* *
-* 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_display_panel_get_position(const GtkDisplayPanel *panel, GBufferLine **line, GObject **creator)
-{
- bool result; /* Bilan de l'opération */
-
- *line = NULL;
- if (creator != NULL) *creator = NULL;
-
- if (GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_position == NULL)
- return false;
-
- result = GTK_DISPLAY_PANEL_GET_CLASS(panel)->get_position(panel, line, creator);
-
- if (result)
- {
- g_object_ref(G_OBJECT(*line));
-
- if (creator != NULL && *creator != NULL)
- g_object_ref(G_OBJECT(*creator));
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : panel = composant GTK à consulter. *
* event = informations liées à l'événement. *
* *
diff --git a/src/gtkext/gtkdisplaypanel.h b/src/gtkext/gtkdisplaypanel.h
index 7d4c824..5b6de36 100644
--- a/src/gtkext/gtkdisplaypanel.h
+++ b/src/gtkext/gtkdisplaypanel.h
@@ -78,6 +78,9 @@ typedef enum _ScrollPositionTweak
/* Indique la position courante du curseur. */
const vmpa2t *gtk_display_panel_get_caret_location(const GtkDisplayPanel *);
+/* Fournit l'élément actif lié à la position courante. */
+GObject *gtk_display_panel_get_active_object(const GtkDisplayPanel *);
+
/* S'assure qu'une adresse donnée est visible à l'écran. */
void _gtk_display_panel_scroll_to_address(GtkDisplayPanel *, const vmpa2t *, ScrollPositionTweak, bool);
@@ -88,9 +91,6 @@ void _gtk_display_panel_scroll_to_address(GtkDisplayPanel *, const vmpa2t *, Scr
/* Demande à qui veut répondre un déplacement du curseur. */
void gtk_display_panel_request_move(GtkDisplayPanel *, const vmpa2t *);
-/* Fournit des éléments liés à la position courante dans la vue. */
-bool gtk_display_panel_get_position(const GtkDisplayPanel *, GBufferLine **, GObject **);
-
#endif /* _GTKEXT_DISPLAYPANEL_H */