From fd679be33396b0ba85ba6617b33a66d221026d91 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 5 Apr 2015 08:56:45 +0000
Subject: Restored the panel for a glance at the current code view.

git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@503 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
---
 ChangeLog                 |  11 ++++
 src/gtkext/graph/layout.c |   7 ---
 src/gtkext/gtkgraphview.c |   1 -
 src/gui/panels/glance.c   | 142 +++++++++++++++++++++-------------------------
 4 files changed, 76 insertions(+), 85 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e961e22..ab7eb20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+15-04-05  Cyrille Bagard <nocbos@gmail.com>
+
+	* src/gtkext/graph/layout.c:
+	Remove the debug fixed requested size for the graph layouts.
+
+	* src/gtkext/gtkgraphview.c:
+	Typo.
+
+	* src/gui/panels/glance.c:
+	Restore the panel for a glance at the current code view.
+
 15-04-04  Cyrille Bagard <nocbos@gmail.com>
 
 	* src/analysis/disass/disassembler.c:
diff --git a/src/gtkext/graph/layout.c b/src/gtkext/graph/layout.c
index ee91aff..2e3759a 100644
--- a/src/gtkext/graph/layout.c
+++ b/src/gtkext/graph/layout.c
@@ -784,13 +784,6 @@ void g_graph_layout_size_request(const GGraphLayout *layout, GtkRequisition *req
 
     requisition->height = g_graph_ranks_get_height(layout->ranks);
 
-
-    requisition->width = 3000;
-    requisition->height = 3000;
-
-
-    printf("SIZE REQ\n");
-
 }
 
 
diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c
index cde919c..f9621b8 100644
--- a/src/gtkext/gtkgraphview.c
+++ b/src/gtkext/gtkgraphview.c
@@ -81,7 +81,6 @@ static gboolean gtk_graph_view_draw(GtkWidget *, cairo_t *, GtkGraphView *);
 /* Actualise les besoins internes avant un redimensionnement. */
 static void gtk_graph_view_prepare_resize(GtkGraphView *);
 
-
 /* Réagit à la sélection externe d'une adresse. */
 static void gtk_graph_view_define_main_address(GtkGraphView *, const vmpa2t *);
 
diff --git a/src/gui/panels/glance.c b/src/gui/panels/glance.c
index 0cb190a..306281a 100644
--- a/src/gui/panels/glance.c
+++ b/src/gui/panels/glance.c
@@ -44,13 +44,10 @@ struct _GGlancePanel
     double scale;                           /* Ratio de réduction          */
 
 	cairo_surface_t *cache;                 /* Cache grandeur nature       */
+    GtkAllocation frame;                    /* Représentation du cadre     */
     GtkAllocation painting;                 /* Zone réservée pour l'aperçu */
     GtkAllocation visible;                  /* Sous-partie visible         */
 
-    double red;                             /* Conversion Gdk -> Cairo #1  */
-    double green;                           /* Conversion Gdk -> Cairo #2  */
-    double blue;                            /* Conversion Gdk -> Cairo #3  */
-
     gdouble start_x;                        /* Abscisse du point de souris */
     gdouble start_y;                        /* Ordonnée du point de souris */
     bool valid;                             /* Point de départ visible ?   */
@@ -72,6 +69,9 @@ struct _GGlancePanelClass
 };
 
 
+/* Espace entre le cadre et l'aperçu */
+#define GLANCE_BORDER 3
+
 
 /* Initialise la classe des panneaux d'aperçu rapide. */
 static void g_glance_panel_class_init(GGlancePanelClass *);
@@ -85,9 +85,6 @@ static void g_glance_panel_dispose(GGlancePanel *);
 /* Procède à la libération totale de la mémoire. */
 static void g_glance_panel_finalize(GGlancePanel *);
 
-/* Définit une fois et au bon moment le fond de l'aperçu rapide. */
-static void define_glance_bg(GtkWidget *, GGlancePanel *);
-
 /* Lance une actualisation du fait d'un changement de support. */
 static void update_glance_panel_for_view(GGlancePanel *, GtkViewPanel *);
 
