summaryrefslogtreecommitdiff
path: root/src/glibext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2014-10-21 23:11:30 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2014-10-21 23:11:30 (GMT)
commit085fef16a819cb321fd38e7e0926d3cca863777a (patch)
treef2f24c6205134338999760f1a4a427b0c6c8be27 /src/glibext
parentec6aa436f4a1ae486feb7a88b2b8e793b59674d4 (diff)
Cleaned, fixed and improved the rules for the display of view columns.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@416 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/glibext')
-rw-r--r--src/glibext/gbufferline.c20
-rw-r--r--src/glibext/gbufferline.h6
-rw-r--r--src/glibext/gcodebuffer.c47
-rw-r--r--src/glibext/gcodebuffer.h4
4 files changed, 31 insertions, 46 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index 758dff7..cb5c267 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -717,11 +717,9 @@ gint g_buffer_line_get_column_width(GBufferLine *line, BufferLineColumn index)
/******************************************************************************
* *
-* Paramètres : line = ligne à venir compléter. *
-* merge = précise la première colonne marquant la fusion. [OUT]*
-* phys = indique si les positions doivent être affichées. *
-* virt = indique si les adresses doivent être affichées. *
-* code = indique si le code binaire doit être affiché. *
+* Paramètres : line = ligne à venir compléter. *
+* merge = précise la première colonne marquant la fusion. [OUT]*
+* display = règles d'affichage des colonnes modulables. *
* *
* Description : Fournit la dernière largeur d'une ligne avec fusion. *
* *
@@ -731,7 +729,7 @@ gint g_buffer_line_get_column_width(GBufferLine *line, BufferLineColumn index)
* *
******************************************************************************/
-gint g_buffer_line_get_merge_width(GBufferLine *line, BufferLineColumn *merge, bool phys, bool virt, bool code)
+gint g_buffer_line_get_merge_width(GBufferLine *line, BufferLineColumn *merge, const bool *display)
{
gint result; /* Largeur à retourner */
@@ -779,9 +777,7 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)
* max_widths = largeurs de colonne à respecter. *
* x_init = abscisse du point d'impression de départ. *
* y = ordonnée du point d'impression. *
-* phys = indique si les positions doivent être affichées.*
-* virt = indique si les adresses doivent être affichées. *
-* code = indique si le code binaire doit être affiché. *
+* display = règles d'affichage des colonnes modulables. *
* *
* Description : Imprime la ligne de texte représentée. *
* *
@@ -791,7 +787,7 @@ void g_buffer_line_start_merge_at(GBufferLine *line, BufferLineColumn start)
* *
******************************************************************************/
-void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths[BLC_COUNT], gint x_init, gint y, bool phys, bool virt, bool code)
+void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths[BLC_COUNT], gint x_init, gint y, const bool *display)
{
GBufferLineClass *class; /* Stockage de briques de base */
gint x; /* Point de départ d'impression*/
@@ -806,9 +802,7 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const gint max_widths
for (i = 0; i < BLC_COUNT; i++)
{
- if (i == BLC_PHYSICAL && !phys) continue;
- if (i == BLC_VIRTUAL && !virt) continue;
- if (i == BLC_BINARY && !code) continue;
+ if (i < BLC_DISPLAY && !display[i]) continue;
draw_segments_of_column(&line->columns[i], cairo, x, y);
diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h
index b96f7a6..8e436d9 100644
--- a/src/glibext/gbufferline.h
+++ b/src/glibext/gbufferline.h
@@ -69,6 +69,8 @@ typedef enum _BufferLineColumn
} BufferLineColumn;
+/* Première colonne toujours affichée */
+#define BLC_DISPLAY BLC_ASSEMBLY_HEAD
/* Confort pour l'insertion de texte */
@@ -113,13 +115,13 @@ char *g_buffer_line_get_text(const GBufferLine *);
gint g_buffer_line_get_column_width(GBufferLine *, BufferLineColumn);
/* Fournit la dernière largeur d'une ligne avec fusion. */
-gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, bool, bool, bool);
+gint g_buffer_line_get_merge_width(GBufferLine *, BufferLineColumn *, const bool *);
/* Définit la colonne à partir de laquelle la fusion opère. */
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 *, const gint [BLC_COUNT], gint, gint, bool, bool, bool);
+void g_buffer_line_draw(GBufferLine *, cairo_t *, const gint [BLC_COUNT], gint, gint, const bool *);
/* Exporte la ligne de texte représentée. */
void g_buffer_line_export(GBufferLine *, int, BufferExportType, bool, bool, bool, bool);
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c
index 0ac3bb3..1ea8f69 100644
--- a/src/glibext/gcodebuffer.c
+++ b/src/glibext/gcodebuffer.c
@@ -182,7 +182,7 @@ static void g_buffer_view_reset_required_height(GBufferView *);
static void g_buffer_view_reset_required_widths(GBufferView *);
/* Calcule les largeurs requises par une visualisation. */
-static void g_buffer_view_compute_required_widths(GBufferView *, bool, bool, bool);
+static void g_buffer_view_compute_required_widths(GBufferView *, const bool *);
@@ -893,9 +893,7 @@ static void g_buffer_view_compute_required_height(GBufferView *view)
/******************************************************************************
* *
* Paramètres : view = visualisation à mettre à jour. *
-* phys = indique si les positions doivent être affichées. *
-* virt = indique si les adresses doivent être affichées. *
-* code = indique si le code binaire doit être affiché. *
+* display = règles d'affichage des colonnes modulables. *
* *
* Description : Calcule les largeurs requises par une visualisation. *
* *
@@ -905,7 +903,7 @@ static void g_buffer_view_compute_required_height(GBufferView *view)
* *
******************************************************************************/
-static void g_buffer_view_compute_required_widths(GBufferView *view, bool phys, bool virt, bool code)
+static void g_buffer_view_compute_required_widths(GBufferView *view, const bool *display)
{
GBufferLine **lines; /* Liste des lignes à traiter */
size_t first; /* Première ligne intégrée */
@@ -938,7 +936,7 @@ static void g_buffer_view_compute_required_widths(GBufferView *view, bool phys,
view->max_widths[j] = MAX(view->max_widths[j], width);
}
- width = g_buffer_line_get_merge_width(lines[i], &merge, phys, virt, code);
+ width = g_buffer_line_get_merge_width(lines[i], &merge, display);
view->last_width = MAX(view->last_width, width);
if (merge != BLC_COUNT)
{
@@ -980,10 +978,8 @@ gint g_buffer_view_get_line_height(GBufferView *view)
/******************************************************************************
* *
-* Paramètres : view = visualisation à consulter. *
-* phys = indique si les positions doivent être affichées. *
-* virt = indique si les adresses doivent être affichées. *
-* code = indique si le code binaire doit être affiché. *
+* Paramètres : view = visualisation à consulter. *
+* display = règles d'affichage des colonnes modulables. *
* *
* Description : Fournit la largeur requise par une visualisation. *
* *
@@ -993,7 +989,7 @@ gint g_buffer_view_get_line_height(GBufferView *view)
* *
******************************************************************************/
-gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)
+gint g_buffer_view_get_width(GBufferView *view, const bool *display)
{
gint result; /* Taille à retourner */
gint col_width; /* Calcul selon les colonnes */
@@ -1001,7 +997,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)
BufferLineColumn i; /* Boucle de parcours */
if (!WIDTHS_CACHED(view))
- g_buffer_view_compute_required_widths(view, phys, virt, code);
+ g_buffer_view_compute_required_widths(view, display);
result = view->left_text;
@@ -1012,9 +1008,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)
for (i = 0; i < BLC_COUNT; i++)
{
- if (i == BLC_PHYSICAL && !phys) continue;
- if (i == BLC_VIRTUAL && !virt) continue;
- if (i == BLC_BINARY && !code) continue;
+ if (i < BLC_DISPLAY && !display[i]) continue;
col_width += view->max_widths[i];
@@ -1027,9 +1021,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code)
for (i = 0; i < view->last_merge; i++)
{
- if (i == BLC_PHYSICAL && !phys) continue;
- if (i == BLC_VIRTUAL && !virt) continue;
- if (i == BLC_BINARY && !code) continue;
+ if (i < BLC_DISPLAY && !display[i]) continue;
full_width += view->max_widths[i];
@@ -1344,14 +1336,12 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y)
/******************************************************************************
* *
-* Paramètres : view = visualisation à représenter. *
-* cr = contexte graphique dédié à la procédure. *
-* fake_x = abscisse réelle du point 0 à l'écran. *
-* fake_y = ordonnée réelle du point 0 à l'écran. *
-* area = position et surface à traiter. *
-* phys = indique si les positions doivent être affichées. *
-* virt = indique si les adresses doivent être affichées. *
-* code = indique si le code binaire doit être affiché. *
+* Paramètres : view = visualisation à représenter. *
+* cr = contexte graphique dédié à la procédure. *
+* fake_x = abscisse réelle du point 0 à l'écran. *
+* fake_y = ordonnée réelle du point 0 à l'écran. *
+* area = position et surface à traiter. *
+* display = règles d'affichage des colonnes modulables. *
* *
* Description : Imprime la visualisation du tampon de code désassemblé. *
* *
@@ -1361,7 +1351,7 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y)
* *
******************************************************************************/
-void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint fake_y, const cairo_rectangle_int_t *area, bool phys, bool virt, bool code)
+void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint fake_y, const cairo_rectangle_int_t *area, const bool *display)
{
gint real_x; /* Abscisse réelle pour tampon */
gint real_y; /* Ordonnée réelle pour tampon */
@@ -1397,8 +1387,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->max_widths, real_x, y, phys, virt, code);
+ g_buffer_line_draw(lines[i], cr, view->max_widths, real_x, y, display);
y += view->line_height;
diff --git a/src/glibext/gcodebuffer.h b/src/glibext/gcodebuffer.h
index 472d403..1387eb9 100644
--- a/src/glibext/gcodebuffer.h
+++ b/src/glibext/gcodebuffer.h
@@ -123,7 +123,7 @@ GCodeBuffer *g_buffer_view_get_buffer(const GBufferView *);
gint g_buffer_view_get_line_height(GBufferView *);
/* Fournit la largeur requise par une visualisation. */
-gint g_buffer_view_get_width(GBufferView *, bool, bool, bool);
+gint g_buffer_view_get_width(GBufferView *, const bool *);
/* Fournit la hauteur requise par une visualisation. */
gint g_buffer_view_get_height(const GBufferView *);
@@ -141,7 +141,7 @@ bool g_buffer_view_unhighlight_segments(GBufferView *);
void g_buffer_view_highlight_segments(GBufferView *, gint, gint);
/* Imprime la visualisation du tampon de code désassemblé. */
-void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, gint, const cairo_rectangle_int_t *, bool, bool, bool);
+void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, gint, const cairo_rectangle_int_t *, const bool *);
/* Fournit la ligne présente à une ordonnée donnée. */
GBufferLine *g_buffer_view_find_line_at(GBufferView *, gint, size_t *);