[gtk/ngl-textview-cursor: 2/2] textlayout: Render cursors at the end
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/ngl-textview-cursor: 2/2] textlayout: Render cursors at the end
- Date: Sat, 13 Mar 2021 00:30:27 +0000 (UTC)
commit 3a928c898007709066dabbc8f50c40f3f90a2527
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Mar 12 19:28:36 2021 -0500
textlayout: Render cursors at the end
Don't place the insertion cursor render nodes in the
middle of the text nodes for all the text. This helps
the renderer batching the text draw calls together.
gtk/gtktextlayout.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c
index 9c994137ae..358a92e517 100644
--- a/gtk/gtktextlayout.c
+++ b/gtk/gtktextlayout.c
@@ -4142,6 +4142,8 @@ gtk_text_layout_snapshot (GtkTextLayout *layout,
GSList *line_list;
GSList *tmp_list;
GdkRGBA color;
+ GtkSnapshot *cursor_snapshot;
+ GskRenderNode *cursors;
g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout));
g_return_if_fail (layout->default_style != NULL);
@@ -4158,6 +4160,8 @@ gtk_text_layout_snapshot (GtkTextLayout *layout,
if (line_list == NULL)
return; /* nothing on the screen */
+ cursor_snapshot = gtk_snapshot_new ();
+
crenderer = gsk_pango_renderer_acquire ();
gsk_pango_renderer_set_shape_handler (crenderer, snapshot_shape);
@@ -4267,14 +4271,14 @@ gtk_text_layout_snapshot (GtkTextLayout *layout,
dir = (line_display->direction == GTK_TEXT_DIR_RTL) ? PANGO_DIRECTION_RTL :
PANGO_DIRECTION_LTR;
if (cursor.is_insert || cursor.is_selection_bound)
- gtk_snapshot_push_opacity (crenderer->snapshot, cursor_alpha);
+ gtk_snapshot_push_opacity (cursor_snapshot, cursor_alpha);
- gtk_snapshot_render_insertion_cursor (crenderer->snapshot, context,
+ gtk_snapshot_render_insertion_cursor (cursor_snapshot, context,
line_display->x_offset, offset_y +
line_display->top_margin,
line_display->layout, cursor.pos, dir);
if (cursor.is_insert || cursor.is_selection_bound)
- gtk_snapshot_pop (crenderer->snapshot);
+ gtk_snapshot_pop (cursor_snapshot);
}
}
} /* line_display->height > 0 */
@@ -4288,6 +4292,13 @@ gtk_text_layout_snapshot (GtkTextLayout *layout,
gtk_text_layout_wrap_loop_end (layout);
+ cursors = gtk_snapshot_free_to_node (cursor_snapshot);
+ if (cursors)
+ {
+ gtk_snapshot_append_node (crenderer->snapshot, cursors);
+ gsk_render_node_unref (cursors);
+ }
+
/* Only update eviction source once per snapshot */
gtk_text_line_display_cache_delay_eviction (priv->cache);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]