author  egottlieb 
Tue, 03 Aug 2010 00:47:33 0400  
changeset 4827  5660aac926e9 
parent 4811  d79939f20c45 
child 4829  7160e833c4ac 
permissions  rwrr 
4809
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

1 
/* 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

2 
SDL  Simple DirectMedia Layer 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

3 
Copyright (C) 2010 Eli Gottlieb 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

4 

329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

5 
This library is free software; you can redistribute it and/or 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

6 
modify it under the terms of the GNU Lesser General Public 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

7 
License as published by the Free Software Foundation; either 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

8 
version 2.1 of the License, or (at your option) any later version. 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

9 

329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

10 
This library is distributed in the hope that it will be useful, 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

11 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

12 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

13 
Lesser General Public License for more details. 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

14 

329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

15 
You should have received a copy of the GNU Lesser General Public 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

16 
License along with this library; if not, write to the Free Software 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

17 
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 021101301 USA 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

18 

329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

19 
Eli Gottlieb 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

20 
eligottlieb@gmail.com 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

21 
*/ 
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

22 

4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

23 
#include "SDL_stdinc.h" 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

24 
#include "SDL_cocoavideo.h" 
4809
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

25 
#include "SDL_shape.h" 
4810
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

26 
#include "SDL_cocoashape.h" 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

27 
#include "SDL_sysvideo.h" 
4809
329708ffe2a7
Rejiggering the way shaped windows are created as preparation for OS X implementation. Fixed overdrive bug in test program that appears to have been introduced by someone other than myself.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
diff
changeset

28 

4810
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

29 
SDL_WindowShaper* Cocoa_CreateShaper(SDL_Window* window) { 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

30 
SDL_WindowData* data = (SDL_WindowData*)window>driverdata; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

31 
[data>nswindow setAlpha:1.0]; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

32 
[data>nswindow setOpaque:YES]; 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

33 
[data>nswindow setStyleMask:NSBorderlessWindowMask]; 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

34 
SDL_WindowShaper* result = SDL_malloc(sizeof(SDL_WindowShaper)); 
4810
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

35 
result>window = window; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

36 
result>mode.mode = ShapeModeDefault; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

37 
result>mode.parameters.binarizationCutoff = 1; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

38 
result>usershownflag = 0; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

39 
window>shaper = result; 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

40 

4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

41 
SDL_ShapeData* shape_data = SDL_malloc(sizeof(SDL_ShapeData)); 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

42 
result>driverdata = shape_data; 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

43 
shape_data>context = [data>nswindow graphicsContext]; 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

44 
shape_data>saved = SDL_FALSE; 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

45 
shape_data>shape = NULL; 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

46 

4810
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

47 
int resized_properly = Cocoa_ResizeWindowShape(window); 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

48 
assert(resized_properly == 0); 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

49 
return result; 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

50 
} 
7a602fd2121f
OK, it appears that dramatic hacks are not necessary to make Cocoa work...
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4809
diff
changeset

51 

4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

52 
int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode) { 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

53 
SDL_ShapeData* data = (SDL_ShapeData*)shaper>driverdata; 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

54 
if(data>saved == SDL_TRUE) { 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

55 
[data>context restoreGraphicsState]; 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

56 
data>saved = SDL_FALSE; 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

57 
} 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

58 

d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

59 
[data>context saveGraphicsState]; 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

60 
data>saved = SDL_TRUE; 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

61 

d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

62 
[[NSColor clearColor] set]; 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

63 
NSRectFill([[((SDL_WindowData*)shaper>window>driverdata)>nswindow contentView] frame]); 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

64 
/* TODO: It looks like Cocoa can set a clipping path based on a list of rectangles. That's what we get from the 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

65 
Windoze shapecalculation code: a list of rectangles. This will work... I think. */ 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

66 
} 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

67 

d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

68 
int Cocoa_ResizeWindowShape(SDL_Window *window) { 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

69 
SDL_ShapeData* data = window>shaper>driverdata; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

70 
assert(data != NULL); 
4827
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

71 

5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

72 
if(data>shape != NULL) 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

73 
SDL_FreeShapeTree(&data>shape); 
5660aac926e9
Got basic, preactuallywritinganything Cocoa to build.
egottlieb
parents:
4811
diff
changeset

74 

4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

75 
return 0; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

76 
} 