|
From: Arno P. <ar...@pu...> - 2012-06-25 17:40:13
|
well, short answer: we don't support that scenario yet.
What you could do: you can inject code on class level using advisor.xml.
You can use that to inject an Objective-C category that adds a new
method to the generated wrapper class. A bit of a kludge, but might
solve your problem for now.
Arno
On 6/25/12 2:32 PM, Mickael Barbeaux wrote:
> Hi Arno,
>
> Thanks for your really quick answer ! :)
>
> I've just taken a look at what you suggested. But I don't think this
> corresponds to what I'm looking for...
> I'll be more specific.
>
> If I did understand correctly what does the Advisor, it will add a new
> method inside the UIView java class (let's call it "layerClass") and a
> native implementation inside org_xmlvm_ios_UIView.m from the code I'll
> put inside advisor.xml. I deduced it from what did the toString() method
> added inside NSString in advisor.xml :
>
> <class name="NSString">
> <injected-method name="toString" modifier="public">
> <signature>
> <return type="String"/>
> </signature>
> <code language="c" mode="replace">
> <![CDATA[
> return fromNSString(((org_xmlvm_ios_NSObject*) me)->fields.org_xmlvm_ios_NSObject.wrappedObj);
> ]]>
> </code>
> </injected-method>
> </class>
>
> This adds the method inside "NSString.java" :
>
> /*
> * Injected methods
> */
> public String toString(){
> throw new RuntimeException("Stub");
> }
>
> and "org_xmlvm_ios_NSString.m" :
>
> JAVA_OBJECT org_xmlvm_ios_NSString_toString__(JAVA_OBJECT me)
> {
> //XMLVM_BEGIN_WRAPPER[org_xmlvm_ios_NSString_toString__]
>
> return fromNSString(((org_xmlvm_ios_NSObject*)
> me)->fields.org_xmlvm_ios_NSObject.wrappedObj);
> //XMLVM_END_WRAPPER
> }
>
>
> That's great, but not what I'm looking for.
> What I want to do is add a class method inside the underlying
> UIViewWrapper ObjC class.
> From what I'm understanding of it, UIViewWrapper is a generated ObjC
> class, extending UIView, and adding methods for managing delegated
> methods such as touch events, etc :
>
> Inside "org_xmlvm_ios_UIView.h" :
>
> @interface UIViewWrapper : UIView
>
> // Append the wrapper method declarations defined in the class Macro
> XMLVM_OBJC_OVERRIDE_CLASS_DECLARATIONS_org_xmlvm_ios_UIView
>
> @end
>
> Inside "org_xmlvm_ios_UIView.m" :
>
> @implementation UIViewWrapper
>
> // Append the wrapper methods defined in the class Macro
> XMLVM_OBJC_OVERRIDE_CLASS_DEFINITIONS_org_xmlvm_ios_UIView
>
> @end
>
>
> What I need is to be able to add a class method inside UIViewWrapper, so
> that it looks like something like this :
>
> @implementation UIViewWrapper
>
> // Append the wrapper methods defined in the class Macro
> XMLVM_OBJC_OVERRIDE_CLASS_DEFINITIONS_org_xmlvm_ios_UIView
>
> + (Class) layerClass {
> return [CAEAGLLayer class];
> }
>
> @end
>
>
> Having generated this method for the "org_xmlvm_ios_UIView" class won't
> solve my problem, since the method needs to be generated on the
> UIViewWrapper class.
> Maybe is it more clear now... :)
>
> Mickael
>
>
> 2012/6/25 Arno Puder <ar...@pu... <mailto:ar...@pu...>>
>
>
> checkout trunk/crossmobile, then look for a file called advisor.xml. In
> that file do a grep on "toString". This is an example on how a method
> toString() is injected to class NSString. You should be able to do the
> same for a method called layerClass. Once you have done that, do a "ant
> gen-xmlvm-ios" in crossmobile. This will re-generate the iOS API in
> ../xmlvm. For this to work you need to point property sdk.path in
> xmlvm.properties to an installation of the iOS 4.3 SDK (note that
> crossmobile cannot deal with 5.* API yet).
>
> Arno
>
>
> On 6/25/12 11:53 AM, Mickael Barbeaux wrote:
> > Hi everyone,
> >
> > I recently switched to the new C iOS API backend, and it really
> works well !
> > I'm currently working at implementing an OpenGLES 2.0 interface for
> > developing my own custom game renderer, based on what was done
> before on
> > the old C API backend.
> >
> > My main concern is about the way to define the layer class on a
> UIView.
> > As you may know, I order to use an OpenGLES 2.0 renderer inside a
> > UIView, Apple recommend to add this method inside your UIView
> subclass :
> >
> > + (Class) layerClass
> >
> > {
> >
> > return [CAEAGLLayer class];
> >
> > }
> >
> >
> > But how to reach the same effect using XMLVM ?
> > It seems that the UIView implementation is based on a ObjC
> wrapper class
> > (UIViewWrapper), but it is generated by XMLVM at XCode project
> > generation, and it seems I have no way to modify it.
> > As the method to implement is "static" (class method), I didn't
> find a
> > way to "override" it inside my UIView java subclass. Using a delegate
> > method won't help either.
> >
> > How can I process to achieve what I want to do ?
> > Should I do the same way as for the old C iOS API, that's to say
> > duplicate the UIView class and create a UIViewGL class with specific
> > implementation using the CAEAGLLayer class ? But then, how can I
> add the
> > "layerClass" inside the wrapper implementation, as it is now
> generated
> > automatically by the new iOS API ?
> >
> > Mickael
> >
> >
> >
> ------------------------------------------------------------------------------
> > Live Security Virtual Conference
> > Exclusive live event will cover all the ways today's security and
> > threat landscape has changed and how IT managers can respond.
> Discussions
> > will include endpoint security, mobile security and the latest in
> malware
> > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> >
> >
> >
> > _______________________________________________
> > xmlvm-users mailing list
> > xml...@li...
> <mailto:xml...@li...>
> > https://lists.sourceforge.net/lists/listinfo/xmlvm-users
> >
>
>
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and
> threat landscape has changed and how IT managers can respond.
> Discussions
> will include endpoint security, mobile security and the latest in
> malware
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> xmlvm-users mailing list
> xml...@li...
> <mailto:xml...@li...>
> https://lists.sourceforge.net/lists/listinfo/xmlvm-users
>
>
>
>
> --
> Barbeaux Mikael
> Ingénieur SI - Spécialité J2EE
> ---------------------------------------------------------
> Ippon Technologies
> 3 rue Bellanger
> 92300 LEVALLOIS PERRET
>
> Port: 06.18.85.00.73
> www.ippon.fr <http://www.ippon.fr>
|