diff options
Diffstat (limited to 'src/glibext/bufferline.c')
-rw-r--r-- | src/glibext/bufferline.c | 248 |
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 |