@@ -183,7 +180,6 @@ static void g_glance_panel_init(GGlancePanel *panel)
     base->name = _("Glance");
 
     area = gtk_drawing_area_new();
-    g_signal_connect(G_OBJECT(area), "realize", G_CALLBACK(define_glance_bg), panel);
     gtk_widget_show(area);
 
     base->widget = gtk_event_box_new();
@@ -274,32 +270,6 @@ GEditorItem *g_glance_panel_new(GObject *ref)
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : widget = composant GTK en préparation.                       *
-*                panel  = informations liées au panneau associé.              *
-*                                                                             *
-*  Description : Définit une fois et au bon moment le fond de l'aperçu rapide.*
-*                                                                             *
-*  Retour      : -                                                            *
-*                                                                             *
-*  Remarques   : -                                                            *
-*                                                                             *
-******************************************************************************/
-
-static void define_glance_bg(GtkWidget *widget, GGlancePanel *panel)
-{
-    /*
-    gtk_widget_modify_bg(widget, GTK_STATE_NORMAL,
-                         &widget->style->mid[GTK_STATE_NORMAL]);
-
-    panel->red = widget->style->mid[GTK_STATE_NORMAL].red / USHRT_MAX;
-    panel->green = widget->style->mid[GTK_STATE_NORMAL].green / USHRT_MAX;
-    panel->blue = widget->style->mid[GTK_STATE_NORMAL].blue / USHRT_MAX;
-    */
-}
-
-
-/******************************************************************************
-*                                                                             *
 *  Paramètres  : ref = espace de référencement global.                        *
 *                                                                             *
 *  Description : Construit et intègre un panneau d'affichage des symboles.    *
@@ -362,8 +332,8 @@ static void update_glance_panel_for_view(GGlancePanel *panel, GtkViewPanel *view
      * Pour le détail de la hiérarchie, se retourner vers les commentaires
      * de la fonction mcb_view_change_support().
      */
+
     parent = gtk_widget_get_parent(GTK_WIDGET(view));
-    parent = gtk_widget_get_parent(parent);
     if (!GTK_IS_SCROLLED_WINDOW(parent)) return;
 
     panel->view = view;
