Ajouter le zoom et le déplacement dans la vue graphique #63
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ajouter le zoom et le déplacement dans la vue graphique
Contexte
La vue graphique en lecture seule du graphe d’enquête est désormais intégrée à l’application.
InvestigationGraphViewaffiche les entités actives sous forme de nœuds et les relations actives sous forme de liaisons orientées. Le rendu actuel est déterministe et fonctionne pour un petit nombre d’entités, mais il devient rapidement limité lorsque le graphe dépasse la taille visible de la fenêtre.La prochaine étape consiste à permettre à l’utilisateur de naviguer dans le canvas sans modifier les données métier.
Objectif
Ajouter à
InvestigationGraphView:La navigation doit rester fluide, déterministe et entièrement indépendante du modèle métier.
Architecture attendue
Responsabilités
InvestigationGraphModelreste inchangé.InvestigationGraphViewconserve l’état d’affichage :Workspacene gère pas directement les coordonnées du canvas.État privé minimal
La structure privée de
InvestigationGraphViewpeut contenir au minimum :Les noms exacts peuvent évoluer tant que les responsabilités restent claires.
Interactions attendues
Zoom
0.25;3.0;1.0.Déplacement
Recentrage
Lorsqu’un nouveau graphe est chargé :
Une API publique dédiée doit être ajoutée :
Une fonction interne de recentrage automatique peut être utilisée pour calculer un zoom adapté à la taille disponible.
Transformation du rendu
Le rendu Cairo doit appliquer les transformations dans cet ordre logique :
Les calculs de disposition des entités restent exprimés dans les coordonnées logiques du graphe.
Les transformations doivent être encapsulées entre :
et :
afin de ne pas modifier les autres éléments de rendu.
Gestion du redimensionnement
Lors du redimensionnement de la fenêtre :
Le recentrage automatique ne doit avoir lieu que :
investigation_graph_view_reset_view().Gestion du graphe vide
Lorsque le graphe est absent ou vide :
Gestion de la mémoire
investigation_graph_view_clear()doit réinitialiser l’état de navigation.investigation_graph_view_free()doit détacher proprement les callbacks et le graphe emprunté.API publique attendue
L’API existante est conservée.
Ajouter :
Aucune API publique ne doit exposer directement les coordonnées internes ou le facteur de zoom pour cette première version.
Hors périmètre
Ce ticket n’inclut pas :
Ces fonctions feront l’objet de tickets séparés.
Critères d’acceptation
investigation_graph_view_reset_view()recentre correctement le graphe.make clean && makeréussit avec-Werror -Wpedantic.make testréussit.git diff --checkne signale aucune erreur.Plan d’implémentation conseillé
investigation_graph_view_reset_view().GtkEventControllerScroll.GtkGestureDrag.set_graph()etclear().Validation manuelle