Revert part of "textview: Remove extra magic for drawing children"
This partially reverts commit df37446f9b
.
The commit changed API that was public (or at least semi-public) and
it's not worth changing that.
The original bug should still be fixed.
https://bugzilla.gnome.org/show_bug.cgi?id=673839
This commit is contained in:
@ -108,6 +108,7 @@ struct _GtkTextRenderer
|
|||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
GdkRGBA *error_color; /* Error underline color for this widget */
|
GdkRGBA *error_color; /* Error underline color for this widget */
|
||||||
|
GList *widgets; /* widgets encountered when drawing */
|
||||||
|
|
||||||
GdkRGBA rgba[4];
|
GdkRGBA rgba[4];
|
||||||
guint8 rgba_set[4];
|
guint8 rgba_set[4];
|
||||||
@ -422,7 +423,12 @@ gtk_text_renderer_draw_shape (PangoRenderer *renderer,
|
|||||||
}
|
}
|
||||||
else if (GTK_IS_WIDGET (attr->data))
|
else if (GTK_IS_WIDGET (attr->data))
|
||||||
{
|
{
|
||||||
/* nothing to do */
|
GtkWidget *widget;
|
||||||
|
|
||||||
|
widget = GTK_WIDGET (attr->data);
|
||||||
|
|
||||||
|
text_renderer->widgets = g_list_prepend (text_renderer->widgets,
|
||||||
|
g_object_ref (widget));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
g_assert_not_reached (); /* not a pixbuf or widget */
|
g_assert_not_reached (); /* not a pixbuf or widget */
|
||||||
@ -491,10 +497,11 @@ text_renderer_begin (GtkTextRenderer *text_renderer,
|
|||||||
|
|
||||||
/* Returns a GSList of (referenced) widgets encountered while drawing.
|
/* Returns a GSList of (referenced) widgets encountered while drawing.
|
||||||
*/
|
*/
|
||||||
static void
|
static GList *
|
||||||
text_renderer_end (GtkTextRenderer *text_renderer)
|
text_renderer_end (GtkTextRenderer *text_renderer)
|
||||||
{
|
{
|
||||||
GtkStyleContext *context;
|
GtkStyleContext *context;
|
||||||
|
GList *widgets = text_renderer->widgets;
|
||||||
|
|
||||||
cairo_restore (text_renderer->cr);
|
cairo_restore (text_renderer->cr);
|
||||||
|
|
||||||
@ -505,11 +512,15 @@ text_renderer_end (GtkTextRenderer *text_renderer)
|
|||||||
text_renderer->widget = NULL;
|
text_renderer->widget = NULL;
|
||||||
text_renderer->cr = NULL;
|
text_renderer->cr = NULL;
|
||||||
|
|
||||||
|
text_renderer->widgets = NULL;
|
||||||
|
|
||||||
if (text_renderer->error_color)
|
if (text_renderer->error_color)
|
||||||
{
|
{
|
||||||
gdk_rgba_free (text_renderer->error_color);
|
gdk_rgba_free (text_renderer->error_color);
|
||||||
text_renderer->error_color = NULL;
|
text_renderer->error_color = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return widgets;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cairo_region_t *
|
static cairo_region_t *
|
||||||
@ -805,7 +816,8 @@ get_text_renderer (void)
|
|||||||
void
|
void
|
||||||
gtk_text_layout_draw (GtkTextLayout *layout,
|
gtk_text_layout_draw (GtkTextLayout *layout,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
cairo_t *cr)
|
cairo_t *cr,
|
||||||
|
GList **widgets)
|
||||||
{
|
{
|
||||||
GtkStyleContext *context;
|
GtkStyleContext *context;
|
||||||
gint offset_y;
|
gint offset_y;
|
||||||
@ -814,6 +826,7 @@ gtk_text_layout_draw (GtkTextLayout *layout,
|
|||||||
gboolean have_selection;
|
gboolean have_selection;
|
||||||
GSList *line_list;
|
GSList *line_list;
|
||||||
GSList *tmp_list;
|
GSList *tmp_list;
|
||||||
|
GList *tmp_widgets;
|
||||||
GdkRectangle clip;
|
GdkRectangle clip;
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout));
|
g_return_if_fail (GTK_IS_TEXT_LAYOUT (layout));
|
||||||
@ -918,7 +931,11 @@ gtk_text_layout_draw (GtkTextLayout *layout,
|
|||||||
|
|
||||||
gtk_text_layout_wrap_loop_end (layout);
|
gtk_text_layout_wrap_loop_end (layout);
|
||||||
|
|
||||||
text_renderer_end (text_renderer);
|
tmp_widgets = text_renderer_end (text_renderer);
|
||||||
|
if (widgets)
|
||||||
|
*widgets = tmp_widgets;
|
||||||
|
else
|
||||||
|
g_list_free_full (tmp_widgets, g_object_unref);
|
||||||
|
|
||||||
g_slist_free (line_list);
|
g_slist_free (line_list);
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,8 @@ G_BEGIN_DECLS
|
|||||||
*/
|
*/
|
||||||
void gtk_text_layout_draw (GtkTextLayout *layout,
|
void gtk_text_layout_draw (GtkTextLayout *layout,
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
cairo_t *cr);
|
cairo_t *cr,
|
||||||
|
GList **widgets);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
@ -398,7 +398,7 @@ _gtk_text_util_create_rich_drag_icon (GtkWidget *widget,
|
|||||||
cairo_save (cr);
|
cairo_save (cr);
|
||||||
|
|
||||||
cairo_translate (cr, 1 + DRAG_ICON_LAYOUT_BORDER, 1 + DRAG_ICON_LAYOUT_BORDER);
|
cairo_translate (cr, 1 + DRAG_ICON_LAYOUT_BORDER, 1 + DRAG_ICON_LAYOUT_BORDER);
|
||||||
gtk_text_layout_draw (layout, widget, cr);
|
gtk_text_layout_draw (layout, widget, cr, NULL);
|
||||||
|
|
||||||
cairo_restore (cr);
|
cairo_restore (cr);
|
||||||
|
|
||||||
|
@ -4836,7 +4836,8 @@ gtk_text_view_paint (GtkWidget *widget,
|
|||||||
|
|
||||||
gtk_text_layout_draw (priv->layout,
|
gtk_text_layout_draw (priv->layout,
|
||||||
widget,
|
widget,
|
||||||
cr);
|
cr,
|
||||||
|
NULL);
|
||||||
|
|
||||||
cairo_restore (cr);
|
cairo_restore (cr);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user