~ubuntu-branches/ubuntu/trusty/libsdl2/trusty-proposed

« back to all changes in this revision

Viewing changes to src/video/x11/SDL_x11shape.c

  • Committer: Package Import Robot
  • Author(s): Manuel A. Fernandez Montecelo
  • Date: 2013-12-28 12:31:19 UTC
  • mto: (7.1.3 sid)
  • mto: This revision was merged to the branch mainline in revision 7.
  • Revision ID: package-import@ubuntu.com-20131228123119-wehupm72qsjvh6vz
Tags: upstream-2.0.1+dfsg1
ImportĀ upstreamĀ versionĀ 2.0.1+dfsg1

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
SDL_WindowShaper*
37
37
X11_CreateShaper(SDL_Window* window) {
38
38
    SDL_WindowShaper* result = NULL;
 
39
    SDL_ShapeData* data = NULL;
 
40
    int resized_properly;
39
41
 
40
42
#if SDL_VIDEO_DRIVER_X11_XSHAPE
41
43
    if (SDL_X11_HAVE_XSHAPE) {  /* Make sure X server supports it. */
44
46
        result->mode.mode = ShapeModeDefault;
45
47
        result->mode.parameters.binarizationCutoff = 1;
46
48
        result->userx = result->usery = 0;
47
 
        SDL_ShapeData* data = SDL_malloc(sizeof(SDL_ShapeData));
 
49
        data = SDL_malloc(sizeof(SDL_ShapeData));
48
50
        result->driverdata = data;
49
51
        data->bitmapsize = 0;
50
52
        data->bitmap = NULL;
51
53
        window->shaper = result;
52
 
        int resized_properly = X11_ResizeWindowShape(window);
 
54
        resized_properly = X11_ResizeWindowShape(window);
53
55
        SDL_assert(resized_properly == 0);
54
56
    }
55
57
#endif
60
62
int
61
63
X11_ResizeWindowShape(SDL_Window* window) {
62
64
    SDL_ShapeData* data = window->shaper->driverdata;
 
65
    unsigned int bitmapsize = window->w / 8;
63
66
    SDL_assert(data != NULL);
64
67
 
65
 
    unsigned int bitmapsize = window->w / 8;
66
68
    if(window->w % 8 > 0)
67
69
        bitmapsize += 1;
68
70
    bitmapsize *= window->h;
86
88
 
87
89
int
88
90
X11_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode) {
 
91
    SDL_ShapeData *data = NULL;
 
92
    SDL_WindowData *windowdata = NULL;
 
93
    Pixmap shapemask;
 
94
    
89
95
    if(shaper == NULL || shape == NULL || shaper->driverdata == NULL)
90
96
        return -1;
91
97
 
94
100
        return -2;
95
101
    if(shape->w != shaper->window->w || shape->h != shaper->window->h)
96
102
        return -3;
97
 
    SDL_ShapeData *data = shaper->driverdata;
 
103
    data = shaper->driverdata;
98
104
 
99
105
    /* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */
100
106
    SDL_CalculateShapeBitmap(shaper->mode,shape,data->bitmap,8);
101
107
 
102
 
    SDL_WindowData *windowdata = (SDL_WindowData*)(shaper->window->driverdata);
103
 
    Pixmap shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
104
 
 
105
 
    XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);
106
 
    XSync(windowdata->videodata->display,False);
107
 
 
108
 
    XFreePixmap(windowdata->videodata->display,shapemask);
 
108
    windowdata = (SDL_WindowData*)(shaper->window->driverdata);
 
109
    shapemask = X11_XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
 
110
 
 
111
    X11_XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);
 
112
    X11_XSync(windowdata->videodata->display,False);
 
113
 
 
114
    X11_XFreePixmap(windowdata->videodata->display,shapemask);
109
115
#endif
110
116
 
111
117
    return 0;