author  Eli Gottlieb <eligottlieb@gmail.com> 
Mon, 26 Jul 2010 21:48:53 0400  
changeset 4811  d79939f20c45 
parent 4810  7a602fd2121f 
child 4827  5660aac926e9 
child 4838  1f9915666afd 
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 

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

23 
#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

24 
#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

25 
#include "SDL_cocoashape.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

26 

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

27 
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

28 
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

29 
[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

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

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

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

33 
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

34 
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

35 
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

36 
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

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

38 

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

39 
SDL_ShapeData* data = malloc(sizeof(SDL_ShapeData)); 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

40 
result>driverdata = data; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

41 
data>context = [data>nswindow graphicsContext]; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

43 
data>rects = NULL; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

44 
data>count = 0; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

45 

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

46 
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

47 
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

48 
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

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

50 

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

51 
int Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shapeMode) { 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

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

54 
[data>context restoreGraphicsState]; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

56 
} 
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 
[data>context saveGraphicsState]; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

60 

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

61 
[[NSColor clearColor] set]; 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

62 
NSRectFill([[data>nswindow contentView] frame]); 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

63 
/* 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

64 
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

65 
} 
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 
int Cocoa_ResizeWindowShape(SDL_Window *window) { 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

69 
assert(data != NULL); 
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

71 
} 