Looks like this should give similar results to Mac then:
typedef struct _CGPoint
{
float x, y;
} CGPoint;
typedef CGPoint NSPoint;
int main()
{
printf("%s\n", @encode(NSPoint));
printf("%s\n", @encode(CGPoint));
}
$ ./a.out
{_CGPoint=ff}
{_CGPoint=ff}
On Wed, Mar 11, 2015 at 8:44 PM, Fred Kiefer <[email protected]> wrote:
> I just run the line
>
> NSLog(@"CGPoint %s NSPoint %s", @encode(CGPoint), @encode(NSPoint));
>
> On my Mac and this gives me the same output, {CGPoint=dd}. The same may
> not be true on GNUstep, but this could just mean we need to corrcet this?
>
> Fred
>
> On the road
>
> Am 11.03.2015 um 19:14 schrieb Amr Aboelela <[email protected]>:
>
> They hold the same data yes, but in CoreGraphics, UIKit, and
> CoreAnimation, it is called CGPoint and CGRect :)
> If we don't do that, then the KVC will not work right in the CoreAnimation
> for the CALayer
>
> On Wed, Mar 11, 2015 at 1:39 AM, Fred Kiefer <[email protected]> wrote:
>
>> Sorry, I am be a little confused here, what is the difference between
>> @encode(CGPoint) and @encode(NSPoint)? Shouldn't these two yield the
>> same result?
>>
>> Fred
>>
>> On the road
>>
>> Am 11.03.2015 um 04:31 schrieb Amr Aboelela <[email protected]>:
>>
>> To support CGPoint and CGRect in NSValue, the following needs to be done:
>>
>>
>> *1. In GSObjCRuntime.m file:*
>>
>> id GSObjCGetVal(NSObject *self, const char *key, SEL sel,
>>
>> const char *type, unsigned size, int offset)
>>
>> {
>>
>> ...
>>
>> case _C_STRUCT_B:
>>
>> if (strcmp(@encode(CGPoint), type)==0) {
>>
>> DLog(@"@encode(CGPoint): %s", @encode(CGPoint));
>>
>> CGPoint v;
>>
>> if (sel == 0) {
>>
>> memcpy((char*)&v, ((char *)self + offset), sizeof
>> (v));
>>
>> } else {
>>
>> CGPoint (*imp)(id, SEL) =
>>
>> (CGPoint (*)(id, SEL))[self methodForSelector:
>> sel];
>>
>> v = (*imp)(self, sel);
>>
>> }
>>
>> val = [NSValue valueWithCGPoint:v];
>>
>> } else if (strcmp(@encode(CGRect), type)==0) {
>>
>> DLog(@"@encode(CGRect): %s", @encode(CGRect));
>>
>> CGRect v;
>>
>> if (sel == 0) {
>>
>> memcpy((char*)&v, ((char *)self + offset), sizeof
>> (v));
>>
>> } else {
>>
>> CGRect (*imp)(id, SEL) =
>>
>> (CGRect (*)(id, SEL))[self methodForSelector:
>> sel];
>>
>> v = (*imp)(self, sel);
>>
>> }
>>
>> val = [NSValue valueWithCGRect:v];
>>
>> } else if (GSSelectorTypesMatch(@encode(NSPoint), type))
>>
>> {
>>
>> ...
>>
>> }
>>
>>
>> void GSObjCSetVal(NSObject *self, const char *key, id val, SEL sel,
>>
>> const char *type, unsigned size, int offset)
>>
>> {
>>
>> ...
>>
>> case _C_STRUCT_B:
>>
>> if (strcmp(@encode(CGPoint), type)==0) {
>>
>> DLog(@"@encode(CGPoint): %s", @encode(CGPoint));
>>
>> CGPoint v = [val CGPointValue];
>>
>> if (sel == 0) {
>>
>> CGPoint *ptr = (CGPoint*)((char *)self + offset);
>>
>> *ptr = v;
>>
>> } else {
>>
>> void (*imp)(id, SEL, CGPoint) =
>>
>> (void (*)(id, SEL, CGPoint))[self
>> methodForSelector: sel];
>>
>> (*imp)(self, sel, v);
>>
>> }
>>
>> } else if (strcmp(@encode(CGRect), type)==0) {
>>
>> DLog(@"strcmp(@encode(CGRect): %s", @encode(CGRect));
>>
>> CGRect v = [val CGRectValue];
>>
>> if (sel == 0) {
>>
>> CGRect *ptr = (CGRect*)((char *)self + offset);
>>
>> *ptr = v;
>>
>> } else {
>>
>> void (*imp)(id, SEL, CGRect) =
>>
>> (void (*)(id, SEL, CGRect))[self
>> methodForSelector: sel];
>>
>> (*imp)(self, sel, v);
>>
>> }
>>
>> } else if (GSSelectorTypesMatch(@encode(NSPoint), type))
>>
>> {
>>
>> ...
>>
>> }
>>
>>
>> *2. In NSValue.m file:*
>>
>>
>> + (Class) valueClassWithObjCType: (const char *)type
>>
>> {
>>
>> Class theClass = concreteClass;
>>
>>
>>
>> /* Let someone else deal with this error */
>>
>> if (!type)
>>
>> return theClass;
>>
>>
>>
>> /* Try for an exact type match.
>>
>> */
>>
>> if (strcmp(@encode(id), type) == 0)
>>
>> theClass = nonretainedObjectValueClass;
>>
>> else if (strcmp(@encode(NSPoint), type) == 0)
>>
>> theClass = pointValueClass;
>>
>> else if (strcmp(@encode(void *), type) == 0)
>>
>> theClass = pointerValueClass;
>>
>> else if (strcmp(@encode(NSRange), type) == 0)
>>
>> theClass = rangeValueClass;
>>
>> else if (strcmp(@encode(NSRect), type) == 0)
>>
>> theClass = rectValueClass;
>>
>> else if (strcmp(@encode(NSSize), type) == 0)
>>
>> theClass = sizeValueClass;
>>
>>
>>
>> /* Try for equivalent types match.
>>
>> */
>>
>> /*else if (GSSelectorTypesMatch(@encode(id), type))
>>
>> theClass = nonretainedObjectValueClass;
>>
>> else if (GSSelectorTypesMatch(@encode(NSPoint), type))
>>
>> theClass = pointValueClass;
>>
>> else if (GSSelectorTypesMatch(@encode(void *), type))
>>
>> theClass = pointerValueClass;
>>
>> else if (GSSelectorTypesMatch(@encode(NSRange), type))
>>
>> theClass = rangeValueClass;
>>
>> else if (GSSelectorTypesMatch(@encode(NSRect), type))
>>
>> theClass = rectValueClass;
>>
>> else if (GSSelectorTypesMatch(@encode(NSSize), type))
>>
>> theClass = sizeValueClass;*/
>>
>> DLog(@"theClass: %@", theClass);
>>
>> return theClass;
>>
>> }
>>
>>
>> Check full files here:
>>
>>
>> https://github.com/amraboelela/myos.frameworks/blob/master/Foundation/GSObjCRuntime-myos.m
>>
>>
>> https://github.com/amraboelela/myos.frameworks/blob/master/Foundation/NSValue-myos.m
>>
>>
>> _______________________________________________
>> Discuss-gnustep mailing list
>> [email protected]
>> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
>>
>>
>
>
> --
> Info about Islam: http://wikiz.info/islam
>
>
> _______________________________________________
> Discuss-gnustep mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
>
>
_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep