diff options
Diffstat (limited to 'src/glibext')
-rw-r--r-- | src/glibext/gbufferline.h | 3 | ||||
-rw-r--r-- | src/glibext/gcodebuffer.c | 111 | ||||
-rw-r--r-- | src/glibext/gcodebuffer.h | 12 | ||||
-rw-r--r-- | src/glibext/gfontcache.h | 2 |
4 files changed, 58 insertions, 70 deletions
diff --git a/src/glibext/gbufferline.h b/src/glibext/gbufferline.h index 2a46b5a..7b063ac 100644 --- a/src/glibext/gbufferline.h +++ b/src/glibext/gbufferline.h @@ -113,9 +113,6 @@ typedef enum _RenderingTagType #define COL_MARGIN 23 -/* Accompagnement du dessin pour compléments */ -typedef void (* buffer_line_draw_fc) (GBufferLine *, GdkDrawable *, GdkGC *, gint, gint, void *); - /* Détermine le type de la représentation de fragments de texte en ligne. */ GType g_buffer_line_get_type(void); diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index 70064e3..8a70ad5 100644 --- a/src/glibext/gcodebuffer.c +++ b/src/glibext/gcodebuffer.c @@ -151,8 +151,6 @@ struct _GBufferView gint last_width; /* Plus grande col. de fusion */ BufferLineColumn last_merge; /* Colonne de fusion extrême */ - buffer_line_draw_fc drawing_extra; /* Fonction d'accompagnement */ - void *drawing_data; /* Donnée utilisateur */ GSList *highlighted; /* Segments mis en évidence */ }; @@ -978,33 +976,29 @@ gint g_buffer_view_get_line_height(GBufferView *view) /****************************************************************************** * * -* Paramètres : view = visualisation à consulter. * -* width = largeur requise pour une pleine visualisation. [OUT]* -* height = hauteur requise pour une pleine visualisation. [OUT]* -* addr = indique si les positions doivent être affichées. * -* code = indique si le code binaire doit être affiché. * +* Paramètres : view = visualisation à consulter. * +* addr = indique si les positions doivent être affichées. * +* code = indique si le code binaire doit être affiché. * * * -* Description : Fournit les dimensions requises par une visualisation. * +* Description : Fournit la largeur requise par une visualisation. * * * -* Retour : - * +* Retour : Dimension calculée. * * * * Remarques : - * * * ******************************************************************************/ -void g_buffer_view_get_size(GBufferView *view, gint *width, gint *height, bool addr, bool code) +gint g_buffer_view_get_width(GBufferView *view, bool addr, bool code) { + gint result; /* Taille à retourner */ gint col_width; /* Calcul selon les colonnes */ gint full_width; /* Calcul selon les fusions */ BufferLineColumn i; /* Boucle de parcours */ - size_t first; /* Première ligne intégrée */ - size_t last; /* Dernière ligne intégrée */ if (!WIDTHS_CACHED(view)) g_buffer_view_compute_required_widths(view, addr, code); - *width = view->left_text; - *height = view->line_height; + result = view->left_text; col_width = 0; full_width = 0; @@ -1041,12 +1035,40 @@ void g_buffer_view_get_size(GBufferView *view, gint *width, gint *height, bool a /* Mise en concurrence et poursuite... */ - *width += + MAX(col_width, full_width); + result += + MAX(col_width, full_width); + + return result; + +} + + + +/****************************************************************************** +* * +* Paramètres : view = visualisation à consulter. * +* * +* Description : Fournit la hauteur requise par une visualisation. * +* * +* Retour : Dimension calculée. * +* * +* Remarques : - * +* * +******************************************************************************/ + +gint g_buffer_view_get_height(const GBufferView *view) +{ + gint result; /* Taille à retourner */ + size_t first; /* Première ligne intégrée */ + size_t last; /* Dernière ligne intégrée */ + + result = view->line_height; first = g_code_buffer_get_index_from_address(view->buffer, view->start, true); last = g_code_buffer_get_index_from_address(view->buffer, view->end, false); - *height *= (last - first + 1); + result *= (last - first + 1); + + return result; } @@ -1146,6 +1168,8 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr for (i = BLC_ASSEMBLY_HEAD; i < BLC_COUNT; i++) right_pos += view->max_widths[i] + COL_MARGIN; break; + default: /* GDK_SCROLL_SMOOTH */ + break; } first = g_code_buffer_get_index_from_address(view->buffer, view->start, true); @@ -1207,6 +1231,9 @@ vmpa_t g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, bool ctr break; + default: /* GDK_SCROLL_SMOOTH */ + break; + } if (result && !computed) @@ -1324,33 +1351,11 @@ void g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y) /****************************************************************************** * * -* Paramètres : view = visualisation à mettre à jour. * -* method = procédure à appeler à chaque dessin de ligne. * -* data = donnée utilisateur à passer lors des appels. * -* * -* Description : Définit à une procédure à appeler lors des dessins de ligne. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_buffer_view_define_extra_drawing(GBufferView *view, buffer_line_draw_fc method, void *data) -{ - view->drawing_extra = method; - view->drawing_data = data; - -} - - -/****************************************************************************** -* * * Paramètres : view = visualisation à représenter. * -* event = informations liées à l'événement. * -* gc = contexte graphique à utiliser pour les pinceaux. * +* 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. * * addr = indique si les positions doivent être affichées. * * code = indique si le code binaire doit être affiché. * * * @@ -1362,42 +1367,30 @@ void g_buffer_view_define_extra_drawing(GBufferView *view, buffer_line_draw_fc m * * ******************************************************************************/ -void g_buffer_view_draw(const GBufferView *view, const GdkEventExpose *event, GdkGC *gc, gint fake_x, gint fake_y, 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 addr, bool code) { - cairo_t *cairo; /* Gestionnaire de rendu */ gint real_x; /* Abscisse réelle pour tampon */ gint real_y; /* Ordonnée réelle pour tampon */ - size_t first; /* Première ligne visée */ size_t end; /* Dernière ligne avant limite */ size_t last; /* Dernière ligne visée + 1 */ gint y; /* Point de départ + décallage */ - - GBufferLine **lines; /* Liste des lignes à traiter */ size_t i; /* Boucle de parcours */ - - cairo = gdk_cairo_create(event->window); - - gdk_cairo_region(cairo, event->region); - cairo_clip(cairo); - real_x = fake_x + view->left_text; - real_y = fake_y + event->area.y; - - + real_y = fake_y + area->y; first = g_code_buffer_get_index_from_address(view->buffer, view->start, true); first += (real_y / view->line_height); - last = first + (event->area.height / view->line_height); - if (event->area.height % view->line_height > 0) last++; + last = first + (area->height / view->line_height); + if (area->height % view->line_height > 0) last++; end = g_code_buffer_get_index_from_address(view->buffer, view->end, false); last = MIN(last, end); - y = event->area.y - (real_y % view->line_height); + y = area->y - (real_y % view->line_height); lines = view->buffer->lines; @@ -1410,15 +1403,13 @@ void g_buffer_view_draw(const GBufferView *view, const GdkEventExpose *event, Gd view->drawing_extra(lines[i], drawable, gc, fake_x, y, view->drawing_data); */ - g_buffer_line_draw(lines[i], cairo, view->fcache, + g_buffer_line_draw(lines[i], cr, view->fcache, view->max_widths, real_x, y, addr, code); y += view->line_height; } - cairo_destroy(cairo); - } diff --git a/src/glibext/gcodebuffer.h b/src/glibext/gcodebuffer.h index 4ae5c58..e2ff8b0 100644 --- a/src/glibext/gcodebuffer.h +++ b/src/glibext/gcodebuffer.h @@ -121,8 +121,11 @@ GCodeBuffer *g_buffer_view_get_buffer(const GBufferView *); /* Fournit la hauteur d'impression d'une ligne visualisée. */ gint g_buffer_view_get_line_height(GBufferView *); -/* Fournit les dimensions requises par une visualisation. */ -void g_buffer_view_get_size(GBufferView *, gint *, gint *, bool, bool); +/* Fournit la largeur requise par une visualisation. */ +gint g_buffer_view_get_width(GBufferView *, bool, bool); + +/* Fournit la hauteur requise par une visualisation. */ +gint g_buffer_view_get_height(const GBufferView *); /* Calcule la position idéale de curseur pour un point donné. */ vmpa_t g_buffer_view_compute_caret(GBufferView *, gint, gint, GdkRectangle *); @@ -136,11 +139,8 @@ bool g_buffer_view_unhighlight_segments(GBufferView *); /* Surligne tous les segments similaires à celui sous la souris. */ void g_buffer_view_highlight_segments(GBufferView *, gint, gint); -/* Définit à une procédure à appeler lors des dessins de ligne. */ -void g_buffer_view_define_extra_drawing(GBufferView *, buffer_line_draw_fc, void *); - /* Imprime la visualisation du tampon de code désassemblé. */ -void g_buffer_view_draw(const GBufferView *, const GdkEventExpose *, GdkGC *, gint, gint, bool, bool); +void g_buffer_view_draw(const GBufferView *, cairo_t *, gint, gint, const cairo_rectangle_int_t *, bool, bool); /* Fournit la ligne présente à une ordonnée donnée. */ GBufferLine *g_buffer_view_find_line_at(GBufferView *, gint, size_t *); diff --git a/src/glibext/gfontcache.h b/src/glibext/gfontcache.h index e6ef2d6..2132a34 100644 --- a/src/glibext/gfontcache.h +++ b/src/glibext/gfontcache.h @@ -27,7 +27,7 @@ #include <glib.h> #include <glib-object.h> -#include <gtk/gtkwidget.h> +#include <gtk/gtk.h> #include <pango/pango-context.h> #include <pango/pango-font.h> |