summaryrefslogtreecommitdiff
path: root/src/glibext/bufferline.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glibext/bufferline.c')
-rw-r--r--src/glibext/bufferline.c248
1 files changed, 198 insertions, 50 deletions
diff --git a/src/glibext/bufferline.c b/src/glibext/bufferline.c
index 2bdfebc..4862e9f 100644
--- a/src/glibext/bufferline.c
+++ b/src/glibext/bufferline.c
@@ -24,63 +24,27 @@
#include "bufferline.h"
+#include "bufferline-int.h"
+
+
+
+#if 0
+
#include <assert.h>
#include <malloc.h>
#include <string.h>
#include "chrysamarshal.h"
-#include "linecolumn.h"
+//#include "linecolumn.h"
#include "../common/extstr.h"
#include "../core/paths.h"
-
-
-/* ---------------------------- GESTION DE LINE COMPLETE ---------------------------- */
-
-
-/* Mémorisation des origines de texte */
-typedef struct _content_origin
-{
- col_coord_t coord; /* Localisation d'attachement */
-
- GObject *creator; /* Origine de la création */
-
-} content_origin;
-
-/* Représentation de fragments de texte en ligne (instance) */
-struct _GBufferLine
-{
- GObject parent; /* A laisser en premier */
-
- line_column *columns; /* Répartition du texte */
- size_t col_count; /* Nombre de colonnes présentes*/
- size_t merge_start; /* Début de la zone globale */
-
- BufferLineFlags flags; /* Drapeaux particuliers */
-
- content_origin *origins; /* Mémorisation des origines */
- size_t ocount; /* Nombre de ces mémorisations */
-
-};
-
-/* Représentation de fragments de texte en ligne (classe) */
-struct _GBufferLineClass
-{
- GObjectClass parent; /* A laisser en premier */
-
-#ifdef INCLUDE_GTK_SUPPORT
- cairo_surface_t *entrypoint_img; /* Image pour les entrées */
- cairo_surface_t *bookmark_img; /* Image pour les signets */
#endif
- /* Signaux */
- void (* content_changed) (GBufferLine *, line_segment *);
- void (* flip_flag) (GBufferLine *, BufferLineFlags, BufferLineFlags);
-
-};
+/* ---------------------------- GESTION DE LINE COMPLETE ---------------------------- */
/* Procède à l'initialisation d'une classe de représentation. */
@@ -106,7 +70,6 @@ static void g_buffer_line_finalize(GBufferLine *);
G_DEFINE_TYPE(GBufferLine, g_buffer_line, G_TYPE_OBJECT);
-
/******************************************************************************
* *
* Paramètres : class = classe de composant GTK à initialiser. *
@@ -131,6 +94,9 @@ static void g_buffer_line_class_init(GBufferLineClass *class)
object->dispose = (GObjectFinalizeFunc/* ! */)g_buffer_line_dispose;
object->finalize = (GObjectFinalizeFunc)g_buffer_line_finalize;
+
+#if 0
+
#ifdef INCLUDE_GTK_SUPPORT
filename = find_pixmap_file("entrypoint.png");
@@ -165,12 +131,14 @@ static void g_buffer_line_class_init(GBufferLineClass *class)
g_cclosure_user_marshal_VOID__ENUM_ENUM,
G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
+#endif
+
}
/******************************************************************************
* *
-* Paramètres : line = composant GTK à initialiser. *
+* Paramètres : line = composant GLib à initialiser. *
* *
* Description : Procède à l'initialisation d'une représentation de fragments.*
* *
@@ -203,10 +171,12 @@ static void g_buffer_line_init(GBufferLine *line)
static void g_buffer_line_dispose(GBufferLine *line)
{
+#if 0
size_t i; /* Boucle de parcours */
for (i = 0; i < line->ocount; i++)
g_object_unref(G_OBJECT(line->origins[i].creator));
+#endif
G_OBJECT_CLASS(g_buffer_line_parent_class)->dispose(G_OBJECT(line));
@@ -235,8 +205,10 @@ static void g_buffer_line_finalize(GBufferLine *line)
if (line->columns != NULL)
free(line->columns);
+#if 0
if (line->origins != NULL)
free(line->origins);
+#endif
G_OBJECT_CLASS(g_buffer_line_parent_class)->finalize(G_OBJECT(line));
@@ -258,22 +230,195 @@ static void g_buffer_line_finalize(GBufferLine *line)
GBufferLine *g_buffer_line_new(size_t col_count)
{
GBufferLine *result; /* Composant à retourner */
- size_t i; /* Boucle de parcours */
result = g_object_new(G_TYPE_BUFFER_LINE, NULL);
- result->columns = malloc(col_count * sizeof(line_column));
+ if (!g_buffer_line_create(result, col_count))
+ g_clear_object(&result);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : line = ligne de représentation à initialiser. *
+* col_count = quantité de colonnes à considérer. *
+* *
+* Description : Met en place une nouvelle représentation de bribes de texte. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_buffer_line_create(GBufferLine *line, size_t col_count)
+{
+ bool result; /* Bilen à retourner */
+ size_t i; /* Boucle de parcours */
+
+ result = true;
+
+ line->columns = malloc(col_count * sizeof(line_column_t));
for (i = 0; i < col_count; i++)
- init_line_column(&result->columns[i]);
+ init_line_column(&line->columns[i]);
- result->col_count = col_count;
+ line->col_count = col_count;
return result;
}
+
+
+
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : line = ligne à venir compléter. *
+* column = colonne de la ligne visée par l'insertion. *
+* tag = type de décorateur à utiliser. *
+* text = texte à insérer dans l'existant. *
+* length = taille du texte à traiter. *
+* style = gestionnaire de paramètres de rendu à consulter. *
+* creator = instance GLib quelconque à associer. *
+* *
+* Description : Ajoute du texte à formater dans une ligne donnée. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_buffer_line_append_text(GBufferLine *line, size_t column, TokenRenderingTag tag, const char *text, size_t length, const GTokenStyle *style, GObject *creator)
+{
+ size_t index; /* Indice d'insertion */
+ //content_origin *origin; /* Définition d'une origine */
+
+ assert(column < line->col_count);
+ assert(length > 0);
+
+ index = append_text_to_line_column(&line->columns[column], tag, text, length, style);
+
+ /*
+ if (creator != NULL)
+ {
+ line->origins = realloc(line->origins, ++line->ocount * sizeof(content_origin));
+
+ origin = &line->origins[line->ocount - 1];
+
+ origin->coord.column = column;
+ origin->coord.index = index;
+
+ origin->creator = creator;
+ g_object_ref(G_OBJECT(creator));
+
+ }
+ */
+
+}
+
+
+
+
+
+
+
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : line = ligne de texte à manipuler. *
+* cr = contexte graphique dédié à la procédure. *
+* column = (première) colonne à traiter. *
+* y = ordonnée du point d'impression. *
+* style = style de rendu pour les bribes de texte. *
+* *
+* Description : Imprime la ligne de texte représentée. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_buffer_line_draw(const GBufferLine *line, cairo_t *cr, size_t column, int y, const GTokenStyle *style)
+{
+#if 0
+ GBufferLineClass *class; /* Stockage de briques de base */
+ bool has_src_surface; /* Note une présence définie */
+#endif
+ size_t max_column; /* Borne de fin des colonnes */
+ int x; /* Point de départ d'impression*/
+ size_t i; /* Boucle de parcours */
+
+ /*
+ if (line->flags != BLF_NONE)
+ {
+ class = G_BUFFER_LINE_GET_CLASS(line);
+
+ if (line->flags & BLF_ENTRYPOINT)
+ {
+ cairo_set_source_surface(cairo, class->entrypoint_img, 5, y);
+ has_src_surface = true;
+ }
+ else if (line->flags & BLF_BOOKMARK)
+ {
+ cairo_set_source_surface(cairo, class->bookmark_img, 5, y);
+ has_src_surface = true;
+ }
+ else
+ has_src_surface = false;
+
+ if (has_src_surface)
+ cairo_paint(cairo);
+
+ }
+ */
+
+
+ /* Détermination de l'éventail des colonnes à traiter */
+
+ if (column == line->merge_start)
+ max_column = line->col_count;
+
+ else if (column > line->merge_start)
+ max_column = 0;
+
+ else
+ max_column = column + 1;
+
+ /* Dessin du contenu de ces colonnes */
+
+ x = 0;
+
+ for (i = column; i < max_column; i++)
+ draw_line_column(&line->columns[i], cr, &x, y, style);
+
+}
+
+
+
+
+
+
+
+
+
+
+#if 0
+
+
/******************************************************************************
* *
* Paramètres : line = ligne à venir compléter. *
@@ -1492,3 +1637,6 @@ void g_buffer_line_draw(GBufferLine *line, size_t index, cairo_t *cairo, gint x_
#endif
+
+
+#endif