diff options
Diffstat (limited to 'src/analysis/line.c')
-rw-r--r-- | src/analysis/line.c | 107 |
1 files changed, 104 insertions, 3 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); + + } } |