diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-07-19 23:16:29 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-07-19 23:16:29 (GMT) |
commit | 5093663eb4e4aa17edd97cbd864ccb4a3d48a803 (patch) | |
tree | 48192ae6b37e1803d78ed81f5658ad9d2756cfd1 /src/glibext/gbufferline.c | |
parent | 12abead3f60d6f72c0d41672af87215dfc13c8fc (diff) |
Given their own structure to rendering options.
Diffstat (limited to 'src/glibext/gbufferline.c')
-rw-r--r-- | src/glibext/gbufferline.c | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index 95af21a..39ef0ce 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -1050,7 +1050,7 @@ const line_segment *g_buffer_line_get_segment_from_coord(const GBufferLine *line * * * Paramètres : line = ligne à venir consulter. * * summary = résumé des largeurs maximales. * -* display = règles d'affichage des colonnes modulables. * +* options = règles d'affichage des colonnes modulables. * * base = position jusqu'au segment trouvé. [OUT] * * offset = position à la colonne visée. [OUT] * * dir = direction d'un éventuel déplacement en cours. * @@ -1065,12 +1065,13 @@ const line_segment *g_buffer_line_get_segment_from_coord(const GBufferLine *line * * ******************************************************************************/ -bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summary *summary, const bool *display, gint *base, gint *offset, GdkScrollDirection dir, bool force, col_coord_t *coord) +bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, gint *base, gint *offset, GdkScrollDirection dir, bool force, col_coord_t *coord) { bool result; /* Bilan à retourner */ BufferLineColumn last; /* Dernière colonne remplie */ gint last_base; /* Dernière abscisse associée */ - BufferLineColumn i; /* Boucle de parcours */ + size_t count; /* Qté de colonnes en option */ + size_t i; /* Boucle de parcours */ gint width; /* Largeur d'une colonne donnée*/ gint limit; /* Limite d'appartenance */ gint consumed; /* Distance vers le segment */ @@ -1085,9 +1086,15 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar /* On cible déjà la colonne idéale */ + count = g_display_options_count(options); + for (i = 0; i < BLC_COUNT; i++) { - if (i < BLC_DISPLAY && !display[i]) continue; + if (i < count) + { + if (!g_display_options_get(options, i)) + continue; + } /* Mémorisation de la dernière colonne contenant quelque chose... */ if (get_column_width(&line->columns[i]) > 0) @@ -1249,7 +1256,7 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar * * * Paramètres : line = ligne à venir consulter. * * summary = résumé des largeurs maximales. * -* display = règles d'affichage des colonnes modulables. * +* options = règles d'affichage des colonnes modulables. * * base = position jusqu'au segment trouvé. [OUT] * * offset = position à la colonne visée. [OUT] * * dir = direction d'un éventuel déplacement en cours. * @@ -1263,13 +1270,13 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar * * ******************************************************************************/ -const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const line_width_summary *summary, const bool *display, gint *base, gint *offset, GdkScrollDirection dir, bool force) +const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, gint *base, gint *offset, GdkScrollDirection dir, bool force) { const line_segment *result; /* Trouvaille à retourner */ col_coord_t coord; /* Emplacement du contenu visé */ bool status; /* Bilan de la localisation */ - status = g_buffer_line_get_coord_at(line, summary, display, base, offset, dir, force, &coord); + status = g_buffer_line_get_coord_at(line, summary, options, base, offset, dir, force, &coord); if (status) result = g_buffer_line_get_segment_from_coord(line, &coord); @@ -1285,7 +1292,7 @@ const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const * * * Paramètres : line = ligne à venir consulter. * * summary = résumé des largeurs maximales. * -* display = règles d'affichage des colonnes modulables. * +* options = règles d'affichage des colonnes modulables. * * base = position jusqu'au segment trouvé. [OUT] * * offset = position à la colonne visée. [OUT] * * dir = direction d'un éventuel déplacement en cours. * @@ -1299,7 +1306,7 @@ const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const * * ******************************************************************************/ -GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_summary *summary, const bool *display, gint *base, gint *offset, GdkScrollDirection dir, bool force) +GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, gint *base, gint *offset, GdkScrollDirection dir, bool force) { GObject *result; /* Trouvaille à retourner */ col_coord_t target; /* Emplacement du contenu visé */ @@ -1309,7 +1316,7 @@ GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_ result = NULL; - status = g_buffer_line_get_coord_at(line, summary, display, base, offset, dir, force, &target); + status = g_buffer_line_get_coord_at(line, summary, options, base, offset, dir, force, &target); if (status) { @@ -1337,7 +1344,7 @@ GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_ * Paramètres : line = ligne à venir consulter. * * coord = cordonnées à consulter puis renseigner. [OUT] * * summary = résumé des largeurs maximales. * -* display = règles d'affichage des colonnes modulables. * +* options = règles d'affichage des colonnes modulables. * * dir = orientation des recherches. * * offset = décalage pour amener à l'extrémité nouvelle. [OUT] * * * @@ -1349,12 +1356,13 @@ GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_ * * ******************************************************************************/ -bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, const line_width_summary *summary, const bool *display, GdkScrollDirection dir, gint *offset) +bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, const line_width_summary *summary, const GDisplayOptions *options, GdkScrollDirection dir, gint *offset) { bool result; /* Bilan à retourner */ - BufferLineColumn i; /* Boucle de parcours #1 */ + size_t count; /* Qté de colonnes en option */ + size_t i; /* Boucle de parcours #1 */ bool displayed; /* Confort de lecture */ - BufferLineColumn k; /* Boucle de parcours #2 */ + size_t k; /* Boucle de parcours #2 */ gint width; /* Largeur d'une colonne donnée*/ result = false; @@ -1369,6 +1377,8 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, /* Recherche dans la direction des colonnes voisines */ + count = g_display_options_count(options); + if (!result) switch (dir) { @@ -1380,7 +1390,7 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, /* On s'assure que la colonne précédente est visible et peuplée */ for (; i > BLC_FIRST && !result; i--) { - displayed = (i <= BLC_DISPLAY ? display[i - 1] : true); + displayed = (i <= count ? g_display_options_get(options, i - 1) : true); if (displayed) { @@ -1400,7 +1410,7 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, /* On s'assure que la colonne suivante est visible et peuplée */ for (; (i + 1) < BLC_COUNT && !result; i++) { - displayed = ((i + 1) < BLC_DISPLAY ? display[i + 1] : true); + displayed = ((i + 1) < count ? g_display_options_get(options, i + 1) : true); if (displayed) { @@ -1428,7 +1438,7 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, for (k = 0; k < i; k++) { - displayed = (k < BLC_DISPLAY ? display[k] : true); + displayed = (k < count ? g_display_options_get(options, k) : true); if (displayed) { @@ -1473,7 +1483,7 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, * summary = résumé des largeurs maximales. * * x_init = abscisse du point d'impression de départ. * * y = ordonnée du point d'impression. * -* display = règles d'affichage des colonnes modulables. * +* options = règles d'affichage des colonnes modulables. * * list = liste de contenus à mettre en évidence. * * * * Description : Imprime la ligne de texte représentée. * @@ -1484,12 +1494,13 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, * * ******************************************************************************/ -void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const line_width_summary *summary, gint x_init, gint y, const bool *display, const segcnt_list *list) +void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const line_width_summary *summary, gint x_init, gint y, const GDisplayOptions *options, const segcnt_list *list) { GBufferLineClass *class; /* Stockage de briques de base */ bool has_src_surface; /* Note une présence définie */ gint x; /* Point de départ d'impression*/ - BufferLineColumn i; /* Boucle de parcours */ + size_t count; /* Qté de colonnes en option */ + size_t i; /* Boucle de parcours */ gint max_width; /* Largeur maximale de colonne */ if (line->flags != BLF_NONE && line->flags != BLF_HAS_CODE) @@ -1516,9 +1527,15 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const line_width_summ x = x_init; + count = g_display_options_count(options); + for (i = 0; i < BLC_COUNT; i++) { - if (i < BLC_DISPLAY && !display[i]) continue; + if (i < count) + { + if (!g_display_options_get(options, i)) + continue; + } draw_line_column_segments(&line->columns[i], cairo, x, y, list); |