View | Details | Raw Unified | Return to bug 117163
Collapse All | Expand All

(-)gtk+/gdk/gdkwindow.c~ (-1 / +13 lines)
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
    }

Return to bug 117163