From e0c7948c970b816f323a6402241ca70fa855c12c Mon Sep 17 00:00:00 2001 From: Siarhei Siamashka Date: Thu, 29 Jul 2010 17:58:13 +0300 Subject: [PATCH] New flags for 90/180/270 rotation These flags are set when the transform is a simple nonscaled 90/180/270 degrees rotation. --- pixman/pixman-image.c | 17 +++++++++++++++++ pixman/pixman-private.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/pixman/pixman-image.c b/pixman/pixman-image.c index a72299b..e91d87c 100644 --- a/pixman/pixman-image.c +++ b/pixman/pixman-image.c @@ -211,8 +211,25 @@ compute_image_info (pixman_image_t *image) if (image->common.transform->matrix[0][1] == 0 && image->common.transform->matrix[1][0] == 0) { + if (image->common.transform->matrix[0][0] == -pixman_fixed_1 && + image->common.transform->matrix[1][1] == -pixman_fixed_1) + { + flags |= FAST_PATH_ROTATE_180_TRANSFORM; + } flags |= FAST_PATH_SCALE_TRANSFORM; } + else if (image->common.transform->matrix[0][0] == 0 && + image->common.transform->matrix[1][1] == 0) + { + pixman_fixed_t m01 = image->common.transform->matrix[0][1]; + if (m01 == -image->common.transform->matrix[1][0]) + { + if (m01 == -pixman_fixed_1) + flags |= FAST_PATH_ROTATE_90_TRANSFORM; + else if (m01 == pixman_fixed_1) + flags |= FAST_PATH_ROTATE_270_TRANSFORM; + } + } } if (image->common.transform->matrix[0][0] > 0) diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h index f5d0ba1..1473dc4 100644 --- a/pixman/pixman-private.h +++ b/pixman/pixman-private.h @@ -611,6 +611,9 @@ _pixman_iter_get_scanline_noop (pixman_iter_t *iter, const uint32_t *mask); #define FAST_PATH_AFFINE_TRANSFORM (1 << 18) #define FAST_PATH_Y_UNIT_ZERO (1 << 19) #define FAST_PATH_BILINEAR_FILTER (1 << 20) +#define FAST_PATH_ROTATE_90_TRANSFORM (1 << 21) +#define FAST_PATH_ROTATE_180_TRANSFORM (1 << 22) +#define FAST_PATH_ROTATE_270_TRANSFORM (1 << 23) #define FAST_PATH_PAD_REPEAT \ (FAST_PATH_NO_NONE_REPEAT | \ -- 2.7.4