diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-02-11 08:43:35 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-02-11 08:43:35 (GMT) |
commit | abd96dbbe27246e9303173e5e2f47b2e4cedbcb7 (patch) | |
tree | c0f8bfd8d6514ac63edcb09655f6feebbd424f09 /src/glibext | |
parent | dfa7e04b4a267f7f30086510781ca3221b7e25f8 (diff) |
Marked buffer lines as containing an entry point when needed.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@470 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/glibext')
-rw-r--r-- | src/glibext/gbufferline.c | 64 | ||||
-rw-r--r-- | src/glibext/gbufferline.h | 15 |
2 files changed, 76 insertions, 3 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index 54f5fb6..824578d 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -95,6 +95,8 @@ struct _GBufferLine BufferLineColumn merge_start; /* Début de la zone globale */ BufferLineColumn last_used; /* Dernière colonne utilisée */ + BufferLineFlags flags; /* Drapeaux particuliers */ + }; /* Représentation de fragments de texte en ligne (classe) */ @@ -102,6 +104,7 @@ struct _GBufferLineClass { GObjectClass parent; /* A laisser en premier */ + cairo_surface_t *entrypoint_img; /* Image pour les entrées */ cairo_surface_t *bookmark_img; /* Image pour les signets */ }; @@ -440,6 +443,13 @@ static void g_buffer_line_class_init(GBufferLineClass *class) { gchar *filename; /* Chemin d'accès à utiliser */ + filename = find_pixmap_file("entrypoint.png"); + /* assert(filename != NULL); */ + + class->entrypoint_img = cairo_image_surface_create_from_png(filename); + + g_free(filename); + filename = find_pixmap_file("bookmark.png"); /* assert(filename != NULL); */ @@ -1130,6 +1140,46 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start) /****************************************************************************** * * +* Paramètres : line = ligne à venir compléter. * +* flag = propriété à intégrer. * +* * +* Description : Ajoute une propriété particulière à une ligne donnée. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_buffer_line_add_flag(GBufferLine *line, BufferLineFlags flag) +{ + line->flags |= flag; + +} + + +/****************************************************************************** +* * +* Paramètres : line = ligne à venir compléter. * +* flag = propriété à supprimer. * +* * +* Description : Retire une propriété particulière à une ligne donnée. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_buffer_line_remove_flag(GBufferLine *line, BufferLineFlags flag) +{ + line->flags &= ~flag; + +} + + +/****************************************************************************** +* * * Paramètres : line = ligne de texte à manipuler. * * cairo = contexte graphique à utiliser pour les pinceaux.* * max_widths = largeurs de colonne à respecter. * @@ -1151,10 +1201,18 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths gint x; /* Point de départ d'impression*/ BufferLineColumn i; /* Boucle de parcours */ - class = G_BUFFER_LINE_GET_CLASS(line); + if (line->flags != BLF_NONE) + { + class = G_BUFFER_LINE_GET_CLASS(line); + + if (line->flags & BLF_ENTRYPOINT) + cairo_set_source_surface(cairo, class->entrypoint_img, 5, y); + else if (line->flags & BLF_BOOKMARK) + cairo_set_source_surface(cairo, class->bookmark_img, 5, y); - cairo_set_source_surface(cairo, class->bookmark_img, 5, y); - cairo_paint(cairo); + cairo_paint(cairo); + + } x = x_init; diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h index 9b35f0b..6984c37 100644 --- a/src/glibext/gbufferline.h +++ b/src/glibext/gbufferline.h @@ -83,6 +83,15 @@ typedef enum _BufferLineColumn #define COL_MARGIN 23 +/* Propriétés particulières supplémentaires */ +typedef enum _BufferLineFlags +{ + BLF_NONE = 0 << 0, /* Aucune */ + BLF_ENTRYPOINT = 1 << 0, /* Représentation d'une entrée */ + BLF_BOOKMARK = 1 << 1 /* Signet associé */ + +} BufferLineFlags; + /* Détermine le type de la représentation de fragments de texte en ligne. */ GType g_buffer_line_get_type(void); @@ -126,6 +135,12 @@ gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, const bool /* Définit la colonne à partir de laquelle la fusion opère. */ void g_buffer_line_start_merge_at(GBufferLine *, BufferLineColumn); +/* Ajoute une propriété particulière à une ligne donnée. */ +void g_buffer_line_add_flag(GBufferLine *, BufferLineFlags); + +/* Retire une propriété particulière à une ligne donnée. */ +void g_buffer_line_remove_flag(GBufferLine *, BufferLineFlags); + /* Imprime la ligne de texte représentée. */ void g_buffer_line_draw(GBufferLine *, cairo_t *, const gint [BLC_COUNT], gint, gint, const bool *); |