X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fvideo%2Fsoftcursor.c;h=13a4511539a15b548e0e065eb37fa2f158d9c715;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=7637dc870a8095e90df987aae733231c07ac855f;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/video/softcursor.c b/drivers/video/softcursor.c index 7637dc870..13a451153 100644 --- a/drivers/video/softcursor.c +++ b/drivers/video/softcursor.c @@ -19,79 +19,54 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor) { - unsigned int scan_align = info->sprite.scan_align - 1; - unsigned int buf_align = info->sprite.buf_align - 1; + unsigned int scan_align = info->pixmap.scan_align - 1; + unsigned int buf_align = info->pixmap.buf_align - 1; unsigned int i, size, dsize, s_pitch, d_pitch; - struct fb_cursor *cur; + struct fb_image *image; u8 *dst, *src; - if (cursor->set & FB_CUR_SETSIZE) { - info->cursor.image.height = cursor->image.height; - info->cursor.image.width = cursor->image.width; - } - - if (cursor->set & FB_CUR_SETPOS) { - info->cursor.image.dx = cursor->image.dx; - info->cursor.image.dy = cursor->image.dy; - } - - if (cursor->set & FB_CUR_SETHOT) - info->cursor.hot = cursor->hot; - - if (cursor->set & FB_CUR_SETCMAP) { - if (cursor->image.depth == 1) { - info->cursor.image.bg_color = cursor->image.bg_color; - info->cursor.image.fg_color = cursor->image.fg_color; - } else { - if (cursor->image.cmap.len) - fb_copy_cmap(&cursor->image.cmap, &info->cursor.image.cmap); - } - info->cursor.image.depth = cursor->image.depth; - } - - info->cursor.image.data = cursor->image.data; - if (info->state != FBINFO_STATE_RUNNING) return 0; - src = kmalloc(64 + sizeof(struct fb_cursor), GFP_ATOMIC); + s_pitch = (cursor->image.width + 7) >> 3; + dsize = s_pitch * cursor->image.height; + + src = kmalloc(dsize + sizeof(struct fb_image), GFP_ATOMIC); if (!src) return -ENOMEM; - cur = (struct fb_cursor *) (src + 64); - *cur = info->cursor; - s_pitch = (info->cursor.image.width + 7) >> 3; - dsize = s_pitch * info->cursor.image.height; + image = (struct fb_image *) (src + dsize); + *image = cursor->image; d_pitch = (s_pitch + scan_align) & ~scan_align; - size = d_pitch * info->cursor.image.height + buf_align; + + size = d_pitch * image->height + buf_align; size &= ~buf_align; - dst = fb_get_buffer_offset(info, &info->sprite, size); + dst = fb_get_buffer_offset(info, &info->pixmap, size); - if (info->cursor.enable) { - switch (info->cursor.rop) { + if (cursor->enable) { + switch (cursor->rop) { case ROP_XOR: for (i = 0; i < dsize; i++) - src[i] = cursor->image.data[i] ^ info->cursor.mask[i]; + src[i] = image->data[i] ^ cursor->mask[i]; break; case ROP_COPY: default: for (i = 0; i < dsize; i++) - src[i] = cursor->image.data[i] & info->cursor.mask[i]; + src[i] = image->data[i] & cursor->mask[i]; break; } } else - memcpy(src, cursor->image.data, dsize); + memcpy(src, image->data, dsize); - if (info->sprite.outbuf) - fb_iomove_buf_aligned(info, &info->sprite, dst, d_pitch, src, - s_pitch, info->cursor.image.height); + if (info->pixmap.outbuf) + fb_iomove_buf_aligned(info, &info->pixmap, dst, d_pitch, src, + s_pitch, image->height); else - fb_sysmove_buf_aligned(info, &info->sprite, dst, d_pitch, src, - s_pitch, info->cursor.image.height); - cur->image.data = dst; - - info->fbops->fb_imageblit(info, &cur->image); + fb_sysmove_buf_aligned(info, &info->pixmap, dst, d_pitch, src, + s_pitch, image->height); + image->data = dst; + info->fbops->fb_imageblit(info, image); kfree(src); return 0;