On 11 Aug 2014, at 3:14 pm, Jürgen Schmidt <jogischm...@gmail.com> wrote:

> On 11/08/14 09:59, Peter Kelly wrote:
>> An interesting discussion I came across today:
>> 
>> http://arstechnica.com/information-technology/2014/08/why-is-it-so-hard-to-make-a-java-program-appear-native/
>> 
>> (and yes I realise OO doesn't use Java for it's UI, but the points
>> raised apply to all cross-platform UI toolkits).
> 
> indeed and as far as I know it was always a big challenge to make it
> working on all supported platforms. Well I am no expert in this area but
> we have the VCL layer (visual class library) with an API used all over
> in the code and certain backends wrapping the API to native calls (where
> necessary) on the different platforms.

I think there's two aspects to this. One is the APIs for drawing things - 
bitmaps, shapes, text, etc. and the other is the APIs for working with widges.

When I ported XeTeX to iOS I had to do the former; the old code used some APIs 
(AAT, Apple Advanced Typography)  that are now deprecated on OS X and 
completely absent from iOS. On both platforms (which are much the same), this 
is CoreGraphics, CoreImage, and CoreText.

The widget side of things is a more complex issue to address. Looking at the 
GSL/VCL description at https://www.openoffice.org/gsl/, there's APIs for things 
like a file picker, which up to and including iOS 7 aren't present on the 
platform; though thankfully this is introduced in iOS 8.

> For the support of mobile I believe a much better separation would be
> necessary to have the core independent of the UI or at least have the UI
> part accessed via a clean API that the UI part can be easier exchanged.

I think it would be useful to have a clear separation between the drawing APIs 
and the widgets. Basically I see it as a stack, where you have the following 
(higher-numbered layers depending on lower-numbered).

4. Application-specific UI
3. Widget toolkit
2. Editing & rendering code
1. Drawing APIs

To maximise portability, it would be useful to take just layers 1 and 2, and 
then be able to use whatever widget toolkit is appropriate for the platform 
(typically, the native one). So on iOS for example, layer 1 is covered by the 
three libraries I mentioned above, and layer 3 is provided by UIKit (aka Cocoa 
Touch). Significantly, the layer 1 libraries are (almost) identical across iOS 
and OS X, and are exposed purely via C. Layer 3 differs between the two; OS X 
has an API called AppKit (aka Cocoa) in place of UIKit/Cocoa Touch.

So with VCL, would an Apple-like separation of 1 and 3 be possible?

--
Dr. Peter M. Kelly
Founder, UX Productivity
pe...@uxproductivity.com
http://www.uxproductivity.com/
http://www.kellypmk.net/

PGP key: http://www.kellypmk.net/pgp-key
(fingerprint 5435 6718 59F0 DD1F BFA0 5E46 2523 BAA1 44AE 2966)

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to