kwo pushed a commit to branch master. http://git.enlightenment.org/legacy/imlib2.git/commit/?id=b0f3bfc907e74d3253cfbdf93a9228551e25781b
commit b0f3bfc907e74d3253cfbdf93a9228551e25781b Author: Kim Woelders <k...@woelders.dk> Date: Thu Nov 25 09:32:23 2021 +0100 test_grab: Enable testing depths other than 24 and 32 Also test with/without using a mask when grabbing (just a "full" one for now to hit different grabber paths). --- test/test_grab.cpp | 169 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 61 deletions(-) diff --git a/test/test_grab.cpp b/test/test_grab.cpp index cee8550..5158187 100644 --- a/test/test_grab.cpp +++ b/test/test_grab.cpp @@ -15,8 +15,12 @@ typedef struct { Visual *argb_vis; Colormap argb_cmap; int depth; - int scale; + const char *test; + int scale; + bool do_mask; + + unsigned int color; } xd_t; static xd_t xd; @@ -49,12 +53,13 @@ _x11_vis_argb(void) XFree(xvi); xd.argb_vis = vis; - xd.argb_cmap = XCreateColormap(xd.dpy, xd.root, vis, AllocNone); + xd.argb_cmap = + (vis) ? XCreateColormap(xd.dpy, xd.root, vis, AllocNone) : None; return vis; } -static void +static int _x11_init(int depth) { xd.dpy = XOpenDisplay(NULL); @@ -64,11 +69,21 @@ _x11_init(int depth) exit(1); } + if (depth != 32) + depth = DefaultDepth(xd.dpy, DefaultScreen(xd.dpy)); + xd.depth = depth; + xd.root = DefaultRootWindow(xd.dpy); if (depth == 32) { xd.vis = _x11_vis_argb(); xd.cmap = xd.argb_cmap; + if (!xd.vis) + { + fprintf(stderr, "No 32 bit depthh visual\n"); + return 1; + } + } else { @@ -79,6 +94,8 @@ _x11_init(int depth) imlib_context_set_display(xd.dpy); imlib_context_set_visual(xd.vis); imlib_context_set_colormap(xd.cmap); + + return 0; } static void @@ -93,10 +110,44 @@ _pmap_mk_fill_solid(int w, int h, unsigned int color) XGCValues gcv; GC gc; Pixmap pmap; + XColor xc; + + xc.red = ((color >> 16) & 0xff) * 0x101; + xc.green = ((color >> 8) & 0xff) * 0x101; + xc.blue = ((color >> 0) & 0xff) * 0x101; + XAllocColor(xd.dpy, xd.cmap, &xc); + D("color RGB = %#06x %#06x %#06x %#08lx\n", + xc.red, xc.green, xc.blue, xc.pixel); +#if 0 + xc.red = xc.green = xc.blue = 0; + XQueryColor(xd.dpy, xd.cmap, &xc); + D("color RGB = %#06x %#06x %#06x %#08lx\n", + xc.red, xc.green, xc.blue, xc.pixel); +#endif pmap = XCreatePixmap(xd.dpy, xd.root, w, h, xd.depth); - gcv.foreground = color; + gcv.foreground = xc.pixel; + gcv.graphics_exposures = False; + gc = XCreateGC(xd.dpy, pmap, GCForeground | GCGraphicsExposures, &gcv); + + XFillRectangle(xd.dpy, pmap, gc, 0, 0, w, h); + + XFreeGC(xd.dpy, gc); + + return pmap; +} + +static Pixmap +_pmap_mk_mask(int w, int h, int x, int y) +{ + XGCValues gcv; + GC gc; + Pixmap pmap; + + pmap = XCreatePixmap(xd.dpy, xd.root, w, h, 1); + + gcv.foreground = 1; gcv.graphics_exposures = False; gc = XCreateGC(xd.dpy, pmap, GCForeground | GCGraphicsExposures, &gcv); @@ -118,8 +169,6 @@ _img_dump(Imlib_Image im, const char *file) imlib_save_image(buf); } -DATA32 color = 0; - static void _test_grab_1(int w, int h, int x0, int y0) { @@ -128,6 +177,7 @@ _test_grab_1(int w, int h, int x0, int y0) int x, y, err; int xs, ys, ws, hs; char buf[128]; + Pixmap mask; xs = x0; ws = w; @@ -151,11 +201,17 @@ _test_grab_1(int w, int h, int x0, int y0) D("%s: %3dx%3d(%3d,%3d) -> %3dx%3d(%d,%d)\n", __func__, w, h, x0, y0, ws, hs, xs, ys); + mask = xd.do_mask ? _pmap_mk_mask(w, h, 0, 0) : None; + if (xd.scale == 0) - im = imlib_create_image_from_drawable(None, x0, y0, w, h, 0); + im = imlib_create_image_from_drawable(mask, x0, y0, w, h, 0); else - im = imlib_create_scaled_image_from_drawable(None, x0, y0, w, h, + im = imlib_create_scaled_image_from_drawable(mask, x0, y0, w, h, ws, hs, 0, 0); + + if (mask != None) + XFreePixmap(xd.dpy, mask); + imlib_context_set_image(im); snprintf(buf, sizeof(buf), "%s/%s-%%d.png", IMG_GEN, xd.test); _img_dump(im, buf); @@ -178,7 +234,7 @@ _test_grab_1(int w, int h, int x0, int y0) } else { - col = color; + col = xd.color; } if (pix != col) { @@ -195,23 +251,27 @@ _test_grab_1(int w, int h, int x0, int y0) } static void -_test_grab(const char *test, int depth, int scale, int opt) +_test_grab_2(const char *test, int depth, int scale, int opt) { Pixmap pmap; int w, h, d; - color = 0xffff0000; + D("%s: %s\n", __func__, test); - _x11_init(depth); + xd.color = 0xff0000ff; // B ok + xd.color = 0xff00ff00; // G ok + xd.color = 0xffff0000; // R ok + + if (_x11_init(depth)) + return; - xd.depth = depth; xd.scale = scale; xd.test = test; w = 32; h = 45; - pmap = _pmap_mk_fill_solid(w, h, color); + pmap = _pmap_mk_fill_solid(w, h, xd.color); imlib_context_set_drawable(pmap); switch (opt) @@ -241,82 +301,69 @@ _test_grab(const char *test, int depth, int scale, int opt) _x11_fini(); } -TEST(GRAB, grab_noof_24_s0) -{ - _test_grab("grab_noof_24_s0", 24, 0, 0); -} - -TEST(GRAB, grab_noof_24_s1) +static void +_test_grab(const char *test, int scale, int opt) { - _test_grab("grab_noof_24_s1", 24, 1, 0); -} + char buf[64]; + int depth; -TEST(GRAB, grab_noof_24_su2) -{ - _test_grab("grab_noof_24_su2", 24, 2, 0); -} + xd.do_mask = false; -TEST(GRAB, grab_noof_24_sd2) -{ - _test_grab("grab_noof_24_sd2", 24, -2, 0); -} + depth = 24; + snprintf(buf, sizeof(buf), "%s_d%02d_s%d_o%d", test, depth, scale, opt); + _test_grab_2(buf, depth, scale, opt); -TEST(GRAB, grab_noof_32_s0) -{ - _test_grab("grab_noof_32_s0", 32, 0, 0); -} + depth = 32; + snprintf(buf, sizeof(buf), "%s_d%02d_s%d_o%d", test, depth, scale, opt); + _test_grab_2(buf, 32, scale, opt); -TEST(GRAB, grab_noof_32_s1) -{ - _test_grab("grab_noof_32_s1", 32, 1, 0); -} + xd.do_mask = true; -TEST(GRAB, grab_noof_32_su2) -{ - _test_grab("grab_noof_32_su2", 32, 2, 0); -} + depth = 24; + snprintf(buf, sizeof(buf), "%s_d%02d_s%d_o%d_m", test, depth, scale, opt); + _test_grab_2(buf, depth, scale, opt); -TEST(GRAB, grab_noof_32_sd2) -{ - _test_grab("grab_noof_32_sd2", 32, -2, 0); + depth = 32; + snprintf(buf, sizeof(buf), "%s_d%02d_s%d_o%d_m", test, depth, scale, opt); + _test_grab_2(buf, 32, scale, opt); } -TEST(GRAB, grab_offs_24_s0) +TEST(GRAB, grab_noof_s0) { - _test_grab("grab_offs_24_s0", 24, 0, 1); + _test_grab("grab_noof", 0, 0); } -TEST(GRAB, grab_offs_24_s1) +TEST(GRAB, grab_noof_s1) { - _test_grab("grab_offs_24_s1", 24, 1, 1); + _test_grab("grab_noof", 1, 0); } -TEST(GRAB, grab_offs_24_su2) +TEST(GRAB, grab_noof_su2) { - _test_grab("grab_offs_24_su2", 24, 2, 1); + _test_grab("grab_noof", 2, 0); } -TEST(GRAB, grab_offs_24_sd2) +TEST(GRAB, grab_noof_sd2) { - _test_grab("grab_offs_24_sd2", 24, -2, 1); + _test_grab("grab_noof", -2, 0); } -TEST(GRAB, grab_offs_32_s0) +TEST(GRAB, grab_offs_s0) { - _test_grab("grab_offs_32_s0", 32, 0, 1); + _test_grab("grab_offs", 0, 1); } -TEST(GRAB, grab_offs_32_s1) +TEST(GRAB, grab_offs_s1) { - _test_grab("grab_offs_32_s1", 32, 1, 1); + _test_grab("grab_offs", 1, 1); } -TEST(GRAB, grab_offs_32_su2) +TEST(GRAB, grab_offs_su2) { - _test_grab("grab_offs_32_su2", 32, 2, 1); + _test_grab("grab_offs", 2, 1); } -TEST(GRAB, grab_offs_32_sd2) +TEST(GRAB, grab_offs_sd2) { - _test_grab("grab_offs_32_sd2", 32, -2, 1); + _test_grab("grab_offs", -2, 1); } --