@@ -492,56 +462,61 @@ static void on_glance_resize(GtkWidget *widget, GdkRectangle *allocation, GGlanc
 static void compute_glance_scale(GGlancePanel *panel)
 {
     GtkAllocation available;                /* Surface disponible totale   */
-    //gint border;                            /* Taille de la bordure        */
+    GtkAllocation granted;                  /* Surface totale accordée     */
     double sx;                              /* Echelle sur l'axe X         */
     double sy;                              /* Echelle sur l'axe Y         */
 
     /* Superficies niveau GTK... */
 
     gtk_widget_get_allocation(G_EDITOR_ITEM(panel)->widget, &available);
-    /*
-    border = MIN(2, G_EDITOR_ITEM(panel)->widget->style->xthickness);
-    if (border > 0)
-    {
-        available.x = border;
-        available.width -= 2 * border;
-    }
 
-    border = MIN(2, G_EDITOR_ITEM(panel)->widget->style->ythickness);
-    if (border > 0)
-    {
-        available.y = border;
-        available.height -= 2 * border;
-    }
-    */
     /* Calcul des ratios et emplacements */
 
-    sx = (1.0 * available.width) / panel->req.width;
-    sy = (1.0 * available.height) / panel->req.height;
-
+    granted = available;
 
-    printf(" -- avail :: (%d ; %d)\n", available.width, available.height);
+    if (available.width > 2 *  GLANCE_BORDER)
+        granted.width = available.width - 2 *  GLANCE_BORDER;
+    else
+        granted.width = 0;
 
-    printf(" -- req :: (%d ; %d)\n", panel->req.width, panel->req.height);
+    if (available.height > 2 *  GLANCE_BORDER)
+        granted.height = available.height - 2 *  GLANCE_BORDER;
+    else
+        granted.height = 0;
 
-    printf(" -- ratio >> (%g ; %g)\n", sx, sy);
+    sx = (1.0 * granted.width) / panel->req.width;
+    sy = (1.0 * granted.height) / panel->req.height;
 
+    /* Calcul des dimensions internes */
 
     if (sx < sy)
     {
         panel->scale = sx;
-        panel->painting.width = available.width;
-        panel->painting.height = panel->req.height * panel->scale;
+        panel->frame.width = available.width;
+        panel->frame.height = panel->req.height * panel->scale;
     }
     else
     {
         panel->scale = sy;
-        panel->painting.width = panel->req.width * panel->scale;
-        panel->painting.height = available.height;
+        panel->frame.width = panel->req.width * panel->scale;
+        panel->frame.height = available.height;
     }
 
-    panel->painting.x = available.x + (available.width - panel->painting.width) / 2;
-    panel->painting.y = available.y + (available.height - panel->painting.height) / 2;
+    panel->frame.x = (available.width - panel->frame.width) / 2;
+    panel->frame.y = (available.height - panel->frame.height) / 2;
+
+    panel->painting.x = panel->frame.x + GLANCE_BORDER;
+    panel->painting.y = panel->frame.y + GLANCE_BORDER;
+
+    if (panel->frame.width > 2 *  GLANCE_BORDER)
+        panel->painting.width = panel->frame.width - 2 *  GLANCE_BORDER;
+    else
+        panel->painting.width = 0;
+
+    if (panel->frame.height > 2 * GLANCE_BORDER)
+        panel->painting.height = panel->frame.height - 2 * GLANCE_BORDER;
+    else
+        panel->painting.height = 0;
 
 }
 
@@ -656,6 +631,7 @@ static gboolean redraw_glance_area(GtkWidget *widget, cairo_t *cr, GGlancePanel
             no_image = NULL;
 
         /* Dessin de cette image */
+
         if (no_image != NULL)
         {
             icon = gtk_icon_info_load_surface(no_image, window, NULL);  
@@ -673,36 +649,48 @@ static gboolean redraw_glance_area(GtkWidget *widget, cairo_t *cr, GGlancePanel
     /* Si on dispose de graphique à représenter... */
     else
     {
+        /* Dessin d'un fond */
 
-        /* TODO ... */
+        gtk_style_context_save(context);
+        gtk_style_context_add_class(context, GTK_STYLE_CLASS_VIEW);
 
+        gtk_render_background(context, cr,
+                              panel->frame.x, panel->frame.y,
+                              panel->frame.width, panel->frame.height);
 
-#if 0
+        gtk_style_context_restore(context);
 
-        cairo = gdk_cairo_create(widget->window);
+        /* Dessin d'un cadre */
 
-        cairo_rectangle(cairo, panel->visible.x, panel->visible.y,
-                        panel->visible.width, panel->visible.height);
+        gtk_style_context_save(context);
+        gtk_style_context_add_class(context, GTK_STYLE_CLASS_FRAME);
 
-        cairo_clip(cairo);
+        gtk_render_frame(context, cr,
+                              panel->frame.x, panel->frame.y,
+                              panel->frame.width, panel->frame.height);
 
-        cairo_set_source_rgb(cairo, 1.0, 1.0, 1.0);
+        gtk_style_context_restore(context);
 
-        cairo_rectangle(cairo, panel->painting.x, panel->painting.y,
-                        panel->painting.width, panel->painting.height);
+        /* Partie visible */
 
-        cairo_fill(cairo);
+        cairo_rectangle(cr, panel->visible.x, panel->visible.y,
+                        panel->visible.width, panel->visible.height);
 
-        cairo_reset_clip(cairo);
+        cairo_clip(cr);
 
-        cairo_set_source_surface(cairo, panel->cache, panel->painting.x, panel->painting.y);
-        cairo_paint(cairo);
+        cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+
+        cairo_rectangle(cr, panel->painting.x, panel->painting.y,
+                        panel->painting.width, panel->painting.height);
 
-        cairo_destroy(cairo);
+        cairo_fill(cr);
 
-#endif
+        cairo_reset_clip(cr);
 
+        /* Aperçu mignature */
 
+        cairo_set_source_surface(cr, panel->cache, panel->painting.x, panel->painting.y);
+        cairo_paint(cr);
 
     }
 
-- 
cgit v0.11.2-87-g4458