static const cairo_compositor_t *
no_traps_compositor_get (void)
{
    static cairo_atomic_once_t once = CAIRO_ATOMIC_ONCE_INIT;
    static cairo_traps_compositor_t compositor;

    if (_cairo_atomic_init_once_enter(&once)) {
	_cairo_traps_compositor_init (&compositor,
				      no_fallback_compositor_get ());

	compositor.acquire = acquire;
	compositor.release = release;
	compositor.set_clip_region = set_clip_region;
	compositor.pattern_to_surface = pattern_to_surface;
	compositor.draw_image_boxes = draw_image_boxes;
	//compositor.copy_boxes = copy_boxes;
	compositor.fill_boxes = fill_boxes;
	compositor.check_composite = check_composite;
	compositor.composite = composite;
	compositor.lerp = lerp;
	//compositor.check_composite_boxes = check_composite_boxes;
	compositor.composite_boxes = composite_boxes;
	//compositor.check_composite_traps = check_composite_traps;
	compositor.composite_traps = composite_traps;
	compositor.check_composite_glyphs = check_composite_glyphs;
	compositor.composite_glyphs = composite_glyphs;

	_cairo_atomic_init_once_leave(&once);
    }

    return &compositor.base;
}
Пример #2
0
const cairo_compositor_t *
_cairo_win32_gdi_compositor_get (void)
{
    static cairo_atomic_once_t once = CAIRO_ATOMIC_ONCE_INIT;
    static cairo_compositor_t compositor;

    if (_cairo_atomic_init_once_enter(&once)) {
	compositor.delegate = &_cairo_fallback_compositor;

	compositor.paint  = _cairo_win32_gdi_compositor_paint;
	compositor.mask   = _cairo_win32_gdi_compositor_mask;
	compositor.fill   = _cairo_win32_gdi_compositor_fill;
	compositor.stroke = _cairo_win32_gdi_compositor_stroke;
	compositor.glyphs = _cairo_win32_gdi_compositor_glyphs;

	_cairo_atomic_init_once_leave(&once);
    }

    return &compositor;
}
static const cairo_compositor_t *
no_spans_compositor_get (void)
{
    static cairo_atomic_once_t once = CAIRO_ATOMIC_ONCE_INIT;
    static cairo_spans_compositor_t compositor;

    if (_cairo_atomic_init_once_enter(&once)) {
	_cairo_spans_compositor_init (&compositor,
				      no_traps_compositor_get());

	//compositor.acquire = acquire;
	//compositor.release = release;
	compositor.fill_boxes = fill_boxes;
	//compositor.check_composite_boxes = check_composite_boxes;
	compositor.composite_boxes = composite_boxes;
	//compositor.check_span_renderer = check_span_renderer;
	compositor.renderer_init = span_renderer_init;
	compositor.renderer_fini = span_renderer_fini;

	_cairo_atomic_init_once_leave(&once);
    }

    return &compositor.base;
}