summaryrefslogtreecommitdiff
path: root/src/glibext/gcodebuffer.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-04-09 20:29:54 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-04-09 20:29:54 (GMT)
commitf38d8af1713a2a46a8c2d4499081bd0d123af163 (patch)
tree16c1439de2a396cbb8dc8231b8d1c5beabca49b1 /src/glibext/gcodebuffer.c
parent944225261e872785366d1df5377f59ea917a2195 (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.c38
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;