-static void
-set_part_color (GdkPangoRenderer *gdk_renderer,
- cairo_t *cr,
- PangoRenderPart part)
-{
- PangoColor *color = pango_renderer_get_color (PANGO_RENDERER (gdk_renderer),
- part);
- if (color)
- {
- cairo_set_source_rgb (cr,
- color->red / 65535.,
- color->green / 65535.,
- color->blue / 65535.);
- }
- else
- {
- GdkColor gc_color;
-
- _gdk_windowing_gc_get_foreground (gdk_renderer->priv->base_gc, &gc_color);
- gdk_cairo_set_source_color (cr, &gc_color);
- }
-}
-
-static cairo_surface_t *
-get_stipple_surface (GdkPangoRenderer *gdk_renderer,
- cairo_t *cr,
- PangoRenderPart part)
-{
- if (!gdk_renderer->priv->stipple_surface[part])
- {
- cairo_t *tmp_cr;
- cairo_surface_t *surface;
- cairo_surface_t *alpha_surface;
- gint width, height;
-
- gdk_drawable_get_size (gdk_renderer->priv->stipple[part],
- &width, &height);
-
- alpha_surface = _gdk_drawable_ref_cairo_surface (gdk_renderer->priv->stipple[part]);
-
- surface = cairo_surface_create_similar (cairo_get_target_surface (cr),
- CAIRO_FORMAT_ARGB32,
- width, height);
-
- tmp_cr = cairo_create ();
- cairo_set_target_surface (tmp_cr, surface);
-
- cairo_set_operator (tmp_cr, CAIRO_OPERATOR_SRC);
- cairo_show_surface (tmp_cr, alpha_surface, width, height);
-
- set_part_color (gdk_renderer, tmp_cr, part);
- cairo_set_operator (tmp_cr, CAIRO_OPERATOR_ATOP);
-
- cairo_rectangle (tmp_cr, 0, 0, width, height);
- cairo_fill (tmp_cr);
-
- cairo_destroy (tmp_cr);
- cairo_surface_destroy (alpha_surface);
-
- gdk_renderer->priv->stipple_surface[part] = surface;
- }
-
- return gdk_renderer->priv->stipple_surface[part];
-}
-