diff options
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/line.c | 107 | ||||
-rw-r--r-- | src/analysis/line.h | 25 |
2 files changed, 128 insertions, 4 deletions
diff --git a/src/analysis/line.c b/src/analysis/line.c index f5f3d9c..62acb8e 100644 --- a/src/analysis/line.c +++ b/src/analysis/line.c @@ -58,6 +58,7 @@ struct _rendering_line uint64_t offset; /* Position en mémoire/physique*/ RenderingLineType type; /* Type de représentation */ + RenderingLineFlag flags; /* Extension d'informations */ PangoLayout *layout; /* Moteur de rendu du code/txt */ @@ -169,6 +170,63 @@ void init_rendering_line(rendering_line *line) } +/****************************************************************************** +* * +* Paramètres : line = ligne dont les informations sont à mettre à jour. * +* flag = extension d'information à ajouter. * +* * +* Description : Ajoute une information supplémentaire à une ligne. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void add_rendering_line_flag(rendering_line *line, RenderingLineFlag flag) +{ + line->flags |= flag; + +} + + +/****************************************************************************** +* * +* Paramètres : line = ligne dont les informations sont à mettre à jour. * +* flag = extension d'information à retirer. * +* * +* Description : Retire une information supplémentaire sur d'une ligne. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void remove_rendering_line_flag(rendering_line *line, RenderingLineFlag flag) +{ + line->flags &= ~flag; + +} + + +/****************************************************************************** +* * +* Paramètres : line = ligne dont les informations sont à mettre à jour. * +* * +* Description : Fournit les informations supplémentaires d'une ligne. * +* * +* Retour : Extensions d'informations courantes. * +* * +* Remarques : - * +* * +******************************************************************************/ + +RenderingLineFlag get_rendering_line_flags(const rendering_line *line) +{ + return line->flags; + +} @@ -236,6 +294,30 @@ void insert_line_into_rendering_lines(rendering_line **lines, rendering_line *li } +/****************************************************************************** +* * +* Paramètres : lines = liste de lignes à parcourir. * +* offset = position en mémoire ou physique à chercher. * +* * +* Description : Recherche une ligne d'après sa position en mémoire/physique. * +* * +* Retour : Ligne représentant l'adresse donnée, NULL si aucune trouvée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +rendering_line *find_offset_in_rendering_lines(const rendering_line **lines, uint64_t offset) +{ + rendering_line *result; + + dl_list_for_each(result, DLL_HCAST(lines), rendering_line *) + if (result->offset == offset) break; + + return result; + +} + /****************************************************************************** @@ -313,8 +395,10 @@ void get_rendering_line_size(rendering_line *line, int *width, int *height) * Paramètres : line = adresse de la structure à représenter. * * drawable = support de rendu pour le dessin. * * gc = contexte graphique à utiliser. * -* x = abscisse de la zone de rendu. * +* x0 = abscisse de la zone de rendu (marge). * +* x1 = abscisse de la zone de rendu (texte). * * y = ordonnée de la zone de rendu. * +* h = hauteur réservée pour la ligne. * * * * Description : Procède à l'initialisation des bases d'une représentation. * * * @@ -324,9 +408,26 @@ void get_rendering_line_size(rendering_line *line, int *width, int *height) * * ******************************************************************************/ -void draw_rendering_line(rendering_line *line, GdkDrawable *drawable, GdkGC *gc, gint x, gint y) +void draw_rendering_line(rendering_line *line, GdkDrawable *drawable, GdkGC *gc, gint x0, gint x1, gint y, gint h) { - gdk_draw_layout(drawable, gc, x, y, line->layout); + GdkPixbuf *pixbuf; /* Données utiles au dessin */ + + gdk_draw_layout(drawable, gc, x1, y, line->layout); + + if (line->flags & RLF_ENTRY_POINT) + pixbuf = gtk_widget_render_icon(mywid, "gtk-go-forward", GTK_ICON_SIZE_MENU, NULL); + + else pixbuf = NULL; + + if (pixbuf != NULL) + { + gdk_draw_pixbuf(drawable, gc, pixbuf, 0, 0, x0, y, + gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), + GDK_RGB_DITHER_NORMAL, 0, 0); + + g_object_unref(pixbuf); + + } } diff --git a/src/analysis/line.h b/src/analysis/line.h index b0635bf..bb628b6 100644 --- a/src/analysis/line.h +++ b/src/analysis/line.h @@ -43,6 +43,15 @@ typedef enum _RenderingLineType } RenderingLineType; +/* Image à afficher en marge de ligne */ +typedef enum _RenderingLineFlag +{ + RLF_NONE = (0 << 0), /* Ligne commune */ + RLF_ENTRY_POINT = (1 << 0), /* Point d'entrée du prgm. */ + RLF_BREAK_POINT = (1 << 1) /* Point d'arrêt */ + +} RenderingLineFlag; + /* Passage de paramètres compact */ typedef struct _disass_options { @@ -60,6 +69,17 @@ typedef struct _disass_options typedef struct _rendering_line rendering_line; +/* Ajoute une information supplémentaire à une ligne. */ +void add_rendering_line_flag(rendering_line *, RenderingLineFlag); + +/* Retire une information supplémentaire d'une ligne. */ +void remove_rendering_line_flag(rendering_line *, RenderingLineFlag); + +/* Fournit les informations supplémentaires d'une ligne. */ +RenderingLineFlag get_rendering_line_flags(const rendering_line *); + + + /* Ajoute une ligne à un ensemble existant. */ void add_line_to_rendering_lines(rendering_line **, rendering_line *); @@ -67,6 +87,9 @@ void add_line_to_rendering_lines(rendering_line **, rendering_line *); /* Insère une ligne dans un ensemble existant. */ void insert_line_into_rendering_lines(rendering_line **, rendering_line *, bool); +/* Recherche une ligne d'après sa position en mémoire/physique. */ +rendering_line *find_offset_in_rendering_lines(const rendering_line **, uint64_t); + /* Met à jour la nombre d'octets maximale par instruction. */ @@ -79,7 +102,7 @@ void set_rendering_line_max_binary_len(rendering_line *, off_t); void get_rendering_line_size(rendering_line *, int *, int *); /* Procède à l'initialisation des bases d'une représentation. */ -void draw_rendering_line(rendering_line *, GdkDrawable *, GdkGC *, gint, gint); +void draw_rendering_line(rendering_line *, GdkDrawable *, GdkGC *, gint, gint, gint, gint); |