comparison src/video/x11/SDL_x11shape.c @ 4807:c9eb95f29770

Added color-key mode and redid the code to work with it.
author Eli Gottlieb <eligottlieb@gmail.com>
date Thu, 22 Jul 2010 23:11:01 -0400
parents f14a8c05f5bb
children 329708ffe2a7
comparison
equal deleted inserted replaced
4806:007567dbb8c1 4807:c9eb95f29770
30 30
31 #if SDL_VIDEO_DRIVER_X11_XSHAPE 31 #if SDL_VIDEO_DRIVER_X11_XSHAPE
32 if (SDL_X11_HAVE_XSHAPE) { /* Make sure X server supports it. */ 32 if (SDL_X11_HAVE_XSHAPE) { /* Make sure X server supports it. */
33 result = malloc(sizeof(SDL_WindowShaper)); 33 result = malloc(sizeof(SDL_WindowShaper));
34 result->window = window; 34 result->window = window;
35 result->alphacutoff = 0; 35 result->mode.mode = ShapeModeDefault;
36 result->mode.parameters.binarizationCutoff = 1;
36 result->usershownflag = 0; 37 result->usershownflag = 0;
37 SDL_ShapeData* data = malloc(sizeof(SDL_ShapeData)); 38 SDL_ShapeData* data = malloc(sizeof(SDL_ShapeData));
38 result->driverdata = data; 39 result->driverdata = data;
39 data->bitmapsize = 0; 40 data->bitmapsize = 0;
40 data->bitmap = NULL; 41 data->bitmap = NULL;
63 if(data->bitmap == NULL) { 64 if(data->bitmap == NULL) {
64 SDL_SetError("Could not allocate memory for shaped-window bitmap."); 65 SDL_SetError("Could not allocate memory for shaped-window bitmap.");
65 return -1; 66 return -1;
66 } 67 }
67 } 68 }
69 else
70 memset(data->bitmap,0,data->bitmapsize);
68 71
69 window->shaper->usershownflag |= window->flags & SDL_WINDOW_SHOWN; 72 window->shaper->usershownflag |= window->flags & SDL_WINDOW_SHOWN;
70 73
71 return 0; 74 return 0;
72 } 75 }
81 if(shape->w != shaper->window->w || shape->h != shaper->window->h) 84 if(shape->w != shaper->window->w || shape->h != shaper->window->h)
82 return -3; 85 return -3;
83 SDL_ShapeData *data = shaper->driverdata; 86 SDL_ShapeData *data = shaper->driverdata;
84 87
85 /* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */ 88 /* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */
86 SDL_CalculateShapeBitmap(shaper->alphacutoff,shape,data->bitmap,8,1); 89 SDL_CalculateShapeBitmap(shaper->mode,shape,data->bitmap,8,1);
87 90
88 SDL_WindowData *windowdata = (SDL_WindowData*)(shaper->window->driverdata); 91 SDL_WindowData *windowdata = (SDL_WindowData*)(shaper->window->driverdata);
89 Pixmap shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h); 92 Pixmap shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
90 93
91 XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet); 94 XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);