zenilib: zenilib/jni/external/sdl/src/video/x11/SDL_x11shape.c Source File

zenilib 0.5.3.0

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
SDL_x11shape.c
Go to the documentation of this file.
1 /*
2 Simple DirectMedia Layer
3 Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
4
5 This software is provided 'as-is', without any express or implied
6 warranty. In no event will the authors be held liable for any damages
7 arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose,
10 including commercial applications, and to alter it and redistribute it
11 freely, subject to the following restrictions:
12
13 1. The origin of this software must not be misrepresented; you must not
14 claim that you wrote the original software. If you use this software
15 in a product, an acknowledgment in the product documentation would be
16 appreciated but is not required.
17 2. Altered source versions must be plainly marked as such, and must not be
18 misrepresented as being the original software.
19 3. This notice may not be removed or altered from any source distribution.
20 */
21 #include "SDL_config.h"
22
23 #if SDL_VIDEO_DRIVER_X11
24
25 #include "SDL_assert.h"
26 #include "SDL_x11video.h"
27 #include "SDL_x11shape.h"
28 #include "SDL_x11window.h"
29 #include "../SDL_shape_internals.h"
30
31 SDL_Window*
32 X11_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags) {
33 return SDL_CreateWindow(title,x,y,w,h,flags);
34 }
35
36 SDL_WindowShaper*
37 X11_CreateShaper(SDL_Window* window) {
38 SDL_WindowShaper* result = NULL;
39 SDL_ShapeData* data = NULL;
40 int resized_properly;
41
42 #if SDL_VIDEO_DRIVER_X11_XSHAPE
43 if (SDL_X11_HAVE_XSHAPE) { /* Make sure X server supports it. */
44 result = malloc(sizeof(SDL_WindowShaper));
45 result->window = window;
46 result->mode.mode = ShapeModeDefault;
47 result->mode.parameters.binarizationCutoff = 1;
48 result->userx = result->usery = 0;
49 data = SDL_malloc(sizeof(SDL_ShapeData));
50 result->driverdata = data;
51 data->bitmapsize = 0;
52 data->bitmap = NULL;
53 window->shaper = result;
54 resized_properly = X11_ResizeWindowShape(window);
55 SDL_assert(resized_properly == 0);
56 }
57 #endif
58
59 return result;
60 }
61
62 int
63 X11_ResizeWindowShape(SDL_Window* window) {
64 SDL_ShapeData* data = window->shaper->driverdata;
65 unsigned int bitmapsize = window->w / 8;
66 SDL_assert(data != NULL);
67
68 if(window->w % 8 > 0)
69 bitmapsize += 1;
70 bitmapsize *= window->h;
71 if(data->bitmapsize != bitmapsize || data->bitmap == NULL) {
72 data->bitmapsize = bitmapsize;
73 if(data->bitmap != NULL)
74 free(data->bitmap);
75 data->bitmap = malloc(data->bitmapsize);
76 if(data->bitmap == NULL) {
77 return SDL_SetError("Could not allocate memory for shaped-window bitmap.");
78 }
79 }
80 memset(data->bitmap,0,data->bitmapsize);
81
82 window->shaper->userx = window->x;
83 window->shaper->usery = window->y;
84 SDL_SetWindowPosition(window,-1000,-1000);
85
86 return 0;
87 }
88
89 int
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
95 if(shaper == NULL || shape == NULL || shaper->driverdata == NULL)
96 return -1;
97
98 #if SDL_VIDEO_DRIVER_X11_XSHAPE
99 if(shape->format->Amask == 0 && SDL_SHAPEMODEALPHA(shape_mode->mode))
100 return -2;
101 if(shape->w != shaper->window->w || shape->h != shaper->window->h)
102 return -3;
103 data = shaper->driverdata;
104
105 /* Assume that shaper->alphacutoff already has a value, because SDL_SetWindowShape() should have given it one. */
106 SDL_CalculateShapeBitmap(shaper->mode,shape,data->bitmap,8);
107
108 windowdata = (SDL_WindowData*)(shaper->window->driverdata);
109 shapemask = XCreateBitmapFromData(windowdata->videodata->display,windowdata->xwindow,data->bitmap,shaper->window->w,shaper->window->h);
110
111 XShapeCombineMask(windowdata->videodata->display,windowdata->xwindow, ShapeBounding, 0, 0,shapemask, ShapeSet);
112 XSync(windowdata->videodata->display,False);
113
114 XFreePixmap(windowdata->videodata->display,shapemask);
115 #endif
116
117 return 0;
118 }
119
120 #endif /* SDL_VIDEO_DRIVER_X11 */
121
SDL_VideoData::display
Display * display
Definition: SDL_x11video.h:75
SDL_ShapeData::bitmap
void * bitmap
Definition: SDL_x11shape.h:31
X11_ResizeWindowShape
int X11_ResizeWindowShape(SDL_Window *window)
h
GLfloat GLfloat GLfloat GLfloat h
Definition: glew.h:7294
SDL_Window::w
int w
Definition: SDL_sysvideo.h:78
NULL
#define NULL
Definition: ftobjs.h:61
SDL_Surface::h
int h
Definition: SDL_surface.h:73
SDL_ShapeData::bitmapsize
Uint32 bitmapsize
Definition: SDL_x11shape.h:32
SDL_Window::x
int x
Definition: SDL_sysvideo.h:77
SDL_WindowData::xwindow
Window xwindow
Definition: SDL_x11window.h:47
X11_SetWindowShape
int X11_SetWindowShape(SDL_WindowShaper *shaper, SDL_Surface *shape, SDL_WindowShapeMode *shapeMode)
x
EGLSurface EGLint x
Definition: eglext.h:293
free
SDL_EventEntry * free
Definition: SDL_events.c:80
SDL_Surface
A collection of pixels used in software blitting.
Definition: SDL_surface.h:69
SDL_WindowShaper::driverdata
void * driverdata
Definition: SDL_sysvideo.h:52
memset
#define memset
Definition: SDL_malloc.c:633
SDL_x11window.h
SDL_SHAPEMODEALPHA
#define SDL_SHAPEMODEALPHA(mode)
Definition: SDL_shape.h:90
SDL_ShapeData
Definition: SDL_cocoashape.h:32
SDL_Surface::w
int w
Definition: SDL_surface.h:73
SDL_WindowShaper
Definition: SDL_sysvideo.h:38
SDL_config.h
SDL_WindowData
Definition: SDL_androidwindow.h:33
X11_CreateShapedWindow
SDL_Window * X11_CreateShapedWindow(const char *title, unsigned int x, unsigned int y, unsigned int w, unsigned int h, Uint32 flags)
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:145
SDL_x11shape.h
SDL_WindowShaper::mode
SDL_WindowShapeMode mode
Definition: SDL_sysvideo.h:47
result
GLuint64EXT * result
Definition: glew.h:12708
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl2ext.h:848
SDL_Window::shaper
SDL_WindowShaper * shaper
Definition: SDL_sysvideo.h:95
SDL_WindowData::videodata
struct SDL_VideoData * videodata
Definition: SDL_cocoawindow.h:90
SDL_WindowShaper::window
SDL_Window * window
Definition: SDL_sysvideo.h:41
SDL_SetError
DECLSPEC int SDLCALL SDL_SetError(const char *fmt,...)
Definition: SDL_error.c:53
ShapeModeDefault
The default mode, a binarized alpha cutoff of 1.
Definition: SDL_shape.h:81
SDL_malloc
DECLSPEC void *SDLCALL SDL_malloc(size_t size)
SDL_WindowShapeMode::parameters
SDL_WindowShapeParams parameters
Window-shape parameters.
Definition: SDL_shape.h:104
SDL_Window::y
int y
Definition: SDL_sysvideo.h:77
SDL_WindowShaper::userx
Uint32 userx
Definition: SDL_sysvideo.h:44
SDL_WindowShaper::usery
Uint32 usery
Definition: SDL_sysvideo.h:44
X11_CreateShaper
SDL_WindowShaper * X11_CreateShaper(SDL_Window *window)
SDL_Window::h
int h
Definition: SDL_sysvideo.h:78
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:159
y
EGLSurface EGLint EGLint y
Definition: eglext.h:293
SDL_Surface::format
SDL_PixelFormat * format
Definition: SDL_surface.h:72
malloc
#define malloc
Definition: SDL_malloc.c:635
SDL_CreateWindow
DECLSPEC SDL_Window *SDLCALL SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
Create a window with the specified position, dimensions, and flags.
Definition: SDL_video.c:1190
XCreateBitmapFromData
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display retur XCreateBitmapFromData)
Definition: SDL_x11sym.h:36
SDL_SetWindowPosition
DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window *window, int x, int y)
Set the position of a window.
Definition: SDL_video.c:1535
flags
GLenum GLsizei GLsizei GLsizei GLsizei GLbitfield flags
Definition: glew.h:2767
SDL_Window
Definition: SDL_sysvideo.h:71
SDL_x11video.h
SDL_WindowShapeParams::binarizationCutoff
Uint8 binarizationCutoff
a cutoff alpha value for binarization of the window shape&#39;s alpha channel.
Definition: SDL_shape.h:95
w
GLint GLint GLint GLint GLint w
Definition: gl2ext.h:1215
SDL_WindowShapeMode
A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents...
Definition: SDL_shape.h:100
SDL_PixelFormat::Amask
Uint32 Amask
Definition: SDL_pixels.h:282
SDL_Window::driverdata
void * driverdata
Definition: SDL_sysvideo.h:99
SDL_WindowShapeMode::mode
WindowShapeMode mode
The mode of these window-shape parameters.
Definition: SDL_shape.h:102
SDL_CalculateShapeBitmap
void SDL_CalculateShapeBitmap(SDL_WindowShapeMode mode, SDL_Surface *shape, Uint8 *bitmap, Uint8 ppb)
Definition: SDL_shape.c:67
SDL_assert.h