diff options
author | Igor Oliveira <itrindade.oliveira@gmail.com> | 2010-06-20 10:39:10 -0400 |
---|---|---|
committer | Igor Oliveira <igor.oliveira@openbossa.org> | 2010-06-20 10:39:10 -0400 |
commit | d47de5a9b2e8a0680f9ed2185656ae5d6d99c009 (patch) | |
tree | 697e01216b479de52d7471d128f1c65ef9e9bdac | |
parent | bd11c8f410f702f80a9add7137b82522554c4c07 (diff) |
DRM/Gallium3D: initial mask implementation
-rw-r--r-- | src/drm/cairo-drm-gallium-surface.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/drm/cairo-drm-gallium-surface.c b/src/drm/cairo-drm-gallium-surface.c index 7597b9f3..393c80f5 100644 --- a/src/drm/cairo-drm-gallium-surface.c +++ b/src/drm/cairo-drm-gallium-surface.c @@ -925,22 +925,25 @@ gallium_surface_paint (void *abstract_surface, } static cairo_int_status_t -gallium_surface_mask (void *abstract_surface, - cairo_operator_t op, - const cairo_pattern_t *source, - const cairo_pattern_t *mask, - cairo_clip_t *clip) +gallium_surface_mask (void *abstract_surface, + cairo_operator_t op, + const cairo_pattern_t *source, + const cairo_pattern_t *mask, + cairo_clip_t *clip) { gallium_surface_t *surface = abstract_surface; + cairo_status_t status = CAIRO_INT_STATUS_UNSUPPORTED; - if (surface->fallback == NULL) { - /* XXX insert magic */ - surface->fallback = gallium_surface_map_to_image (surface); + if (mask->type == CAIRO_PATTERN_TYPE_SOLID) { + cairo_solid_pattern_t *solid_mask = (cairo_solid_pattern_t *) mask; + float alpha = surface->paint.solid_color[4]; + + surface->paint.solid_color[4] = solid_mask->color.alpha; + status = gallium_surface_paint(abstract_surface, op, source, clip); + surface->paint.solid_color[4] = alpha; } - return _cairo_surface_mask (surface->fallback, - op, source, mask, - clip); + return status; } static cairo_int_status_t |