summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-11-17 07:30:08 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-11-17 07:30:08 (GMT)
commitbaef7fad5e4a7f19926c8722e8ab1e1d426d4433 (patch)
treef882ccb39ae6b06ed886519820f06557187f6b14
parent187cf13a6f0b0ddbb46fd563d66bb01b0dcd18be (diff)
Fixed raw data display.
-rw-r--r--src/glibext/generators/hex.c16
-rw-r--r--src/glibext/generators/hex.h2
-rw-r--r--src/glibext/widthtracker.c29
-rw-r--r--src/glibext/widthtracker.h3
-rw-r--r--src/gtkext/hexdisplay.c10
5 files changed, 50 insertions, 10 deletions
diff --git a/src/glibext/generators/hex.c b/src/glibext/generators/hex.c
index 9285e00..7de2d6b 100644
--- a/src/glibext/generators/hex.c
+++ b/src/glibext/generators/hex.c
@@ -45,6 +45,7 @@ struct _GHexGenerator
GBinContent *content; /* Contenu à représenter */
gint left_start; /* Abscisse des impressions */
+ gint padding; /* Bourrage supplémentaire */
phys_t bytes_per_line; /* Nombre d'octets par ligne */
@@ -347,7 +348,7 @@ static void g_hex_generator_compute_cursor(const GHexGenerator *generator, gint
}
else
{
- x -= (bytes_width + COL_MARGIN);
+ x -= (bytes_width + COL_MARGIN + generator->padding + COL_MARGIN);
phys += (x / class->char_width);
@@ -571,6 +572,7 @@ GBinContent *g_hex_generator_get_content(const GHexGenerator *generator)
* Paramètres : generator = générateur à ajuster. *
* left = position de départ à gauche pour le texte. *
* show_pos = affichage des positions sur la gauche ? *
+* padding = bourrage entre les colonnes de brut et ASCII. *
* width = largeur maximale disponible. *
* *
* Description : Ajuste la génération à une nouvelle largeur de rendu. *
@@ -581,7 +583,7 @@ GBinContent *g_hex_generator_get_content(const GHexGenerator *generator)
* *
******************************************************************************/
-bool g_hex_generator_auto_fit(GHexGenerator *generator, gint left, bool show_pos, gint width)
+bool g_hex_generator_auto_fit(GHexGenerator *generator, gint left, bool show_pos, gint padding, gint width)
{
bool result; /* Bilan à faire remonter */
GHexGeneratorClass *class; /* Accès aux informations */
@@ -592,16 +594,14 @@ bool g_hex_generator_auto_fit(GHexGenerator *generator, gint left, bool show_pos
class = G_HEX_GENERATOR_GET_CLASS(generator);
generator->left_start = left;
+ generator->padding = padding;
if (show_pos)
generator->left_start += class->addr_width + COL_MARGIN;
for (i = 4; ; i += 4)
{
- requested = left;
-
- if (show_pos)
- requested += class->addr_width + COL_MARGIN;
+ requested = generator->left_start;
block_count = (i / 4);
@@ -609,7 +609,11 @@ bool g_hex_generator_auto_fit(GHexGenerator *generator, gint left, bool show_pos
requested += (block_count > 1 ? block_count - 1 : 0) * class->sep_width;
requested += COL_MARGIN;
+ requested += padding;
+ requested += COL_MARGIN;
+
requested += i * class->char_width;
+ requested += COL_MARGIN;
/* Limite atteinte ? */
if (requested > width)
diff --git a/src/glibext/generators/hex.h b/src/glibext/generators/hex.h
index 0a8b1a7..f4aeb03 100644
--- a/src/glibext/generators/hex.h
+++ b/src/glibext/generators/hex.h
@@ -57,7 +57,7 @@ GHexGenerator *g_hex_generator_new(GBinContent *);
GBinContent *g_hex_generator_get_content(const GHexGenerator *);
/* Ajuste la génération à une nouvelle largeur de rendu. */
-bool g_hex_generator_auto_fit(GHexGenerator *, gint, bool, gint);
+bool g_hex_generator_auto_fit(GHexGenerator *, gint, bool, gint, gint);
/* Indique le nombre d'octets programmés constituer une ligne. */
phys_t g_hex_generator_get_bytes_per_line(const GHexGenerator *);
diff --git a/src/glibext/widthtracker.c b/src/glibext/widthtracker.c
index 33d809b..eba30c1 100644
--- a/src/glibext/widthtracker.c
+++ b/src/glibext/widthtracker.c
@@ -592,6 +592,32 @@ size_t g_width_tracker_count_columns(const GWidthTracker *tracker)
* *
* Paramètres : tracker = gestionnaire de largeurs de lignes à mettre jour. *
* col = indice de colonne visée. *
+* *
+* Description : Indique la largeur minimale pour une colonne donnée. *
+* *
+* Retour : Largeur minimale à imposée, nulle ou positive. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+gint g_width_tracker_get_column_min_width(GWidthTracker *tracker, size_t col)
+{
+ gint result; /* Largeur à renvoyer */
+
+ assert(col < tracker->col_count);
+
+ result = tracker->min_widths[col];
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : tracker = gestionnaire de largeurs de lignes à mettre jour. *
+* col = indice de colonne visée. *
* width = largeur minimale à imposer. *
* *
* Description : Impose une largeur minimale pour une colonne donnée. *
@@ -606,6 +632,9 @@ void g_width_tracker_set_column_min_width(GWidthTracker *tracker, size_t col, gi
{
assert(col < tracker->col_count);
+ if (width < 0)
+ width = 0;
+
tracker->min_widths[col] = width;
}
diff --git a/src/glibext/widthtracker.h b/src/glibext/widthtracker.h
index 4920f9b..113cf8a 100644
--- a/src/glibext/widthtracker.h
+++ b/src/glibext/widthtracker.h
@@ -79,6 +79,9 @@ GWidthTracker *g_width_tracker_new_restricted(const GWidthTracker *, size_t, siz
/* Indique le nombre de colonnes prises en compte. */
size_t g_width_tracker_count_columns(const GWidthTracker *);
+/* Indique la largeur minimale pour une colonne donnée. */
+gint g_width_tracker_get_column_min_width(GWidthTracker *, size_t);
+
/* Impose une largeur minimale pour une colonne donnée. */
void g_width_tracker_set_column_min_width(GWidthTracker *, size_t, gint);
diff --git a/src/gtkext/hexdisplay.c b/src/gtkext/hexdisplay.c
index 49da03a..f557513 100644
--- a/src/gtkext/hexdisplay.c
+++ b/src/gtkext/hexdisplay.c
@@ -232,19 +232,23 @@ static void gtk_hex_display_size_allocate(GtkWidget *widget, GtkAllocation *allo
GBufferCache *cache; /* Contenu représenté */
gint text_pos; /* Abscisse minimale du texte */
bool show_pos; /* Affichage des positions ? */
+ GWidthTracker *tracker; /* Gestionnaire de largeurs */
+ gint padding; /* Bourrage supplémentaire */
bool changed; /* Note toute variation */
display = GTK_HEX_DISPLAY(widget);
cache = g_buffer_view_get_cache(GTK_BUFFER_DISPLAY(display)->view);
-
text_pos = g_buffer_cache_get_text_position(cache);
-
g_object_unref(G_OBJECT(cache));
show_pos = g_display_options_get(GTK_DISPLAY_PANEL(widget)->options, 0);
- changed = g_hex_generator_auto_fit(display->generator, text_pos, show_pos, allocation->width);
+ tracker = g_buffer_cache_get_width_tracker(display->cache);
+ padding = g_width_tracker_get_column_min_width(tracker, HLC_PADDING);
+ g_object_unref(G_OBJECT(tracker));
+
+ changed = g_hex_generator_auto_fit(display->generator, text_pos, show_pos, padding, allocation->width);
if (changed)
gtk_hex_display_populate_cache(display);