[Pythonmac-SIG] Problems with CoreGraphics API post-Snow Leopard

João Leão joaoleao at gmx.net
Tue Apr 17 17:48:41 CEST 2012


Hi list

I have an old script using the CoreGraphics API that's no longer working properly since Snow Leopard.
I' running Lion with the default Python, which is 2.7.1.
I googled about this and it seems that's because Python is 64-bit now and some old data types don't work anymore.


The first error I got was in the function CGBitmapContextCreateWithColor.
The Console spits the following error:
---
TypeError: in method 'CGBitmapContextCreateWithColor', argument 4 of type 'CGFloat const [5]'
---

My code looks like this:
c = CGBitmapContextCreateWithColor(new_Width, new_Height, cs, (0,0,0,0))

The problem is in the last argument "(0, 0, 0, 0)" [a color reference] which, the new API expects to be CGFloatArray.
I couldn't find any documentation on how to create such an object in python but, fortunately, I found some code here http://stuffineededtoknow.blogspot.pt/2009_01_01_archive.html  that solved this issue:
---
bg = CGFloatArray(5)
c = CGBitmapContextCreateWithColor(new_Width, new_Height, cs, bg)
---


But now I'm getting another error (and I'll probably get some more) with another function that expects a CGFloat object instead of a plain integer.
The code looks like this:
---
self.pdf.drawPlainTextInRect(text_prov, textRect, 10)
---

And the error (again caused by the last argument, in this case "10"):
---
TypeError: in method 'CGContext_drawPlainTextInRect', argument 4 of type 'CGFloat'
---


I'm sure that it can't be so hard to create a CGFloat but I didn't find the right documentation or sample code to do it.
Does anybody know how to do this?

Thanks in advance.
João


More information about the Pythonmac-SIG mailing list