On 2010-01-22, at 3:26 PM, Vincent R. wrote:

> On Fri, 22 Jan 2010 13:26:00 -0700, Eric Wasylishen
> <[email protected]>
> wrote:
>> On 2010-01-22, at 9:53 AM, David Chisnall wrote:
>> 
>>> Hi Stef,
>>> 
>>> I had this discussion with Eric yesterday, so good timing...
>>> 
>>> On OS X, CSTR() calls one of two functions.  
>>> 
>> 
>> Hi,
>> On a related note, regarding Opal, David and I decided that Opal should
>> just use Foundation directly (internally). The main reasons are:
>> 
>> - There is no way (with the public API of CoreFoundation) to create new
>> CoreFoundation types . The CG objects need to respond to -[retain] and
>> -[release], as well as CFRetain(), and the other CF functions available
> for
>> all CF types, so they really have to be instances of NSObject
> subclasses.
>> - We need constant Obj-C/CF strings - it sounds like it is best to just
>> use @"...".
>> 
>> Initially I was interested in making Opal independent of Foundation, and
>> able to work with Apple's CF or CFLite, but now I think it's not worth
> the
>> effort. 
>> 
> Hum Wait. This is exactly what I am working on windows. I have compiled
> CoreFoundationLite and now I implement
> CoreGraphics with openVG/cairo backend.

Cool, we should combine our efforts if possible! Implementing CG is a pretty 
big task, but Opal is quite far along already. It is licensed under the LGPL 
and copyright is assigned to the FSF - is that something you would be 
interested in working with?

> First idea was also to be able to use Objective-C but when I read all your
> stuff I think it's far too complicated
> so I am happy to have a CoreFoundation/Coregraphics writtent in plain C.

Do you mean the Opal code looks far too complicated? IMHO it's pretty minimal 
and simple. (well, a lot of what I have been working on recently is still a 
rough prototype and needs to be cleaned up.) 

Opal is currently written all in C, and uses a simple home-made object system, 
so the CG types are not real CF or Objective-C objects. (I just made some 
changes yesterday so it uses Objective-C constant strings, but it's still all C 
other than that.) Making the CG objects in to real ObjC/CF objects is something 
we need to do at some point.

> However I don't understand your sentence : "There is no way (with the
> public API of CoreFoundation) to create new
> CoreFoundation types"...
> What do you mean ? 
> 
> For instance my CGContext is implemented as shown below : 
> 
> static CFRuntimeClass CGContextClass = 
>  {
>    0,                 // version
>    "CGContext",       // className
>    0,                 // init
>    0,                 // copy
>    CGContextFinalize, // finalize
>       0,              // equal
>       0,              // hash
>       0,              // copyFormattingDesc
>       0               // copyDebugDesc
>  };
> CFTypeID __kCGContextID = _kCFRuntimeNotATypeID;
> 
> 
> CFTypeID CGContextGetTypeID(void)
> {
>       return CGTypeRegisterWithCallbacks(&__kCGContextID, &CGContextClass);
> }
> 
> CFTypeID CGTypeRegisterWithCallbacks(CFTypeID* typeID, CFRuntimeClass*
> rtclass)
> {
>       CFTypeID id;
> 
>       if (*typeID != _kCFRuntimeNotATypeID) { return *typeID; }
> 
>       
>       id = _CFRuntimeRegisterClass(rtclass);
>       *typeID = id;
> 
>       return id;
> }
> 
> 
> CFTypeRef CGTypeCreateInstance(CFTypeID id, CFIndex size)
> {
>       return CGTypeCreateInstanceWithAllocator(0, id, size);
> }
> 
> CFTypeRef CGTypeCreateInstanceWithAllocator(CFAllocatorRef allocator,
> CFTypeID id, CFIndex size)
> {
>       CFTypeRef type;
>       CFRuntimeClass* rtc;
>       char* ptr;
>       
> 
>       /* Create the CFType */
>       //
>       type = _CFRuntimeCreateInstance(allocator, id, size, NULL);
>       CHK(type);
> 
>       ///* Init with zero values all fields except our base object */
>       ptr = (char*)type;
>       memset((void*)(ptr + sizeof(CFRuntimeBase)), 0, size);
>       
>       return type;
> 
> Cleanup:
>       return NULL;
> }
> 

I am really a newbie at CoreFoundation - what I meant was I didn't see mention 
in the CoreFoundation documentation of how to create/register a new type.

If we could do something in Opal like what you showed and have it work on both 
CFLite and GNUstep base + corebase, and keep Opal written in plain C, that 
would be great. 

Regards,
Eric

_______________________________________________
Gnustep-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to