summaryrefslogtreecommitdiff
path: root/src/glibext/gbufferline.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-01-17 19:09:43 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-01-17 19:09:43 (GMT)
commitcf86d6dbba60e46a3dc3d186bff1f05e2fa76d14 (patch)
tree10203ed208f12cdd9470c3b1b85418e39b6a47a3 /src/glibext/gbufferline.c
parentd13bccd74759cd1c63a2036c279f04d9f052ecf3 (diff)
Updated the width of a modified line.
Diffstat (limited to 'src/glibext/gbufferline.c')
-rw-r--r--src/glibext/gbufferline.c70
1 files changed, 47 insertions, 23 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index 1a17a9c..d09758f 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -56,6 +56,9 @@ typedef struct _buffer_line_column
/* Réinitialise une colonne de ligne. */
static void reset_column(buffer_line_column *);
+/* Recalcule la largeur d'une colonne de segments. */
+static void refresh_column_width(buffer_line_column *);
+
/* Fournit la quantité de pixels requise pour l'impression. */
static gint get_column_width(const buffer_line_column *);
@@ -174,6 +177,30 @@ static void reset_column(buffer_line_column *column)
/******************************************************************************
* *
+* Paramètres : column = colonne de ligne à mettre à jour. *
+* *
+* Description : Recalcule la largeur d'une colonne de segments. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void refresh_column_width(buffer_line_column *column)
+{
+ size_t i; /* Boucle de parcours */
+
+ column->max_width = 0;
+
+ for (i = 0; i < column->count; i++)
+ column->max_width += g_buffer_segment_get_width(column->segments[i]);
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : column = colonne de ligne à consulter. *
* *
* Description : Fournit la quantité de pixels requise pour l'impression. *
@@ -827,27 +854,6 @@ void g_buffer_line_fill_for_instr(GBufferLine *line, MemoryDataSize psize, Memor
/******************************************************************************
* *
-* Paramètres : line = ligne à venir compléter. *
-* index = index de la colonne visée par la procédure. *
-* segment = fragment de texte à ajouter à la colonne. *
-* *
-* Description : Ajoute un fragment de texte à une colonne de ligne. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_buffer_line_add_segment(GBufferLine *line, BufferLineColumn index, GBufferSegment *segment)
-{
- add_segment_to_column(&line->columns[index], segment);
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : line = ligne à venir consulter. *
* max_widths = largeurs de colonne à respecter. *
* display = règles d'affichage des colonnes modulables. *
@@ -1190,7 +1196,24 @@ GBufferSegment *g_buffer_line_find_segment_from_creator(const GBufferLine *line,
static void on_line_segment_changed(GBufferSegment *segment, GBufferLine *line)
{
- g_signal_emit_by_name(line, "content-changed");
+ BufferLineColumn i; /* Boucle de parcours */
+ buffer_line_column *column;
+
+ /* Actualisation de la largeur de la colonne */
+
+ for (i = 0; i < BLC_COUNT; i++)
+ {
+ column = &line->columns[i];
+
+ if (column_has_segment(column, segment, NULL))
+ {
+ refresh_column_width(column);
+ break;
+ }
+
+ }
+
+ g_signal_emit_by_name(line, "content-changed", segment);
}
@@ -1226,7 +1249,8 @@ GBufferSegment *g_buffer_line_insert_text(GBufferLine *line, BufferLineColumn co
line->last_used = column;
result = g_buffer_segment_new(type, text, length);
- g_buffer_line_add_segment(line, column, result);
+
+ add_segment_to_column(&line->columns[column], result);
g_signal_connect(result, "content-changed", G_CALLBACK(on_line_segment_changed), line);