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