diff options
Diffstat (limited to 'src/glibext/linecolumn.c')
-rw-r--r-- | src/glibext/linecolumn.c | 140 |
1 files changed, 92 insertions, 48 deletions
diff --git a/src/glibext/linecolumn.c b/src/glibext/linecolumn.c index 35f7698..22ff2a4 100644 --- a/src/glibext/linecolumn.c +++ b/src/glibext/linecolumn.c @@ -24,13 +24,9 @@ #include "linecolumn.h" -#include <assert.h> #include <malloc.h> -#include "../common/extstr.h" - - /****************************************************************************** * * @@ -44,14 +40,12 @@ * * ******************************************************************************/ -void init_line_column(line_column *column) +void init_line_column(line_column_t *column) { - column->segments = NULL; + column->tokens = NULL; column->count = 0; -#ifdef INCLUDE_GTK_SUPPORT column->max_width = 0; -#endif } @@ -68,114 +62,162 @@ void init_line_column(line_column *column) * * ******************************************************************************/ -void reset_line_column(line_column *column) +void reset_line_column(line_column_t *column) { size_t i; /* Boucle de parcours */ for (i = 0; i < column->count; i++) - release_line_segment(column->segments[i]); + release_line_token(column->tokens[i]); - if (column->segments != NULL) + if (column->tokens != NULL) { - free(column->segments); - column->segments = NULL; + free(column->tokens); + column->tokens = NULL; } column->count = 0; -#ifdef INCLUDE_GTK_SUPPORT column->max_width = 0; -#endif } -#ifdef INCLUDE_GTK_SUPPORT + /****************************************************************************** * * -* Paramètres : column = colonne de ligne à mettre à jour. * +* Paramètres : column = colonne de ligne à venir compléter. * +* tag = propriétés de la zone de texte. * +* text = chaîne de caractères à traiter. * +* length = quantité de ces caractères. * +* style = gestionnaire de paramètres de rendu à consulter. * * * -* Description : Recalcule la largeur d'une colonne de segments. * +* Description : Ajoute un fragment de texte à une colonne de ligne. * * * -* Retour : - * +* Retour : Indice du point d'insertion. * * * * Remarques : - * * * ******************************************************************************/ -void refresh_line_column_width(line_column *column) +size_t append_text_to_line_column(line_column_t *column, TokenRenderingTag tag, const char *text, size_t length, const GTokenStyle *style) { - size_t i; /* Boucle de parcours */ + size_t result; /* Indice à retourner */ + line_token_t *token; /* Contenu à représenter */ - column->max_width = 0; + result = column->count; - for (i = 0; i < column->count; i++) - column->max_width += get_line_segment_width(column->segments[i]); + token = get_new_line_token(tag, text, length); + + column->tokens = realloc(column->tokens, ++column->count * sizeof(line_token_t *)); + + column->tokens[result] = token; + + //column->max_width += g_token_style_measure_width(style, tag, length); + + return result; } + + + + /****************************************************************************** * * -* Paramètres : column = colonne de ligne à consulter. * +* Paramètres : column = colonne de ligne de texte à manipuler. * +* cr = contexte graphique à utiliser pour les pinceaux. * +* x = abscisse du point d'impression (à maj). [OUT] * +* y = ordonnée du point d'impression. * +* style = style de rendu pour les bribes de texte. * * * -* Description : Fournit la quantité de pixels requise pour l'impression. * +* Description : Imprime le contenu d'une colonne de ligne de texte. * * * -* Retour : Largeur requise par la colonne, en pixel. * +* Retour : - * * * * Remarques : - * * * ******************************************************************************/ -gint get_column_width(const line_column *column) +void draw_line_column(const line_column_t *column, cairo_t *cr, int *x, int y, const GTokenStyle *style) { - return column->max_width; + size_t i; /* Boucle de parcours */ + + for (i = 0; i < column->count; i++) + draw_line_token(column->tokens[i], cr, x, y, style); } -#endif + + + + +#if 0 + +#include <assert.h> +#include <malloc.h> + + +#include "../common/extstr.h" + + + + + +#ifdef INCLUDE_GTK_SUPPORT /****************************************************************************** * * -* Paramètres : column = colonne de ligne à venir compléter. * -* text = texte à insérer dans l'existant. * -* length = taille du texte à traiter. * -* type = type de décorateur à utiliser. * +* Paramètres : column = colonne de ligne à mettre à jour. * * * -* Description : Ajoute un fragment de texte à une colonne de ligne. * +* Description : Recalcule la largeur d'une colonne de segments. * * * -* Retour : Indice du point d'insertion. * +* Retour : - * * * * Remarques : - * * * ******************************************************************************/ -size_t append_text_to_line_column(line_column *column, const char *text, size_t length, RenderingTagType type) +void refresh_line_column_width(line_column *column) { - size_t result; /* Indice à retourner */ - line_segment *segment; /* Contenu à représenter */ + size_t i; /* Boucle de parcours */ - result = column->count; + column->max_width = 0; - segment = get_new_line_segment(type, text, length); + for (i = 0; i < column->count; i++) + column->max_width += get_line_segment_width(column->segments[i]); - column->segments = realloc(column->segments, ++column->count * sizeof(line_segment *)); +} - column->segments[result] = segment; -#ifdef INCLUDE_GTK_SUPPORT - column->max_width += get_line_segment_width(segment); -#endif +/****************************************************************************** +* * +* Paramètres : column = colonne de ligne à consulter. * +* * +* Description : Fournit la quantité de pixels requise pour l'impression. * +* * +* Retour : Largeur requise par la colonne, en pixel. * +* * +* Remarques : - * +* * +******************************************************************************/ - return result; +gint get_column_width(const line_column *column) +{ + return column->max_width; } +#endif + + + + /****************************************************************************** * * * Paramètres : column = colonne de ligne à venir compléter. * @@ -202,7 +244,7 @@ void replace_text_in_line_column(line_column *column, size_t index, const char * segment = column->segments[index]; - type = get_line_segment_type(segment); + type = get_line_token_type(segment); release_line_segment(segment); @@ -544,3 +586,5 @@ void export_line_column_segments(const line_column *column, buffer_export_contex } } + +#endif |