diff options
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r-- | src/glibext/gcodebuffer.c | 49 |
1 files changed, 28 insertions, 21 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index 5be632c..708a089 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); +static void g_buffer_view_compute_required_widths(GBufferView *, bool, bool, bool); @@ -466,7 +466,7 @@ static size_t g_code_buffer_get_index_from_address(GCodeBuffer *buffer, vmpa_t a /****************************************************************************** * * * Paramètres : buffer = composant GTK à mettre à jour. * -* addr = adresse où va se situer la ligne. * +* addr = emplacement où va se situer la ligne. * * * * Description : Ajoute une nouvelle ligne à un tampon pour code désassemblé. * * * @@ -476,7 +476,7 @@ static size_t g_code_buffer_get_index_from_address(GCodeBuffer *buffer, vmpa_t a * * ******************************************************************************/ -GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, vmpa_t addr) +GBufferLine *g_code_buffer_append_new_line(GCodeBuffer *buffer, const vmpa2t *addr) { GBufferLine *result; /* Instance à retourner */ size_t i; /* Boucle de parcours */ @@ -886,7 +886,8 @@ static void g_buffer_view_compute_required_height(GBufferView *view) /****************************************************************************** * * * Paramètres : view = visualisation à mettre à jour. * -* addr = indique si les positions doivent être affichées. * +* 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é. * * * * Description : Calcule les largeurs requises par une visualisation. * @@ -897,7 +898,7 @@ static void g_buffer_view_compute_required_height(GBufferView *view) * * ******************************************************************************/ -static void g_buffer_view_compute_required_widths(GBufferView *view, bool addr, bool code) +static void g_buffer_view_compute_required_widths(GBufferView *view, bool phys, bool virt, bool code) { GBufferLine **lines; /* Liste des lignes à traiter */ size_t first; /* Première ligne intégrée */ @@ -930,7 +931,7 @@ static void g_buffer_view_compute_required_widths(GBufferView *view, bool addr, view->max_widths[j] = MAX(view->max_widths[j], width); } - width = g_buffer_line_get_merge_width(lines[i], &merge, addr, code); + width = g_buffer_line_get_merge_width(lines[i], &merge, phys, virt, code); view->last_width = MAX(view->last_width, width); if (merge != BLC_COUNT) { @@ -973,7 +974,8 @@ gint g_buffer_view_get_line_height(GBufferView *view) /****************************************************************************** * * * Paramètres : view = visualisation à consulter. * -* addr = indique si les positions doivent être affichées. * +* 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é. * * * * Description : Fournit la largeur requise par une visualisation. * @@ -984,7 +986,7 @@ gint g_buffer_view_get_line_height(GBufferView *view) * * ******************************************************************************/ -gint g_buffer_view_get_width(GBufferView *view, bool addr, bool code) +gint g_buffer_view_get_width(GBufferView *view, bool phys, bool virt, bool code) { gint result; /* Taille à retourner */ gint col_width; /* Calcul selon les colonnes */ @@ -992,7 +994,7 @@ gint g_buffer_view_get_width(GBufferView *view, bool addr, bool code) BufferLineColumn i; /* Boucle de parcours */ if (!WIDTHS_CACHED(view)) - g_buffer_view_compute_required_widths(view, addr, code); + g_buffer_view_compute_required_widths(view, phys, virt, code); result = view->left_text; @@ -1003,7 +1005,8 @@ gint g_buffer_view_get_width(GBufferView *view, bool addr, bool code) for (i = 0; i < BLC_COUNT; i++) { - if (i == BLC_ADDRESS && !addr) continue; + if (i == BLC_PHYSICAL && !phys) continue; + if (i == BLC_VIRTUAL && !virt) continue; if (i == BLC_BINARY && !code) continue; col_width += view->max_widths[i]; @@ -1017,7 +1020,8 @@ gint g_buffer_view_get_width(GBufferView *view, bool addr, bool code) for (i = 0; i < view->last_merge; i++) { - if (i == BLC_ADDRESS && !addr) continue; + if (i == BLC_PHYSICAL && !phys) continue; + if (i == BLC_VIRTUAL && !virt) continue; if (i == BLC_BINARY && !code) continue; full_width += view->max_widths[i]; @@ -1118,7 +1122,8 @@ vmpa_t g_buffer_view_compute_caret(GBufferView *view, GBufferLine *line, size_t * caret = position du curseur à faire évoluer. * * ctrl = indique la demande d'un parcours rapide. * * dir = direction du parcours. * -* addr = indique si les positions doivent être affichées. * +* 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é. * * * * Description : Déplace le curseur au sein d'une vue de tampon. * @@ -1129,7 +1134,7 @@ vmpa_t g_buffer_view_compute_caret(GBufferView *view, GBufferLine *line, size_t * * ******************************************************************************/ -vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctrl, GdkScrollDirection dir, bool addr, bool code) +vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctrl, GdkScrollDirection dir, bool phys, bool virt, bool code) { bool result; /* Actualisation à renvoyer */ bool computed; /* Récursivité pris en compte */ @@ -1153,7 +1158,8 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr case GDK_SCROLL_LEFT: case GDK_SCROLL_RIGHT: left_pos = view->left_text; - if (addr) left_pos += view->max_widths[BLC_ADDRESS] + COL_MARGIN; + if (phys) left_pos += view->max_widths[BLC_PHYSICAL] + COL_MARGIN; + if (virt) left_pos += view->max_widths[BLC_VIRTUAL] + COL_MARGIN; if (code) left_pos += view->max_widths[BLC_BINARY] + COL_MARGIN; right_pos = left_pos; for (i = BLC_ASSEMBLY_HEAD; i < BLC_COUNT; i++) @@ -1184,13 +1190,13 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr line = g_buffer_view_find_line_at(view, caret->y, NULL); if (line == NULL) break; - result = g_buffer_line_move_caret(line, caret, ctrl, GDK_SCROLL_LEFT, addr, code); + result = g_buffer_line_move_caret(line, caret, ctrl, GDK_SCROLL_LEFT, phys, virt, code); if (caret->x < left_pos) { caret->x = right_pos; - result = g_buffer_view_move_caret(view, caret, ctrl, GDK_SCROLL_UP, addr, code); + result = g_buffer_view_move_caret(view, caret, ctrl, GDK_SCROLL_UP, phys, virt, code); if (result == VMPA_INVALID) caret->x = left_pos; @@ -1205,13 +1211,13 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr line = g_buffer_view_find_line_at(view, caret->y, NULL); if (line == NULL) break; - result = g_buffer_line_move_caret(line, caret, ctrl, GDK_SCROLL_RIGHT, addr, code); + result = g_buffer_line_move_caret(line, caret, ctrl, GDK_SCROLL_RIGHT, phys, virt, code); if (!result) { caret->x = left_pos; - result = g_buffer_view_move_caret(view, caret, ctrl, GDK_SCROLL_DOWN, addr, code); + result = g_buffer_view_move_caret(view, caret, ctrl, GDK_SCROLL_DOWN, phys, virt, code); if (result == VMPA_INVALID) caret->x = right_pos; @@ -1347,7 +1353,8 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y) * 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. * -* addr = indique si les positions doivent être affichées. * +* 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é. * * * * Description : Imprime la visualisation du tampon de code désassemblé. * @@ -1358,7 +1365,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 addr, 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, bool phys, bool virt, bool code) { gint real_x; /* Abscisse réelle pour tampon */ gint real_y; /* Ordonnée réelle pour tampon */ @@ -1395,7 +1402,7 @@ void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint fake_x, gint */ g_buffer_line_draw(lines[i], cr, - view->max_widths, real_x, y, addr, code); + view->max_widths, real_x, y, phys, virt, code); y += view->line_height; |