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 | 
