forked from AuroraMiddleware/gtk
TextView: render the background of border windows
Set the .top, .left, etc css classes and render the background of the border windows. Change the reftest implementation accordingly.
This commit is contained in:
parent
2eeff1eed6
commit
715b8744f5
@ -5326,6 +5326,38 @@ draw_text (cairo_t *cr,
|
||||
gtk_text_view_paint (widget, cr);
|
||||
}
|
||||
|
||||
static void
|
||||
paint_border_window (GtkTextView *text_view,
|
||||
cairo_t *cr,
|
||||
GtkTextWindowType type,
|
||||
GtkStyleContext *context,
|
||||
const char *class)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
window = gtk_text_view_get_window (text_view, type);
|
||||
|
||||
if (window != NULL &&
|
||||
gtk_cairo_should_draw_window (cr, window))
|
||||
{
|
||||
gint w, h;
|
||||
|
||||
gtk_style_context_save (context);
|
||||
gtk_style_context_add_class (context, class);
|
||||
|
||||
w = gdk_window_get_width (window);
|
||||
h = gdk_window_get_height (window);
|
||||
|
||||
gtk_cairo_transform_to_window (cr, GTK_WIDGET (text_view), window);
|
||||
|
||||
cairo_save (cr);
|
||||
gtk_render_background (context, cr, 0, 0, w, h);
|
||||
cairo_restore (cr);
|
||||
|
||||
gtk_style_context_restore (context);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_text_view_draw (GtkWidget *widget,
|
||||
cairo_t *cr)
|
||||
@ -5378,6 +5410,11 @@ gtk_text_view_draw (GtkWidget *widget,
|
||||
cairo_restore (cr);
|
||||
}
|
||||
|
||||
paint_border_window (GTK_TEXT_VIEW (widget), cr, GTK_TEXT_WINDOW_LEFT, context, GTK_STYLE_CLASS_LEFT);
|
||||
paint_border_window (GTK_TEXT_VIEW (widget), cr, GTK_TEXT_WINDOW_RIGHT, context, GTK_STYLE_CLASS_RIGHT);
|
||||
paint_border_window (GTK_TEXT_VIEW (widget), cr, GTK_TEXT_WINDOW_TOP, context, GTK_STYLE_CLASS_TOP);
|
||||
paint_border_window (GTK_TEXT_VIEW (widget), cr, GTK_TEXT_WINDOW_BOTTOM, context, GTK_STYLE_CLASS_BOTTOM);
|
||||
|
||||
/* Propagate exposes to all unanchored children.
|
||||
* Anchored children are handled in gtk_text_view_paint().
|
||||
*/
|
||||
|
@ -17,53 +17,6 @@
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
static void
|
||||
paint_border (GtkTextView *text_view,
|
||||
cairo_t *cr,
|
||||
GtkTextWindowType type,
|
||||
GtkStyleContext *context,
|
||||
const char *class)
|
||||
{
|
||||
GdkWindow *window;
|
||||
|
||||
window = gtk_text_view_get_window (text_view, type);
|
||||
|
||||
if (window != NULL &&
|
||||
gtk_cairo_should_draw_window (cr, window))
|
||||
{
|
||||
gint w, h;
|
||||
|
||||
gtk_style_context_save (context);
|
||||
gtk_style_context_add_class (context, class);
|
||||
|
||||
w = gdk_window_get_width (window);
|
||||
h = gdk_window_get_height (window);
|
||||
|
||||
gtk_cairo_transform_to_window (cr, GTK_WIDGET (text_view), window);
|
||||
|
||||
cairo_save (cr);
|
||||
gtk_render_background (context, cr, 0, 0, w, h);
|
||||
cairo_restore (cr);
|
||||
|
||||
gtk_style_context_restore (context);
|
||||
}
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT gboolean
|
||||
paint_border_windows (GtkTextView *text_view,
|
||||
cairo_t *cr)
|
||||
{
|
||||
GtkStyleContext *context;
|
||||
|
||||
context = gtk_widget_get_style_context (GTK_WIDGET (text_view));
|
||||
|
||||
paint_border (text_view, cr, GTK_TEXT_WINDOW_LEFT, context, "left");
|
||||
paint_border (text_view, cr, GTK_TEXT_WINDOW_RIGHT, context, "right");
|
||||
paint_border (text_view, cr, GTK_TEXT_WINDOW_TOP, context, "top");
|
||||
paint_border (text_view, cr, GTK_TEXT_WINDOW_BOTTOM, context, "bottom");
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
G_MODULE_EXPORT void
|
||||
add_border_windows (GtkTextView *text_view)
|
||||
|
@ -13,7 +13,6 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="wrap_mode">word</property>
|
||||
<signal name="map" handler="reftest:add_border_windows" swapped="no"/>
|
||||
<signal name="draw" handler="reftest:paint_border_windows" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
Loading…
Reference in New Issue
Block a user