summaryrefslogtreecommitdiff
path: root/src/glibext/linecolumn.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/linecolumn.c')
-rw-r--r--src/glibext/linecolumn.c140
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