Mercurial > sdl-ios-xcode
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); |