[gtk+/gtk-3-22] TextView: Get line direction in more efficient way
- From: Daniel Boles <dboles src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-22] TextView: Get line direction in more efficient way
- Date: Sun, 26 Mar 2017 15:25:34 +0000 (UTC)
commit 87b579cf2b70a437782bbbe20dc7446b5f0d7cbc
Author: Daniel Boles <dboles src gnome org>
Date: Sun Mar 26 15:53:12 2017 +0100
TextView: Get line direction in more efficient way
We do not need to go through the heavyweight process of constructing a
TextLineDisplay just to get the direction out of it, when we can simply
use TextIter API to get the text and then get its direction using Pango.
Adapted from a patch by Mehdi Sadeghi for GtkSourceView:
https://bugzilla.gnome.org/show_bug.cgi?id=779081#c20
gtk/gtktextview.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 47f1c68..25d7616 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -6417,15 +6417,21 @@ move_cursor (GtkTextView *text_view,
}
static gboolean
-iter_line_is_rtl (GtkTextIter *iter, GtkTextLayout *layout)
+iter_line_is_rtl (GtkTextIter *iter)
{
- GtkTextLine *line = _gtk_text_iter_get_text_line (iter);
- GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line, FALSE);
- GtkTextDirection direction = display->direction;
+ GtkTextIter start, end;
+ char *text;
+ PangoDirection direction;
+
+ start = end = *iter;
+ gtk_text_iter_set_line_offset (&start, 0);
+ gtk_text_iter_forward_line (&end);
+ text = gtk_text_iter_get_visible_text (&start, &end);
+ direction = pango_find_base_dir (text, -1);
- gtk_text_layout_free_line_display (layout, display);
+ g_free (text);
- return direction == GTK_TEXT_DIR_RTL;
+ return direction == PANGO_DIRECTION_RTL;
}
static void
@@ -6528,7 +6534,7 @@ gtk_text_view_move_cursor (GtkTextView *text_view,
gtk_text_buffer_get_iter_at_mark (get_buffer (text_view), &sel_bound,
gtk_text_buffer_get_selection_bound (get_buffer (text_view)));
- if (iter_line_is_rtl (&insert, priv->layout))
+ if (iter_line_is_rtl (&insert))
move_forward = !move_forward;
/* if we move forward, assume the cursor is at the end of the selection;
@@ -6566,7 +6572,7 @@ gtk_text_view_move_cursor (GtkTextView *text_view,
break;
case GTK_MOVEMENT_WORDS:
- if (iter_line_is_rtl (&newplace, priv->layout))
+ if (iter_line_is_rtl (&newplace))
count *= -1;
if (count < 0)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]