kwo pushed a commit to branch master. http://git.enlightenment.org/e16/e16.git/commit/?id=faf6393a8bb3bfea8f7aa20b85e67147afbad989
commit faf6393a8bb3bfea8f7aa20b85e67147afbad989 Author: Kim Woelders <k...@woelders.dk> Date: Tue Dec 8 16:11:12 2020 +0100 Introduce EImageDefineCursor() --- src/eimage.c | 25 +++++++++++++++++++++++++ src/eimage.h | 2 ++ src/extinitwin.c | 17 +---------------- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/eimage.c b/src/eimage.c index 1817acf0..9487d6ac 100644 --- a/src/eimage.c +++ b/src/eimage.c @@ -681,3 +681,28 @@ PmapMaskFree(PmapMask * pmm) pmm->mask = 0; } } + +#if USE_XRENDER + +EX_Cursor +EImageDefineCursor(EImage * im, int xh, int yh) +{ + EX_Cursor curs; + int w, h; + EX_Pixmap pmap; + EX_Picture pict; + + EImageGetSize(im, &w, &h); + + pict = EPictureCreateBuffer(VROOT, w, h, 1, &pmap); + + EImageRenderOnDrawableARGB(im, pmap, w, h); + EFreePixmap(pmap); + + curs = XRenderCreateCursor(disp, pict, xh, yh); + XRenderFreePicture(disp, pict); + + return curs; +} + +#endif /* USE_COMPOSITE */ diff --git a/src/eimage.h b/src/eimage.h index 2d9a64d5..899d937c 100644 --- a/src/eimage.h +++ b/src/eimage.h @@ -116,6 +116,8 @@ void ScaleTile(Win wsrc, EX_Drawable src, Win wdst, EX_Pixmap dst, int dx, int dy, int dw, int dh, int flags); +EX_Cursor EImageDefineCursor(EImage * im, int xh, int yh); + void EDrawableDumpImage(EX_Drawable draw, const char *txt); EImage *ThemeImageLoad(const char *file); diff --git a/src/extinitwin.c b/src/extinitwin.c index 1c56c384..da1fc0bb 100644 --- a/src/extinitwin.c +++ b/src/extinitwin.c @@ -47,8 +47,6 @@ typedef struct { typedef void (EiwLoopFunc) (EX_Window win, EImage * im, EiwData * d); #if USE_EIWC_RENDER -#include <Imlib2.h> - static void _eiw_render_loop(EX_Window win, EImage * im, EiwData * d); static EiwLoopFunc * @@ -62,7 +60,6 @@ _eiw_render_init(EX_Window win __UNUSED__, EiwData * d) if (!vis) return NULL; - imlib_context_set_visual(vis); d->curs = NoXID; return _eiw_render_loop; @@ -72,24 +69,12 @@ static void _eiw_render_loop(EX_Window win, EImage * im, EiwData * d) { int w, h; - XRenderPictFormat *pictfmt; - EX_Pixmap pmap; - EX_Picture pict; EImageGetSize(im, &w, &h); - pictfmt = XRenderFindStandardFormat(disp, PictStandardARGB32); - pmap = XCreatePixmap(disp, WinGetXwin(RROOT), w, h, 32); - imlib_context_set_image(im); - imlib_context_set_drawable(pmap); - imlib_render_image_on_drawable(0, 0); - pict = XRenderCreatePicture(disp, pmap, pictfmt, 0, 0); - XFreePixmap(disp, pmap); - if (d->curs != NoXID) XFreeCursor(disp, d->curs); - d->curs = XRenderCreateCursor(disp, pict, w / 2, h / 2); - XRenderFreePicture(disp, pict); + d->curs = EImageDefineCursor(im, w / 2, h / 2); XDefineCursor(disp, win, d->curs); } --