diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-01-31 22:50:42 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-01-31 22:50:42 (GMT) |
commit | f6eb49749d627de7d556139a392f73f0ca2862e8 (patch) | |
tree | df84f4c54f9f4f59e9b392b66d4d3ee1ce8633c0 /src/gtkext | |
parent | 7ba93e4d9e3e722d8771d665c5217510105375d2 (diff) |
Provided the current active object in display panels.
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/gtkbufferdisplay.c | 34 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel-int.h | 5 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel.c | 70 | ||||
-rw-r--r-- | src/gtkext/gtkdisplaypanel.h | 6 |
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 */ |