|
Lines 1746-1751
gdk_window_set_bg_pattern (GdkWindow
Link Here
|
| 1746 |
{ |
1746 |
{ |
| 1747 |
cairo_surface_t *surface = _gdk_drawable_ref_cairo_surface (private->bg_pixmap); |
1747 |
cairo_surface_t *surface = _gdk_drawable_ref_cairo_surface (private->bg_pixmap); |
| 1748 |
cairo_pattern_t *pattern = cairo_pattern_create_for_surface (surface); |
1748 |
cairo_pattern_t *pattern = cairo_pattern_create_for_surface (surface); |
|
|
1749 |
gint pixmap_width, pixmap_height; |
| 1750 |
gint window_width, window_height; |
| 1751 |
|
| 1749 |
cairo_surface_destroy (surface); |
1752 |
cairo_surface_destroy (surface); |
| 1750 |
|
1753 |
|
| 1751 |
if (x_offset != 0 || y_offset != 0) |
1754 |
if (x_offset != 0 || y_offset != 0) |
|
Lines 1755-1761
gdk_window_set_bg_pattern (GdkWindow
Link Here
|
| 1755 |
cairo_pattern_set_matrix (pattern, &matrix); |
1758 |
cairo_pattern_set_matrix (pattern, &matrix); |
| 1756 |
} |
1759 |
} |
| 1757 |
|
1760 |
|
| 1758 |
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); |
1761 |
/* Workaround for a bug in Cairo and/or XRENDER: https://bugs.freedesktop.org/show_bug.cgi?id=4320 |
|
|
1762 |
* |
| 1763 |
* Repeat fills with a pixmap pattern and a pixmap destination surface are |
| 1764 |
* slow. So, we do a lame test for "do we actually need to repeat". |
| 1765 |
*/ |
| 1766 |
gdk_drawable_get_size (GDK_DRAWABLE (private->bg_pixmap), &pixmap_width, &pixmap_height); |
| 1767 |
gdk_drawable_get_size (GDK_DRAWABLE (window), &window_width, &window_height); |
| 1768 |
if (pixmap_width < window_width || pixmap_height < window_height) |
| 1769 |
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); |
| 1770 |
|
| 1759 |
cairo_set_source (cr, pattern); |
1771 |
cairo_set_source (cr, pattern); |
| 1760 |
cairo_pattern_destroy (pattern); |
1772 |
cairo_pattern_destroy (pattern); |
| 1761 |
} |
1773 |
} |