From d6345a69fb7179ce6dc71117423e83baef427071 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Wed, 13 May 2009 05:12:52 -0400 Subject: [PATCH] Add component alpha combiners in pixman-implementation.c --- pixman/pixman-implementation.c | 62 +++++++++++++++++++++++++++++++++++++----- pixman/pixman-pict.c | 12 ++++---- pixman/pixman-private.h | 14 ++++++++++ 3 files changed, 75 insertions(+), 13 deletions(-) diff --git a/pixman/pixman-implementation.c b/pixman/pixman-implementation.c index c8c09ad..4c98fec 100644 --- a/pixman/pixman-implementation.c +++ b/pixman/pixman-implementation.c @@ -73,6 +73,30 @@ delegate_combine_64 (pixman_implementation_t * imp, op, dest, src, mask, width); } +static void +delegate_combine_32_ca (pixman_implementation_t * imp, + pixman_op_t op, + uint32_t * dest, + const uint32_t * src, + const uint32_t * mask, + int width) +{ + _pixman_implementation_combine_32_ca (imp->delegate, + op, dest, src, mask, width); +} + +static void +delegate_combine_64_ca (pixman_implementation_t * imp, + pixman_op_t op, + uint64_t * dest, + const uint64_t * src, + const uint64_t * mask, + int width) +{ + _pixman_implementation_combine_64_ca (imp->delegate, + op, dest, src, mask, width); +} + pixman_implementation_t * _pixman_implementation_create (pixman_implementation_t *toplevel, pixman_implementation_t *delegate) @@ -92,7 +116,7 @@ _pixman_implementation_create (pixman_implementation_t *toplevel, delegate->toplevel = imp->toplevel; imp->delegate = delegate; - + /* Fill out function pointers with ones that just delegate */ imp->composite = delegate_composite; @@ -101,6 +125,8 @@ _pixman_implementation_create (pixman_implementation_t *toplevel, { imp->combine_32[i] = delegate_combine_32; imp->combine_64[i] = delegate_combine_64; + imp->combine_32_ca[i] = delegate_combine_32_ca; + imp->combine_64_ca[i] = delegate_combine_64_ca; } return imp; @@ -114,7 +140,7 @@ _pixman_implementation_combine_32 (pixman_implementation_t * imp, const uint32_t * mask, int width) { - (* imp->delegate->combine_32[op]) (imp, op, dest, src, mask, width); + (* imp->combine_32[op]) (imp, op, dest, src, mask, width); } void @@ -125,7 +151,29 @@ _pixman_implementation_combine_64 (pixman_implementation_t * imp, const uint64_t * mask, int width) { - (* imp->delegate->combine_64[op]) (imp, op, dest, src, mask, width); + (* imp->combine_64[op]) (imp, op, dest, src, mask, width); +} + +void +_pixman_implementation_combine_32_ca (pixman_implementation_t * imp, + pixman_op_t op, + uint32_t * dest, + const uint32_t * src, + const uint32_t * mask, + int width) +{ + (* imp->combine_32[op]) (imp, op, dest, src, mask, width); +} + +void +_pixman_implementation_combine_64_ca (pixman_implementation_t * imp, + pixman_op_t op, + uint64_t * dest, + const uint64_t * src, + const uint64_t * mask, + int width) +{ + (* imp->combine_64[op]) (imp, op, dest, src, mask, width); } void @@ -143,8 +191,8 @@ _pixman_implementation_composite (pixman_implementation_t * imp, int32_t width, int32_t height) { - (* imp->delegate->composite) (imp, op, - src, mask, dest, - src_x, src_y, mask_x, mask_y, dest_x, dest_y, - width, height); + (* imp->composite) (imp, op, + src, mask, dest, + src_x, src_y, mask_x, mask_y, dest_x, dest_y, + width, height); } diff --git a/pixman/pixman-pict.c b/pixman/pixman-pict.c index 9290824..a76ce21 100644 --- a/pixman/pixman-pict.c +++ b/pixman/pixman-pict.c @@ -129,10 +129,10 @@ pixman_image_composite (pixman_op_t op, if (!imp) imp = _pixman_implementation_create_general (NULL); - imp->composite (imp, op, - src, mask, dest, - src_x, src_y, - mask_x, mask_y, - dest_x, dest_y, - width, height); + _pixman_implementation_composite (imp, op, + src, mask, dest, + src_x, src_y, + mask_x, mask_y, + dest_x, dest_y, + width, height); } diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index 16c856b..c79d890 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -956,6 +956,20 @@ _pixman_implementation_combine_64 (pixman_implementation_t * imp, const uint64_t * mask, int width); void +_pixman_implementation_combine_32_ca (pixman_implementation_t * imp, + pixman_op_t op, + uint32_t * dest, + const uint32_t * src, + const uint32_t * mask, + int width); +void +_pixman_implementation_combine_64_ca (pixman_implementation_t * imp, + pixman_op_t op, + uint64_t * dest, + const uint64_t * src, + const uint64_t * mask, + int width); +void _pixman_implementation_composite (pixman_implementation_t * imp, pixman_op_t op, pixman_image_t * src, -- 2.7.4