From 98b99201b0704c722ccaf132b4c9294310ce4461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= Date: Mon, 21 Dec 2020 12:56:38 +0100 Subject: [PATCH] gskpango: Remove bounds rect We only need this to render shapes and trapezoids, i.e. only when falling back to cairo. Remove code to measure the layout and convert the ink_rect to a graphene_rect_t from gtk_snapshot_append_layout() and do it when drawing shapes and trapezoids instead. --- gtk/gskpango.c | 20 ++++++++++++++------ gtk/gskpango.h | 1 - gtk/gtktextlayout.c | 2 -- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gtk/gskpango.c b/gtk/gskpango.c index 2fa53f0624..6803f7528a 100644 --- a/gtk/gskpango.c +++ b/gtk/gskpango.c @@ -138,11 +138,19 @@ gsk_pango_renderer_draw_trapezoid (PangoRenderer *renderer, double x22) { GskPangoRenderer *crenderer = (GskPangoRenderer *) (renderer); + PangoLayout *layout; + PangoRectangle ink_rect; cairo_t *cr; double x, y; - cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds); + layout = pango_renderer_get_layout (renderer); + if (!layout) + return; + pango_layout_get_pixel_extents (layout, &ink_rect, NULL); + cr = gtk_snapshot_append_cairo (crenderer->snapshot, + &GRAPHENE_RECT_INIT (ink_rect.x, ink_rect.y, + ink_rect.width, ink_rect.height)); set_color (crenderer, part, cr); x = y = 0; @@ -263,12 +271,16 @@ gsk_pango_renderer_draw_shape (PangoRenderer *renderer, if (!handled) { cairo_t *cr; + PangoRectangle ink_rect; layout = pango_renderer_get_layout (renderer); if (!layout) return; - cr = gtk_snapshot_append_cairo (crenderer->snapshot, &crenderer->bounds); + pango_layout_get_pixel_extents (layout, &ink_rect, NULL); + cr = gtk_snapshot_append_cairo (crenderer->snapshot, + &GRAPHENE_RECT_INIT (ink_rect.x, ink_rect.y, + ink_rect.width, ink_rect.height)); shape_renderer = pango_cairo_context_get_shape_renderer (pango_layout_get_context (layout), &shape_renderer_data); @@ -483,7 +495,6 @@ gtk_snapshot_append_layout (GtkSnapshot *snapshot, const GdkRGBA *color) { GskPangoRenderer *crenderer; - PangoRectangle ink_rect; g_return_if_fail (snapshot != NULL); g_return_if_fail (PANGO_IS_LAYOUT (layout)); @@ -493,9 +504,6 @@ gtk_snapshot_append_layout (GtkSnapshot *snapshot, crenderer->snapshot = snapshot; crenderer->fg_color = *color; - pango_layout_get_pixel_extents (layout, &ink_rect, NULL); - graphene_rect_init (&crenderer->bounds, ink_rect.x, ink_rect.y, ink_rect.width, ink_rect.height); - pango_renderer_draw_layout (PANGO_RENDERER (crenderer), layout, 0, 0); gsk_pango_renderer_release (crenderer); diff --git a/gtk/gskpango.h b/gtk/gskpango.h index ab0933933c..fbd6340d7b 100644 --- a/gtk/gskpango.h +++ b/gtk/gskpango.h @@ -59,7 +59,6 @@ struct _GskPangoRenderer GtkWidget *widget; GtkSnapshot *snapshot; GdkRGBA fg_color; - graphene_rect_t bounds; /* Error underline color for this widget */ GdkRGBA *error_color; diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c index 2bc7e5dbed..ecbd2d3a08 100644 --- a/gtk/gtktextlayout.c +++ b/gtk/gtktextlayout.c @@ -4166,8 +4166,6 @@ gtk_text_layout_snapshot (GtkTextLayout *layout, crenderer->snapshot = snapshot; crenderer->fg_color = color; - graphene_rect_init (&crenderer->bounds, 0, 0, clip->width, clip->height); - gtk_text_layout_wrap_loop_start (layout); have_selection = gtk_text_buffer_get_selection_bounds (layout->buffer,