summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2014-04-07 10:59:13 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2014-04-07 10:59:13 (GMT)
commit3e8341ca17547db1dcf28c99d6fc68fe6901573b (patch)
tree57d867d97aa4df4496fe46b46c55b3c02537fd26
parent18d6b808db6e31e867525d68f92d6f928a7ab5a7 (diff)
Relied on Cairo for printing code.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@369 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
-rw-r--r--ChangeLog34
-rw-r--r--pixmaps/Makefile.am2
-rw-r--r--pixmaps/bookmark.pngbin0 -> 710 bytes
-rw-r--r--pixmaps/nil.pngbin0 -> 109 bytes
-rw-r--r--src/analysis/db/server.c17
-rw-r--r--src/arch/instruction.c2
-rw-r--r--src/glibext/Makefile.am1
-rw-r--r--src/glibext/gbufferline.c23
-rw-r--r--src/glibext/gbufferline.h39
-rw-r--r--src/glibext/gbuffersegment.c524
-rw-r--r--src/glibext/gbuffersegment.h44
-rw-r--r--src/glibext/gcodebuffer.c6
-rw-r--r--src/glibext/gfontcache.c294
-rw-r--r--src/glibext/gfontcache.h79
-rw-r--r--src/main.c3
15 files changed, 286 insertions, 782 deletions
diff --git a/ChangeLog b/ChangeLog
index e86e0a6..e708191 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,37 @@
+07-04-20 Cyrille Bagard <nocbos@gmail.com>
+
+ * pixmaps/bookmark.png:
+ New entry: create bookmark in buffer views.
+
+ * pixmaps/Makefile.am:
+ Add breakpoint_disabled.png and breakpoint_normal.png to EXTRA_DIST.
+
+ * pixmaps/nil.png:
+ New entry: use a dummy picture for empty Cairo surfaces.
+
+ * src/analysis/db/server.c:
+ Typo. Display a message for server connections.
+
+ * src/arch/instruction.c:
+ Update code.
+
+ * src/glibext/gbufferline.c:
+ * src/glibext/gbufferline.h:
+ * src/glibext/gbuffersegment.c:
+ * src/glibext/gbuffersegment.h:
+ * src/glibext/gcodebuffer.c:
+ Rely on Cairo for printing code.
+
+ * src/glibext/gfontcache.c:
+ * src/glibext/gfontcache.h:
+ Deleted entries.
+
+ * src/glibext/Makefile.am:
+ Remove the 'gfontcache.[ch]' files from libglibext_la_SOURCES.
+
+ * src/main.c:
+ Update code.
+
14-03-20 Cyrille Bagard <nocbos@gmail.com>
* configure.ac:
diff --git a/pixmaps/Makefile.am b/pixmaps/Makefile.am
index 5b1c100..f8f94fb 100644
--- a/pixmaps/Makefile.am
+++ b/pixmaps/Makefile.am
@@ -32,6 +32,8 @@ MISC = \
welcome.png
EXTRA_DIST = \
+ bookmark.png \
+ nil.png \
breakpoint_disabled.png \
breakpoint_normal.png \
openida.xcf \
diff --git a/pixmaps/bookmark.png b/pixmaps/bookmark.png
new file mode 100644
index 0000000..b007203
--- /dev/null
+++ b/pixmaps/bookmark.png
Binary files differ
diff --git a/pixmaps/nil.png b/pixmaps/nil.png
new file mode 100644
index 0000000..ef6ecd7
--- /dev/null
+++ b/pixmaps/nil.png
Binary files differ
diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c
index b636d02..acdf200 100644
--- a/src/analysis/db/server.c
+++ b/src/analysis/db/server.c
@@ -33,6 +33,7 @@
#include "protocol.h"
+#include "../../gui/panels/log.h"
@@ -53,7 +54,8 @@ struct _GDbServer
{
GObject parent; /* A laisser en premier */
- int fd;
+ int fd; /* Canal de communication */
+ char *hostname; /* Désignation humaine */
struct sockaddr_in addr; /* Adresse d'écoute */
GThread *listener; /* Procédure de traitement */
@@ -139,7 +141,7 @@ static void g_db_server_init(GDbServer *server)
/******************************************************************************
* *
-* Paramètres : binary = instance d'objet GLib à traiter. *
+* Paramètres : server = instance d'objet GLib à traiter. *
* *
* Description : Procède à la libération totale de la mémoire. *
* *
@@ -149,11 +151,11 @@ static void g_db_server_init(GDbServer *server)
* *
******************************************************************************/
-static void g_db_server_finalize(GDbServer *binary)
+static void g_db_server_finalize(GDbServer *server)
{
- //free(binary->filename);
+ free(server->hostname);
- G_OBJECT_CLASS(g_db_server_parent_class)->finalize(G_OBJECT(binary));
+ G_OBJECT_CLASS(g_db_server_parent_class)->finalize(G_OBJECT(server));
}
@@ -178,6 +180,8 @@ GDbServer *g_db_server_new(const char *host, short port)
result = g_object_new(G_TYPE_DB_SERVER, NULL);
+ result->hostname = strdup(host);
+
hp = gethostbyname(host);
if (hp == NULL) goto gdsn_error;
@@ -383,6 +387,9 @@ bool g_db_server_start(GDbServer *server)
server->listener = g_thread_new("cdb_listener", (GThreadFunc)g_db_server_listener, server);
+ log_variadic_message(LMT_PROCESS, _("Server started and listening at %s:%hu"),
+ server->hostname, ntohs(server->addr.sin_port));
+
return true;
}
diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index 3831ee4..3f63ca3 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -658,7 +658,7 @@ static void _g_arch_instruction_print(const GArchInstruction *instr, GCodeBuffer
for (j = 1; j < instr->operands_count; j++)
{
g_buffer_line_insert_text(line, BLC_ASSEMBLY, ",", 1, RTT_PUNCT);
- g_buffer_line_insert_text(line, BLC_ASSEMBLY, " ", 1, RTT_NONE);
+ g_buffer_line_insert_text(line, BLC_ASSEMBLY, " ", 1, RTT_RAW);
g_arch_operand_print(instr->operands[j], line, syntax);
diff --git a/src/glibext/Makefile.am b/src/glibext/Makefile.am
index e5c1a46..f7f3da3 100644
--- a/src/glibext/Makefile.am
+++ b/src/glibext/Makefile.am
@@ -11,7 +11,6 @@ libglibext_la_SOURCES = \
gbufferline.h gbufferline.c \
gbuffersegment.h gbuffersegment.c \
gcodebuffer.h gcodebuffer.c \
- gfontcache.h gfontcache.c \
gnhash.h gnhash.c \
proto.h
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index 18f8a2a..907b5bd 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -67,7 +67,7 @@ static GBufferSegment *get_segment_at(const buffer_line_column *, gint *, bool);
GSList *highlight_all_same_segments(const buffer_line_column *, GSList *, const GBufferSegment *);
/* Imprime le contenu d'une colonne de ligne de texte. */
-static void draw_segments_of_column(buffer_line_column *, cairo_t *, GFontCache *, gint, gint);
+static void draw_segments_of_column(buffer_line_column *, cairo_t *, gint, gint);
@@ -86,6 +86,8 @@ struct _GBufferLine
BufferLineColumn merge_start; /* Début de la zone globale */
BufferLineColumn last_used; /* Dernière colonne utilisée */
+ cairo_surface_t *bookmark_img; /* Image pour les signets */
+
};
/* Représentation de fragments de texte en ligne (classe) */
@@ -265,7 +267,6 @@ GSList *highlight_all_same_segments(const buffer_line_column *column, GSList *li
* *
* Paramètres : column = colonne de ligne de texte à manipuler. *
* cairo = contexte graphique à utiliser pour les pinceaux. *
-* fcache = gestionnaire des polices pour l'impression. *
* x_init = abscisse du point d'impression de départ. *
* y = ordonnée du point d'impression. *
* *
@@ -277,7 +278,7 @@ GSList *highlight_all_same_segments(const buffer_line_column *column, GSList *li
* *
******************************************************************************/
-static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo, GFontCache *fcache, gint x_init, gint y)
+static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo, gint x_init, gint y)
{
gint x;
size_t i;
@@ -285,7 +286,7 @@ static void draw_segments_of_column(buffer_line_column *column, cairo_t *cairo,
x = x_init;
for (i = 0; i < column->count; i++)
- g_buffer_segment_draw(column->segments[i], cairo, fcache, &x, y);
+ g_buffer_segment_draw(column->segments[i], cairo, &x, y);
}
@@ -472,6 +473,7 @@ static void g_buffer_line_class_init(GBufferLineClass *class)
static void g_buffer_line_init(GBufferLine *line)
{
BufferLineColumn i; /* Boucle de parcours */
+ char *filename; /* Chemin d'accès à utiliser */
for (i = BLC_ADDRESS; i < BLC_COUNT; i++)
reset_column(&line->columns[i]);
@@ -479,6 +481,9 @@ static void g_buffer_line_init(GBufferLine *line)
line->merge_start = BLC_COUNT;
line->last_used = BLC_COUNT;
+ filename = "/home/ocb/prog/chrysalide.cdb/pixmaps/bookmark.png";
+ line->bookmark_img = cairo_image_surface_create_from_png(filename);
+
}
@@ -684,7 +689,7 @@ void g_buffer_line_insert_text(GBufferLine *line, BufferLineColumn column, const
class = G_BUFFER_LINE_GET_CLASS(line);
- segment = g_buffer_segment_new(class->attribs[type], text, length);
+ segment = g_buffer_segment_new(type, text, length);
g_buffer_line_add_segment(line, column, segment);
}
@@ -808,7 +813,6 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)
* *
* Paramètres : line = ligne de texte à manipuler. *
* cairo = contexte graphique à utiliser pour les pinceaux.*
-* fcache = gestionnaire des polices pour l'impression. *
* max_widths = largeurs de colonne à respecter. *
* x_init = abscisse du point d'impression de départ. *
* y = ordonnée du point d'impression. *
@@ -823,11 +827,14 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)
* *
******************************************************************************/
-void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, GFontCache *fcache, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool addr, bool code)
+void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool addr, bool code)
{
gint x; /* Point de départ d'impression*/
BufferLineColumn i; /* Boucle de parcours */
+ cairo_set_source_surface(cairo, line->bookmark_img, 5, y);
+ cairo_paint(cairo);
+
x = x_init;
for (i = BLC_ADDRESS; i < BLC_COUNT; i++)
@@ -835,7 +842,7 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, GFontCache *fcache, c
if (i == BLC_ADDRESS && !addr) continue;
if (i == BLC_BINARY && !code) continue;
- draw_segments_of_column(&line->columns[i], cairo, fcache, x, y);
+ draw_segments_of_column(&line->columns[i], cairo, x, y);
if (i < line->merge_start)
x += max_widths[i] + COL_MARGIN;
diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h
index 7b063ac..cf8ecf4 100644
--- a/src/glibext/gbufferline.h
+++ b/src/glibext/gbufferline.h
@@ -67,43 +67,6 @@ typedef enum _BufferLineColumn
} BufferLineColumn;
-/* Types de partie de rendu */
-typedef enum _RenderingTagType
-{
- RTT_RAW, /* Contenu brut */
-
- RTT_COMMENT, /* Commentaire */
- RTT_INDICATION, /* Aide à la lecture */
- RTT_RAW_CODE, /* Code binaire brut */
-
- RTT_INSTRUCTION, /* Code binaire brut */
-
- RTT_IMMEDIATE, /* Valeur immédiate */
-
- RTT_REGISTER, /* Registre */
-
- RTT_PUNCT, /* Signes de ponctuation */
- RTT_HOOK, /* Crochets '[' et ']' */
- RTT_SIGNS, /* Signes '+', '-' et '*' */
- RTT_LTGT, /* Caractères '<' et '>' */
-
- RTT_SECTION, /* Identifiant de section */
- RTT_SEGMENT, /* Indication de segment */
- RTT_STRING, /* Chaîne de caractères avec " */
-
- RTT_VAR_NAME, /* Nom de variable */
-
- RTT_KEY_WORD, /* Mot clef de langage */
-
- RTT_ERROR, /* Erreur "interne" */
-
- RTT_COUNT
-
-} RenderingTagType;
-
-
-#define RTT_NONE RTT_RAW /* TODO : remme */
-
/* Confort pour l'insertion de texte */
@@ -151,7 +114,7 @@ gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, bool, bool
void g_buffer_line_start_merge_at(GBufferLine *, BufferLineColumn);
/* Imprime la ligne de texte représentée. */
-void g_buffer_line_draw(GBufferLine *, cairo_t *, GFontCache *, const gint [BLC_COUNT], gint, gint, bool, bool);
+void g_buffer_line_draw(GBufferLine *, cairo_t *, const gint [BLC_COUNT], gint, gint, bool, bool);
/* Exporte la ligne de texte représentée. */
void g_buffer_line_export(GBufferLine *, int, BufferExportType, bool, bool, bool);
diff --git a/src/glibext/gbuffersegment.c b/src/glibext/gbuffersegment.c
index 31f1840..df20887 100644
--- a/src/glibext/gbuffersegment.c
+++ b/src/glibext/gbuffersegment.c
@@ -25,10 +25,13 @@
#include <stdbool.h>
+#include <stdlib.h>
#include <string.h>
#include "../common/fnv1a.h"
+#include "../gtkext/gtkblockview.h"
+#include "../gtkext/support.h"
@@ -36,6 +39,23 @@
#define COLOR_NOT_SET 0
#define COLOR_SET 1
+/* Propriétés de rendu */
+typedef struct _rendering_pattern_t
+{
+ GdkColor foreground; /* Couleur d'impression */
+
+ cairo_font_slant_t slant; /* Style d'impression */
+ cairo_font_weight_t weight; /* Poids de la police */
+
+} rendering_pattern_t;
+
+/* Compléments à Cairo */
+
+#define CAIRO_FONT_SLANT_COUNT 3
+#define CAIRO_FONT_WEIGHT_COUNT 2
+
+#define CAIRO_FONTS_COUNT (CAIRO_FONT_SLANT_COUNT * CAIRO_FONT_WEIGHT_COUNT)
+#define CAIRO_FONT_INDEX(s, w) ((s) * CAIRO_FONT_SLANT_COUNT + (w))
/* Fragment de caractères aux propriétés communes (instance) */
struct _GBufferSegment
@@ -45,19 +65,15 @@ struct _GBufferSegment
char *text; /* Texte brut conservé */
fnv64_t hash; /* Empreinte pour comparaisons */
- PangoAttrList *attribs; /* Propriétés du rendu */
+ rendering_pattern_t *pattern; /* Propriétés du rendu */
SegRenderingStyle style; /* Apparence du segment */
GdkColor cache_bg; /* Fond d'impression */
- GdkColor cache_fg; /* Couleur d'impression #1 */
- GdkColor cache_alt_fg; /* Couleur d'impression #2 */
- GdkColor *cache_used_fg; /* Couleur d'impression utile */
-
- PangoGlyphString *glyphs; /* Caractères traités */
- PangoFontDescription *desc; /* Description de police */
+ GdkColor alt_fg; /* Couleur d'impression bis */
+ GdkColor *used_fg; /* Couleur d'impression utile */
- PangoRectangle logical; /* Dimension du texte */
+ cairo_text_extents_t extents; /* Dimensions du texte */
};
@@ -66,11 +82,8 @@ struct _GBufferSegmentClass
{
GObjectClass parent; /* A laisser en premier */
- PangoGlyphString *ascii_glyphs; /* Caractères ASCII prêts */
- PangoFont *ascii_font; /* Police utilisée pour ASCII */
- bool ascii_ready; /* Utilisation possible ? */
-
- bool ascii_init_done; /* Initialisation tentée ? */
+ cairo_t *font_ctxts[CAIRO_FONTS_COUNT]; /* Contextes de police */
+ rendering_pattern_t patterns[RTT_COUNT];/* Modèles d'impression */
};
@@ -81,270 +94,117 @@ static void g_buffer_segment_class_init(GBufferSegmentClass *);
/* Procède à l'initialisation d'un fragment de texte. */
static void g_buffer_segment_init(GBufferSegment *);
+/* Définit les dernières propriétés de rendu restantes. */
+static void g_buffer_segment_prepare(GBufferSegment *, const char *);
-
-
-
-
-
-
-static bool ascii_glyph_table_init(GBufferSegmentClass *class, PangoContext *context)
-{
- gint i; /* Boucle de parcours */
- char ascii_chars[128]; /* Table de caractères ASCII */
- PangoAttrList *attribs; /* Liste d'attributs (vide) */
- GList *list; /* Liste d'éléments distincts */
-
- if (!class->ascii_init_done)
- {
- class->ascii_init_done = true;
-
- /* Construction d'une chaîne adéquate */
-
- for (i = 0; i < 128; ++i)
- switch (i)
- {
- case 0 ... 31:
- ascii_chars[i] = '?';
- break;
- case 32 ... 127:
- ascii_chars[i] = i;
- break;
- default:
- ascii_chars[i] = '?';
- break;
- }
-
- /* Analyse de la chaîne créée */
-
- attribs = pango_attr_list_new();
- list = pango_itemize(context, ascii_chars, 0, 128, attribs, NULL);
-
- class->ascii_ready = (list != NULL && list->next == NULL);
-
- if (class->ascii_ready)
- {
- PangoItem *item;
- //int width;
-
- item = (PangoItem *)list->data;
- //width = gui.char_width * PANGO_SCALE;
-
- /* Remember the shape engine used for ASCII. */
- //default_shape_engine = item->analysis.shape_engine;
-
- class->ascii_font = item->analysis.font;
- g_object_ref(class->ascii_font);
-
- class->ascii_glyphs = pango_glyph_string_new();
-
- pango_shape(ascii_chars, 128, &item->analysis, class->ascii_glyphs);
-
- class->ascii_ready = (class->ascii_glyphs->num_glyphs == 128);
-
-
-
-#if 0
- for (i = 0; i < class->ascii_glyphs->num_glyphs; i++)
- {
- PangoGlyphGeometry *geom;
-
- geom = &class->ascii_glyphs->glyphs[i].geometry;
- //geom->x_offset += MAX(0, width - geom->width) / 2;
- //geom->width = /*width*/8 * PANGO_SCALE;
- }
-#endif
-
- }
-
- //g_list_foreach(list, (GFunc)&pango_item_free, NULL);
- //g_list_free(list);
-
- //pango_attr_list_unref(attribs);
-
- }
-
- return class->ascii_ready;
-
-}
-
-
-
-
-
+/* Détermine le type du fragment de caractères aux propriétés communes. */
+G_DEFINE_TYPE(GBufferSegment, g_buffer_segment, G_TYPE_OBJECT);
/******************************************************************************
* *
-* Paramètres : context = contexte Pango pour l'analyse des caractères. *
-* attribs = propriétés de la zone de texte. *
-* text = chaîne de caractères à traiter. *
-* length = quantité de ces caractères. *
+* Paramètres : class = classe de composant GTK à initialiser. *
* *
-* Description : Crée un nouveau fragment de texte avec des propriétés. *
+* Description : Procède à l'initialisation d'une classe de fragment de texte.*
* *
-* Retour : Composant GTK créé. *
+* Retour : - *
* *
* Remarques : - *
* *
******************************************************************************/
-static void g_buffer_segment_prepare(GBufferSegment *segment, PangoContext *context, PangoAttrList *attribs, const char *text, size_t length)
+static void g_buffer_segment_class_init(GBufferSegmentClass *class)
{
- PangoGlyphString *glyphs; /* Caractères traités */
- bool must_use_pango; /* Passage par Pango obligé ? */
- PangoAttrIterator *iterator; /* Guide de parcours */
- PangoAttribute *attrib; /* Attribut générique */
-
- GList *item_list;
- PangoItem *item;
-
- //PangoRectangle logical;
-
-
- const char *max;
- const char *iter;
-
- GBufferSegmentClass *class;
-
- size_t i;
-
- PangoGlyphInfo *info;
- gint *log_clusters;
- PangoGlyphInfo *ref;
-
- PangoFont *font; /* Modèle de police */
- PangoFontDescription *desc; /* Description de cette police */
-
-
-
-
- glyphs = pango_glyph_string_new();
-
-
-
-
-
-
- /* Existe-t-il des attributs particuliers ? */
-
- must_use_pango = false;
-
- iterator = pango_attr_list_get_iterator(attribs);
-
- attrib = pango_attr_iterator_get(iterator, PANGO_ATTR_WEIGHT);
- must_use_pango |= (attrib != NULL);
-
- attrib = pango_attr_iterator_get(iterator, PANGO_ATTR_STYLE);
- must_use_pango |= (attrib != NULL);
-
- pango_attr_iterator_destroy(iterator);
-
- if (must_use_pango)
- goto not_ascii;
-
-
-
-
-
-
-
-
- /**
- * Petite astuce empruntée à Vim...
- * (cf. src/gui_gtk_x11.c, fonction gui_gtk2_draw_string()).
- * On essaie de traiter à la main les morceaux de
- * texte. Pour ceux en ASCII pur, le gain est non négligeable.
- */
-
- max = text + length;
-
- goto not_ascii;
-
- for (iter = text; iter < max; iter++)
- if (*iter & 0x80)
- goto not_ascii;
-
- class = G_BUFFER_SEGMENT_GET_CLASS(segment);
-
- if (!ascii_glyph_table_init(class, context))
- goto not_ascii;
-
- pango_glyph_string_set_size(glyphs, length);
-
- info = glyphs->glyphs;
- log_clusters = glyphs->log_clusters;
- ref = class->ascii_glyphs->glyphs;
-
- for (i = 0; i < length; i++)
- {
- info[i] = ref[(unsigned int)text[i]];
- log_clusters[i] = i;
- }
-
- font = class->ascii_font;
-
- goto next;
-
- not_ascii:
-
- item_list = pango_itemize(context, text, 0, length, attribs, NULL);
+ gchar *filename; /* Accès à une image 1x1 */
+ cairo_font_slant_t s; /* Boucle de parcours #1 */
+ cairo_font_weight_t w; /* Boucle de parcours #2 */
+ cairo_t **cr; /* Contexte à créer */
+ cairo_surface_t *surface; /* Surface pour dessin Cairo */
- /*
- if (!(item_list != NULL && item_list->next == NULL))
- printf("ouich\n");
- */
+ /* Contextes pour les mesures initiales */
- item = (PangoItem *)item_list->data;
- pango_shape(text, length, &item->analysis, glyphs);
+ filename = find_pixmap_file("nil.png");
+ if (filename == NULL) abort();
- font = item->analysis.font;
-
- next:
-
- desc = pango_font_describe(font);
- segment->desc = pango_font_description_copy(desc);
-
- pango_glyph_string_extents(glyphs, font, NULL, &segment->logical);
-
- //pango_shape(text, length, &item->analysis, glyphs);
+ for (s = CAIRO_FONT_SLANT_NORMAL; s < CAIRO_FONT_SLANT_COUNT; s++)
+ for (w = CAIRO_FONT_WEIGHT_NORMAL; w < CAIRO_FONT_WEIGHT_COUNT; w++)
+ {
+ cr = &class->font_ctxts[CAIRO_FONT_INDEX(s, w)];
+ surface = cairo_image_surface_create_from_png(filename);
+ *cr = cairo_create(surface);
+ cairo_surface_destroy(surface);
- //pango_glyph_string_extents(glyphs, class->ascii_font, NULL, &segment->logical);
+ cairo_select_font_face(*cr, "mono", s, w);
+ cairo_set_font_size(*cr, 13);
- segment->logical.y /= PANGO_SCALE;
- segment->logical.width /= PANGO_SCALE;
- segment->logical.height /= PANGO_SCALE;
+ }
- segment->glyphs = glyphs;
+ g_free(filename);
+
+ /* Propriétés d'impression */
+
+#define GET_RESET_PATTERN(tp) \
+ ({ \
+ rendering_pattern_t *__p; \
+ __p = &class->patterns[RTT_ ## tp]; \
+ memset(__p, 0, sizeof(rendering_pattern_t)); \
+ __p; \
+ })
+
+#define DEFINE_SIMPLE_PATTERN(rtt) \
+ do \
+ { \
+ rendering_pattern_t *__ptn; \
+ __ptn = GET_RESET_PATTERN(rtt); \
+ __ptn->slant = CAIRO_FONT_SLANT_NORMAL; \
+ __ptn->weight = CAIRO_FONT_WEIGHT_NORMAL; \
+ __ptn->foreground.pixel = COLOR_NOT_SET; \
+ } \
+ while (0)
+
+#define DEFINE_PATTERN(rtt, s, w, r, g, b) \
+ do \
+ { \
+ rendering_pattern_t *__ptn; \
+ __ptn = GET_RESET_PATTERN(rtt); \
+ __ptn->slant = CAIRO_FONT_SLANT_ ## s; \
+ __ptn->weight = CAIRO_FONT_WEIGHT_ ## w; \
+ __ptn->foreground.red = r; \
+ __ptn->foreground.green = g; \
+ __ptn->foreground.blue = b; \
+ __ptn->foreground.pixel = COLOR_SET; \
+ } \
+ while (0)
+
+ DEFINE_PATTERN(RAW, NORMAL, NORMAL, 0, 0, 0);
+ DEFINE_PATTERN(COMMENT, NORMAL, NORMAL, 14335, 45311, 23551);
+ DEFINE_PATTERN(INDICATION, ITALIC, NORMAL, 33410, 33410, 33410);
+ DEFINE_PATTERN(RAW_CODE, NORMAL, NORMAL, 48895, 48895, 48895);
+ DEFINE_PATTERN(INSTRUCTION, NORMAL, NORMAL, 0, 0, 0);
+ DEFINE_PATTERN(IMMEDIATE, NORMAL, NORMAL, 41215, 8447, 61695);
+ DEFINE_PATTERN(REGISTER, NORMAL, NORMAL, 16895, 16895, 53759);
+ DEFINE_PATTERN(PUNCT, NORMAL, BOLD, 0, 0, 0);
+ DEFINE_PATTERN(HOOK, NORMAL, BOLD, 0, 0, 0);
+ DEFINE_PATTERN(SIGNS, NORMAL, BOLD, 0, 0, 0);
+ DEFINE_SIMPLE_PATTERN(LTGT);
+ DEFINE_PATTERN(SECTION, NORMAL, NORMAL, 51200, 2560, 2560);
+ DEFINE_SIMPLE_PATTERN(SEGMENT);
+ DEFINE_PATTERN(STRING, NORMAL, NORMAL, 52224, 32256, 0);
+ DEFINE_PATTERN(VAR_NAME, NORMAL, NORMAL, 0, 0, 0);
+ DEFINE_PATTERN(KEY_WORD, NORMAL, NORMAL, 0, 0, 0);
+ DEFINE_PATTERN(ERROR, NORMAL, BOLD, 65535, 0, 0);
}
-
-
-
-
-
-
-
-
-
-
-
-
-/* Détermine le type du fragment de caractères aux propriétés communes. */
-G_DEFINE_TYPE(GBufferSegment, g_buffer_segment, G_TYPE_OBJECT);
-
-
-
/******************************************************************************
* *
-* Paramètres : class = classe de composant GTK à initialiser. *
+* Paramètres : segment = composant GTK à initialiser. *
* *
-* Description : Procède à l'initialisation d'une classe de fragment de texte.*
+* Description : Procède à l'initialisation d'un fragment de texte. *
* *
* Retour : - *
* *
@@ -352,7 +212,7 @@ G_DEFINE_TYPE(GBufferSegment, g_buffer_segment, G_TYPE_OBJECT);
* *
******************************************************************************/
-static void g_buffer_segment_class_init(GBufferSegmentClass *class)
+static void g_buffer_segment_init(GBufferSegment *segment)
{
}
@@ -360,54 +220,77 @@ static void g_buffer_segment_class_init(GBufferSegmentClass *class)
/******************************************************************************
* *
-* Paramètres : segment = composant GTK à initialiser. *
+* Paramètres : type = propriétés de la zone de texte. *
+* text = chaîne de caractères à traiter. *
+* length = quantité de ces caractères. *
* *
-* Description : Procède à l'initialisation d'un fragment de texte. *
+* Description : Crée un nouveau fragment de texte avec des propriétés. *
* *
-* Retour : - *
+* Retour : Composant GTK créé. *
* *
* Remarques : - *
* *
******************************************************************************/
-static void g_buffer_segment_init(GBufferSegment *segment)
+GBufferSegment *g_buffer_segment_new(RenderingTagType type, const char *text, size_t length)
{
+ GBufferSegment *result; /* Composant à retourner */
+ GBufferSegmentClass *class; /* Stockage de styles préparés */
+
+ result = g_object_new(G_TYPE_BUFFER_SEGMENT, NULL);
+
+ result->text = strdup(text);
+ result->hash = fnv_64a_hash(text);
+
+ class = G_BUFFER_SEGMENT_GET_CLASS(result);
+ result->pattern = &class->patterns[type];
+
+ g_buffer_segment_prepare(result, text);
+
+ g_buffer_segment_set_style(result, SRS_CLASSIC);
+
+ return result;
}
/******************************************************************************
* *
-* Paramètres : attribs = propriétés de la zone de texte. *
+* Paramètres : segment = instance de segment à affiner. *
* text = chaîne de caractères à traiter. *
-* length = quantité de ces caractères. *
* *
-* Description : Crée un nouveau fragment de texte avec des propriétés. *
+* Description : Définit les dernières propriétés de rendu restantes. *
* *
-* Retour : Composant GTK créé. *
+* Retour : - *
* *
* Remarques : - *
* *
******************************************************************************/
-GBufferSegment *g_buffer_segment_new(PangoAttrList *attribs, const char *text, size_t length)
+static void g_buffer_segment_prepare(GBufferSegment *segment, const char *text)
{
- GBufferSegment *result; /* Composant à retourner */
+ GBufferSegmentClass *class; /* Classe associée à l'instance*/
+ cairo_font_slant_t slant; /* Style d'impression */
+ cairo_font_weight_t weight; /* Poids de la police */
+ cairo_t *cr; /* Contexte de rendu */
- result = g_object_new(G_TYPE_BUFFER_SEGMENT, NULL);
+ /* Taille */
- result->text = strdup(text);
- result->hash = fnv_64a_hash(text);
+ class = G_BUFFER_SEGMENT_GET_CLASS(segment);
- result->attribs = pango_attr_list_ref(attribs);
+ slant = segment->pattern->slant;
+ weight = segment->pattern->weight;
- g_buffer_segment_prepare(result, get_global_pango_context(), attribs, text, length);
+ cr = class->font_ctxts[CAIRO_FONT_INDEX(slant, weight)];
- g_buffer_segment_cache_colors(result);
+ cairo_text_extents(cr, text, &segment->extents);
- g_buffer_segment_set_style(result, SRS_CLASSIC);
+ /* Couleurs */
- return result;
+ segment->alt_fg.red = 65535 - segment->pattern->foreground.red;
+ segment->alt_fg.green = 65535 - segment->pattern->foreground.green;
+ segment->alt_fg.blue = 65535 - segment->pattern->foreground.blue;
+ segment->alt_fg.pixel = segment->pattern->foreground.pixel;
}
@@ -471,7 +354,7 @@ const char *g_buffer_segment_get_text(const GBufferSegment *segment)
gint g_buffer_segment_get_width(const GBufferSegment *segment)
{
- return segment->logical.width;
+ return segment->extents.x_advance;
}
@@ -497,8 +380,6 @@ gint g_buffer_segment_get_caret_position(const GBufferSegment *segment, gint x)
width = g_buffer_segment_get_width(segment);
- printf("(seg) x=%d width=%d\n", x, width);
-
if (x <= 0)
result = 0;
@@ -507,14 +388,7 @@ gint g_buffer_segment_get_caret_position(const GBufferSegment *segment, gint x)
else
{
- if (strlen(segment->text) != segment->glyphs->num_glyphs)
- {
-
- printf("STOP ::: %d vs %d\n", strlen(segment->text), segment->glyphs->num_glyphs);
- exit(0);
- }
-
- char_width = width / segment->glyphs->num_glyphs;
+ char_width = width / strlen(segment->text);
result = (x / char_width) * char_width;
if ((x % char_width) > (char_width / 2))
@@ -530,46 +404,6 @@ gint g_buffer_segment_get_caret_position(const GBufferSegment *segment, gint x)
/******************************************************************************
* *
* Paramètres : segment = fragment de texte à manipuler. *
-* *
-* Description : (Re)charge les couleurs à partir de la liste d'attributs. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_buffer_segment_cache_colors(GBufferSegment *segment)
-{
- PangoAttrIterator *iterator; /* Guide de parcours */
- PangoAttribute *attrib; /* Attribut générique */
- PangoAttrColor *color_attrib; /* Propriété de couleur */
-
- iterator = pango_attr_list_get_iterator(segment->attribs);
-
- /* Couleur d'impression */
-
- attrib = pango_attr_iterator_get(iterator, PANGO_ATTR_FOREGROUND);
- segment->cache_fg.pixel = (attrib != NULL ? COLOR_SET : COLOR_NOT_SET);
-
- if (segment->cache_fg.pixel == COLOR_SET)
- {
- color_attrib = (PangoAttrColor *)attrib;
-
- segment->cache_fg.red = color_attrib->color.red;
- segment->cache_fg.green = color_attrib->color.green;
- segment->cache_fg.blue = color_attrib->color.blue;
-
- }
-
- pango_attr_iterator_destroy(iterator);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : segment = fragment de texte à manipuler. *
* style = style de rendu pour le segment. *
* *
* Description : Module l'apparence finale du composant. *
@@ -588,7 +422,7 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
{
default:
case SRS_CLASSIC:
- segment->cache_used_fg = &segment->cache_fg;
+ segment->used_fg = &segment->pattern->foreground;
break;
case SRS_HIGHLIGHT_SAME:
@@ -597,11 +431,7 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
segment->cache_bg.green = 32768;
segment->cache_bg.blue = 32768;
- segment->cache_alt_fg.red = 65535 - segment->cache_fg.red;
- segment->cache_alt_fg.green = 65535 - segment->cache_fg.green;
- segment->cache_alt_fg.blue = 65535 - segment->cache_fg.blue;
-
- segment->cache_used_fg = &segment->cache_alt_fg;
+ segment->used_fg = &segment->alt_fg;
break;
@@ -614,7 +444,6 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
* *
* Paramètres : segment = fragment de texte à manipuler. *
* cairo = contexte graphique à utiliser pour les pinceaux. *
-* fcache = gestionnaire des polices pour l'impression. *
* x = abscisse du point d'impression (à maj). [OUT] *
* y = ordonnée du point d'impression. *
* *
@@ -626,23 +455,23 @@ void g_buffer_segment_set_style(GBufferSegment *segment, SegRenderingStyle style
* *
******************************************************************************/
-void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, GFontCache *fcache, gint *x, gint y)
+void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, gint *x, gint y)
{
- PangoFont *font; /* Police d'impression */
- /* FIXME */
- g_buffer_segment_prepare(segment, get_global_pango_context(),
- segment->attribs, segment->text, strlen(segment->text));
+ cairo_font_extents_t extents;
+
+
/* Fond du texte */
- if (segment->style != SRS_CLASSIC)
+ if (segment->style != SRS_CLASSIC || 1)
{
cairo_set_source_rgb(cairo,
segment->cache_bg.red / 65535.0,
segment->cache_bg.green / 65535.0,
segment->cache_bg.blue / 65535.0);
- cairo_rectangle(cairo, *x, y, segment->logical.width, segment->logical.height);
+ cairo_rectangle(cairo, *x, y, segment->extents.x_advance, 17);
+
cairo_set_operator(cairo, CAIRO_OPERATOR_DIFFERENCE);
cairo_fill(cairo);
cairo_set_operator(cairo, CAIRO_OPERATOR_OVER);
@@ -651,19 +480,34 @@ void g_buffer_segment_draw(GBufferSegment *segment, cairo_t *cairo, GFontCache *
/* Couleur d'impression */
- if (segment->cache_fg.pixel == COLOR_SET)
+ if (segment->used_fg->pixel == COLOR_SET)
cairo_set_source_rgb(cairo,
- segment->cache_used_fg->red / 65535.0,
- segment->cache_used_fg->green / 65535.0,
- segment->cache_used_fg->blue / 65535.0);
+ segment->used_fg->red / 65535.0,
+ segment->used_fg->green / 65535.0,
+ segment->used_fg->blue / 65535.0);
/* Impression du texte */
- cairo_move_to(cairo, *x, y - segment->logical.y);
+ cairo_select_font_face(cairo, "mono", segment->pattern->slant, segment->pattern->weight);
+ cairo_set_font_size(cairo, 13);
+
+
+
+
+ cairo_move_to(cairo, *x, y + 17 - 3);
+
+
+
+
+ cairo_font_extents(cairo, &extents);
+
+ if (extents.descent != 3)
+ printf("FONT : %g, %g\n", extents.ascent, extents.descent);
+
+ cairo_show_text(cairo, segment->text);
- font = g_font_cache_lookup(fcache, segment->desc);
- pango_cairo_show_glyph_string(cairo, font, segment->glyphs);
+ //printf(">> %s >> %f %f\n", segment->text, segment->extents.width, segment->extents.x_advance);
- *x += segment->logical.width;
+ *x += segment->extents.x_advance;
}
diff --git a/src/glibext/gbuffersegment.h b/src/glibext/gbuffersegment.h
index bc0d512..76465a7 100644
--- a/src/glibext/gbuffersegment.h
+++ b/src/glibext/gbuffersegment.h
@@ -31,9 +31,6 @@
#include <pango/pango.h>
-#include "gfontcache.h"
-
-
#define G_TYPE_BUFFER_SEGMENT (g_buffer_segment_get_type())
#define G_BUFFER_SEGMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_BUFFER_SEGMENT, GBufferSegment))
@@ -43,6 +40,40 @@
#define G_BUFFER_SEGMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_BUFFER_SEGMENT, GBufferSegmentClass))
+/* Types de partie de rendu */
+typedef enum _RenderingTagType
+{
+ RTT_RAW, /* Contenu brut */
+
+ RTT_COMMENT, /* Commentaire */
+ RTT_INDICATION, /* Aide à la lecture */
+ RTT_RAW_CODE, /* Code binaire brut */
+
+ RTT_INSTRUCTION, /* Code binaire brut */
+
+ RTT_IMMEDIATE, /* Valeur immédiate */
+
+ RTT_REGISTER, /* Registre */
+
+ RTT_PUNCT, /* Signes de ponctuation */
+ RTT_HOOK, /* Crochets '[' et ']' */
+ RTT_SIGNS, /* Signes '+', '-' et '*' */
+ RTT_LTGT, /* Caractères '<' et '>' */
+
+ RTT_SECTION, /* Identifiant de section */
+ RTT_SEGMENT, /* Indication de segment */
+ RTT_STRING, /* Chaîne de caractères avec " */
+
+ RTT_VAR_NAME, /* Nom de variable */
+
+ RTT_KEY_WORD, /* Mot clef de langage */
+
+ RTT_ERROR, /* Erreur "interne" */
+
+ RTT_COUNT
+
+} RenderingTagType;
+
/* Types de rendus */
typedef enum _SegRenderingStyle
{
@@ -75,7 +106,7 @@ typedef struct _GBufferSegmentClass GBufferSegmentClass;
GType g_buffer_segment_get_type(void);
/* Crée un nouveau fragment de texte avec des propriétés. */
-GBufferSegment *g_buffer_segment_new(PangoAttrList *, const char *, size_t);
+GBufferSegment *g_buffer_segment_new(RenderingTagType, const char *, size_t);
/* Indique si les textes de deux segments sont identiques. */
bool g_buffer_segment_compare(const GBufferSegment *, const GBufferSegment *);
@@ -89,14 +120,11 @@ gint g_buffer_segment_get_width(const GBufferSegment *);
/* Fournit la position idéale pour un marqueur. */
gint g_buffer_segment_get_caret_position(const GBufferSegment *, gint);
-/* (Re)charge les couleurs à partir de la liste d'attributs. */
-void g_buffer_segment_cache_colors(GBufferSegment *);
-
/* Module l'apparence finale du composant. */
void g_buffer_segment_set_style(GBufferSegment *, SegRenderingStyle);
/* Imprime le fragment de texte représenté. */
-void g_buffer_segment_draw(GBufferSegment *, cairo_t *, GFontCache *, gint *, gint);
+void g_buffer_segment_draw(GBufferSegment *, cairo_t *, gint *, gint);
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index 8a70ad5..4a4e38f 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -142,8 +142,6 @@ struct _GBufferView
vmpa_t start; /* Première ligne intégrée */
vmpa_t end; /* Dernière ligne intégrée */
- GFontCache *fcache; /* Cache pour les polices */
-
gint line_height; /* Hauteur maximale des lignes */
gint max_widths[BLC_COUNT]; /* Taille cachée des colonnes */
gint left_margin; /* Marge gauche + espace */
@@ -726,8 +724,6 @@ static void g_buffer_view_class_init(GBufferViewClass *class)
static void g_buffer_view_init(GBufferView *buffer)
{
- buffer->fcache = g_font_cache_new();
-
g_buffer_view_reset_required_height(buffer);
g_buffer_view_reset_required_widths(buffer);
@@ -1403,7 +1399,7 @@ void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint
view->drawing_extra(lines[i], drawable, gc, fake_x, y, view->drawing_data);
*/
- g_buffer_line_draw(lines[i], cr, view->fcache,
+ g_buffer_line_draw(lines[i], cr,
view->max_widths, real_x, y, addr, code);
y += view->line_height;
diff --git a/src/glibext/gfontcache.c b/src/glibext/gfontcache.c
deleted file mode 100644
index 2441d27..0000000
--- a/src/glibext/gfontcache.c
+++ /dev/null
@@ -1,294 +0,0 @@
-
-/* OpenIDA - Outil d'analyse de fichiers binaires
- * gfontcache.c - mise en cache avec actualisation des polices
- *
- * Copyright (C) 2012 Cyrille Bagard
- *
- * This file is part of OpenIDA.
- *
- * OpenIDA is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * OpenIDA is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#include "gfontcache.h"
-
-
-
-/* ----------------------- MISE EN PLACE D'UN CONTEXTE GLOBAL ----------------------- */
-
-
-/* Utilisable par toutes les impressions. */
-static PangoContext *_context = NULL;
-
-
-
-/* ---------------------------- CACHE DE POLICES PAR VUE ---------------------------- */
-
-
-/* Description d'un cache pour polices (instance) */
-struct _GFontCache
-{
- GObject parent; /* A laisser en premier */
-
- GHashTable *table; /* Associations desc./police */
-
- GtkWidget *widget;
-
-};
-
-/* Description d'un cache pour polices (classe) */
-struct _GFontCacheClass
-{
- GObjectClass parent; /* A laisser en premier */
-
-};
-
-
-/* Initialise la classe des caches pour polices. */
-static void g_font_cache_class_init(GFontCacheClass *);
-
-/* Initialise un cache pour polices. */
-static void g_font_cache_init(GFontCache *);
-
-/* Supprime toutes les références externes. */
-static void g_font_cache_dispose(GFontCache *);
-
-/* Procède à la libération totale de la mémoire. */
-static void g_font_cache_finalize(GFontCache *);
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* MISE EN PLACE D'UN CONTEXTE GLOBAL */
-/* ---------------------------------------------------------------------------------- */
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Initialise le contexte Pango pour la gestion des textes. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void init_global_pango_context(void)
-{
- PangoFontDescription *desc; /* Police de caractères */
-
- _context = gdk_pango_context_get();
-
- desc = pango_font_description_from_string("mono 10");
- pango_context_set_font_description(_context, desc);
- pango_font_description_free(desc);
-
- pango_context_set_base_dir(_context, PANGO_DIRECTION_LTR);
- pango_context_set_language(_context, gtk_get_default_language());
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Fournit le contexte Pango global pour l'impression. *
-* *
-* Retour : Contexte prêt à emploi. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-PangoContext *get_global_pango_context(void)
-{
- return _context;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Supprime le contexte Pango pour la gestion des textes. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void exit_global_pango_context(void)
-{
- g_object_unref(G_OBJECT(_context));
-
-}
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* CACHE DE POLICES PAR VUE */
-/* ---------------------------------------------------------------------------------- */
-
-
-
-/* Indique le type défini pour un cache pour polices. */
-G_DEFINE_TYPE(GFontCache, g_font_cache, G_TYPE_OBJECT);
-
-
-/******************************************************************************
-* *
-* Paramètres : class = classe à initialiser. *
-* *
-* Description : Initialise la classe des caches pour polices. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_font_cache_class_init(GFontCacheClass *class)
-{
- GObjectClass *object; /* Autre version de la classe */
-
- object = G_OBJECT_CLASS(class);
-
- object->dispose = (GObjectFinalizeFunc/* ! */)g_font_cache_dispose;
- object->finalize = (GObjectFinalizeFunc)g_font_cache_finalize;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : fcache = instance à initialiser. *
-* *
-* Description : Initialise un cache pour polices. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_font_cache_init(GFontCache *fcache)
-{
- fcache->table = g_hash_table_new_full((GHashFunc)pango_font_description_hash,
- (GEqualFunc)pango_font_description_equal,
- (GDestroyNotify)pango_font_description_free,
- (GDestroyNotify)g_object_unref);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : fcache = instance d'objet GLib à traiter. *
-* *
-* Description : Supprime toutes les références externes. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_font_cache_dispose(GFontCache *fcache)
-{
- g_hash_table_destroy(fcache->table);
-
- G_OBJECT_CLASS(g_font_cache_parent_class)->dispose(G_OBJECT(fcache));
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : fcache = instance d'objet GLib à traiter. *
-* *
-* Description : Procède à la libération totale de la mémoire. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_font_cache_finalize(GFontCache *fcache)
-{
- G_OBJECT_CLASS(g_font_cache_parent_class)->finalize(G_OBJECT(fcache));
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Crée un bloc virtuel d'instructions. *
-* *
-* Retour : Adresse de la structure mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GFontCache *g_font_cache_new(void)
-{
- GFontCache *result; /* Structure à retourner */
-
- result = g_object_new(G_TYPE_FONT_CACHE, NULL);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : fcache = instance à consulter, voire compléter. *
-* desc = description de la police recherchée. *
-* *
-* Description : Fournit une police utilisable répondant au besoin. *
-* *
-* Retour : Police prête à usage. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-PangoFont *g_font_cache_lookup(GFontCache *fcache, const PangoFontDescription *desc)
-{
- PangoFont *result; /* Instance à retourner */
- PangoFontDescription *key; /* Copie de la description */
-
- result = (PangoFont *)g_hash_table_lookup(fcache->table, desc);
-
- if (result == NULL)
- {
- result = pango_context_load_font(get_global_pango_context(), desc);
-
- key = pango_font_description_copy(desc);
- g_hash_table_insert(fcache->table, key, result);
-
- }
-
- return result;
-
-}
diff --git a/src/glibext/gfontcache.h b/src/glibext/gfontcache.h
deleted file mode 100644
index 2132a34..0000000
--- a/src/glibext/gfontcache.h
+++ /dev/null
@@ -1,79 +0,0 @@
-
-/* OpenIDA - Outil d'analyse de fichiers binaires
- * gfontcache.h - prototypes pour la mise en cache avec actualisation des polices
- *
- * Copyright (C) 2012 Cyrille Bagard
- *
- * This file is part of OpenIDA.
- *
- * OpenIDA is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * OpenIDA is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
- */
-
-
-#ifndef _GLIBEXT_GFONTCACHE_H
-#define _GLIBEXT_GFONTCACHE_H
-
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gtk/gtk.h>
-#include <pango/pango-context.h>
-#include <pango/pango-font.h>
-
-
-
-/* ----------------------- MISE EN PLACE D'UN CONTEXTE GLOBAL ----------------------- */
-
-
-/* Initialise le contexte Pango pour la gestion des textes. */
-void init_global_pango_context(void);
-
-/* Fournit le contexte Pango global pour l'impression. */
-PangoContext *get_global_pango_context(void);
-
-/* Supprime le contexte Pango pour la gestion des textes. */
-void exit_global_pango_context(void);
-
-
-
-/* ---------------------------- CACHE DE POLICES PAR VUE ---------------------------- */
-
-
-#define G_TYPE_FONT_CACHE g_font_cache_get_type()
-#define G_FONT_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_font_cache_get_type(), GFontCache))
-#define G_IS_FONT_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_font_cache_get_type()))
-#define G_FONT_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_FONT_CACHE, GFontCacheClass))
-#define G_IS_FONT_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_FONT_CACHE))
-#define G_FONT_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_FONT_CACHE, GFontCacheClass))
-
-
-/* Description d'un cache pour polices (instance) */
-typedef struct _GFontCache GFontCache;
-
-/* Description d'un cache pour polices (classe) */
-typedef struct _GFontCacheClass GFontCacheClass;
-
-
-/* Indique le type défini pour un cache pour polices. */
-GType g_font_cache_get_type(void);
-
-/* Crée un bloc virtuel d'instructions. */
-GFontCache *g_font_cache_new(void);
-
-/* Fournit une police utilisable répondant au besoin. */
-PangoFont *g_font_cache_lookup(GFontCache *, const PangoFontDescription *);
-
-
-
-#endif /* _GLIBEXT_GFONTCACHE_H */
diff --git a/src/main.c b/src/main.c
index b966437..224c15e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -37,7 +37,6 @@
#include "format/format.h"
#include "glibext/delayed.h"
#include "glibext/gbinportion.h"
-#include "glibext/gfontcache.h"
#include "gtkext/support.h"
#include "plugins/pglist.h"
#include "../revision.h"
@@ -138,7 +137,6 @@ int main(int argc, char **argv)
init_all_processors();
init_all_formats();
init_binary_portion_colors();
- init_global_pango_context();
/* Création de l'interface */
@@ -198,7 +196,6 @@ int main(int argc, char **argv)
//exit_all_plugins();
- exit_global_pango_context();
exit_binary_portion_colors();
unload_configuration(config);