author  egottlieb 
Tue, 03 Aug 2010 21:56:05 0400  
changeset 4829  7160e833c4ac 
parent 4827  5660aac926e9 
child 4830  3dfe779900f5 
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 

4829
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

52 
typedef struct { 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

53 
NSBezierPath* clipPath; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

54 
SDL_Window* window; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

55 
} SDL_PathConglomeration; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

56 

7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

57 
NSRect convert_rect(SDL_Rect rect,SDL_Window* window) { 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

58 
NSRect nsrect = NSMakeRect(rect.x,window>h(rect.y+rect.h),rect.w,rect.h); 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

59 
return [[((SDL_WindowData*)window>driverdata)>nswindow contentView] convertRectFromBase:nsrect]; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

60 
} 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

61 

7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

62 
void ConglomerateShapeTree(SDL_ShapeTree* tree,SDL_PathConglomeration cong) { 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

63 
if(tree>kind == OpaqueShape) { 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

64 
NSRect rect = convert_rect(tree>data.shape,cong>window); 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

65 
[cong>clipPath appendBezierPathWithRect:rect]; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

66 
} 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

67 
} 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

68 

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

69 
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

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

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

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

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

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

75 

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

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

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

78 

4829
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

79 
//[[NSColor clearColor] set]; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

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

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

82 
Windoze shapecalculation code: a list of rectangles. This will work... I think. */ 
4829
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

83 
NSBezierPath* clipPath = [NSBezierPath bezierPath]; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

84 

7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

85 
SDL_PathConglomeration cong = {clipPath,shaper>window}; 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

86 

7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

87 
SDL_TraverseShapeTree(data>shape,&ConglomerateShapeTree,cong); 
7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

88 

7160e833c4ac
Implemented shaped windows for Cocoa. Still need to see if they actually work.
egottlieb
parents:
4827
diff
changeset

89 
[clipPath addClip]; 
4811
d79939f20c45
Working on Cocoa implementation.
Eli Gottlieb <eligottlieb@gmail.com>
parents:
4810
diff
changeset

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

91 

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

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

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

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

95 

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

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

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

98 

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

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

100 
} 