From 5700746ba57a511419341cb3cd664d6e2c97584a Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Tue, 12 Feb 2019 22:49:04 +0100 Subject: Fixed some overlaps in the graph view. --- src/gtkext/graph/cluster.c | 115 ++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 68 deletions(-) diff --git a/src/gtkext/graph/cluster.c b/src/gtkext/graph/cluster.c index bc8f9dd..3aa6674 100644 --- a/src/gtkext/graph/cluster.c +++ b/src/gtkext/graph/cluster.c @@ -155,9 +155,6 @@ static int cmp_graph_rank(const graph_rank_t *, const graph_rank_t *); /* Etend un ensemble de blocs de même rang. */ static void extend_graph_rank(graph_rank_t *, GGraphCluster *); -/* Etablit les connexions entre blocs selon les rangs. */ -static bool setup_graph_rank_link_for_target(const graph_rank_t *, GGraphCluster *, GGraphCluster *, leaving_link_t *); - /* Détermine l'emplacement requis d'un ensemble de blocs. */ static void compute_graph_rank_needed_alloc(const graph_rank_t *, bool, GtkAllocation *); @@ -304,6 +301,9 @@ static void g_graph_cluster_reset_allocation(GGraphCluster *); /* Complète un graphique avec un sous-ensemble de blocs. */ static void g_graph_cluster_add_sub(GGraphCluster *, GGraphCluster *); +/* Etablit les connexions entre blocs selon les rangs. */ +static void g_graph_cluster_setup_link_for_target(GGraphCluster *, GGraphCluster *, leaving_link_t *); + /* Met en place les embryons de liens nécessaires. */ static void g_graph_cluster_define_links(GGraphCluster *, GHashTable *); @@ -845,62 +845,6 @@ static void extend_graph_rank(graph_rank_t *grank, GGraphCluster *cluster) /****************************************************************************** * * -* Paramètres : grank = ensemble de descendants d'un même rang. * -* source = bloc courant ou NULL pour limiter les calculs. * -* target = bloc ciblé pour l'arrivée d'un lien. * -* leaving = représentation d'un lien sortant. * -* * -* Description : Etablit les connexions entre blocs selon les rangs. * -* * -* Retour : true si la cible a été rencontrée. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static bool setup_graph_rank_link_for_target(const graph_rank_t *grank, GGraphCluster *source, GGraphCluster *target, leaving_link_t *leaving) -{ - bool result; /* Bilan à retourner */ - size_t level; /* Niveau du nouvel ensemble */ - size_t i; /* Boucle de parcours */ - size_t target_level; /* Rang du bloc ciblé */ - - result = false; - - if (source != NULL) - level = g_code_block_get_rank(source->block); - - for (i = 0; i < grank->count && !result; i++) - if (grank->clusters[i] == target) - { - result = true; - - target->parent_index = &leaving->index; - - if (source != NULL) - { - target_level = get_graph_rank(grank); - - /* Est-ce un lien qui doit être vertical ? */ - - if (target_level > (level + 1) && target_level > source->straight_level) - { - source->has_straight = true; - source->straight_level = target_level; - source->straight_index = source->ba_count - 1; - } - - } - - } - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : grank = ensemble de descendants d'un même rang. * * last = indique s'il s'agit du dernier étage de l'ensemble. * * alloc = emplacement idéal pour l'affichage. [OUT] * @@ -1698,6 +1642,47 @@ static void g_graph_cluster_add_sub(GGraphCluster *cluster, GGraphCluster *sub) /****************************************************************************** * * +* Paramètres : grank = ensemble de descendants d'un même rang. * +* source = bloc courant ou NULL pour limiter les calculs. * +* target = bloc ciblé pour l'arrivée d'un lien. * +* leaving = représentation d'un lien sortant. * +* * +* Description : Etablit les connexions entre blocs selon les rangs. * +* * +* Retour : true si la cible a été rencontrée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_graph_cluster_setup_link_for_target(GGraphCluster *source, GGraphCluster *target, leaving_link_t *leaving) +{ + size_t level; /* Niveau du nouvel ensemble */ + size_t target_level; /* Rang du bloc ciblé */ + + target->parent_index = &leaving->index; + + if (source != NULL) + { + level = g_code_block_get_rank(source->block); + target_level = g_code_block_get_rank(target->block); + + /* Est-ce un lien qui doit être vertical ? */ + + if (target_level > (level + 1) && target_level > source->straight_level) + { + source->has_straight = true; + source->straight_level = target_level; + source->straight_index = source->ba_count - 1; + } + + } + +} + + +/****************************************************************************** +* * * Paramètres : cluster = graphique de blocs à actualiser. * * all = table regroupant tous les groupes créés. * * * @@ -1760,9 +1745,7 @@ static void g_graph_cluster_define_links(GGraphCluster *cluster, GHashTable *all /* Etablissement d'un embryon de lien */ - for (j = 0; j < cluster->ranks_count; j++) - if (setup_graph_rank_link_for_target(&cluster->ranks[j], cluster, target, leaving)) - break; + g_graph_cluster_setup_link_for_target(cluster, target, leaving); break; @@ -1797,9 +1780,7 @@ static void g_graph_cluster_define_links(GGraphCluster *cluster, GHashTable *all /* Etablissement d'un embryon de lien */ - for (j = 0; j < cluster->ranks_count; j++) - if (setup_graph_rank_link_for_target(&cluster->ranks[j], NULL, target, leaving)) - break; + g_graph_cluster_setup_link_for_target(NULL, target, leaving); break; @@ -1817,10 +1798,8 @@ static void g_graph_cluster_define_links(GGraphCluster *cluster, GHashTable *all /* Doit-on forcer un lien strictement vertical ? */ - if (cluster->ba_count == 1) + if (cluster->ba_count == 1 && !cluster->has_straight) { - assert(!cluster->has_straight); - /** * Attention : les boucles aussi ont un seul lien sortant ! * -- cgit v0.11.2-87-g4458