diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-04-09 20:29:54 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-04-09 20:29:54 (GMT) |
commit | f38d8af1713a2a46a8c2d4499081bd0d123af163 (patch) | |
tree | 16c1439de2a396cbb8dc8231b8d1c5beabca49b1 /src/glibext/gcodebuffer.c | |
parent | 944225261e872785366d1df5377f59ea917a2195 (diff) |
Fixed all known bugs with the keyboard-based navigation in buffer views.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@507 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/glibext/gcodebuffer.c')
-rw-r--r-- | src/glibext/gcodebuffer.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/src/glibext/gcodebuffer.c b/src/glibext/gcodebuffer.c index 1d42b35..4b4b2a6 100644 --- a/src/glibext/gcodebuffer.c +++ b/src/glibext/gcodebuffer.c @@ -1301,7 +1301,10 @@ GBufferLine *g_buffer_view_find_line_and_segment_at(GBufferView *view, gint *x, *segment = NULL; else + { + *x -= view->left_text; *segment = g_buffer_line_get_segment_at(result, view->max_widths, display, x, GDK_SCROLL_LEFT, true); + } } @@ -1345,8 +1348,8 @@ const vmpa2t *g_buffer_view_compute_caret(GBufferView *view, gint x, gint y, con - printf("\n[BASE] tronc = %d reste = %d dernier = %d largeur = %d\n", - x - remaining, remaining, g_buffer_segment_get_caret_position(segment, remaining), + printf("\n[BASE] orig = %d tronc = %d reste = %d dernier = %d largeur = %d\n", + x, x - remaining, remaining, g_buffer_segment_get_caret_position(segment, remaining), g_buffer_segment_get_width(segment)); printf(" '%s'\n", g_buffer_segment_get_text(segment, false)); @@ -1354,7 +1357,7 @@ const vmpa2t *g_buffer_view_compute_caret(GBufferView *view, gint x, gint y, con - caret->x = (x - remaining) + g_buffer_segment_get_caret_position(segment, remaining); + caret->x = /*view->left_text +*/ (x - remaining) + g_buffer_segment_get_caret_position(segment, remaining); caret->y = (index - view->first_index) * view->line_height; @@ -1383,7 +1386,7 @@ const vmpa2t *g_buffer_view_compute_caret(GBufferView *view, gint x, gint y, con * * ******************************************************************************/ -const vmpa2t *g_buffer_view_compute_caret_old(GBufferView *view, GBufferLine *line, size_t index, gint x, const bool *display, GdkRectangle *caret) +const vmpa2t *g_buffer_view_compute_caret_full(GBufferView *view, GBufferLine *line, size_t index, gint x, const bool *display, GdkRectangle *caret) { gint tmp_x; /* Copie de travail modifiable */ GBufferSegment *segment; /* Segment visé par le pointeur*/ @@ -1395,16 +1398,16 @@ const vmpa2t *g_buffer_view_compute_caret_old(GBufferView *view, GBufferLine *li if (tmp_x < 0) return NULL; segment = g_buffer_line_get_segment_at(line, view->max_widths, display, &tmp_x, GDK_SCROLL_LEFT, true); - if (segment == NULL) printf(" -- no segment\n"); + if (segment == NULL) printf(" -- no segment OLD\n"); if (segment == NULL) return NULL; - printf("\n[BASE] tronc = %d reste = %d dernier = %d largeur = %d\n", + printf("\n[BASE OLD] tronc = %d reste = %d dernier = %d largeur = %d\n", x - tmp_x, tmp_x, g_buffer_segment_get_caret_position(segment, tmp_x), g_buffer_segment_get_width(segment)); printf(" '%s'\n", g_buffer_segment_get_text(segment, false)); - caret->x = (x - tmp_x) + g_buffer_segment_get_caret_position(segment, tmp_x); + caret->x = view->left_text + tmp_x;//(x - tmp_x) + g_buffer_segment_get_caret_position(segment, tmp_x); first = g_code_buffer_get_index_from_address(view->buffer, view->start, true); caret->y = (index - first) * view->line_height; @@ -1475,6 +1478,10 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line printf(" ====== MOVE 1 ? %d\n", result); + if (result) + caret->x += (tmp_x - ref_x); + + /////////////////// if (!result) { @@ -1495,8 +1502,9 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line ref_x = 0; - tmp_x = offset; + tmp_x = view->left_text + offset; + caret->x = tmp_x; result = true; //result = g_buffer_segment_move_caret(segment, &tmp_x, ctrl, dir); @@ -1521,10 +1529,10 @@ static bool _g_buffer_view_move_caret(GBufferView *view, const GBufferLine *line printf(" ====== NO NEW CARET!\n"); - + /* if (result) caret->x += (tmp_x - ref_x); - + */ return result; @@ -1640,7 +1648,7 @@ const vmpa2t *g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, b if (index > first) { line = view->buffer->lines[index - 1]; - result = g_buffer_view_compute_caret_old(view, line, index - 1, caret->x, display, caret); + result = g_buffer_view_compute_caret_full(view, line, index - 1, caret->x, display, caret); } break; @@ -1650,7 +1658,7 @@ const vmpa2t *g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, b if (index < last) { line = view->buffer->lines[index + 1]; - result = g_buffer_view_compute_caret_old(view, line, index + 1, caret->x, display, caret); + result = g_buffer_view_compute_caret_full(view, line, index + 1, caret->x, display, caret); } break; @@ -1665,7 +1673,7 @@ const vmpa2t *g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, b if (!moved && index > first) { line = view->buffer->lines[index - 1]; - result = g_buffer_view_compute_caret_old(view, line, index - 1, INT_MAX, display, caret); + result = g_buffer_view_compute_caret_full(view, line, index - 1, INT_MAX, display, caret); } break; @@ -1680,7 +1688,7 @@ const vmpa2t *g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, b if (!moved && index < last) { line = view->buffer->lines[index + 1]; - result = g_buffer_view_compute_caret_old(view, line, index + 1, left_pos, display, caret); + result = g_buffer_view_compute_caret_full(view, line, index + 1, left_pos, display, caret); } break; @@ -1698,7 +1706,7 @@ const vmpa2t *g_buffer_view_move_caret(GBufferView *view, GdkRectangle *caret, b /* if (result && !computed) - result = g_buffer_view_compute_caret_old(view, caret->x, caret->y, caret, display, NULL); + result = g_buffer_view_compute_caret_full(view, caret->x, caret->y, caret, display, NULL); */ return result; |