Я хотел бы знать и понимать код, который в конечном итоге вызывает фактические виджеты IOS/Android/WP, когда класс NativeUI C++ используется в базе кода MoSync.
Я быстро рассмотрел несколько классов в GitHub, например Button.cpp и т.д., Но я не могу с готовностью видеть, как ссылаются настоящие виджеты на родном устройстве.
Я не C/C++ dev (Java), но я вроде как ожидал некоторых #ifdefs или что-то, чтобы "переключить" соответствующую базовую реализацию. Если это не так, то это прекрасно, просто побалуйте себя любопытством.
Классы виджета C++, такие как упомянутый Button.cpp, имеют свой базовый класс в Widget.cpp, который создает любой виджет на основе строкового аргумента. Кроме того, любые свойства виджета эффективно устанавливаются через строковые аргументы.
my_button = new NativeUI::Widget("button")
my_button->setProperty("text", "OK");
MoSync реализует интерфейс IDL для собственных виджетах пользовательского интерфейса в WidgetFunctions.idl:
typedef int MAWidgetHandle;
MAWidgetHandle maWidgetCreate(in MAString widgetType);
int maWidgetSetProperty(in MAWidgetHandle widget, in MAString property, in MAString value);
Это независимое от языка описание функций, вызываемых из NativeUI :: Widget через интерфейс вызова C:
handle = maWidgetCreate("button");
maWidgetSetProperty(handle,"text","OK");
Пока мы не находимся на уровне MoSync C/C++, который является видом виртуальной машины с интерфейсом системного вызова. Отсюда он переводится на языки других платформ (Java, С# и т.д.) Различными способами:
Он может использовать Java Native Interface (JNI) для вызова соответствующих функций в среде Android в MoSyncNativeUI.java:
public int maWidgetCreate(String type)
public int maWidgetSetProperty(int widgetHandle, String key, String value)
Или он скомпилирован в промежуточный "язык PIPE", псевдо-ассемблерный диалект, этот язык затем транслируется в Visual Studio С# для Windows Phone 7 или в проект XCode для iOS.
Все платформы внедряют движок пользовательского интерфейса в "runtime", который поставляется вместе с каждым пакетом приложений. Эта среда выполнения предварительно сконфигурирована в соответствующем SDK и реализует эти собственные пользовательские интерфейсы.