diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2018-11-20 22:23:57 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2018-11-20 22:23:57 (GMT) |
commit | d4239799ad149f65e1e480d898ccb16756f4d518 (patch) | |
tree | 2652094bd458505edb9dbcfb7db1c1a8170ce6f1 /src/glibext/gbufferline.c | |
parent | 7c1f85b8197cb02634d06d200f68ce65e9eca717 (diff) |
Located the caret at the right position in case of minimal widths.
Diffstat (limited to 'src/glibext/gbufferline.c')
-rw-r--r-- | src/glibext/gbufferline.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c index af27426..2a3a04f 100644 --- a/src/glibext/gbufferline.c +++ b/src/glibext/gbufferline.c @@ -984,6 +984,7 @@ void g_buffer_line_collect_widths(GBufferLine *line, line_width_summary *summary * Paramètres : line = ligne à venir consulter. * * index = indice de la colonne visée. * * summary = résumé des largeurs maximales. * +* offsets = décalages supplémentaires à appliquer. * * * * Description : Fournit la largeur d'une colonne finalement appliquée. * * * @@ -993,7 +994,7 @@ void g_buffer_line_collect_widths(GBufferLine *line, line_width_summary *summary * * ******************************************************************************/ -gint g_buffer_line_compute_max_width(const GBufferLine *line, BufferLineColumn index, const line_width_summary *summary) +gint g_buffer_line_compute_max_width(const GBufferLine *line, BufferLineColumn index, const line_width_summary *summary, const line_width_summary *offsets) { gint result; /* Largeur à retourner */ @@ -1005,6 +1006,9 @@ gint g_buffer_line_compute_max_width(const GBufferLine *line, BufferLineColumn i else result = summary->max_widths[index]; + if (result < offsets->max_widths[index]) + result = offsets->max_widths[index]; + return result; } @@ -1044,6 +1048,7 @@ const line_segment *g_buffer_line_get_segment_from_coord(const GBufferLine *line * Paramètres : line = ligne à venir consulter. * * summary = résumé des largeurs maximales. * * options = règles d'affichage des colonnes modulables. * +* offsets = décalages supplémentaires à appliquer. * * base = position jusqu'au segment trouvé. [OUT] * * offset = position à la colonne visée. [OUT] * * dir = direction d'un éventuel déplacement en cours. * @@ -1058,7 +1063,7 @@ const line_segment *g_buffer_line_get_segment_from_coord(const GBufferLine *line * * ******************************************************************************/ -bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, gint *base, gint *offset, GdkScrollDirection dir, bool force, col_coord_t *coord) +bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, const line_width_summary *offsets, gint *base, gint *offset, GdkScrollDirection dir, bool force, col_coord_t *coord) { bool result; /* Bilan à retourner */ BufferLineColumn last; /* Dernière colonne remplie */ @@ -1098,7 +1103,7 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar if (i < line->merge_start) { - width = g_buffer_line_compute_max_width(line, i, summary); + width = g_buffer_line_compute_max_width(line, i, summary, offsets); /* Si la colonne n'est absolument pas visible, on ne s'arrête pas dessus ! */ if (width == 0) continue; @@ -1172,7 +1177,7 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar { if ((i - 1) < line->merge_start) { - width = g_buffer_line_compute_max_width(line, i - 1, summary); + width = g_buffer_line_compute_max_width(line, i - 1, summary, offsets); if (width > 0) *base += (width + COL_MARGIN); @@ -1250,6 +1255,7 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar * Paramètres : line = ligne à venir consulter. * * summary = résumé des largeurs maximales. * * options = règles d'affichage des colonnes modulables. * +* offsets = décalages supplémentaires à appliquer. * * base = position jusqu'au segment trouvé. [OUT] * * offset = position à la colonne visée. [OUT] * * dir = direction d'un éventuel déplacement en cours. * @@ -1263,13 +1269,13 @@ bool g_buffer_line_get_coord_at(const GBufferLine *line, const line_width_summar * * ******************************************************************************/ -const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, gint *base, gint *offset, GdkScrollDirection dir, bool force) +const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, const line_width_summary *offsets, gint *base, gint *offset, GdkScrollDirection dir, bool force) { const line_segment *result; /* Trouvaille à retourner */ col_coord_t coord; /* Emplacement du contenu visé */ bool status; /* Bilan de la localisation */ - status = g_buffer_line_get_coord_at(line, summary, options, base, offset, dir, force, &coord); + status = g_buffer_line_get_coord_at(line, summary, options, offsets, base, offset, dir, force, &coord); if (status) result = g_buffer_line_get_segment_from_coord(line, &coord); @@ -1286,6 +1292,7 @@ const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const * Paramètres : line = ligne à venir consulter. * * summary = résumé des largeurs maximales. * * options = règles d'affichage des colonnes modulables. * +* offsets = décalages supplémentaires à appliquer. * * base = position jusqu'au segment trouvé. [OUT] * * offset = position à la colonne visée. [OUT] * * dir = direction d'un éventuel déplacement en cours. * @@ -1299,7 +1306,7 @@ const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const * * ******************************************************************************/ -GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, gint *base, gint *offset, GdkScrollDirection dir, bool force) +GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_summary *summary, const GDisplayOptions *options, const line_width_summary *offsets, gint *base, gint *offset, GdkScrollDirection dir, bool force) { GObject *result; /* Trouvaille à retourner */ col_coord_t target; /* Emplacement du contenu visé */ @@ -1309,7 +1316,7 @@ GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_ result = NULL; - status = g_buffer_line_get_coord_at(line, summary, options, base, offset, dir, force, &target); + status = g_buffer_line_get_coord_at(line, summary, options, offsets, base, offset, dir, force, &target); if (status) { @@ -1338,6 +1345,7 @@ GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_ * coord = cordonnées à consulter puis renseigner. [OUT] * * summary = résumé des largeurs maximales. * * options = règles d'affichage des colonnes modulables. * +* offsets = décalages supplémentaires à appliquer. * * dir = orientation des recherches. * * offset = décalage pour amener à l'extrémité nouvelle. [OUT] * * * @@ -1349,7 +1357,7 @@ GObject *g_buffer_line_get_creator_at(const GBufferLine *line, const line_width_ * * ******************************************************************************/ -bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, const line_width_summary *summary, const GDisplayOptions *options, GdkScrollDirection dir, gint *offset) +bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, const line_width_summary *summary, const GDisplayOptions *options, const line_width_summary *offsets, GdkScrollDirection dir, gint *offset) { bool result; /* Bilan à retourner */ size_t count; /* Qté de colonnes en option */ @@ -1435,7 +1443,7 @@ bool g_buffer_line_find_near_coord(const GBufferLine *line, col_coord_t *coord, if (displayed) { - width = g_buffer_line_compute_max_width(line, k, summary); + width = g_buffer_line_compute_max_width(line, k, summary, offsets); if (width > 0) { @@ -1535,10 +1543,7 @@ void g_buffer_line_draw(GBufferLine *line, cairo_t *cairo, const line_width_summ if (i < line->merge_start) { - max_width = g_buffer_line_compute_max_width(line, i, summary); - - if (max_width == 0) - max_width = offsets->max_widths[i]; + max_width = g_buffer_line_compute_max_width(line, i, summary, offsets); if (max_width > 0) x += max_width + COL_MARGIN; |