1428d7b3dSmrg#include <stdio.h> 2428d7b3dSmrg#include <stdlib.h> 3428d7b3dSmrg#include <string.h> 4428d7b3dSmrg#include <unistd.h> 5428d7b3dSmrg#include <sys/ipc.h> 6428d7b3dSmrg#include <sys/shm.h> 7428d7b3dSmrg 8428d7b3dSmrg#include "test.h" 9428d7b3dSmrg 10428d7b3dSmrgconst char *test_target_name(enum target target) 11428d7b3dSmrg{ 12428d7b3dSmrg switch (target) { 13428d7b3dSmrg default: 14428d7b3dSmrg case ROOT: return "root"; 15428d7b3dSmrg case CHILD: return "child"; 16428d7b3dSmrg case PIXMAP: return "pixmap"; 17428d7b3dSmrg } 18428d7b3dSmrg} 19428d7b3dSmrg 20428d7b3dSmrgvoid test_target_create_render(struct test_display *dpy, 21428d7b3dSmrg enum target target, 22428d7b3dSmrg struct test_target *tt) 23428d7b3dSmrg{ 24428d7b3dSmrg XSetWindowAttributes attr; 25428d7b3dSmrg XGCValues gcv; 26428d7b3dSmrg 27428d7b3dSmrg tt->dpy = dpy; 28428d7b3dSmrg tt->target = target; 29428d7b3dSmrg 30428d7b3dSmrg tt->draw = dpy->root; 31428d7b3dSmrg tt->format = dpy->format; 32428d7b3dSmrg tt->width = dpy->width; 33428d7b3dSmrg tt->height = dpy->height; 34428d7b3dSmrg tt->depth = dpy->depth; 35428d7b3dSmrg 36428d7b3dSmrg switch (target) { 37428d7b3dSmrg case ROOT: 38428d7b3dSmrg break; 39428d7b3dSmrg 40428d7b3dSmrg case CHILD: 41428d7b3dSmrg attr.override_redirect = 1; 42428d7b3dSmrg tt->width /= 4; 43428d7b3dSmrg tt->height /= 4; 44428d7b3dSmrg tt->draw = XCreateWindow(dpy->dpy, tt->draw, 45428d7b3dSmrg dpy->width/2, dpy->height/2, 46428d7b3dSmrg tt->width, tt->height, 47428d7b3dSmrg 0, tt->format->depth, 48428d7b3dSmrg InputOutput, 49428d7b3dSmrg DefaultVisual(dpy->dpy, 50428d7b3dSmrg DefaultScreen(dpy->dpy)), 51428d7b3dSmrg CWOverrideRedirect, &attr); 52428d7b3dSmrg XMapWindow(dpy->dpy, tt->draw); 53428d7b3dSmrg break; 54428d7b3dSmrg 55428d7b3dSmrg case PIXMAP: 56428d7b3dSmrg tt->format = XRenderFindStandardFormat(dpy->dpy, PictStandardARGB32); 57428d7b3dSmrg tt->draw = XCreatePixmap(dpy->dpy, tt->draw, 58428d7b3dSmrg dpy->width, dpy->height, 59428d7b3dSmrg tt->format->depth); 60428d7b3dSmrg tt->depth = 32; 61428d7b3dSmrg break; 62428d7b3dSmrg } 63428d7b3dSmrg 64428d7b3dSmrg tt->picture = 65428d7b3dSmrg XRenderCreatePicture(dpy->dpy, tt->draw, tt->format, 0, NULL); 66428d7b3dSmrg 67428d7b3dSmrg gcv.graphics_exposures = 0; 68428d7b3dSmrg tt->gc = XCreateGC(dpy->dpy, tt->draw, GCGraphicsExposures, &gcv); 69428d7b3dSmrg} 70428d7b3dSmrg 71428d7b3dSmrgvoid test_target_destroy_render(struct test_display *dpy, 72428d7b3dSmrg struct test_target *tt) 73428d7b3dSmrg{ 74428d7b3dSmrg XRenderFreePicture(dpy->dpy, tt->picture); 75428d7b3dSmrg switch (tt->target) { 76428d7b3dSmrg case ROOT: 77428d7b3dSmrg break; 78428d7b3dSmrg case CHILD: 79428d7b3dSmrg XDestroyWindow(dpy->dpy, tt->draw); 80428d7b3dSmrg break; 81428d7b3dSmrg case PIXMAP: 82428d7b3dSmrg XFreePixmap(dpy->dpy, tt->draw); 83428d7b3dSmrg break; 84428d7b3dSmrg } 85428d7b3dSmrg} 86428d7b3dSmrg 87428d7b3dSmrg#if 0 88428d7b3dSmrgstatic int random_bool(void) 89428d7b3dSmrg{ 90428d7b3dSmrg return rand() > RAND_MAX/2; 91428d7b3dSmrg} 92428d7b3dSmrg 93428d7b3dSmrgstatic Picture create_alpha_map(void) 94428d7b3dSmrg{ 95428d7b3dSmrg return 0; 96428d7b3dSmrg} 97428d7b3dSmrg 98428d7b3dSmrgstatic Pixmap create_clip_mask(void) 99428d7b3dSmrg{ 100428d7b3dSmrg return 0; 101428d7b3dSmrg} 102428d7b3dSmrg 103428d7b3dSmrgunsigned int test_render_randomize_picture_attributes(XRenderPictureAttributes *pa) 104428d7b3dSmrg{ 105428d7b3dSmrg unsigned int flags = 0; 106428d7b3dSmrg 107428d7b3dSmrg memset(pa, 0, sizeof(*pa)); 108428d7b3dSmrg 109428d7b3dSmrg if (random_bool()) { 110428d7b3dSmrg pa->repeat = repeat_modes[rand() % ARRAY_SIZE(repeat_modes)]; 111428d7b3dSmrg flags |= CPRepeat; 112428d7b3dSmrg 113428d7b3dSmrg } 114428d7b3dSmrg 115428d7b3dSmrg if (random_bool()) { 116428d7b3dSmrg pa->alpha_map = create_alpha_map(); 117428d7b3dSmrg pa->alpha_x_origin = rand() % 1024; 118428d7b3dSmrg pa->alpha_y_origin = rand() % 1024; 119428d7b3dSmrg flags |= CPAlphaMap; 120428d7b3dSmrg } 121428d7b3dSmrg 122428d7b3dSmrg if (random_bool()) { 123428d7b3dSmrg pa->clip_mask = create_clip_mask(); 124428d7b3dSmrg pa->clip_x_orgin = rand() % 1024; 125428d7b3dSmrg pa->clip_y_orgin = rand() % 1024; 126428d7b3dSmrg flags |= CPClipMask; 127428d7b3dSmrg } 128428d7b3dSmrg 129428d7b3dSmrg if (random_bool()) { 130428d7b3dSmrg pa->subwindow_mode = random_bool(); 131428d7b3dSmrg flags |= CPSubwindowMode; 132428d7b3dSmrg } 133428d7b3dSmrg 134428d7b3dSmrg if (random_bool()) { 135428d7b3dSmrg pa->poly_edge = random_bool(); 136428d7b3dSmrg flags |= CPPolyEdge; 137428d7b3dSmrg } 138428d7b3dSmrg 139428d7b3dSmrg if (random_bool()) { 140428d7b3dSmrg pa->poly_mode = random_bool(); 141428d7b3dSmrg flags |= CPPolyMode; 142428d7b3dSmrg } 143428d7b3dSmrg 144428d7b3dSmrg if (random_bool()) { 145428d7b3dSmrg pa->component_alpha = random_bool(); 146428d7b3dSmrg flags |= CPComponentAlpha; 147428d7b3dSmrg } 148428d7b3dSmrg 149428d7b3dSmrg return flags; 150428d7b3dSmrg} 151428d7b3dSmrg#endif 152