diff options
Diffstat (limited to 'src/glibext/bufferview.c')
-rw-r--r-- | src/glibext/bufferview.c | 67 |
1 files changed, 22 insertions, 45 deletions
diff --git a/src/glibext/bufferview.c b/src/glibext/bufferview.c index e40715e..769cd8b 100644 --- a/src/glibext/bufferview.c +++ b/src/glibext/bufferview.c @@ -76,10 +76,10 @@ static void g_buffer_view_finalize(GBufferView *); static void on_buffer_cache_size_changed(const GBufferCache *, bool, size_t, size_t, GBufferView *); /* Calcule la position idéale de curseur pour un point donné. */ -bool _g_buffer_view_compute_caret_full(GBufferView *, gint, GBufferLine *, size_t, const GDisplayOptions *, const line_width_summary *, cairo_rectangle_int_t *, GLineCursor **); +static bool _g_buffer_view_compute_caret_full(GBufferView *, gint, GBufferLine *, size_t, const GDisplayOptions *, cairo_rectangle_int_t *, GLineCursor **); /* Déplace le curseur au sein d'une vue de tampon. */ -static bool _g_buffer_view_move_caret(GBufferView *, const GBufferLine *, size_t, cairo_rectangle_int_t *, bool, GdkScrollDirection, const GDisplayOptions *, const line_width_summary *); +static bool _g_buffer_view_move_caret(GBufferView *, const GBufferLine *, size_t, cairo_rectangle_int_t *, bool, GdkScrollDirection, const GDisplayOptions *); /* Fournit la ligne présente à une ordonnée donnée. */ @@ -598,7 +598,6 @@ gint g_buffer_view_get_height(const GBufferView *view) * x = abscisse proposée pour le nouvel emplacement. * * y = ordonnée proposée pour le nouvel emplacement. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * caret = position du curseur à construire. [OUT] * * cursor = emplacement correspondant à cette position. [OUT] * * * @@ -610,7 +609,7 @@ gint g_buffer_view_get_height(const GBufferView *view) * * ******************************************************************************/ -bool g_buffer_view_compute_caret_full(GBufferView *view, gint x, gint y, const GDisplayOptions *options, const line_width_summary *offsets, cairo_rectangle_int_t *caret, GLineCursor **cursor) +bool g_buffer_view_compute_caret_full(GBufferView *view, gint x, gint y, const GDisplayOptions *options, cairo_rectangle_int_t *caret, GLineCursor **cursor) { bool result; /* Bilan à retourner */ gint lheight; /* Hauteur d'une ligne */ @@ -635,7 +634,7 @@ bool g_buffer_view_compute_caret_full(GBufferView *view, gint x, gint y, const G /* Calcul d'une position */ - result = _g_buffer_view_compute_caret_full(view, x, line, index, options, offsets, caret, cursor); + result = _g_buffer_view_compute_caret_full(view, x, line, index, options, caret, cursor); g_object_unref(G_OBJECT(line)); @@ -653,7 +652,6 @@ bool g_buffer_view_compute_caret_full(GBufferView *view, gint x, gint y, const G * line = ligne correspondant à la position. * * index = indice de cette même ligne dans le tampon. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * caret = position du curseur à construire. [OUT] * * cursor = emplacement correspondant à cette position. [OUT] * * * @@ -665,11 +663,10 @@ bool g_buffer_view_compute_caret_full(GBufferView *view, gint x, gint y, const G * * ******************************************************************************/ -bool _g_buffer_view_compute_caret_full(GBufferView *view, gint x, GBufferLine *line, size_t index, const GDisplayOptions *options, const line_width_summary *offsets, cairo_rectangle_int_t *caret, GLineCursor **cursor) +static bool _g_buffer_view_compute_caret_full(GBufferView *view, gint x, GBufferLine *line, size_t index, const GDisplayOptions *options, cairo_rectangle_int_t *caret, GLineCursor **cursor) { bool result; /* Bilan à retourner */ gint text_pos; /* Abscisse de départ du texte */ - line_width_summary summary; /* Résumé concis des largeurs */ gint base; /* Position absolue de segment */ bool status; /* Bilan de la localisation */ gint lheight; /* Hauteur d'une ligne */ @@ -685,11 +682,9 @@ bool _g_buffer_view_compute_caret_full(GBufferView *view, gint x, GBufferLine *l /* Calcul d'une position */ - g_width_tracker_get_local_width_summary(view->tracker, index, &summary); - x -= text_pos; - status = g_buffer_line_get_coord_at(line, &summary, options, offsets, &base, &x, + status = g_buffer_line_get_coord_at(line, index, view->tracker, options, &base, &x, GDK_SCROLL_LEFT, true, (col_coord_t []) { { 0 } }); if (!status) @@ -726,7 +721,6 @@ bool _g_buffer_view_compute_caret_full(GBufferView *view, gint x, GBufferLine *l * ctrl = indique la demande d'un parcours rapide. * * dir = direction du parcours. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * * * Description : Déplace le curseur au sein d'une vue de tampon. * * * @@ -736,12 +730,11 @@ bool _g_buffer_view_compute_caret_full(GBufferView *view, gint x, GBufferLine *l * * ******************************************************************************/ -static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line, size_t index, cairo_rectangle_int_t *caret, bool ctrl, GdkScrollDirection dir, const GDisplayOptions *options, const line_width_summary *offsets) +static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line, size_t index, cairo_rectangle_int_t *caret, bool ctrl, GdkScrollDirection dir, const GDisplayOptions *options) { bool result; /* Bilan à retourner */ gint text_pos; /* Abscisse de départ du texte */ gint offset; /* Point de travail modifiable */ - line_width_summary summary; /* Résumé concis des largeurs */ gint base; /* Position absolue de segment */ col_coord_t coord; /* Coordonnées en interne */ line_segment *segment; /* Bribe de texte trouvée */ @@ -758,11 +751,9 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line offset = caret->x - text_pos; - g_width_tracker_get_local_width_summary(view->tracker, index, &summary); - /* Déplacement au sein du segment courant ? */ - result = g_buffer_line_get_coord_at(line, &summary, options, offsets, &base, &offset, dir, false, &coord); + result = g_buffer_line_get_coord_at(line, index, view->tracker, options, &base, &offset, dir, false, &coord); if (result) { @@ -780,7 +771,7 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line { base = 0; - result = g_buffer_line_find_near_coord(line, &coord, &summary, options, offsets, dir, &offset); + result = g_buffer_line_find_near_coord(line, index, &coord, view->tracker, options, dir, &offset); } @@ -802,7 +793,6 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line * ctrl = indique la demande d'un parcours rapide. * * dir = direction du parcours. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * caret = position du curseur à faire évoluer. [OUT] * * cursor = emplacement correspondant à cette position. [OUT] * * * @@ -814,7 +804,7 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line * * ******************************************************************************/ -bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection dir, const GDisplayOptions *options, const line_width_summary *offsets, cairo_rectangle_int_t *caret, GLineCursor **cursor) +bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection dir, const GDisplayOptions *options, cairo_rectangle_int_t *caret, GLineCursor **cursor) { bool result; /* Bilan à retourner */ size_t index; /* Indice de ligne de tampon */ @@ -844,8 +834,7 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d other = g_buffer_cache_find_line_by_index(view->cache, index); assert(other != NULL); - result = _g_buffer_view_compute_caret_full(view, caret->x, other, index, - options, offsets, caret, cursor); + result = _g_buffer_view_compute_caret_full(view, caret->x, other, index, options, caret, cursor); g_object_unref(G_OBJECT(other)); @@ -862,8 +851,7 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d other = g_buffer_cache_find_line_by_index(view->cache, index); assert(other != NULL); - result = _g_buffer_view_compute_caret_full(view, caret->x, other, index, - options, offsets, caret, cursor); + result = _g_buffer_view_compute_caret_full(view, caret->x, other, index, options, caret, cursor); g_object_unref(G_OBJECT(other)); @@ -873,7 +861,7 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d case GDK_SCROLL_LEFT: - moved = _g_buffer_view_move_caret(view, line, index, caret, ctrl, GDK_SCROLL_LEFT, options, offsets); + moved = _g_buffer_view_move_caret(view, line, index, caret, ctrl, GDK_SCROLL_LEFT, options); if (moved) { @@ -888,8 +876,7 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d other = g_buffer_cache_find_line_by_index(view->cache, index); assert(other != NULL); - result = _g_buffer_view_compute_caret_full(view, INT_MAX, other, index, - options, offsets, caret, cursor); + result = _g_buffer_view_compute_caret_full(view, INT_MAX, other, index, options, caret, cursor); g_object_unref(G_OBJECT(other)); @@ -899,7 +886,7 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d case GDK_SCROLL_RIGHT: - moved = _g_buffer_view_move_caret(view, line, index, caret, ctrl, GDK_SCROLL_RIGHT, options, offsets); + moved = _g_buffer_view_move_caret(view, line, index, caret, ctrl, GDK_SCROLL_RIGHT, options); if (moved) { @@ -916,8 +903,7 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d other = g_buffer_cache_find_line_by_index(view->cache, index); assert(other != NULL); - result = _g_buffer_view_compute_caret_full(view, text_pos, other, index, - options, offsets, caret, cursor); + result = _g_buffer_view_compute_caret_full(view, text_pos, other, index, options, caret, cursor); g_object_unref(G_OBJECT(other)); @@ -951,7 +937,6 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d * x = abscisse de la zone principale à traiter. * * y = ordonnée de la zone principale à traiter. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * * * Description : Trouve le créateur à l'origine d'un emplacement donné. * * * @@ -961,14 +946,13 @@ bool g_buffer_view_move_caret(GBufferView *view, bool ctrl, GdkScrollDirection d * * ******************************************************************************/ -GObject *g_buffer_view_find_creator(GBufferView *view, gint x, gint y, const GDisplayOptions *options, const line_width_summary *offsets) +GObject *g_buffer_view_find_creator(GBufferView *view, gint x, gint y, const GDisplayOptions *options) { GObject *result; /* Trouvaille à faire remonter */ gint text_pos; /* Abscisse de départ du texte */ gint lheight; /* Hauteur d'une ligne */ size_t index; /* Indice de ligne de tampon */ GBufferLine *line; /* Ligne à la position courante*/ - line_width_summary summary; /* Résumé concis des largeurs */ result = NULL; @@ -995,11 +979,9 @@ GObject *g_buffer_view_find_creator(GBufferView *view, gint x, gint y, const GDi /* Recherche d'un segment et de son empreinte */ - g_width_tracker_get_local_width_summary(view->tracker, index, &summary); - x -= text_pos; - result = g_buffer_line_get_creator_at(line, &summary, options, offsets, + result = g_buffer_line_get_creator_at(line, index, view->tracker, options, (gint []) { 0 }, &x, GDK_SCROLL_LEFT, false); g_object_unref(G_OBJECT(line)); @@ -1046,7 +1028,6 @@ bool g_buffer_view_unhighlight_segments(GBufferView *view) * x = abscisse de la zone principale à traiter. * * y = ordonnée de la zone principale à traiter. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * * * Description : Surligne tous les segments similaires à celui sous la souris.* * * @@ -1056,14 +1037,13 @@ bool g_buffer_view_unhighlight_segments(GBufferView *view) * * ******************************************************************************/ -bool g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y, const GDisplayOptions *options, const line_width_summary *offsets) +bool g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y, const GDisplayOptions *options) { bool result; /* Besoin à faire remonter */ gint text_pos; /* Abscisse de départ du texte */ gint lheight; /* Hauteur d'une ligne */ size_t index; /* Indice de ligne de tampon */ GBufferLine *line; /* Ligne à la position courante*/ - line_width_summary summary; /* Résumé concis des largeurs */ line_segment *segment; /* Segment sélectionnable */ /* Réinitialisation */ @@ -1096,11 +1076,9 @@ bool g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y, const G /* Recherche d'un segment et de son empreinte */ - g_width_tracker_get_local_width_summary(view->tracker, index, &summary); - x -= text_pos; - segment = g_buffer_line_get_segment_at(line, &summary, options, offsets, + segment = g_buffer_line_get_segment_at(line, index, view->tracker, options, (gint []) { 0 }, &x, GDK_SCROLL_LEFT, true); g_object_unref(G_OBJECT(line)); @@ -1130,7 +1108,6 @@ bool g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y, const G * virt_y = ordonnée réelle du point 0 à l'écran. * * area = position et surface à traiter. * * options = règles d'affichage des colonnes modulables. * -* offsets = décalages supplémentaires à appliquer. * * selected = ordonnée d'une ligne sélectionnée ou NULL. * * scale = échelle appliquée à la surface de rendu. * * export = indique si la vue est en cours d'exportation. * @@ -1143,7 +1120,7 @@ bool g_buffer_view_highlight_segments(GBufferView *view, gint x, gint y, const G * * ******************************************************************************/ -void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint virt_y, const cairo_rectangle_int_t *area, const GDisplayOptions *options, const line_width_summary *offsets, gint *selected, double scale, bool export) +void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint virt_y, const cairo_rectangle_int_t *area, const GDisplayOptions *options, gint *selected, double scale, bool export) { gint line_height; /* Hauteur d'une ligne */ gint cr_y; /* Ordonnée pour le dessin */ @@ -1186,7 +1163,7 @@ void g_buffer_view_draw(const GBufferView *view, cairo_t *cr, gint virt_y, const else highlighted = view->highlighted; - g_buffer_cache_draw(view->cache, cr, first, last, area, options, offsets, selected, highlighted); + g_buffer_cache_draw(view->cache, cr, first, last, area, options, selected, highlighted); if (export) unref_segment_content_list(highlighted); |