diff options
Diffstat (limited to 'pixman/pixman/pixman-noop.c')
-rw-r--r-- | pixman/pixman/pixman-noop.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/pixman/pixman/pixman-noop.c b/pixman/pixman/pixman-noop.c index f4012d85b..d835de64f 100644 --- a/pixman/pixman/pixman-noop.c +++ b/pixman/pixman/pixman-noop.c @@ -76,6 +76,33 @@ noop_src_iter_init (pixman_implementation_t *imp, pixman_iter_t *iter) { iter->get_scanline = _pixman_iter_get_scanline_noop; } + else if (image->common.extended_format_code == PIXMAN_solid && + ((image->common.flags & (FAST_PATH_BITS_IMAGE | FAST_PATH_NO_ALPHA_MAP)) == + (FAST_PATH_BITS_IMAGE | FAST_PATH_NO_ALPHA_MAP))) + { + bits_image_t *bits = &image->bits; + + if (iter->flags & ITER_NARROW) + { + uint32_t color = bits->fetch_pixel_32 (bits, 0, 0); + uint32_t *buffer = iter->buffer; + uint32_t *end = buffer + iter->width; + + while (buffer < end) + *(buffer++) = color; + } + else + { + uint64_t color = bits->fetch_pixel_64 (bits, 0, 0); + uint64_t *buffer = (uint64_t *)iter->buffer; + uint64_t *end = buffer + iter->width; + + while (buffer < end) + *(buffer++) = color; + } + + iter->get_scanline = _pixman_iter_get_scanline_noop; + } else if (image->common.extended_format_code == PIXMAN_a8r8g8b8 && (iter->flags & ITER_NARROW) && (image->common.flags & FLAGS) == FLAGS && |