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

Reply via email to