1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4from Quartz import CoreGraphics
5
6class TestCGDirectDisplay (TestCase):
7
8    def testConstants(self):
9        self.assertEqual(kCGNullDirectDisplay, 0)
10
11        self.assertEqual(kCGDisplayWidth, "Width")
12        self.assertEqual(kCGDisplayHeight, "Height")
13        self.assertEqual(kCGDisplayMode, "Mode")
14        self.assertEqual(kCGDisplayBitsPerPixel, "BitsPerPixel")
15        self.assertEqual(kCGDisplayBitsPerSample, "BitsPerSample")
16        self.assertEqual(kCGDisplaySamplesPerPixel, "SamplesPerPixel")
17        self.assertEqual(kCGDisplayRefreshRate, "RefreshRate")
18        self.assertEqual(kCGDisplayModeUsableForDesktopGUI, "UsableForDesktopGUI")
19        self.assertEqual(kCGDisplayIOFlags, "IOFlags")
20        self.assertEqual(kCGDisplayBytesPerRow, "kCGDisplayBytesPerRow")
21        self.assertEqual(kCGIODisplayModeID, "IODisplayModeID")
22
23        self.assertEqual(kCGDisplayModeIsSafeForHardware, "kCGDisplayModeIsSafeForHardware")
24        self.assertEqual(kCGDisplayModeIsInterlaced, "kCGDisplayModeIsInterlaced")
25        self.assertEqual(kCGDisplayModeIsStretched, "kCGDisplayModeIsStretched")
26        self.assertEqual(kCGDisplayModeIsTelevisionOutput, "kCGDisplayModeIsTelevisionOutput" )
27
28        self.assertEqual(kCGCaptureNoOptions, 0)
29        self.assertEqual(kCGCaptureNoFill, 1)
30
31        self.assertNotHasAttr(CoreGraphics, 'kCGDirectMainDisplay')
32
33    def testFunctions(self):
34        self.assertIsInstance(CGMainDisplayID(), (int, long))
35
36        self.assertArgIsOut(CGGetDisplaysWithPoint, 2)
37        self.assertArgIsOut(CGGetDisplaysWithPoint, 3)
38        v, ids, cnt = CGGetDisplaysWithPoint((0, 0), 10, None, None)
39        self.assertIsInstance(v, (int, long))
40        self.assertIsInstance(cnt, (int, long))
41        self.assertTrue(cnt)
42        self.assertEqual(len(ids), cnt)
43        self.assertIsInstance(ids[0], (int, long))
44
45        self.assertArgIsOut(CGGetDisplaysWithRect, 2)
46        self.assertArgIsOut(CGGetDisplaysWithRect, 3)
47        v, ids, cnt = CGGetDisplaysWithRect(((0, 0), (400, 500)),
48                10, None, None)
49        self.assertIsInstance(v, (int, long))
50        self.assertIsInstance(cnt, (int, long))
51        self.assertTrue(cnt)
52        self.assertEqual(len(ids), cnt)
53        self.assertIsInstance(ids[0], (int, long))
54
55
56        self.assertArgIsOut(CGGetDisplaysWithOpenGLDisplayMask, 2)
57        self.assertArgIsOut(CGGetDisplaysWithOpenGLDisplayMask, 3)
58        v, ids, cnt = CGGetDisplaysWithOpenGLDisplayMask(0xff,
59                10, None, None)
60        self.assertIsInstance(v, (int, long))
61        self.assertIsInstance(cnt, (int, long))
62        self.assertTrue(cnt)
63        self.assertEqual(len(ids), cnt)
64        self.assertIsInstance(ids[0], (int, long))
65
66        self.assertArgIsOut(CGGetActiveDisplayList, 1)
67        self.assertArgIsOut(CGGetActiveDisplayList, 2)
68        v, ids, cnt = CGGetActiveDisplayList(10, None, None)
69        self.assertIsInstance(v, (int, long))
70        self.assertIsInstance(cnt, (int, long))
71        self.assertTrue(cnt)
72        self.assertEqual(len(ids), cnt)
73        self.assertIsInstance(ids[0], (int, long))
74
75        self.assertArgIsOut(CGGetOnlineDisplayList, 1)
76        self.assertArgIsOut(CGGetOnlineDisplayList, 2)
77        v, ids, cnt = CGGetOnlineDisplayList(10, None, None)
78        self.assertIsInstance(v, (int, long))
79        self.assertIsInstance(cnt, (int, long))
80        self.assertTrue(cnt)
81        self.assertEqual(len(ids), cnt)
82        self.assertIsInstance(ids[0], (int, long))
83
84        v = CGDisplayIDToOpenGLDisplayMask(CGMainDisplayID())
85        self.assertIsInstance(v, (int, long))
86        self.assertNotEqual(v, 0)
87
88        id = CGOpenGLDisplayMaskToDisplayID(v)
89        self.assertIsInstance(id, (int, long))
90        self.assertEqual(id, CGMainDisplayID())
91
92        box = CGDisplayBounds(CGMainDisplayID())
93        self.assertIsInstance(box, CGRect)
94
95        v = CGDisplayPixelsWide(CGMainDisplayID())
96        self.assertIsInstance(v, (int, long))
97        v = CGDisplayPixelsHigh(CGMainDisplayID())
98        self.assertIsInstance(v, (int, long))
99
100        modes = CGDisplayAvailableModes(CGMainDisplayID())
101        self.assertIsInstance(modes, CFArrayRef)
102        self.assertTrue(len(modes) > 0)
103        self.assertIsInstance(modes[0], CFDictionaryRef)
104
105        v, exact = CGDisplayBestModeForParameters(CGMainDisplayID(),
106                32, 800, 600, None)
107        self.assertIsInstance(v, CFDictionaryRef)
108        self.assertIsInstance(exact, (int, long))
109
110        v, exact = CGDisplayBestModeForParametersAndRefreshRate(
111                CGMainDisplayID(), 32, 800, 600, 70, None)
112        self.assertIsInstance(v, CFDictionaryRef)
113        self.assertIsInstance(exact, (int, long))
114
115        v, exact = CGDisplayBestModeForParametersAndRefreshRateWithProperty(
116                CGMainDisplayID(), 32, 800, 600, 70,
117                kCGDisplayModeIsSafeForHardware, None)
118        self.assertIsInstance(v, CFDictionaryRef)
119        self.assertIsInstance(exact, (int, long))
120
121        cur = CGDisplayCurrentMode(CGMainDisplayID())
122        self.assertIsInstance(cur, CFDictionaryRef)
123
124        v = CGDisplaySwitchToMode(CGMainDisplayID(), v)
125        self.assertEqual(v, 0)
126        v = CGDisplaySwitchToMode(CGMainDisplayID(), cur)
127        self.assertEqual(v, 0)
128
129        v = CGDisplayBitsPerPixel(CGMainDisplayID())
130        self.assertIsInstance(v, (int, long))
131
132        v = CGDisplayBitsPerSample(CGMainDisplayID())
133        self.assertIsInstance(v, (int, long))
134
135        v = CGDisplaySamplesPerPixel(CGMainDisplayID())
136        self.assertIsInstance(v, (int, long))
137
138        v = CGDisplayBytesPerRow(CGMainDisplayID())
139        self.assertIsInstance(v, (int, long))
140
141        self.assertArgIsOut(CGGetDisplayTransferByFormula, 1)
142        self.assertArgIsOut(CGGetDisplayTransferByFormula, 2)
143        self.assertArgIsOut(CGGetDisplayTransferByFormula, 3)
144        self.assertArgIsOut(CGGetDisplayTransferByFormula, 4)
145        self.assertArgIsOut(CGGetDisplayTransferByFormula, 5)
146        self.assertArgIsOut(CGGetDisplayTransferByFormula, 6)
147        self.assertArgIsOut(CGGetDisplayTransferByFormula, 7)
148        self.assertArgIsOut(CGGetDisplayTransferByFormula, 8)
149        self.assertArgIsOut(CGGetDisplayTransferByFormula, 9)
150        v = CGGetDisplayTransferByFormula(CGMainDisplayID(),
151                None, None, None, None, None, None, None, None, None)
152        self.assertIsInstance(v[0], (int, long))
153        for i in range(9):
154            self.assertIsInstance(v[i+1], float)
155
156        v = CGSetDisplayTransferByFormula(CGMainDisplayID(), *v[1:])
157        self.assertEqual(v, 0)
158
159        tablen = CGDisplayGammaTableCapacity(CGMainDisplayID())
160        self.assertIsInstance(tablen, (int, long))
161
162        err, red, green, blue, count = CGGetDisplayTransferByTable(
163                CGMainDisplayID(), tablen, None, None, None, None)
164        self.assertIsInstance(err, (int, long))
165        self.assertIsInstance(count, (int, long))
166        self.assertEqual(err, 0)
167        self.failIfEqual(count, 0)
168
169        err = CGSetDisplayTransferByTable(CGMainDisplayID(), count,
170                red, green, blue)
171        self.assertEqual(err, 0)
172
173        err, red, green, blue, count = CGGetDisplayTransferByTable(
174                CGMainDisplayID(), tablen, None, None, None, None)
175        self.assertIsInstance(err, (int, long))
176        self.assertIsInstance(count, (int, long))
177        self.assertEqual(err, 0)
178        self.failIfEqual(count, 0)
179
180        err = CGSetDisplayTransferByTable(CGMainDisplayID(), count,
181                red, green, blue)
182        self.assertEqual(err, 0)
183
184        CGDisplayRestoreColorSyncSettings()
185
186        v = CGDisplayIsCaptured(CGMainDisplayID())
187        self.assertIsInstance(v, int)
188        self.failIf(v)
189
190        err = CGDisplayCapture(CGMainDisplayID())
191        self.assertEqual(err, 0)
192
193        v = CGDisplayIsCaptured(CGMainDisplayID())
194        self.assertTrue(v)
195
196        err = CGDisplayRelease(CGMainDisplayID())
197        self.assertEqual(err, 0)
198
199        v = CGDisplayIsCaptured(CGMainDisplayID())
200        self.failIf(v)
201
202        err = CGDisplayCaptureWithOptions(CGMainDisplayID(), 0)
203        self.assertEqual(err, 0)
204
205        err = CGDisplayRelease(CGMainDisplayID())
206        self.assertEqual(err, 0)
207
208        err = CGCaptureAllDisplays()
209        self.assertEqual(err, 0)
210
211        ctx = CGDisplayGetDrawingContext(CGMainDisplayID())
212        self.assertIsInstance(ctx, CGContextRef)
213
214        err = CGReleaseAllDisplays()
215        self.assertEqual(err, 0)
216
217        err = CGCaptureAllDisplaysWithOptions(0)
218        self.assertEqual(err, 0)
219
220        err = CGReleaseAllDisplays()
221        self.assertEqual(err, 0)
222
223        v = CGShieldingWindowID(CGMainDisplayID())
224        self.assertIsInstance(v, (int, long))
225
226        v = CGShieldingWindowLevel()
227        self.assertIsInstance(v, (int, long))
228
229        v = CGDisplayBaseAddress(CGMainDisplayID())
230        self.assertIsInstance(v, objc.varlist)
231        self.assertIsInstance(v[0], bytes)
232
233        v = CGDisplayAddressForPosition(CGMainDisplayID(), 100, 100)
234        self.assertIsInstance(v, objc.varlist)
235        self.assertIsInstance(v[0], str)
236
237        err = CGDisplayHideCursor(CGMainDisplayID())
238        self.assertEqual(err, 0)
239
240        err = CGDisplayShowCursor(CGMainDisplayID())
241        self.assertEqual(err, 0)
242
243        err = CGDisplayMoveCursorToPoint(CGMainDisplayID(), (100, 100))
244
245        dX, dY = CGGetLastMouseDelta(None, None)
246        self.assertIsInstance(dX, (int, long))
247        self.assertIsInstance(dY, (int, long))
248
249        v = CGDisplayCanSetPalette(CGMainDisplayID())
250        self.assertIsInstance(v, (int, long))
251
252        err = CGDisplayWaitForBeamPositionOutsideLines(CGMainDisplayID(), 200, 400)
253        self.assertEqual(err, 0)
254
255        v = CGDisplayBeamPosition(CGMainDisplayID())
256        self.assertIsInstance(v, (int, long))
257
258        palette = CGPaletteCreateDefaultColorPalette()
259        self.assertIsInstance(palette, CGDirectPaletteRef)
260
261        err = CGDisplaySetPalette(CGMainDisplayID(), palette)
262        self.assertIsInstance(err, (int, long))
263
264        # Don't actually call CGSetDisplayTransferByByteTable, it might have
265        # permanent effects.
266        self.assertResultHasType(CGSetDisplayTransferByByteTable, objc._C_INT)
267        self.assertArgHasType(CGSetDisplayTransferByByteTable, 0, objc._C_UINT)
268        self.assertArgHasType(CGSetDisplayTransferByByteTable, 1, objc._C_UINT)
269        self.assertArgHasType(CGSetDisplayTransferByByteTable, 2, 'n^' + objc._C_CHAR_AS_INT)
270        self.assertArgSizeInArg(CGSetDisplayTransferByByteTable, 2, 1)
271        self.assertArgHasType(CGSetDisplayTransferByByteTable, 3, 'n^' + objc._C_CHAR_AS_INT)
272        self.assertArgSizeInArg(CGSetDisplayTransferByByteTable, 3, 1)
273        self.assertArgHasType(CGSetDisplayTransferByByteTable, 4, 'n^' + objc._C_CHAR_AS_INT)
274        self.assertArgSizeInArg(CGSetDisplayTransferByByteTable, 4, 1)
275
276    @min_os_level('10.6')
277    def testTypes10_6(self):
278        self.assertIsCFType(CGDisplayModeRef)
279
280    @min_os_level('10.6')
281    def testFunction10_6(self):
282        mainID = CGMainDisplayID()
283
284        self.assertResultIsCFRetained(CGDisplayCopyAllDisplayModes)
285        v = CGDisplayCopyAllDisplayModes(mainID, None)
286        self.assertIsInstance(v, CFArrayRef)
287
288        self.assertResultIsCFRetained(CGDisplayCopyDisplayMode)
289        mode = CGDisplayCopyDisplayMode(mainID)
290        self.assertIsInstance(mode, CGDisplayModeRef)
291
292        v = CGDisplaySetDisplayMode(mainID, mode, None)
293        self.assertIsInstance(v, (int, long))
294
295        v = CGDisplayModeGetWidth(mode)
296        self.assertIsInstance(v, (int, long))
297        v = CGDisplayModeGetHeight(mode)
298        self.assertIsInstance(v, (int, long))
299        v = CGDisplayModeCopyPixelEncoding(mode)
300        self.assertIsInstance(v, unicode)
301        v = CGDisplayModeGetRefreshRate(mode)
302        self.assertIsInstance(v, float)
303        v = CGDisplayModeGetIOFlags(mode)
304        self.assertIsInstance(v, (int, long))
305        v = CGDisplayModeGetIODisplayModeID(mode)
306        self.assertIsInstance(v, (int, long))
307        v = CGDisplayModeIsUsableForDesktopGUI(mode)
308        self.assertIsInstance(v, bool)
309        v = CGDisplayModeGetTypeID()
310        self.assertIsInstance(v, (int, long))
311        v = CGDisplayModeRetain(mode)
312        self.assertTrue(v is mode)
313        CGDisplayModeRelease(mode)
314
315        self.assertResultIsCFRetained(CGDisplayCreateImage)
316        v = CGDisplayCreateImage(mainID)
317        self.assertIsInstance(v, CGImageRef)
318        self.assertResultIsCFRetained(CGDisplayCreateImageForRect)
319        v = CGDisplayCreateImageForRect(mainID, ((0, 0), (100, 100)))
320        self.assertIsInstance(v, CGImageRef)
321
322
323
324
325if __name__ == "__main__":
326    main()
327